diff --git a/src/gui/gcal-window.c b/src/gui/gcal-window.c index a5336265..869cf3ca 100644 --- a/src/gui/gcal-window.c +++ b/src/gui/gcal-window.c @@ -233,6 +233,7 @@ maybe_add_subscribers_to_timeline (GcalWindow *self) timeline = gcal_manager_get_timeline (gcal_context_get_manager (self->context)); gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->week_view)); + gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->dazzling_month_view)); gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->month_view)); gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->agenda_view)); gcal_timeline_add_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->date_chooser)); @@ -833,6 +834,7 @@ gcal_window_dispose (GObject *object) timeline = gcal_manager_get_timeline (gcal_context_get_manager (self->context)); gcal_timeline_remove_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->week_view)); + gcal_timeline_remove_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->dazzling_month_view)); gcal_timeline_remove_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->month_view)); gcal_timeline_remove_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->agenda_view)); gcal_timeline_remove_subscriber (timeline, GCAL_TIMELINE_SUBSCRIBER (self->date_chooser)); diff --git a/src/gui/views/gcal-dazzling-month-view.c b/src/gui/views/gcal-dazzling-month-view.c index d90ddd44..ce6e66b7 100644 --- a/src/gui/views/gcal-dazzling-month-view.c +++ b/src/gui/views/gcal-dazzling-month-view.c @@ -26,6 +26,7 @@ #include "gcal-dazzling-month-view.h" #include "gcal-debug.h" #include "gcal-month-view-row.h" +#include "gcal-timeline-subscriber.h" #include "gcal-utils.h" #include "gcal-view-private.h" @@ -65,7 +66,11 @@ static void gcal_view_interface_init (GcalViewInterf static void gtk_buildable_interface_init (GtkBuildableIface *iface); +static void gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface); + + G_DEFINE_FINAL_TYPE_WITH_CODE (GcalDazzlingMonthView, gcal_dazzling_month_view, GTK_TYPE_WIDGET, + G_IMPLEMENT_INTERFACE (GCAL_TYPE_TIMELINE_SUBSCRIBER, gcal_timeline_subscriber_interface_init) G_IMPLEMENT_INTERFACE (GCAL_TYPE_VIEW, gcal_view_interface_init) G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, gtk_buildable_interface_init)) @@ -482,6 +487,54 @@ on_scroll_controller_decelerate_cb (GtkEventControllerScroll *scroll_controller, } +/* + * GcalTimelineSubscriber iface + */ + +static GcalRange* +gcal_dazzling_month_view_get_range (GcalTimelineSubscriber *subscriber) +{ + g_autoptr (GcalRange) first_row_range = NULL; + g_autoptr (GcalRange) last_row_range = NULL; + GcalDazzlingMonthView *self; + + self = GCAL_DAZZLING_MONTH_VIEW (subscriber); + + first_row_range = gcal_month_view_row_get_range (g_ptr_array_index (self->week_rows, 0)); + last_row_range = gcal_month_view_row_get_range (g_ptr_array_index (self->week_rows, + self->week_rows->len - 1)); + + return gcal_range_union (first_row_range, last_row_range); +} + +static void +gcal_dazzling_month_view_add_event (GcalTimelineSubscriber *subscriber, + GcalEvent *event) +{ +} + +static void +gcal_dazzling_month_view_update_event (GcalTimelineSubscriber *subscriber, + GcalEvent *event) +{ +} + +static void +gcal_dazzling_month_view_remove_event (GcalTimelineSubscriber *subscriber, + GcalEvent *event) +{ +} + +static void +gcal_timeline_subscriber_interface_init (GcalTimelineSubscriberInterface *iface) +{ + iface->get_range = gcal_dazzling_month_view_get_range; + iface->add_event = gcal_dazzling_month_view_add_event; + iface->update_event = gcal_dazzling_month_view_update_event; + iface->remove_event = gcal_dazzling_month_view_remove_event; +} + + /* * GcalView interface */ @@ -525,6 +578,8 @@ gcal_dazzling_month_view_set_date (GcalView *view, update_header_labels (self); update_week_ranges (self); + gcal_timeline_subscriber_range_changed (GCAL_TIMELINE_SUBSCRIBER (view)); + GCAL_EXIT; }