From 3506100f5bbe684b4a1a83a6026dcb2cf4e5e27b Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Thu, 3 Aug 2023 15:55:10 -0300 Subject: [PATCH] views/dazzling-month-view: Show event popovers --- src/gui/views/gcal-dazzling-month-view.c | 9 +++++++ src/gui/views/gcal-month-view-row.c | 32 +++++++++++++++++++++++- 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/gui/views/gcal-dazzling-month-view.c b/src/gui/views/gcal-dazzling-month-view.c index 81c262b7..7ea38d99 100644 --- a/src/gui/views/gcal-dazzling-month-view.c +++ b/src/gui/views/gcal-dazzling-month-view.c @@ -362,6 +362,14 @@ snap_to_top_row (GcalDazzlingMonthView *self) * Callbacks */ +static void +on_event_widget_activated_cb (GcalMonthViewRow *row, + GcalEventWidget *event_widget, + GcalDazzlingMonthView *self) +{ + gcal_view_event_activated (GCAL_VIEW (self), event_widget); +} + static void on_scroll_controller_scroll_begin_cb (GtkEventControllerScroll *scroll_controller, GcalDazzlingMonthView *self) @@ -1077,6 +1085,7 @@ gcal_dazzling_month_view_init (GcalDazzlingMonthView *self) for (gint i = 0; i < N_TOTAL_ROWS; i++) { GtkWidget *row = gcal_month_view_row_new (); + g_signal_connect (row, "event-activated", G_CALLBACK (on_event_widget_activated_cb), self); gtk_widget_set_parent (row, GTK_WIDGET (self)); g_ptr_array_add (self->week_rows, row); } diff --git a/src/gui/views/gcal-month-view-row.c b/src/gui/views/gcal-month-view-row.c index c4159179..7293e4ea 100644 --- a/src/gui/views/gcal-month-view-row.c +++ b/src/gui/views/gcal-month-view-row.c @@ -74,6 +74,9 @@ struct _GcalMonthViewRow GcalContext *context; }; +static void on_event_widget_activated_cb (GcalEventWidget *widget, + GcalMonthViewRow *self); + G_DEFINE_FINAL_TYPE (GcalMonthViewRow, gcal_month_view_row, GTK_TYPE_WIDGET) enum @@ -83,6 +86,13 @@ enum N_PROPS, }; +enum +{ + EVENT_ACTIVATED, + N_SIGNALS, +}; + +static guint signals[N_SIGNALS] = { 0, }; static GParamSpec *properties [N_PROPS]; @@ -93,7 +103,7 @@ setup_child_widget (GcalMonthViewRow *self, { gtk_widget_insert_after (widget, GTK_WIDGET (self), self->day_cells[6]); - // g_signal_connect_object (widget, "activate", G_CALLBACK (on_event_activated_cb), self, 0); + g_signal_connect_object (widget, "activate", G_CALLBACK (on_event_widget_activated_cb), self, 0); // g_signal_connect_object (widget, "notify::visible", G_CALLBACK (on_event_widget_visibility_changed_cb), self, 0); } @@ -756,6 +766,18 @@ allocate_single_day_events (GcalMonthViewRow *self, } +/* + * Callbacks + */ + +static void +on_event_widget_activated_cb (GcalEventWidget *widget, + GcalMonthViewRow *self) +{ + g_signal_emit (self, signals[EVENT_ACTIVATED], 0, widget); +} + + /* * GtkWidget overrides */ @@ -975,6 +997,14 @@ gcal_month_view_row_class_init (GcalMonthViewRowClass *klass) g_object_class_install_properties (object_class, N_PROPS, properties); + signals[EVENT_ACTIVATED] = g_signal_new ("event-activated", + GCAL_TYPE_MONTH_VIEW_ROW, + G_SIGNAL_RUN_FIRST, + 0, NULL, NULL, NULL, + G_TYPE_NONE, + 1, + GCAL_TYPE_EVENT_WIDGET); + gtk_widget_class_set_css_name (widget_class, "monthviewrow"); }