* Fixes NB#74764, NB#74260, NB#74639
[modest] / src / widgets / modest-window-mgr.c
index aa654f4..bce17ba 100644 (file)
@@ -313,6 +313,59 @@ modest_window_mgr_unregister_header (ModestWindowMgr *self,  TnyHeader *header)
        g_free (uid);
 }
 
+
+#define MODEST_WINDOW_HELP_ID_PARAM "help-id"
+
+void
+modest_window_mgr_register_help_id (ModestWindowMgr *self, GtkWindow *win, const gchar* help_id)
+{
+       /* we don't need 'self', but for API consistency... */
+       g_return_if_fail (self && MODEST_IS_WINDOW_MGR(self));
+
+       g_return_if_fail (win && GTK_IS_WINDOW(win));
+       g_return_if_fail (help_id);
+       
+       g_object_set_data_full (G_OBJECT(win), MODEST_WINDOW_HELP_ID_PARAM,
+                               g_strdup(help_id), g_free);
+}
+
+
+const gchar*
+modest_window_mgr_get_help_id (ModestWindowMgr *self, GtkWindow *win)
+{
+       const gchar* help_id = NULL;
+
+       /* we don't need 'self', but for API consistency... */
+       g_return_val_if_fail (self && MODEST_IS_WINDOW_MGR(self), NULL);
+       
+       g_return_val_if_fail (win, NULL);
+       g_return_val_if_fail (GTK_IS_WINDOW(win), NULL);
+       
+       if (MODEST_IS_MAIN_WINDOW (win)) {
+               GtkWidget *folder_view;
+               TnyFolderStore *folder_store;
+               
+               /* Get selected folder */
+               folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win),
+                                                                  MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW);
+               folder_store = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view));
+
+               /* Switch help_id */
+               if (folder_store && TNY_IS_FOLDER (folder_store)) {
+                       help_id = modest_tny_folder_get_help_id (TNY_FOLDER (folder_store));
+                       if (!help_id)
+                               g_warning ("%s: BUG: did not get a valid help_id", __FUNCTION__);
+               }
+               if (folder_store)
+                       g_object_unref (folder_store);
+       }
+
+       if (!help_id)
+               help_id = g_object_get_data (G_OBJECT(win), MODEST_WINDOW_HELP_ID_PARAM);
+               
+       return help_id;
+}
+
 static gint
 compare_msguids (ModestWindow *win,
                 const gchar *uid)
@@ -682,7 +735,7 @@ modest_window_mgr_unregister_window (ModestWindowMgr *self,
        /* Remove the viewer window handler from the hash table. The
           HashTable could not exist if the main window was closeed
           when there were other windows remaining */
-       if (MODEST_IS_MSG_VIEW_WINDOW (window) && priv->viewaer_handlers) {
+       if (MODEST_IS_MSG_VIEW_WINDOW (window) && priv->viewer_handlers) {
                tmp = (gulong *) g_hash_table_lookup (priv->viewer_handlers, window);
                /* If the viewer was created without a main window
                   (for example when opening a message through D-Bus
@@ -815,7 +868,7 @@ modest_window_mgr_show_toolbars (ModestWindowMgr *self,
 }
 
 ModestWindow*  
-modest_window_mgr_get_main_window (ModestWindowMgr *self)
+modest_window_mgr_get_main_window (ModestWindowMgr *self, gboolean create)
 {
        ModestWindowMgrPrivate *priv;
        
@@ -823,7 +876,7 @@ modest_window_mgr_get_main_window (ModestWindowMgr *self)
        priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
        
        /* create the main window, if it hasn't been created yet */
-       if (!priv->main_window) {
+       if (!priv->main_window && create) {
                /* modest_window_mgr_register_window will set priv->main_window */
                modest_window_mgr_register_window (self, modest_main_window_new ());
                g_debug ("%s: created main window: %p\n", __FUNCTION__, priv->main_window);
@@ -833,6 +886,18 @@ modest_window_mgr_get_main_window (ModestWindowMgr *self)
 }
 
 
+gboolean
+modest_window_mgr_main_window_exists  (ModestWindowMgr *self)
+{
+       ModestWindowMgrPrivate *priv;
+       
+       g_return_val_if_fail (MODEST_IS_WINDOW_MGR (self), FALSE);
+       priv = MODEST_WINDOW_MGR_GET_PRIVATE (self);
+
+       return priv->main_window != NULL;
+}
+
+
 GtkWindow *
 modest_window_mgr_get_modal (ModestWindowMgr *self)
 {