Fixes NB#117669, open_accounts DBus method was not properly locked and was causing...
authorSergio Villar Senin <svillar@igalia.com>
Wed, 20 May 2009 11:20:43 +0000 (13:20 +0200)
committerSergio Villar Senin <svillar@igalia.com>
Wed, 20 May 2009 11:20:43 +0000 (13:20 +0200)
src/dbus_api/modest-dbus-callbacks.c
src/hildon2/modest-hildon2-window-mgr.c

index fe17cfa..3fb2b23 100644 (file)
@@ -1166,20 +1166,15 @@ on_idle_open_account (gpointer user_data)
        ModestWindow *top;
        ModestWindowMgr *mgr;
        gchar *acc_name;
-       gboolean retval = TRUE;
 
        gdk_threads_enter ();
 
        acc_name = (gchar *) user_data;
        mgr = modest_runtime_get_window_mgr ();
 
-       /* If Modest is already launched then just ignore this call */
-       if (modest_window_mgr_get_current_top (mgr)) {
-               retval = FALSE;
-               goto end;
-       }
-
-       top = modest_window_mgr_show_initial_window (mgr);
+       top = modest_window_mgr_get_current_top (mgr);
+       if (!top)
+               top = modest_window_mgr_show_initial_window (mgr);
 
 #ifdef MODEST_TOOLKIT_HILDON2
        if (MODEST_IS_ACCOUNTS_WINDOW (top)) {
@@ -1225,9 +1220,8 @@ on_idle_open_account (gpointer user_data)
                }
        }
 #endif
-       gdk_threads_leave ();
 
- end:
+       gdk_threads_leave ();
        g_free (acc_name);
        return FALSE;
 }
index b6618de..3cfc695 100644 (file)
@@ -506,6 +506,14 @@ modest_hildon2_window_mgr_register_window (ModestWindowMgr *self,
                }
        }
 
+       /* Do not go backwards */
+       if ((MODEST_IS_MSG_VIEW_WINDOW (current_top) || MODEST_IS_MSG_EDIT_WINDOW (current_top)) &&
+           (MODEST_IS_FOLDER_WINDOW (window) || MODEST_IS_ACCOUNTS_WINDOW (window) || 
+            MODEST_IS_MAILBOXES_WINDOW (window))) {
+               gtk_window_present (GTK_WINDOW (window));
+               return FALSE;
+       }
+
        if (MODEST_IS_FOLDER_WINDOW (current_top) && MODEST_IS_FOLDER_WINDOW (window)) {
                gtk_window_present (GTK_WINDOW (window));
                return FALSE;