* src/widgets/modest-window-mgr.[ch]:
authorJose Dapena Paz <jdapena@igalia.com>
Thu, 10 Jan 2008 10:31:26 +0000 (10:31 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Thu, 10 Jan 2008 10:31:26 +0000 (10:31 +0000)
        * 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

src/maemo/modest-platform.c
src/widgets/modest-window-mgr.c
src/widgets/modest-window-mgr.h

index e979697..8956d24 100644 (file)
@@ -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
index 6259a39..464a7d6 100644 (file)
@@ -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");
+       }
+
+}
index 60ef0ae..664c745 100644 (file)
@@ -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);