From f052cb6589be023219ecf484cab6299a2bf07cc7 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Fri, 27 Mar 2020 22:13:49 -0300 Subject: [PATCH] event-widget: Remove idle on destroy Finalize may be too late for us, since a widget may be destroyed long before it's finalized. Remove the idle timer on destroy then. --- src/gui/gcal-event-widget.c | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/gui/gcal-event-widget.c b/src/gui/gcal-event-widget.c index 93303eec..99c9286f 100644 --- a/src/gui/gcal-event-widget.c +++ b/src/gui/gcal-event-widget.c @@ -765,6 +765,23 @@ gcal_event_widget_unrealize (GtkWidget *widget) GTK_WIDGET_CLASS (gcal_event_widget_parent_class)->unrealize (widget); } +static void +gcal_event_widget_destroy (GtkWidget *widget) +{ + GcalEventWidget *self; + + self = GCAL_EVENT_WIDGET (widget); + + /* remove timeouts */ + if (self->vertical_label_source_id > 0) + { + g_source_remove (self->vertical_label_source_id); + self->vertical_label_source_id = 0; + } + + GTK_WIDGET_CLASS (gcal_event_widget_parent_class)->destroy (widget); +} + /* * GObject overrides */ @@ -865,13 +882,6 @@ gcal_event_widget_finalize (GObject *object) g_clear_object (&self->event); g_clear_object (&self->context); - /* remove timeouts */ - if (self->vertical_label_source_id > 0) - { - g_source_remove (self->vertical_label_source_id); - self->vertical_label_source_id = 0; - } - G_OBJECT_CLASS (gcal_event_widget_parent_class)->finalize (object); } @@ -897,6 +907,7 @@ gcal_event_widget_class_init (GcalEventWidgetClass *klass) widget_class->scroll_event = gcal_event_widget_scroll_event; widget_class->unmap = gcal_event_widget_unmap; widget_class->unrealize = gcal_event_widget_unrealize; + widget_class->destroy = gcal_event_widget_destroy; /** * GcalEventWidget::context: