X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-hildon2-window-mgr.c;h=447d010d7c493431d5a4b3692c81dd87c6420b14;hp=61501475eb8aa52bf95a8c611e24f0bb4b35d80a;hb=c1066a95c306c71fc8034646ba5d7c1b1b67973e;hpb=c366d74a6f1a5f18c2ff38402440aa4bdb859f5e diff --git a/src/hildon2/modest-hildon2-window-mgr.c b/src/hildon2/modest-hildon2-window-mgr.c index 6150147..447d010 100644 --- a/src/hildon2/modest-hildon2-window-mgr.c +++ b/src/hildon2/modest-hildon2-window-mgr.c @@ -31,6 +31,7 @@ #include #include "modest-hildon2-window-mgr.h" #include "modest-msg-edit-window.h" +#include "modest-mailboxes-window.h" #include "modest-header-window.h" #include "modest-main-window.h" #include "modest-conf.h" @@ -86,6 +87,9 @@ static ModestWindow *modest_hildon2_window_mgr_get_current_top (ModestWindowMgr static gboolean modest_hildon2_window_mgr_screen_is_on (ModestWindowMgr *self); static void osso_display_event_cb (osso_display_state_t state, gpointer data); +static void on_account_removed (TnyAccountStore *acc_store, + TnyAccount *account, + gpointer user_data); typedef struct _ModestHildon2WindowMgrPrivate ModestHildon2WindowMgrPrivate; struct _ModestHildon2WindowMgrPrivate { @@ -210,12 +214,11 @@ modest_hildon2_window_mgr_finalize (GObject *obj) priv->window_state_uids = NULL; osso_hw_set_display_event_cb (modest_maemo_utils_get_osso_context (), - NULL, - NULL); + NULL, NULL); acc_store = modest_runtime_get_account_store (); if (acc_store && g_signal_handler_is_connected (acc_store, priv->accounts_handler)) - g_signal_handler_disconnect (acc_store, priv->accounts_handler); + g_signal_handler_disconnect (acc_store, priv->accounts_handler); if (priv->window_list) { GList *iter = priv->window_list; @@ -388,11 +391,30 @@ modest_hildon2_window_mgr_register_window (ModestWindowMgr *self, } if (MODEST_IS_FOLDER_WINDOW (current_top) && MODEST_IS_FOLDER_WINDOW (window)) { - g_debug ("Trying to register a second folder window is not allowed"); + gtk_window_present (GTK_WINDOW (win)); + return FALSE; + } + + if (MODEST_IS_MAILBOXES_WINDOW (current_top) && MODEST_IS_MAILBOXES_WINDOW (window)) { + gtk_window_present (GTK_WINDOW (win)); + return FALSE; + } + + /* Mailboxes window can not replace folder windows */ + if (MODEST_IS_FOLDER_WINDOW (current_top) && MODEST_IS_MAILBOXES_WINDOW (window)) { gtk_window_present (GTK_WINDOW (current_top)); return FALSE; } + /* Trying to open a folders window and a mailboxes window at + the same time from the accounts window is not allowed */ + if (MODEST_IS_MAILBOXES_WINDOW (current_top) && + MODEST_IS_FOLDER_WINDOW (window) && + MODEST_IS_ACCOUNTS_WINDOW (parent)) { + gtk_window_present (GTK_WINDOW (win)); + return FALSE; + } + if (MODEST_IS_HEADER_WINDOW (current_top) && MODEST_IS_HEADER_WINDOW (window)) { g_debug ("Trying to register a second header window is not allowed"); gtk_window_present (GTK_WINDOW (current_top)); @@ -406,7 +428,7 @@ modest_hildon2_window_mgr_register_window (ModestWindowMgr *self, g_object_ref (window); priv->window_list = g_list_prepend (priv->window_list, window); - nested_msg = MODEST_IS_MSG_VIEW_WINDOW (window) && + nested_msg = MODEST_IS_MSG_VIEW_WINDOW (window) && MODEST_IS_MSG_VIEW_WINDOW (parent); /* Close views if they're being shown. Nevertheless we must @@ -737,29 +759,6 @@ modest_hildon2_window_mgr_set_modal (ModestWindowMgr *self, gtk_window_set_destroy_with_parent (window, TRUE); } -static ModestWindow * -create_folders_view (ModestWindowMgr *self) -{ - GtkWidget *folders_window; - ModestAccountMgr *mgr; - const gchar *acc_name; - - folders_window = (GtkWidget *) modest_folder_window_new (NULL); - mgr = modest_runtime_get_account_mgr (); - acc_name = modest_account_mgr_get_default_account (mgr); - if (!acc_name) - acc_name = MODEST_LOCAL_FOLDERS_ACCOUNT_NAME; - modest_folder_window_set_account (MODEST_FOLDER_WINDOW (folders_window), - acc_name); - if (modest_window_mgr_register_window (self, MODEST_WINDOW (folders_window), NULL)) { - gtk_widget_show (folders_window); - } else { - gtk_widget_destroy (folders_window); - folders_window = NULL; - } - return MODEST_WINDOW (folders_window); -} - static void on_account_removed (TnyAccountStore *acc_store, TnyAccount *account, @@ -777,12 +776,6 @@ on_account_removed (TnyAccountStore *acc_store, current_top = (ModestWindow *) hildon_window_stack_peek (stack); has_accounts = modest_account_mgr_has_accounts (modest_runtime_get_account_mgr (), TRUE); - if (current_top && - MODEST_IS_ACCOUNTS_WINDOW (current_top) && - !has_accounts) { - create_folders_view (MODEST_WINDOW_MGR (user_data)); - } - /* if we're showing the header view of the currently deleted account, or the outbox and we deleted the last account, then close the window */ @@ -834,39 +827,24 @@ static ModestWindow * modest_hildon2_window_mgr_show_initial_window (ModestWindowMgr *self) { ModestWindow *initial_window = NULL; - ModestTnyAccountStore *acc_store; ModestHildon2WindowMgrPrivate *priv; - /* Return accounts window */ - initial_window = MODEST_WINDOW (modest_accounts_window_new ()); - modest_window_mgr_register_window (self, initial_window, NULL); + priv = MODEST_HILDON2_WINDOW_MGR_GET_PRIVATE (self); - /* Check if we have at least one remote account to create also - the folders window */ - acc_store = modest_runtime_get_account_store (); - if (modest_tny_account_store_get_num_remote_accounts (acc_store) < 1) { - ModestWindow *win; - /* Show first the accounts window to add it to the - stack. This has to be changed when the new - stackable API is available. There will be a method - to show all the windows that will only show the - last one to the user. The current code shows both - windows, one after the other */ - gtk_widget_show (GTK_WIDGET (initial_window)); - - win = create_folders_view (MODEST_WINDOW_MGR (self)); - if (win) - initial_window = win; + /* Connect to the account store "account-removed" signal". We + do this here because in the init the singletons are still + not initialized properly */ + if (!g_signal_handler_is_connected (modest_runtime_get_account_store (), + priv->accounts_handler)) { + priv->accounts_handler = g_signal_connect (modest_runtime_get_account_store (), + "account-removed", + G_CALLBACK (on_account_removed), + self); } - /* Connect to the account store "account-removed" signal". If - we're showing the accounts window and all the accounts are - deleted we need to move to folders window automatically */ - priv = MODEST_HILDON2_WINDOW_MGR_GET_PRIVATE (self); - priv->accounts_handler = g_signal_connect (acc_store, - "account-removed", - G_CALLBACK (on_account_removed), - self); + /* Return accounts window */ + initial_window = MODEST_WINDOW (modest_accounts_window_new ()); + modest_window_mgr_register_window (self, initial_window, NULL); return initial_window; }