X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmodest-ui-actions.c;h=2976f095898e3cc740660257071d338fce9b81a2;hb=094f45e53a4c6f44daec128b31615e9f349a14dd;hp=0d2391e2e1857b777bbc2ce4314423230c6fd33f;hpb=52665b57b1c2770d5542fb0e70f96d6853225eb8;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 0d2391e..2976f09 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -55,6 +55,7 @@ #include #include #include +#include "widgets/modest-folder-view.h" #include "widgets/modest-global-settings-dialog.h" #include "modest-connection-specific-smtp-window.h" #include "modest-account-mgr-helpers.h" @@ -369,10 +370,8 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win) * because it requires a providers preset file which is not publically available. */ #ifdef MODEST_PLATFORM_MAEMO /* Defined in config.h */ - GSList *account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(), - TRUE /* enabled accounts only */); - gboolean accounts_exist = account_names != NULL; - g_slist_free (account_names); + gboolean accounts_exist = modest_account_mgr_has_accounts( + modest_runtime_get_account_mgr(), TRUE); if (!accounts_exist) { /* If there are no accounts yet, just show the easy-setup wizard, as per the UI spec: */ @@ -670,29 +669,31 @@ _modest_ui_actions_open (TnyList *headers, ModestWindow *win) ModestWindowMgr *mgr; TnyIterator *iter; ModestMailOperation *mail_op; + TnyList *not_opened_headers; /* Look if we already have a message view for each header. If true, then remove the header from the list of headers to open */ mgr = modest_runtime_get_window_mgr (); iter = tny_list_create_iterator (headers); + not_opened_headers = tny_simple_list_new (); while (!tny_iterator_is_done (iter)) { ModestWindow *window; TnyHeader *header; - + header = TNY_HEADER (tny_iterator_get_current (iter)); window = modest_window_mgr_find_window_by_header (mgr, header); - if (window) { - /* Do not open again the message and present - the window to the user */ - tny_list_remove (headers, G_OBJECT (header)); + /* Do not open again the message and present the + window to the user */ + if (window) gtk_window_present (GTK_WINDOW (window)); - } + else + tny_list_append (not_opened_headers, G_OBJECT (header)); g_object_unref (header); tny_iterator_next (iter); } - + /* Open each message */ mail_op = modest_mail_operation_new_with_error_handling (MODEST_MAIL_OPERATION_TYPE_RECEIVE, G_OBJECT (win), @@ -700,13 +701,14 @@ _modest_ui_actions_open (TnyList *headers, ModestWindow *win) NULL); modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); modest_mail_operation_get_msgs_full (mail_op, - headers, + not_opened_headers, open_msg_cb, NULL, NULL); - /* Clean */ - g_object_unref(mail_op); + g_object_unref (not_opened_headers); + g_object_unref (iter); + g_object_unref (mail_op); } void @@ -1115,11 +1117,9 @@ modest_ui_actions_do_send_receive_all (ModestWindow *win) void modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) { - /* Check that at least one account exists: */ - GSList *account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr(), - TRUE /* enabled accounts only */); - gboolean accounts_exist = account_names != NULL; - g_slist_free (account_names); + /* Check if accounts exist */ + gboolean accounts_exist = + modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE); /* If not, allow the user to create an account before trying to send/receive. */ if (!accounts_exist) @@ -1169,15 +1169,16 @@ modest_ui_actions_on_header_selected (ModestHeaderView *header_view, ModestMainWindow *main_window) { g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - + g_return_if_fail (MODEST_IS_HEADER_VIEW (header_view)); + /* If no header has been selected then exit */ if (!header) return; - + /* Update Main window title */ if (GTK_WIDGET_HAS_FOCUS (header_view)) { const gchar *subject = tny_header_get_subject (header); - if (subject && strcmp (subject, "")) + if (subject && strlen(subject) > 0) gtk_window_set_title (GTK_WINDOW (main_window), subject); else gtk_window_set_title (GTK_WINDOW (main_window), _("mail_va_no_subject")); @@ -1217,8 +1218,9 @@ set_active_account_from_tny_account (TnyAccount *account, account store because that is the one that knows the name of the Modest account */ TnyAccount *modest_server_account = modest_server_account = - modest_tny_account_store_get_tny_account_by_id (modest_runtime_get_account_store (), - server_acc_name); + modest_tny_account_store_get_tny_account_by (modest_runtime_get_account_store (), + MODEST_TNY_ACCOUNT_STORE_QUERY_ID, + server_acc_name); const gchar *modest_acc_name = modest_tny_account_get_parent_modest_account_name_for_server_account (modest_server_account); @@ -1226,6 +1228,36 @@ set_active_account_from_tny_account (TnyAccount *account, g_object_unref (modest_server_account); } + +static void +folder_refreshed_cb (const GObject *obj, + TnyFolder *folder, + gpointer user_data) +{ + ModestMainWindow *win = NULL; + GtkWidget *header_view; + + g_return_if_fail (TNY_IS_FOLDER (folder)); + + win = MODEST_MAIN_WINDOW (user_data); + header_view = + modest_main_window_get_child_widget(win, MODEST_WIDGET_TYPE_HEADER_VIEW); + + /* Check if folder is empty and set headers view contents style */ + if (tny_folder_get_all_count (folder) == 0) { + modest_main_window_set_contents_style (win, + MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY); + } else { + modest_main_window_set_contents_style (win, + MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS); + + /* Restore configuration */ + modest_widget_memory_restore (modest_runtime_get_conf (), + G_OBJECT(header_view), + MODEST_CONF_HEADER_VIEW_KEY); + } +} + void modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, TnyFolderStore *folder_store, @@ -1234,7 +1266,6 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, { ModestConf *conf; GtkWidget *header_view; - gboolean folder_empty = FALSE; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); @@ -1259,30 +1290,18 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, set_active_account_from_tny_account (account, MODEST_WINDOW (main_window)); g_object_unref (account); } - - + /* Set folder on header view */ modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), - TNY_FOLDER (folder_store)); - - /* Set main view style */ - folder_empty = tny_folder_get_all_count (TNY_FOLDER (folder_store)) == 0; - if (folder_empty) { - modest_main_window_set_contents_style (main_window, - MODEST_MAIN_WINDOW_CONTENTS_STYLE_EMPTY); - } - else { - modest_main_window_set_contents_style (main_window, - MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS); - modest_widget_memory_restore (conf, G_OBJECT(header_view), - MODEST_CONF_HEADER_VIEW_KEY); - } + TNY_FOLDER (folder_store), + folder_refreshed_cb, + main_window); } else { /* Update the active account */ modest_window_set_active_account (MODEST_WINDOW (main_window), NULL); /* Do not show folder */ modest_widget_memory_save (conf, G_OBJECT (header_view), MODEST_CONF_HEADER_VIEW_KEY); - modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), NULL); + modest_header_view_clear (MODEST_HEADER_VIEW(header_view)); } } @@ -1331,7 +1350,7 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp gtk_window_set_default_size (GTK_WINDOW(dialog), 300, 300); if (gtk_dialog_run (GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { -// modest_platform_connect_and_wait ();; +// modest_platform_connect_and_wait (); } } gtk_widget_destroy (dialog); @@ -1816,7 +1835,7 @@ modest_ui_actions_on_rename_folder (GtkAction *action, modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); - modest_header_view_set_folder (MODEST_HEADER_VIEW (header_view), NULL); + modest_header_view_clear (MODEST_HEADER_VIEW (header_view)); modest_mail_operation_rename_folder (mail_op, TNY_FOLDER (folder), @@ -2521,8 +2540,18 @@ create_move_to_dialog (ModestWindow *win, /* Create folder view */ *tree_view = modest_folder_view_new (NULL); - gtk_tree_view_set_model (GTK_TREE_VIEW (*tree_view), - gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view))); + + /* It could happen that we're trying to move a message from a + window (msg window for example) after the main window was + closed, so we can not just get the model of the folder + view */ + if (MODEST_IS_FOLDER_VIEW (folder_view)) + gtk_tree_view_set_model (GTK_TREE_VIEW (*tree_view), + gtk_tree_view_get_model (GTK_TREE_VIEW (folder_view))); + else + modest_folder_view_update_model (MODEST_FOLDER_VIEW (*tree_view), + TNY_ACCOUNT_STORE (modest_runtime_get_account_store ())); + gtk_container_add (GTK_CONTAINER (scroll), *tree_view); /* Add scroll to dialog */ @@ -2681,7 +2710,7 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, src_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); /* Clean folder on header view before moving it */ - modest_header_view_set_folder (MODEST_HEADER_VIEW (header_view), NULL); + modest_header_view_clear (MODEST_HEADER_VIEW (header_view)); if (TNY_IS_FOLDER (src_folder)) { mail_op = @@ -2753,8 +2782,11 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action, /* Get the folder view */ main_window = MODEST_MAIN_WINDOW (modest_window_mgr_get_main_window (modest_runtime_get_window_mgr ())); - folder_view = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (main_window) + folder_view = modest_main_window_get_child_widget (main_window, + MODEST_WIDGET_TYPE_FOLDER_VIEW); + else + folder_view = NULL; /* Create and run the dialog */ dialog = create_move_to_dialog (MODEST_WINDOW (win), folder_view, &tree_view); @@ -2795,7 +2827,7 @@ modest_ui_actions_on_msg_view_window_move_to (GtkAction *action, tranasfer_msgs_from_viewer_cb, NULL); g_object_unref (G_OBJECT (mail_op)); - } + } g_object_unref (headers); g_object_unref (folder_store); } @@ -3000,6 +3032,36 @@ modest_ui_actions_on_edit_menu_activated (GtkAction *action, } void +modest_ui_actions_on_view_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules"); +} + +void +modest_ui_actions_on_tools_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules"); +} + +void +modest_ui_actions_on_attachment_menu_activated (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + /* Update dimmed */ + modest_window_check_dimming_rules_group (window, "ModestMenuDimmingRules"); +} + +void modest_ui_actions_on_toolbar_csm_menu_activated (GtkAction *action, ModestWindow *window) {