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:
committed by
Marge Bot
parent
e4d1fdf13c
commit
3104f16f7c
+29
-24
@@ -70,6 +70,10 @@ struct _GcalEventWidget
|
|||||||
GtkOrientation orientation;
|
GtkOrientation orientation;
|
||||||
|
|
||||||
GcalTimestampPolicy timestamp_policy;
|
GcalTimestampPolicy timestamp_policy;
|
||||||
|
|
||||||
|
GSignalGroup *clock_signal_group;
|
||||||
|
GSignalGroup *context_signal_group;
|
||||||
|
GSignalGroup *event_signal_group;
|
||||||
};
|
};
|
||||||
|
|
||||||
enum
|
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_start (self, gcal_event_get_date_start (event));
|
||||||
gcal_event_widget_set_date_end (self, gcal_event_get_date_end (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);
|
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_set_event_tooltip (self, event);
|
||||||
gcal_event_widget_update_style (self);
|
gcal_event_widget_update_style (self);
|
||||||
gcal_event_widget_update_timestamp (self);
|
gcal_event_widget_update_timestamp (self);
|
||||||
@@ -688,6 +680,10 @@ gcal_event_widget_dispose (GObject *object)
|
|||||||
{
|
{
|
||||||
GcalEventWidget *self = GCAL_EVENT_WIDGET (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->preview_popover, gtk_widget_unparent);
|
||||||
g_clear_pointer (&self->overflow_bin, gtk_widget_unparent);
|
g_clear_pointer (&self->overflow_bin, gtk_widget_unparent);
|
||||||
g_clear_pointer (&self->edge, 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);
|
self = GCAL_EVENT_WIDGET (object);
|
||||||
|
|
||||||
/* disconnect signals */
|
|
||||||
g_signal_handlers_disconnect_by_func (self->event, update_color, self);
|
|
||||||
|
|
||||||
/* releasing properties */
|
/* releasing properties */
|
||||||
g_clear_pointer (&self->css_class, g_free);
|
g_clear_pointer (&self->css_class, g_free);
|
||||||
g_clear_object (&self->event);
|
g_clear_object (&self->event);
|
||||||
@@ -783,8 +776,6 @@ gcal_event_widget_class_init (GcalEventWidgetClass *klass)
|
|||||||
static void
|
static void
|
||||||
gcal_event_widget_init (GcalEventWidget *self)
|
gcal_event_widget_init (GcalEventWidget *self)
|
||||||
{
|
{
|
||||||
GcalContext *context = gcal_application_get_context (GCAL_DEFAULT_APPLICATION);
|
|
||||||
|
|
||||||
g_type_ensure (GCAL_TYPE_OVERFLOW_BIN);
|
g_type_ensure (GCAL_TYPE_OVERFLOW_BIN);
|
||||||
|
|
||||||
gtk_widget_init_template (GTK_WIDGET (self));
|
gtk_widget_init_template (GTK_WIDGET (self));
|
||||||
@@ -799,11 +790,25 @@ gcal_event_widget_init (GcalEventWidget *self)
|
|||||||
GTK_ACCESSIBLE_STATE_PRESSED, FALSE,
|
GTK_ACCESSIBLE_STATE_PRESSED, FALSE,
|
||||||
-1);
|
-1);
|
||||||
|
|
||||||
g_signal_connect_object (gcal_context_get_clock (context),
|
self->clock_signal_group = g_signal_group_new (GCAL_TYPE_CLOCK);
|
||||||
|
g_signal_group_connect_swapped (self->clock_signal_group,
|
||||||
"minute-changed",
|
"minute-changed",
|
||||||
G_CALLBACK (update_color),
|
G_CALLBACK (update_color),
|
||||||
self,
|
self);
|
||||||
G_CONNECT_SWAPPED);
|
|
||||||
|
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*
|
GtkWidget*
|
||||||
|
|||||||
Reference in New Issue
Block a user