Add method to get the folder without accessing network.
[modest] / src / hildon2 / modest-hildon2-window-mgr.c
index 76a87f7..879a300 100644 (file)
@@ -89,6 +89,7 @@ static gboolean window_has_modals (ModestWindow *window);
 static ModestWindow *modest_hildon2_window_mgr_show_initial_window (ModestWindowMgr *self);
 static ModestWindow *modest_hildon2_window_mgr_get_current_top (ModestWindowMgr *self);
 static gboolean modest_hildon2_window_mgr_screen_is_on (ModestWindowMgr *self);
+static void modest_hildon2_window_mgr_create_caches (ModestWindowMgr *self);
 static void osso_display_event_cb (osso_display_state_t state, 
                                   gpointer data);
 static void on_account_removed (TnyAccountStore *acc_store, 
@@ -173,6 +174,7 @@ modest_hildon2_window_mgr_class_init (ModestHildon2WindowMgrClass *klass)
        mgr_class->show_initial_window = modest_hildon2_window_mgr_show_initial_window;
        mgr_class->get_current_top = modest_hildon2_window_mgr_get_current_top;
        mgr_class->screen_is_on = modest_hildon2_window_mgr_screen_is_on;
+       mgr_class->create_caches = modest_hildon2_window_mgr_create_caches;
 
        g_type_class_add_private (gobject_class, sizeof(ModestHildon2WindowMgrPrivate));
 
@@ -497,14 +499,15 @@ modest_hildon2_window_mgr_register_window (ModestWindowMgr *self,
                                return FALSE;
                        }
                        g_free (uid);
-               } else {
+               } else if (header) {
                        if (g_list_find_custom (priv->window_list, header, (GCompareFunc) compare_headers)) {
                                g_debug ("%s found another view window showing the same header", __FUNCTION__);
                                g_object_unref (header);
                                return FALSE;
                        }
                }
-               g_object_unref (header);
+               if (header)
+                       g_object_unref (header);
        }
 
        /* Do not go backwards */
@@ -893,7 +896,10 @@ modest_hildon2_window_mgr_get_modal (ModestWindowMgr *self)
                        break;
        }
 
-       return (GtkWindow *) toplevel;
+       if (toplevel && GTK_WIDGET_VISIBLE (toplevel) && gtk_window_get_modal ((GtkWindow *) toplevel))
+               return (GtkWindow *) toplevel;
+       else
+               return NULL;
 }
 
 
@@ -934,7 +940,6 @@ on_account_removed (TnyAccountStore *acc_store,
 {
        HildonWindowStack *stack;
        ModestWindow *current_top;
-       gboolean has_accounts;
 
        /* Ignore transport account removals */
        if (TNY_IS_TRANSPORT_ACCOUNT (account))
@@ -942,7 +947,6 @@ on_account_removed (TnyAccountStore *acc_store,
 
        stack = hildon_window_stack_get_default ();
        current_top = (ModestWindow *) hildon_window_stack_peek (stack);
-       has_accounts = modest_account_mgr_has_accounts (modest_runtime_get_account_mgr (), TRUE);
 
        /* if we're showing the header view of the currently deleted
           account, or the outbox and we deleted the last account,
@@ -950,7 +954,6 @@ on_account_removed (TnyAccountStore *acc_store,
        if (current_top && MODEST_IS_HEADER_WINDOW (current_top)) {
                ModestHeaderView *header_view;
                TnyFolder *folder;
-               gboolean deleted = FALSE;
 
                header_view = modest_header_window_get_header_view (MODEST_HEADER_WINDOW (current_top));
                folder = modest_header_view_get_folder (header_view);
@@ -961,25 +964,18 @@ on_account_removed (TnyAccountStore *acc_store,
 
                                my_account = tny_folder_get_account (folder);
                                if (my_account) {
-                                       if (my_account == account) {
+                                       if (my_account == account)
                                                close_all_but_first (stack);
-                                               deleted = TRUE;
-                                       }
+
                                        g_object_unref (my_account);
                                }
                        }
 
                        /* Close if viewing outbox and no account left */
-                       if (tny_folder_get_folder_type (folder) == TNY_FOLDER_TYPE_OUTBOX) {
-                               if (!has_accounts) {
-                                       close_all_but_first (stack);
-                                       deleted = TRUE;
-                               }
-                       }
-                       g_object_unref (folder);
+                       if (tny_folder_get_folder_type (folder) == TNY_FOLDER_TYPE_OUTBOX)
+                               close_all_but_first (stack);
 
-                       if (deleted)
-                               current_top = (ModestWindow *) hildon_window_stack_peek (stack);
+                       g_object_unref (folder);
                }
        }
 }
@@ -1055,6 +1051,17 @@ modest_hildon2_window_mgr_screen_is_on (ModestWindowMgr *self)
        return (priv->display_state == OSSO_DISPLAY_ON) ? TRUE : FALSE;
 }
 
+static void
+modest_hildon2_window_mgr_create_caches (ModestWindowMgr *self)
+{
+       g_return_if_fail (MODEST_IS_HILDON2_WINDOW_MGR (self));
+
+       modest_accounts_window_pre_create ();
+
+       MODEST_WINDOW_MGR_CLASS(parent_class)->create_caches (self);
+       
+}
+
 static void 
 osso_display_event_cb (osso_display_state_t state, 
                       gpointer data)