X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=811b72c19207b025821c16023fd4f7d71b426703;hp=0a08812c77282d51b016e71b8e1de40f0285ef8c;hb=970d9aea8da383297896b002c56ce13c47e52e29;hpb=4f568be666ccea0e9f3a3b7dd4f230d516448d52 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 0a08812..811b72c 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -395,11 +395,8 @@ void modest_ui_actions_refresh_message_window_after_delete (ModestMsgViewWindow* win) { /* Close msg view window or select next */ - if (modest_msg_view_window_last_message_selected (win) && - modest_msg_view_window_first_message_selected (win)) { - modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (win)); - } else if (!modest_msg_view_window_select_next_message (win) && - !modest_msg_view_window_select_previous_message (win)) { + if (!modest_msg_view_window_select_next_message (win) && + !modest_msg_view_window_select_previous_message (win)) { gboolean ret_value; g_signal_emit_by_name (G_OBJECT (win), "delete-event", NULL, &ret_value); } @@ -2960,6 +2957,7 @@ on_delete_folder_cb (gboolean canceled, if (!MODEST_IS_MAIN_WINDOW(parent_window) || canceled || (err!=NULL)) { g_object_unref (G_OBJECT (info->folder)); g_free (info); + return; } folder_view = modest_main_window_get_child_widget ( @@ -3274,9 +3272,11 @@ modest_ui_actions_on_cut (GtkAction *action, GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); - gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE); - gtk_clipboard_set_can_store (clipboard, NULL, 0); - gtk_clipboard_store (clipboard); + if (modest_text_utils_buffer_selection_is_valid (buffer)) { + gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE); + gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); + } } else if (MODEST_IS_HEADER_VIEW (focused_widget)) { TnyList *header_list = modest_header_view_get_selected_headers ( MODEST_HEADER_VIEW (focused_widget)); @@ -3316,7 +3316,10 @@ modest_ui_actions_on_copy (GtkAction *action, focused_widget = gtk_window_get_focus (GTK_WINDOW (window)); if (GTK_IS_LABEL (focused_widget)) { - gtk_clipboard_set_text (clipboard, gtk_label_get_text (GTK_LABEL (focused_widget)), -1); + gchar *selection; + selection = modest_text_utils_label_get_selection (GTK_LABEL (focused_widget)); + gtk_clipboard_set_text (clipboard, selection, -1); + g_free (selection); gtk_clipboard_set_can_store (clipboard, NULL, 0); gtk_clipboard_store (clipboard); } else if (GTK_IS_EDITABLE (focused_widget)) { @@ -3330,9 +3333,11 @@ modest_ui_actions_on_copy (GtkAction *action, } else if (GTK_IS_TEXT_VIEW (focused_widget)) { GtkTextBuffer *buffer; buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); - gtk_text_buffer_copy_clipboard (buffer, clipboard); - gtk_clipboard_set_can_store (clipboard, NULL, 0); - gtk_clipboard_store (clipboard); + if (modest_text_utils_buffer_selection_is_valid (buffer)) { + gtk_text_buffer_copy_clipboard (buffer, clipboard); + gtk_clipboard_set_can_store (clipboard, NULL, 0); + gtk_clipboard_store (clipboard); + } } else if (MODEST_IS_HEADER_VIEW (focused_widget)) { TnyList *header_list = modest_header_view_get_selected_headers ( MODEST_HEADER_VIEW (focused_widget)); @@ -3963,9 +3968,11 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self, GtkWidget *folder_view = NULL; ModestTnyFolderRules rules; + g_return_if_fail (MODEST_IS_FOLDER_VIEW(self)); + if (!selected) return; - + /* Get the OK button */ dialog = gtk_widget_get_ancestor (GTK_WIDGET (self), GTK_TYPE_DIALOG); if (!dialog) @@ -4047,25 +4054,36 @@ on_move_to_dialog_folder_selection_changed (ModestFolderView* self, } g_object_unref (moved_folder); } else { - TnyHeader *header = NULL; TnyFolder *src_folder = NULL; /* Moving a message */ if (MODEST_IS_MSG_VIEW_WINDOW (user_data)) { - header = modest_msg_view_window_get_header (MODEST_MSG_VIEW_WINDOW (user_data)); - src_folder = tny_header_get_folder (header); - g_object_unref (header); + + TnyHeader *header = NULL; + header = modest_msg_view_window_get_header + (MODEST_MSG_VIEW_WINDOW (user_data)); + if (!TNY_IS_HEADER(header)) + g_warning ("%s: could not get source header", __FUNCTION__); + else + src_folder = tny_header_get_folder (header); + + if (header) + g_object_unref (header); } else { src_folder = - TNY_FOLDER (modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view))); + TNY_FOLDER (modest_folder_view_get_selected + (MODEST_FOLDER_VIEW (folder_view))); } - /* Do not allow to move the msg to the same folder */ - /* Do not allow to move the msg to an account */ - if ((gpointer) src_folder == (gpointer) folder_store || - TNY_IS_ACCOUNT (folder_store)) - ok_sensitive = FALSE; - g_object_unref (src_folder); + if (TNY_IS_FOLDER(src_folder)) { + /* Do not allow to move the msg to the same folder */ + /* Do not allow to move the msg to an account */ + if ((gpointer) src_folder == (gpointer) folder_store || + TNY_IS_ACCOUNT (folder_store)) + ok_sensitive = FALSE; + g_object_unref (src_folder); + } else + g_warning ("%s: could not get source folder", __FUNCTION__); } end: @@ -4307,11 +4325,8 @@ move_to_cb (ModestMailOperation *mail_op, if (MODEST_IS_MSG_VIEW_WINDOW (object)) { ModestMsgViewWindow *self = MODEST_MSG_VIEW_WINDOW (object); - if (modest_msg_view_window_last_message_selected (self) && - modest_msg_view_window_first_message_selected (self)) { - modest_ui_actions_on_close_window (NULL, MODEST_WINDOW (self)); - } else if (!modest_msg_view_window_select_next_message (self) && - !modest_msg_view_window_select_previous_message (self)) { + if (!modest_msg_view_window_select_next_message (self) && + !modest_msg_view_window_select_previous_message (self)) { /* No more messages to view, so close this window */ modest_ui_actions_on_close_window (NULL, MODEST_WINDOW(self)); } @@ -4342,7 +4357,17 @@ folder_move_to_cb (ModestMailOperation *mail_op, TnyFolder *new_folder, gpointer user_data) { + GtkWidget *folder_view; + GObject *object; + + object = modest_mail_operation_get_source (mail_op); + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(object), + MODEST_MAIN_WINDOW_WIDGET_TYPE_FOLDER_VIEW); + g_object_ref (folder_view); + g_object_unref (object); move_to_cb (mail_op, user_data); + modest_folder_view_select_folder (MODEST_FOLDER_VIEW (folder_view), new_folder, FALSE); + g_object_unref (folder_view); } static void @@ -4470,6 +4495,7 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op, tny_iterator_next (iter); } + g_object_unref (iter); tny_msg_rewrite_cache (msg); } @@ -4477,7 +4503,6 @@ open_msg_for_purge_cb (ModestMailOperation *mail_op, /* This string no longer exists, refer to NB#75415 for more info */ /* modest_platform_information_banner (NULL, NULL, _("mail_ib_attachment_already_purged")); */ } - g_object_unref (iter); modest_window_mgr_unregister_header (mgr, header); @@ -4490,7 +4515,6 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action, { GtkWidget *header_view; TnyList *header_list; - TnyIterator *iter; TnyHeader *header; TnyHeaderFlags flags; ModestWindow *msg_view_window = NULL; @@ -4508,7 +4532,7 @@ modest_ui_actions_on_main_window_remove_attachments (GtkAction *action, } if (tny_list_get_length (header_list) == 1) { - iter = tny_list_create_iterator (header_list); + TnyIterator *iter = tny_list_create_iterator (header_list); header = TNY_HEADER (tny_iterator_get_current (iter)); g_object_unref (iter); } else @@ -4632,36 +4656,6 @@ xfer_messages_from_move_to_cb (gboolean canceled, GError *err, } typedef struct { - TnyAccount *dst_account; - ModestConnectedPerformer callback; - gpointer data; -} DoubleConnectionInfo; - -static void -src_account_connect_performer (gboolean canceled, - GError *err, - GtkWindow *parent_window, - TnyAccount *src_account, - gpointer user_data) -{ - DoubleConnectionInfo *info = (DoubleConnectionInfo *) user_data; - - if (canceled || err) { - /* If there was any error call the user callback */ - info->callback (canceled, err, parent_window, src_account, info->data); - } else { - /* Connect the destination account */ - modest_platform_connect_if_remote_and_perform (parent_window, TRUE, - TNY_FOLDER_STORE (info->dst_account), - info->callback, info->data); - } - - /* Free the info object */ - g_object_unref (info->dst_account); - g_slice_free (DoubleConnectionInfo, info); -} - -typedef struct { TnyFolder *src_folder; TnyFolderStore *dst_folder; gboolean delete_original; @@ -4734,6 +4728,15 @@ on_move_folder_cb (gboolean canceled, GError *err, GtkWindow *parent_window, g_free (user_data); } +static TnyAccount * +get_account_from_folder_store (TnyFolderStore *folder_store) +{ + if (TNY_IS_ACCOUNT (folder_store)) + return g_object_ref (folder_store); + else + return tny_folder_get_account (TNY_FOLDER (folder_store)); +} + /* * UI handler for the "Move to" action when invoked from the * ModestMainWindow @@ -4762,29 +4765,30 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, /* Allow only to transfer folders to the local root folder */ if (TNY_IS_ACCOUNT (dst_folder) && - !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder)) { + !MODEST_IS_TNY_LOCAL_FOLDERS_ACCOUNT (dst_folder) && + !modest_tny_account_is_memory_card_account (TNY_ACCOUNT (dst_folder))) { do_xfer = FALSE; } else if (!TNY_IS_FOLDER (src_folder)) { g_warning ("%s: src_folder is not a TnyFolder.\n", __FUNCTION__); do_xfer = FALSE; - } /* else if (!online && modest_tny_folder_store_is_remote(src_folder)) { - guint num_headers = tny_folder_get_all_count(TNY_FOLDER (src_folder)); - TnyAccount *account = tny_folder_get_account (TNY_FOLDER (src_folder)); - if (!connect_to_get_msg(MODEST_WINDOW (win), num_headers, account)) - do_xfer = FALSE; - g_object_unref (account); - }*/ + } - if (do_xfer) { + if (do_xfer) { MoveFolderInfo *info = g_new0 (MoveFolderInfo, 1); - info->src_folder = TNY_FOLDER (src_folder); - info->dst_folder = dst_folder; + DoubleConnectionInfo *connect_info = g_slice_new (DoubleConnectionInfo); + + info->src_folder = g_object_ref (src_folder); + info->dst_folder = g_object_ref (dst_folder); info->delete_original = TRUE; info->folder_view = folder_view; - g_object_ref (G_OBJECT (info->src_folder)); - g_object_ref (G_OBJECT (info->dst_folder)); - modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE, - TNY_FOLDER_STORE (dst_folder), on_move_folder_cb, info); + + connect_info->callback = on_move_folder_cb; + connect_info->dst_account = get_account_from_folder_store (TNY_FOLDER_STORE (dst_folder)); + connect_info->data = info; + + modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE, + TNY_FOLDER_STORE (src_folder), + connect_info); } } else if (gtk_widget_is_focus (GTK_WIDGET(header_view))) { gboolean do_xfer = TRUE; @@ -4817,15 +4821,14 @@ modest_ui_actions_on_main_window_move_to (GtkAction *action, g_object_unref(headers); } if (do_xfer) /* Transfer messages */ { - DoubleConnectionInfo *info = g_slice_new (DoubleConnectionInfo); - info->callback = xfer_messages_from_move_to_cb; - info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder)); - info->data = g_object_ref (dst_folder); - - modest_platform_connect_if_remote_and_perform(GTK_WINDOW (win), TRUE, - TNY_FOLDER_STORE (src_folder), - src_account_connect_performer, - info); + DoubleConnectionInfo *connect_info = g_slice_new (DoubleConnectionInfo); + connect_info->callback = xfer_messages_from_move_to_cb; + connect_info->dst_account = tny_folder_get_account (TNY_FOLDER (dst_folder)); + connect_info->data = g_object_ref (dst_folder); + + modest_platform_double_connect_and_perform(GTK_WINDOW (win), TRUE, + TNY_FOLDER_STORE (src_folder), + connect_info); } }