aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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));
});