GtkWidget *parent_window;
} ReplyForwardHelper;
+typedef struct _PasteAsAttachmentHelper {
+ ModestMsgEditWindow *window;
+ GtkWidget *banner;
+} PasteAsAttachmentHelper;
+
/*
* The do_headers_action uses this kind of functions to perform some
ModestMailOperationState *state,
gpointer user_data);
+static gboolean
+download_uncached_messages (TnyList *header_list, GtkWindow *win,
+ gboolean reply_fwd);
static void
/* Gets folder type (OUTBOX headers will be opened in edit window */
if (modest_tny_folder_is_local_folder (folder))
- folder_type = modest_tny_folder_get_local_folder_type (folder);
+ folder_type = modest_tny_folder_get_local_or_mmc_folder_type (folder);
/* If the header is in the drafts folder then open the editor,
else the message view window */
- if (folder_type == TNY_FOLDER_TYPE_DRAFTS) {
+ if ((folder_type == TNY_FOLDER_TYPE_DRAFTS) ||
+ (folder_type == TNY_FOLDER_TYPE_OUTBOX)) {
/* we cannot edit without a valid account... */
if (!modest_account_mgr_has_accounts(modest_runtime_get_account_mgr(), TRUE)) {
run_account_setup_wizard(parent_win);
* than later in a thread:
*/
if (tny_list_get_length (not_opened_headers) > 0) {
- gboolean connected = modest_platform_connect_and_wait (GTK_WINDOW (win), NULL);
-
- /* Don't go further if a connection would be necessary but none is available: */
- if (!connected) {
+ TnyIterator *iter;
+ gboolean found = FALSE;
+
+ iter = tny_list_create_iterator (not_opened_headers);
+ while (!tny_iterator_is_done (iter) && !found) {
+ TnyHeader *header = TNY_HEADER (tny_iterator_get_current (iter));
+ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED))
+ found = TRUE;
+ else
+ tny_iterator_next (iter);
+
+ g_object_unref (header);
+ }
+ g_object_unref (iter);
+
+ if (found && !modest_platform_connect_and_wait (GTK_WINDOW (win), NULL)) {
g_object_unref (not_opened_headers);
- return;
+ return;
}
}
* of them are currently downloaded
*/
static gboolean
-download_uncached_messages (TnyList *header_list, GtkWindow *win,
+download_uncached_messages (TnyList *header_list,
+ GtkWindow *win,
gboolean reply_fwd)
{
TnyIterator *iter;
iter = tny_list_create_iterator (header_list);
while (!tny_iterator_is_done (iter)) {
TnyHeader *header;
- TnyHeaderFlags flags;
header = TNY_HEADER (tny_iterator_get_current (iter));
if (header) {
- flags = tny_header_get_flags (header);
- /* TODO: is this the right flag?, it seems that some
- headers that have been previously downloaded do not
- come with it */
- if (! (flags & TNY_HEADER_FLAG_CACHED))
+ if (!(tny_header_get_flags (header) & TNY_HEADER_FLAG_CACHED))
uncached_messages ++;
g_object_unref (header);
}
account_names = NULL;
}
-/*
- * Handler of the click on Send&Receive button in the main toolbar
- */
-void
-modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win)
+void
+modest_do_refresh_current_folder(ModestWindow *win)
{
- /* 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)
- modest_ui_actions_on_accounts (NULL, win);
-
/* Refresh currently selected folder. Note that if we only
- want to retrive the headers, then the refresh only will
+ want to retreive the headers, then the refresh only will
invoke a poke_status over all folders, i.e., only the
total/unread count will be updated */
if (MODEST_IS_MAIN_WINDOW (win)) {
if (folder_store)
g_object_unref (folder_store);
}
+}
+
+
+/*
+ * Handler of the click on Send&Receive button in the main toolbar
+ */
+void
+modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win)
+{
+ /* 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)
+ modest_ui_actions_on_accounts (NULL, win);
+
+ modest_do_refresh_current_folder (win);
/* Refresh the active account */
modest_ui_actions_do_send_receive (NULL, win);
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 ();
+ /* TODO: Comment about why is this commented out: */
+ /* modest_platform_connect_and_wait (); */
}
}
gtk_widget_destroy (dialog);
ModestWindow *window)
{
GtkWidget *focused_widget;
+ GtkClipboard *clipboard;
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
focused_widget = gtk_window_get_focus (GTK_WINDOW (window));
if (GTK_IS_EDITABLE (focused_widget)) {
gtk_editable_cut_clipboard (GTK_EDITABLE(focused_widget));
+ gtk_clipboard_set_can_store (clipboard, NULL, 0);
+ gtk_clipboard_store (clipboard);
} else if (GTK_IS_TEXT_VIEW (focused_widget)) {
GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
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);
} else if (MODEST_IS_HEADER_VIEW (focused_widget)) {
modest_header_view_cut_selection (MODEST_HEADER_VIEW (focused_widget));
} else if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
if (GTK_IS_LABEL (focused_widget)) {
gtk_clipboard_set_text (clipboard, gtk_label_get_text (GTK_LABEL (focused_widget)), -1);
+ gtk_clipboard_set_can_store (clipboard, NULL, 0);
+ gtk_clipboard_store (clipboard);
} else if (GTK_IS_EDITABLE (focused_widget)) {
gtk_editable_copy_clipboard (GTK_EDITABLE(focused_widget));
+ gtk_clipboard_set_can_store (clipboard, NULL, 0);
+ gtk_clipboard_store (clipboard);
} else if (GTK_IS_HTML (focused_widget)) {
gtk_html_copy (GTK_HTML (focused_widget));
+ gtk_clipboard_set_can_store (clipboard, NULL, 0);
+ gtk_clipboard_store (clipboard);
} 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);
} else if (MODEST_IS_HEADER_VIEW (focused_widget)) {
TnyList *header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW (focused_widget));
TnyIterator *iter = tny_list_create_iterator (header_list);
gtk_widget_destroy (GTK_WIDGET(user_data));
}
+static void
+paste_as_attachment_free (gpointer data)
+{
+ PasteAsAttachmentHelper *helper = (PasteAsAttachmentHelper *) data;
+
+ gtk_widget_destroy (helper->banner);
+ g_object_unref (helper->banner);
+ g_free (helper);
+}
+
+static void
+paste_msg_as_attachment_cb (ModestMailOperation *mail_op,
+ TnyHeader *header,
+ TnyMsg *msg,
+ gpointer userdata)
+{
+ PasteAsAttachmentHelper *helper = (PasteAsAttachmentHelper *) userdata;
+ g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (helper->window));
+
+ if (msg == NULL)
+ return;
+
+ modest_msg_edit_window_add_part (MODEST_MSG_EDIT_WINDOW (helper->window), TNY_MIME_PART (msg));
+
+}
+
void
modest_ui_actions_on_paste (GtkAction *action,
ModestWindow *window)
if (GTK_IS_EDITABLE (focused_widget)) {
gtk_editable_paste_clipboard (GTK_EDITABLE(focused_widget));
} else if (GTK_IS_TEXT_VIEW (focused_widget)) {
- GtkTextBuffer *buffer;
- GtkClipboard *clipboard;
+ ModestEmailClipboard *e_clipboard = NULL;
+ e_clipboard = modest_runtime_get_email_clipboard ();
+ if (modest_email_clipboard_cleared (e_clipboard)) {
+ GtkTextBuffer *buffer;
+ GtkClipboard *clipboard;
+
+ clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget));
+ gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE);
+ } else if (MODEST_IS_MSG_EDIT_WINDOW (window)) {
+ ModestMailOperation *mail_op;
+ TnyFolder *src_folder;
+ TnyList *data;
+ gboolean delete;
+ PasteAsAttachmentHelper *helper = g_new0 (PasteAsAttachmentHelper, 1);
+ helper->window = MODEST_MSG_EDIT_WINDOW (window);
+ helper->banner = modest_platform_animation_banner (GTK_WIDGET (window), NULL,
+ _CS("ckct_nw_pasting"));
+ modest_email_clipboard_get_data (e_clipboard, &src_folder, &data, &delete);
+ mail_op = modest_mail_operation_new (MODEST_MAIL_OPERATION_TYPE_RECEIVE,
+ G_OBJECT (window));
+ if (helper->banner != NULL) {
+ g_object_ref (G_OBJECT (helper->banner));
+ gtk_window_set_modal (GTK_WINDOW (helper->banner), FALSE);
+ gtk_widget_show (GTK_WIDGET (helper->banner));
+ }
- clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD);
- buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget));
- gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE);
+ if (data != NULL) {
+ modest_mail_operation_get_msgs_full (mail_op,
+ data,
+ (GetMsgAsyncUserCallback) paste_msg_as_attachment_cb,
+ helper,
+ paste_as_attachment_free);
+ }
+ }
} else if (MODEST_IS_FOLDER_VIEW (focused_widget)) {
ModestEmailClipboard *clipboard = NULL;
TnyFolder *src_folder = NULL;