diff options
author | Charles Kerr <charles.kerr@canonical.com> | 2014-03-20 16:17:37 -0500 |
---|---|---|
committer | Charles Kerr <charles.kerr@canonical.com> | 2014-03-20 16:17:37 -0500 |
commit | f09e561c4181f4c03a496f70c1f6cecc0f838419 (patch) | |
tree | 6abb32958b9549f18d070f31af51660ff38a7c9f /src | |
parent | 75729a4dda25141e860128ef3547c5946f7c4a5d (diff) | |
download | ayatana-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.cpp | 5 | ||||
-rw-r--r-- | src/menu.cpp | 25 | ||||
-rw-r--r-- | src/planner-upcoming.cpp | 4 |
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)); }); |