aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorCharles Kerr <charles.kerr@canonical.com>2014-03-20 16:17:37 -0500
committerCharles Kerr <charles.kerr@canonical.com>2014-03-20 16:17:37 -0500
commitf09e561c4181f4c03a496f70c1f6cecc0f838419 (patch)
tree6abb32958b9549f18d070f31af51660ff38a7c9f /src
parent75729a4dda25141e860128ef3547c5946f7c4a5d (diff)
downloadayatana-indicator-datetime-f09e561c4181f4c03a496f70c1f6cecc0f838419.tar.gz
ayatana-indicator-datetime-f09e561c4181f4c03a496f70c1f6cecc0f838419.tar.bz2
ayatana-indicator-datetime-f09e561c4181f4c03a496f70c1f6cecc0f838419.zip
when clicking onto a different calendar date on the Desktop, show the events for that calendar day starting at the beginning of the day, rather than the current time of day.
Diffstat (limited to 'src')
-rw-r--r--src/actions.cpp5
-rw-r--r--src/menu.cpp25
-rw-r--r--src/planner-upcoming.cpp4
3 files changed, 23 insertions, 11 deletions
diff --git a/src/actions.cpp b/src/actions.cpp
index c9c6286..87adb96 100644
--- a/src/actions.cpp
+++ b/src/actions.cpp
@@ -129,7 +129,10 @@ void on_calendar_activated(GSimpleAction * /*action*/,
g_return_if_fail(t != 0);
- static_cast<Actions*>(gself)->set_calendar_date(DateTime(t));
+ // the client gave us a date; remove the HMS component from the resulting DateTime
+ auto dt = DateTime(t);
+ dt = dt.add_full (0, 0, 0, -dt.hour(), -dt.minute(), -dt.seconds());
+ static_cast<Actions*>(gself)->set_calendar_date(dt);
}
GVariant* create_default_header_state()
diff --git a/src/menu.cpp b/src/menu.cpp
index 90ef41f..2bfc4aa 100644
--- a/src/menu.cpp
+++ b/src/menu.cpp
@@ -104,6 +104,9 @@ protected:
m_state->settings->show_events.changed().connect([this](bool){
update_section(Appointments); // showing events got toggled
});
+ m_state->calendar_upcoming->date().changed().connect([this](const DateTime&){
+ update_upcoming(); // our m_upcoming is planner->upcoming() filtered by time
+ });
m_state->calendar_upcoming->appointments().changed().connect([this](const std::vector<Appointment>&){
update_upcoming(); // our m_upcoming is planner->upcoming() filtered by time
});
@@ -138,18 +141,24 @@ protected:
void update_upcoming()
{
- // show upcoming appointments that occur after "calendar_next_minute",
- // where that is the wallclock time on the specified calendar day
- const auto calendar_day = m_state->calendar_month->month().get();
+ // The usual case is on desktop (and /only/ case on phone)
+ // is that we're looking at the current date and want to see
+ // "the next five calendar events, if any."
+ //
+ // However on the Desktop when the user clicks onto a different
+ // calendar date, show the next five calendar events starting
+ // from the beginning of that clicked day.
+ DateTime begin;
const auto now = m_state->clock->localtime();
- int y, m, d;
- calendar_day.ymd(y, m, d);
- const auto calendar_now = DateTime::Local(y, m, d, now.hour(), now.minute(), now.seconds());
- const auto calendar_next_minute = calendar_now.add_full(0, 0, 0, 0, 1, -now.seconds());
+ const auto calendar_day = m_state->calendar_month->month().get();
+ if ((profile() == Desktop) && !DateTime::is_same_day(now, calendar_day))
+ begin = calendar_day.add_full (0, 0, 0, -calendar_day.hour(), -calendar_day.minute(), -calendar_day.seconds());
+ else
+ begin = now.add_full (0, 0, 0, 0, 0, -now.seconds());
std::vector<Appointment> upcoming;
for(const auto& a : m_state->calendar_upcoming->appointments().get())
- if (calendar_next_minute <= a.begin)
+ if (begin <= a.begin)
upcoming.push_back(a);
if (m_upcoming != upcoming)
diff --git a/src/planner-upcoming.cpp b/src/planner-upcoming.cpp
index 4e5af6f..ed45955 100644
--- a/src/planner-upcoming.cpp
+++ b/src/planner-upcoming.cpp
@@ -33,8 +33,8 @@ UpcomingPlanner::UpcomingPlanner(const std::shared_ptr<RangePlanner>& range_plan
{
date().changed().connect([this](const DateTime& dt){
// set the range to the upcoming month
- const auto b = dt.add_full(0, 0, -1, 0, 0, 0);
- const auto e = dt.add_full(0, 1, 0, 0, 0, 0);
+ const auto b = dt.add_full(0, 0, -1, -dt.hour(), -dt.minute(), -dt.seconds());
+ const auto e = b.add_full(0, 1, 0, 0, 0, 0);
g_debug("%p setting date range to [%s..%s]", this, b.format("%F %T").c_str(), e.format("%F %T").c_str());
m_range_planner->range().set(std::pair<DateTime,DateTime>(b,e));
});