gui/event-widget: Connect to signals using GSignalGroup

It'll make it easier when making the "event" property mutable later
on.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-calendar/-/merge_requests/758>
This commit is contained in:
Georges Basile Stavracas Neto
2026-05-19 22:20:09 +00:00
committed by Marge Bot
parent e4d1fdf13c
commit 3104f16f7c
+31 -26
View File
@@ -70,6 +70,10 @@ struct _GcalEventWidget
GtkOrientation orientation;
GcalTimestampPolicy timestamp_policy;
GSignalGroup *clock_signal_group;
GSignalGroup *context_signal_group;
GSignalGroup *event_signal_group;
};
enum
@@ -495,23 +499,11 @@ gcal_event_widget_set_event_internal (GcalEventWidget *self,
gcal_event_widget_set_date_start (self, gcal_event_get_date_start (event));
gcal_event_widget_set_date_end (self, gcal_event_get_date_end (event));
/* Update color */
g_signal_group_set_target (self->context_signal_group, context);
g_signal_group_set_target (self->clock_signal_group, gcal_context_get_clock (context));
g_signal_group_set_target (self->event_signal_group, event);
update_color (self);
g_signal_connect_object (event,
"notify::color",
G_CALLBACK (update_color),
self,
G_CONNECT_SWAPPED);
g_signal_connect_object (context,
"notify::time-format",
G_CALLBACK (gcal_event_widget_update_timestamp),
self,
G_CONNECT_SWAPPED);
/* Tooltip */
gcal_event_widget_set_event_tooltip (self, event);
gcal_event_widget_update_style (self);
gcal_event_widget_update_timestamp (self);
@@ -688,6 +680,10 @@ gcal_event_widget_dispose (GObject *object)
{
GcalEventWidget *self = GCAL_EVENT_WIDGET (object);
g_clear_object (&self->clock_signal_group);
g_clear_object (&self->context_signal_group);
g_clear_object (&self->event_signal_group);
g_clear_pointer (&self->preview_popover, gtk_widget_unparent);
g_clear_pointer (&self->overflow_bin, gtk_widget_unparent);
g_clear_pointer (&self->edge, gtk_widget_unparent);
@@ -702,9 +698,6 @@ gcal_event_widget_finalize (GObject *object)
self = GCAL_EVENT_WIDGET (object);
/* disconnect signals */
g_signal_handlers_disconnect_by_func (self->event, update_color, self);
/* releasing properties */
g_clear_pointer (&self->css_class, g_free);
g_clear_object (&self->event);
@@ -783,8 +776,6 @@ gcal_event_widget_class_init (GcalEventWidgetClass *klass)
static void
gcal_event_widget_init (GcalEventWidget *self)
{
GcalContext *context = gcal_application_get_context (GCAL_DEFAULT_APPLICATION);
g_type_ensure (GCAL_TYPE_OVERFLOW_BIN);
gtk_widget_init_template (GTK_WIDGET (self));
@@ -799,11 +790,25 @@ gcal_event_widget_init (GcalEventWidget *self)
GTK_ACCESSIBLE_STATE_PRESSED, FALSE,
-1);
g_signal_connect_object (gcal_context_get_clock (context),
"minute-changed",
G_CALLBACK (update_color),
self,
G_CONNECT_SWAPPED);
self->clock_signal_group = g_signal_group_new (GCAL_TYPE_CLOCK);
g_signal_group_connect_swapped (self->clock_signal_group,
"minute-changed",
G_CALLBACK (update_color),
self);
self->context_signal_group = g_signal_group_new (GCAL_TYPE_CONTEXT);
g_signal_group_connect_swapped (self->context_signal_group,
"notify::time-format",
G_CALLBACK (gcal_event_widget_update_timestamp),
self);
self->event_signal_group = g_signal_group_new (GCAL_TYPE_EVENT);
g_signal_group_connect_swapped (self->event_signal_group,
"notify::color",
G_CALLBACK (update_color),
self);
}
GtkWidget*