X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=cc737732ee47260738a284a1e79c24129594b6b3;hp=3dad6f43a6141f96fa6ba0d1983b9baac873a6ff;hb=c5637dfb0beccca9e090c874336a387277433ab6;hpb=246212c9d891da36369a435c9e42797c8de9d4b4 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index 3dad6f4..cc73773 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -47,10 +47,11 @@ #include #include #include -#include +#include #include "modest-account-mgr-helpers.h" #include "modest-mail-operation.h" +#include "modest-text-utils.h" #ifdef MODEST_HAVE_EASYSETUP #include "easysetup/modest-easysetup-wizard.h" @@ -62,7 +63,6 @@ #include #include - typedef struct _GetMsgAsyncHelper { ModestWindow *window; TnyIterator *iter; @@ -88,8 +88,7 @@ static void read_msg_func (gpointer data, gpointer user_data); static void get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data); static void reply_forward (ReplyForwardAction action, ModestWindow *win); -static void modest_ui_actions_message_details_cb (gpointer msg_data, - gpointer helper_data); + static gchar* ask_for_folder_name (GtkWindow *parent_window, const gchar *title); @@ -307,8 +306,12 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) } from_str = modest_account_mgr_get_from_string (modest_runtime_get_account_mgr(), account_name); + if (!from_str) { + g_printerr ("modest: failed get from string for '%s'\n", account_name); + goto cleanup; + } - msg = modest_tny_msg_new ("", from_str, "", "", "", "", NULL); + msg = modest_tny_msg_new ("", from_str, "", "", "", "", NULL); if (!msg) { g_printerr ("modest: failed to create new msg\n"); goto cleanup; @@ -504,7 +507,7 @@ reply_forward (ReplyForwardAction action, ModestWindow *win) folder = tny_header_get_folder (header); if (folder) { /* The callback will call it per each header */ - tny_folder_get_msg_async (folder, header, get_msg_cb, helper); + tny_folder_get_msg_async (folder, header, get_msg_cb, NULL, helper); g_object_unref (G_OBJECT (folder)); } else g_printerr ("modest: no folder for header\n"); @@ -580,6 +583,14 @@ modest_ui_actions_on_prev (GtkAction *action, } } +void +modest_ui_actions_on_sort (GtkAction *action, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW(window)); + /* FIXME: unimplemented */ +} + static gboolean action_send (const gchar* account_name) @@ -647,7 +658,11 @@ void modest_ui_actions_on_send_receive (GtkAction *action, ModestWindow *win) { gchar *account_name; + + g_message ("online? %s", + tny_device_is_online(modest_runtime_get_device()) ? "yes":"no"); + account_name = g_strdup(modest_window_get_active_account(MODEST_WINDOW(win))); if (!account_name) @@ -767,7 +782,7 @@ get_msg_cb (TnyFolder *folder, TnyMsg *msg, GError **err, gpointer user_data) TnyHeader *header; header = TNY_HEADER (tny_iterator_get_current (helper->iter)); tny_folder_get_msg_async (folder, header, - get_msg_cb, helper); + get_msg_cb, NULL, helper); g_object_unref (G_OBJECT(header)); } } @@ -819,7 +834,7 @@ modest_ui_actions_on_header_selected (ModestHeaderView *header_view, tny_folder_get_msg_async (TNY_FOLDER(folder), header, get_msg_cb, - helper); + NULL, helper); /* Frees */ g_object_unref (G_OBJECT (folder)); @@ -883,7 +898,7 @@ cleanup: void modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, - TnyFolder *folder, + TnyFolderStore *folder_store, gboolean selected, ModestMainWindow *main_window) { @@ -899,15 +914,22 @@ modest_ui_actions_on_folder_selection_changed (ModestFolderView *folder_view, conf = modest_runtime_get_conf (); - if (TNY_IS_FOLDER (folder)) { - if (!selected) { /* the folder was unselected; save it's settings */ - modest_widget_memory_save (conf, G_OBJECT (header_view), "header-view"); - modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), NULL); - } else { - modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), folder); + if (TNY_IS_FOLDER (folder_store)) { + + modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_HEADERS); + + if (selected) { + modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), + TNY_FOLDER (folder_store)); modest_widget_memory_restore (conf, G_OBJECT(header_view), "header-view"); + } else { + modest_widget_memory_save (conf, G_OBJECT (header_view), "header-view"); + modest_header_view_set_folder (MODEST_HEADER_VIEW(header_view), NULL); } + } else if (TNY_IS_ACCOUNT (folder_store)) { + + modest_main_window_set_contents_style (main_window, MODEST_MAIN_WINDOW_CONTENTS_STYLE_DETAILS); } } @@ -1244,27 +1266,10 @@ modest_ui_actions_on_new_folder (GtkAction *action, ModestMainWindow *main_windo parent_folder = modest_folder_view_get_selected (MODEST_FOLDER_VIEW(folder_view)); if (parent_folder) { - gchar *folder_name; - - folder_name = ask_for_folder_name (GTK_WINDOW (main_window), - _("Please enter a name for the new folder")); - - if (folder_name != NULL && strlen (folder_name) > 0) { - TnyFolder *new_folder; - ModestMailOperation *mail_op; - - mail_op = modest_mail_operation_new (); - modest_mail_operation_queue_add (modest_runtime_get_mail_operation_queue (), - mail_op); + /* Run the new folder dialog */ + while (!modest_platform_run_new_folder_dialog (MODEST_WINDOW (main_window), + parent_folder)); - new_folder = modest_mail_operation_create_folder (mail_op, - parent_folder, - (const gchar *) folder_name); - if (new_folder) - g_object_unref (new_folder); - g_object_unref (mail_op); - g_free (folder_name); - } g_object_unref (parent_folder); } } @@ -1446,6 +1451,17 @@ modest_ui_actions_on_copy (GtkAction *action, } void +modest_ui_actions_on_undo (GtkAction *action, + ModestWindow *window) +{ + if (MODEST_IS_MSG_EDIT_WINDOW (window)) { + modest_msg_edit_window_undo (MODEST_MSG_EDIT_WINDOW (window)); + } else { + g_return_if_reached (); + } +} + +void modest_ui_actions_on_paste (GtkAction *action, ModestWindow *window) { @@ -1510,6 +1526,18 @@ void modest_ui_actions_msg_edit_on_change_priority (GtkRadioAction *action, modest_msg_edit_window_set_priority_flags (MODEST_MSG_EDIT_WINDOW (window), flags); } +void modest_ui_actions_msg_edit_on_change_file_format (GtkRadioAction *action, + GtkRadioAction *selected, + ModestWindow *window) +{ + gint file_format; + + g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); + + file_format = gtk_radio_action_get_current_value (selected); + modest_msg_edit_window_set_file_format (MODEST_MSG_EDIT_WINDOW (window), file_format); +} + void modest_ui_actions_on_zoom_plus (GtkAction *action, @@ -1564,56 +1592,110 @@ modest_ui_actions_on_change_fullscreen (GtkAction *action, gtk_window_present (GTK_WINDOW (window)); } +/* + * Show the header details in a ModestDetailsDialog widget + */ static void -modest_ui_actions_message_details_cb (gpointer msg_data, - gpointer helper_data) +show_header_details (TnyHeader *header, + GtkWindow *window) { GtkWidget *dialog; - TnyMsg *msg = (TnyMsg *) msg_data; - TnyHeader *header; - GetMsgAsyncHelper *helper = (GetMsgAsyncHelper *) helper_data; - - header = tny_msg_get_header (msg); - dialog = modest_msg_view_details_dialog_new (GTK_WINDOW (helper->window), header); - g_object_unref (header); + /* Create dialog */ + dialog = modest_details_dialog_new_with_header (window, header); + + /* Run dialog */ gtk_widget_show_all (dialog); + gtk_dialog_run (GTK_DIALOG (dialog)); + gtk_widget_destroy (dialog); +} + +/* + * Show the folder details in a ModestDetailsDialog widget + */ +static void +show_folder_details (TnyFolder *folder, + GtkWindow *window) +{ + GtkWidget *dialog; + + /* Create dialog */ + dialog = modest_details_dialog_new_with_folder (window, folder); + + /* Run dialog */ + gtk_widget_show_all (dialog); gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); } + void -modest_ui_actions_on_message_details (GtkAction *action, - ModestWindow *win) +modest_ui_actions_on_details (GtkAction *action, + ModestWindow *win) { TnyList * headers_list; - GetMsgAsyncHelper *helper; - - headers_list = get_selected_headers (win); - if (!headers_list) - return; - - helper = g_slice_new0 (GetMsgAsyncHelper); - helper->window = win; - helper->func = modest_ui_actions_message_details_cb; - helper->iter = tny_list_create_iterator (headers_list); - helper->user_data = NULL; + TnyIterator *iter; + TnyHeader *header; if (MODEST_IS_MSG_VIEW_WINDOW (win)) { TnyMsg *msg; msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win)); - if (!msg) + if (!msg) { return; - else { - modest_ui_actions_message_details_cb (msg, helper); + } else { + headers_list = get_selected_headers (win); + if (!headers_list) + return; + + iter = tny_list_create_iterator (headers_list); + + header = TNY_HEADER (tny_iterator_get_current (iter)); + show_header_details (header, GTK_WINDOW (win)); + g_object_unref (header); + + g_object_unref (iter); + } + } else if (MODEST_IS_MAIN_WINDOW (win)) { + GtkWidget *folder_view, *header_view; + + /* Check which widget has the focus */ + folder_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), + MODEST_WIDGET_TYPE_FOLDER_VIEW); + if (gtk_widget_is_focus (folder_view)) { + TnyFolder *folder; + + folder = (TnyFolder *) modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); + + /* Show only when it's a folder */ + if (!folder || !TNY_IS_FOLDER (folder)) + return; + + show_folder_details (folder, GTK_WINDOW (win)); + + } else { + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW (win), + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!gtk_widget_is_focus (header_view)) + return; + + headers_list = get_selected_headers (win); + if (!headers_list) + return; + + iter = tny_list_create_iterator (headers_list); + while (!tny_iterator_is_done (iter)) { + + header = TNY_HEADER (tny_iterator_get_current (iter)); + show_header_details (header, GTK_WINDOW (win)); + g_object_unref (header); + + tny_iterator_next (iter); + } + g_object_unref (iter); } - } else { - /* here we should add an implementation to run the message details dialog - from the main window */ - g_return_if_reached (); } } @@ -1672,6 +1754,13 @@ modest_ui_actions_on_toggle_toolbar (GtkToggleAction *toggle, modest_window_mgr_show_toolbars (mgr, active, fullscreen); } +void +modest_ui_actions_msg_edit_on_select_font (GtkAction *action, + ModestMsgEditWindow *window) +{ + modest_msg_edit_window_select_font (window); +} + void modest_ui_actions_on_folder_display_name_changed (ModestFolderView *folder_view, const gchar *display_name, @@ -1681,10 +1770,17 @@ modest_ui_actions_on_folder_display_name_changed (ModestFolderView *folder_view, the focus. This callback could be called even if the folder view has not the focus, because the handled signal could be emitted when the folder view is redrawn */ - if (GTK_WIDGET_HAS_FOCUS (folder_view)) { + if (gtk_widget_is_focus (GTK_WIDGET (folder_view))) { if (display_name) gtk_window_set_title (window, display_name); else gtk_window_set_title (window, " "); } } + +void +modest_ui_actions_on_select_contacts (GtkAction *action, ModestMsgEditWindow *window) +{ + g_return_if_fail (MODEST_IS_MSG_EDIT_WINDOW (window)); + modest_msg_edit_window_select_contacts (window); +}