From: Jose Dapena Paz Date: Thu, 10 Jan 2008 10:31:26 +0000 (+0000) Subject: * src/widgets/modest-window-mgr.[ch]: X-Git-Tag: git_migration_finished~1834 X-Git-Url: http://git.maemo.org/git/?p=modest;a=commitdiff_plain;h=f9d5e914ab3837c0f2c28513674cbb400d46b5f4;ds=sidebyside * src/widgets/modest-window-mgr.[ch]: * Add methods _unregister_banner and _register_banner to count the banners that we didn't close yet. We don't emit the window list empty event until we don't have windows AND we don't have pending banners. * src/maemo/modest-platform.c: * Use window manager banner count in method modest_platform_show_information (fixes NB#79115). pmo-trunk-r4009 --- diff --git a/src/maemo/modest-platform.c b/src/maemo/modest-platform.c index e979697..8956d24 100644 --- a/src/maemo/modest-platform.c +++ b/src/maemo/modest-platform.c @@ -1600,12 +1600,29 @@ modest_platform_create_folder_view (TnyFolderStoreQuery *query) return widget; } +void +banner_finish (gpointer data, GObject *object) +{ + g_message ("BANNER FINISH"); + ModestWindowMgr *mgr = (ModestWindowMgr *) data; + modest_window_mgr_unregister_banner (mgr); + g_object_unref (mgr); +} + void modest_platform_information_banner (GtkWidget *parent, const gchar *icon_name, const gchar *text) { - hildon_banner_show_information (parent, icon_name, text); + GtkWidget *banner; + ModestWindowMgr *mgr; + + mgr = modest_runtime_get_window_mgr (); + banner = hildon_banner_show_information (parent, icon_name, text); + + modest_window_mgr_register_banner (mgr); + g_object_ref (mgr); + g_object_weak_ref ((GObject *) banner, banner_finish, mgr); } void diff --git a/src/widgets/modest-window-mgr.c b/src/widgets/modest-window-mgr.c index 6259a39..464a7d6 100644 --- a/src/widgets/modest-window-mgr.c +++ b/src/widgets/modest-window-mgr.c @@ -68,6 +68,7 @@ enum { typedef struct _ModestWindowMgrPrivate ModestWindowMgrPrivate; struct _ModestWindowMgrPrivate { GList *window_list; + guint banner_counter; ModestWindow *main_window; @@ -194,6 +195,7 @@ modest_window_mgr_init (ModestWindowMgr *obj) priv = MODEST_WINDOW_MGR_GET_PRIVATE(obj); priv->window_list = NULL; + priv->banner_counter = 0; priv->main_window = NULL; priv->fullscreen_mode = FALSE; @@ -819,7 +821,7 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self, gtk_widget_destroy (win->data); /* If there are no more windows registered emit the signal */ - if (priv->window_list == NULL) + if (priv->window_list == NULL && priv->banner_counter == 0) g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0); } @@ -1181,7 +1183,7 @@ modest_window_mgr_num_windows (ModestWindowMgr *self) if (priv->window_list) num_windows = g_list_length (priv->window_list); - return num_windows; + return num_windows + priv->banner_counter; } GtkWidget * @@ -1226,3 +1228,32 @@ modest_window_mgr_get_msg_view_window (ModestWindowMgr *self) return result; } +void +modest_window_mgr_register_banner (ModestWindowMgr *self) +{ + ModestWindowMgrPrivate *priv; + + g_return_if_fail (MODEST_IS_WINDOW_MGR (self)); + priv = MODEST_WINDOW_MGR_GET_PRIVATE (self); + + priv->banner_counter++; + g_message ("REGISTER BANNER -> %d", priv->banner_counter); + +} + +void +modest_window_mgr_unregister_banner (ModestWindowMgr *self) +{ + ModestWindowMgrPrivate *priv; + + g_return_if_fail (MODEST_IS_WINDOW_MGR (self)); + priv = MODEST_WINDOW_MGR_GET_PRIVATE (self); + + priv->banner_counter--; + g_message ("UNREGISTER BANNER -> %d", priv->banner_counter); + if (priv->window_list == NULL && priv->banner_counter == 0) { + g_signal_emit (self, signals[WINDOW_LIST_EMPTY_SIGNAL], 0); + g_message ("WINDOW LIST EMPTY"); + } + +} diff --git a/src/widgets/modest-window-mgr.h b/src/widgets/modest-window-mgr.h index 60ef0ae..664c745 100644 --- a/src/widgets/modest-window-mgr.h +++ b/src/widgets/modest-window-mgr.h @@ -87,7 +87,21 @@ void modest_window_mgr_register_window (ModestWindowMgr *self, void modest_window_mgr_unregister_window (ModestWindowMgr *self, ModestWindow *window); +/** + * modest_window_mgr_register_banner: + * @self: a #ModestWindowMgr + * + * Increase the count of pending banners in the window manager + */ +void modest_window_mgr_register_banner (ModestWindowMgr *self); +/** + * modest_window_mgr_unregister_banner: + * @self: a #ModestWindowMgr + * + * Decrease the count of pending banners in the window manager + */ +void modest_window_mgr_unregister_banner (ModestWindowMgr *self); /** * modest_window_mgr_set_fullscreen_mode: @@ -294,9 +308,9 @@ void modest_window_mgr_save_state_for_all_windows (ModestWindowMgr *self); * modest_window_mgr_num_windows: * @self: a #ModestWindowMgr * - * Gets the number of already registered windows + * Gets the number of already registered windows, and pending banners * - * Returns: the number of already registered windows + * Returns: the number of already registered windows, and pending banners **/ gint modest_window_mgr_num_windows (ModestWindowMgr *self);