X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=2bd91beb17bd890cd4763b817431b85c3c5bb06b;hb=13c1ac80f5a889a436562a771cf1615aa2454686;hp=7aec59150dc0bc0792670dc724106cf76fb505a6;hpb=f65cf12510835b6adb63cf583872995940d6daa4;p=modest diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 7aec591..2bd91be 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -48,6 +48,7 @@ #include "modest-account-mgr-helpers.h" #include "modest-mail-operation.h" +#include "easysetup/modest-easysetup-wizard.h" #include #include #include @@ -158,26 +159,24 @@ modest_ui_actions_on_delete (GtkAction *action, ModestWindow *win) header = TNY_HEADER (tny_iterator_get_current (iter)); /* TODO: thick grain mail operation involving a list of objects. Composite pattern ??? */ - mail_op = modest_mail_operation_new (); - /* TODO: add confirmation dialog */ + mail_op = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); - /* Move to trash. TODO: Still not supported */ + /* Always delete. TODO: Move to trash still not supported */ modest_mail_operation_remove_msg (mail_op, header, FALSE); - if (modest_mail_operation_get_status (mail_op) != - MODEST_MAIL_OPERATION_STATUS_SUCCESS) { - const GError *error; - error = modest_mail_operation_get_error (mail_op); - if (error) - g_warning (error->message); - } - + /* Frees */ g_object_unref (G_OBJECT (mail_op)); - g_object_unref (header); + g_object_unref (G_OBJECT (header)); + tny_iterator_next (iter); } while (!tny_iterator_is_done (iter)); + + /* Free iter */ + g_object_unref (G_OBJECT (iter)); } } @@ -206,13 +205,33 @@ modest_ui_actions_on_add_to_contacts (GtkAction *action, ModestWindow *win) void modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win) { - /* GtkDialog *account_win; */ -/* account_win = GTK_DIALOG(modest_account_view_window_new ()); */ + GSList *account_names = modest_account_mgr_account_names (modest_runtime_get_account_mgr()); + + gboolean accounts_exist = account_names != NULL; + g_slist_free (account_names); - -/* gtk_dialog_run (account_win); */ - //gtk_widget_destroy (GTK_WIDGET(account_win)); - GtkWidget *dialog, *label; + /* This is currently only implemented for Maemo, + * because it requires a providers preset file which is not publically available. + */ +#ifdef MODEST_PLATFORM_MAEMO /* Defined in config.h */ + /* To test, while modest_account_mgr_account_names() is broken: accounts_exist = TRUE; */ + if (!accounts_exist) { + /* If there are no accounts yet, just show the easy-setup wizard, as per the UI spec: */ + ModestEasysetupWizardDialog *wizard = modest_easysetup_wizard_dialog_new (); + gtk_window_set_transient_for (GTK_WINDOW (wizard), GTK_WINDOW (win)); + gtk_dialog_run (GTK_DIALOG (wizard)); + gtk_widget_destroy (GTK_WIDGET (wizard)); + } + else + { + /* Show the list of accounts: */ + GtkDialog *account_win = GTK_DIALOG(modest_account_view_window_new ()); + gtk_window_set_transient_for (GTK_WINDOW (account_win), GTK_WINDOW(win)); + gtk_dialog_run (account_win); + gtk_widget_destroy (GTK_WIDGET(account_win)); + } +#else + GtkWidget *dialog, *label; /* Create the widgets */ @@ -235,6 +254,7 @@ modest_ui_actions_on_accounts (GtkAction *action, ModestWindow *win) gtk_container_add (GTK_CONTAINER (GTK_DIALOG(dialog)->vbox), label); gtk_widget_show_all (dialog); +#endif /* MODEST_PLATFORM_MAEMO */ } void @@ -560,11 +580,14 @@ modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) return; } + /* Create the mail operation */ mail_op = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_op); modest_mail_operation_update_account (mail_op, TNY_STORE_ACCOUNT(tny_account)); - g_object_unref (G_OBJECT(tny_account)); - /* g_object_unref (G_OBJECT(mail_op)); FIXME: this is still in use... */ + /* Frees */ + g_object_unref (G_OBJECT (tny_account)); + g_object_unref (G_OBJECT (mail_op)); } @@ -585,7 +608,8 @@ modest_ui_actions_toggle_view (GtkAction *action, ModestMainWindow *main_window) conf = modest_runtime_get_conf (); /* what is saved/restored is depending on the style; thus; we save with - * old style, then update the style, and restore for this new style*/ + * old style, then update the style, and restore for this new style + */ modest_widget_memory_save (conf, G_OBJECT(header_view), "header-view"); if (modest_header_view_get_style @@ -814,56 +838,6 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, } } - -/****************************************************/ -/* - * below some stuff to clearup statusbar messages after 1,5 seconds.... - */ -static gboolean -progress_bar_clean (GtkWidget *bar) -{ - if (GTK_IS_PROGRESS_BAR(bar)) { - gtk_progress_bar_set_text (GTK_PROGRESS_BAR(bar), ""); - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(bar), 1.0); - } - return FALSE; -} - -static gboolean -statusbar_clean (GtkWidget *bar) -{ - if (GTK_IS_STATUSBAR(bar)) - gtk_statusbar_push (GTK_STATUSBAR(bar), 0, ""); - return FALSE; -} - - -static void -statusbar_push (ModestMainWindow *main_window, guint context_id, const gchar *msg) -{ - if (!msg) - return; - - GtkWidget *progress_bar, *status_bar; - - progress_bar = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_PROGRESS_BAR); - status_bar = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_STATUS_BAR); - if (progress_bar) { - gtk_widget_show (progress_bar); - g_timeout_add (3000, (GSourceFunc)progress_bar_clean, progress_bar); - } - - if (status_bar) { - gtk_widget_show (status_bar); - gtk_statusbar_push (GTK_STATUSBAR(status_bar), 0, msg); - g_timeout_add (2500, (GSourceFunc)statusbar_clean, status_bar); - } - -} -/****************************************************************************/ - void modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemType type, ModestWindow *win) @@ -913,37 +887,6 @@ modest_ui_actions_on_item_not_found (ModestHeaderView *header_view,ModestItemTyp gdk_threads_leave (); } - - -void -modest_ui_actions_on_header_status_update (ModestHeaderView *header_view, - const gchar *msg, gint num, - gint total, ModestMainWindow *main_window) -{ - char* txt; - GtkWidget *progress_bar; - - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); - - progress_bar = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_PROGRESS_BAR); - if (!progress_bar) - return; - - if (total != 0) - gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR(progress_bar), - (gdouble)num/(gdouble)total); - else - gtk_progress_bar_pulse (GTK_PROGRESS_BAR(progress_bar)); - - txt = g_strdup_printf (_("Downloading %d of %d"), num, total); - gtk_progress_bar_set_text (GTK_PROGRESS_BAR(progress_bar), txt); - g_free (txt); - - statusbar_push (main_window, 0, msg); -} - - void modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link, ModestWindow *win) @@ -1012,8 +955,11 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) return; } from = modest_account_mgr_get_from_string (account_mgr, account_name); - + + /* Create the mail operation */ mail_operation = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), mail_operation); + modest_mail_operation_send_new_mail (mail_operation, transport_account, from, @@ -1027,13 +973,12 @@ modest_ui_actions_on_send (GtkWidget *widget, ModestMsgEditWindow *edit_window) /* Frees */ g_free (from); g_free (account_name); - g_object_unref (G_OBJECT (mail_operation)); g_object_unref (G_OBJECT (transport_account)); + g_object_unref (G_OBJECT (mail_operation)); modest_msg_edit_window_free_msg_data (edit_window, data); /* Save settings and close the window */ - /* save_settings (edit_window) */ gtk_widget_destroy (GTK_WIDGET (edit_window)); } @@ -1228,18 +1173,16 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_windo ModestMailOperation *mail_op; mail_op = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + new_folder = modest_mail_operation_create_folder (mail_op, TNY_FOLDER_STORE (parent_folder), (const gchar *) folder_name); - if (new_folder) { + if (new_folder) g_object_unref (new_folder); - } else { - const GError *error; - error = modest_mail_operation_get_error (mail_op); - if (error) - g_warning ("Error adding a subfolder: %s\n", error->message); - } g_object_unref (mail_op); + g_free (folder_name); } g_object_unref (parent_folder); } @@ -1268,19 +1211,17 @@ modest_ui_actions_on_rename_folder (GtkAction *action, if (folder_name != NULL && strlen (folder_name) > 0) { ModestMailOperation *mail_op; - const GError *error; mail_op = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); + modest_mail_operation_rename_folder (mail_op, folder, (const gchar *) folder_name); - error = modest_mail_operation_get_error (mail_op); - if (error) - /* TODO: notify error ? */ - g_warning ("Could not rename a folder: %s\n", error->message); - g_object_unref (mail_op); + g_free (folder_name); } g_object_unref (folder); } @@ -1292,7 +1233,6 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) TnyFolder *folder; ModestMailOperation *mail_op; GtkWidget *folder_view; - const GError *error; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); @@ -1304,12 +1244,10 @@ delete_folder (ModestMainWindow *main_window, gboolean move_to_trash) folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); mail_op = modest_mail_operation_new (); + modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), + mail_op); modest_mail_operation_remove_folder (mail_op, folder, move_to_trash); - error = modest_mail_operation_get_error (mail_op); - if (error) - g_warning ("%s\n", error->message); - g_object_unref (G_OBJECT (mail_op)); g_object_unref (G_OBJECT (folder)); } @@ -1385,3 +1323,84 @@ modest_ui_actions_on_password_requested (TnyAccountStore *account_store, gtk_widget_destroy (dialog); } + +void +modest_ui_actions_on_cut (GtkAction *action, + ModestWindow *window) +{ + GtkWidget *focused_widget; + + focused_widget = gtk_window_get_focus (GTK_WINDOW (window)); + if (GTK_IS_EDITABLE (focused_widget)) { + gtk_editable_cut_clipboard (GTK_EDITABLE(focused_widget)); + } else if (GTK_IS_TEXT_VIEW (focused_widget)) { + GtkTextBuffer *buffer; + GtkClipboard *clipboard; + + clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); + gtk_text_buffer_cut_clipboard (buffer, clipboard, TRUE); + } +} + +void +modest_ui_actions_on_copy (GtkAction *action, + ModestWindow *window) +{ + GtkClipboard *clipboard; + GtkWidget *focused_widget; + + clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); + 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); + } else if (GTK_IS_EDITABLE (focused_widget)) { + gtk_editable_copy_clipboard (GTK_EDITABLE(focused_widget)); + } 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); + } +} + +void +modest_ui_actions_on_paste (GtkAction *action, + ModestWindow *window) +{ + GtkWidget *focused_widget; + + focused_widget = gtk_window_get_focus (GTK_WINDOW (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; + + clipboard = gtk_clipboard_get (GDK_SELECTION_PRIMARY); + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); + gtk_text_buffer_paste_clipboard (buffer, clipboard, NULL, TRUE); + } +} + +void +modest_ui_actions_on_select_all (GtkAction *action, + ModestWindow *window) +{ + GtkWidget *focused_widget; + + focused_widget = gtk_window_get_focus (GTK_WINDOW (window)); + if (GTK_IS_LABEL (focused_widget)) { + gtk_label_select_region (GTK_LABEL (focused_widget), 0, -1); + } else if (GTK_IS_EDITABLE (focused_widget)) { + gtk_editable_select_region (GTK_EDITABLE(focused_widget), 0, -1); + } else if (GTK_IS_TEXT_VIEW (focused_widget)) { + GtkTextBuffer *buffer; + GtkTextIter start, end; + + buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (focused_widget)); + gtk_text_buffer_get_start_iter (buffer, &start); + gtk_text_buffer_get_end_iter (buffer, &end); + gtk_text_buffer_select_range (buffer, &start, &end); + } +}