From 0cdee01bf8cf5fda723afeaba078eb1211a12660 Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Wed, 27 Feb 2008 09:47:08 +0000 Subject: [PATCH 1/1] * src/maemo/modest-main-window.c: * Now, when the window is destroyed, we destroy the pending information banners (redundantly) and information banner handlers (to avoid showing them when the window is already closed) (fixes NB#81215). pmo-trunk-r4232 --- src/maemo/modest-main-window.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/maemo/modest-main-window.c b/src/maemo/modest-main-window.c index 99efb7f..ee1df3c 100644 --- a/src/maemo/modest-main-window.c +++ b/src/maemo/modest-main-window.c @@ -178,6 +178,9 @@ static gboolean restore_paned_timeout_handler (gpointer *data); static gboolean show_retrieving_banner (gpointer user_data); +static void on_window_destroy (GtkObject *widget, + gpointer userdata); + typedef struct _ModestMainWindowPrivate ModestMainWindowPrivate; struct _ModestMainWindowPrivate { GtkWidget *msg_paned; @@ -991,6 +994,9 @@ connect_signals (ModestMainWindow *self) modest_signal_mgr_connect (priv->sighandlers,G_OBJECT (self), "window-state-event", G_CALLBACK (modest_main_window_window_state_event), NULL); + /* we don't register this in sighandlers, as it should be run after disconnecting all signals, + * in destroy stage */ + g_signal_connect (G_OBJECT (self), "destroy", G_CALLBACK (on_window_destroy), NULL); /* Mail Operation Queue */ priv->sighandlers = @@ -2764,6 +2770,35 @@ modest_main_window_screen_is_on (ModestMainWindow *self) return (priv->display_state == OSSO_DISPLAY_ON) ? TRUE : FALSE; } +static void +on_window_destroy (GtkObject *widget, gpointer userdata) +{ + ModestMainWindowPrivate *priv; + + priv = MODEST_MAIN_WINDOW_GET_PRIVATE (widget); + + if (priv->retrieving_banner_timeout > 0) { + g_source_remove (priv->retrieving_banner_timeout); + priv->retrieving_banner_timeout = 0; + } + + if (priv->retrieving_banner != NULL) { + gtk_widget_destroy (priv->retrieving_banner); + priv->retrieving_banner = NULL; + } + + if (priv->updating_banner_timeout > 0) { + g_source_remove (priv->updating_banner_timeout); + priv->updating_banner_timeout = 0; + } + + if (priv->updating_banner != NULL) { + gtk_widget_destroy (priv->updating_banner); + priv->updating_banner = NULL; + } + +} + static gboolean show_retrieving_banner (gpointer user_data) { -- 1.7.9.5