X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-ui-actions.c;h=665c510959b0197f97a9f48c68daa88851580b61;hp=f9793166a544adae3807caebf5157d27c168a451;hb=1e269a39bd6e1c33e72e98b72f59f810d8f64e8a;hpb=24c7fbfe1ce5156e490df32274b72fba1ad39a16 diff --git a/src/modest-ui-actions.c b/src/modest-ui-actions.c index f979316..665c510 100644 --- a/src/modest-ui-actions.c +++ b/src/modest-ui-actions.c @@ -41,14 +41,20 @@ #include "modest-ui-actions.h" #include "modest-tny-platform-factory.h" +#include "modest-platform.h" #include #include #include +#include #include "modest-account-mgr-helpers.h" #include "modest-mail-operation.h" + +#ifdef MODEST_HAVE_EASYSETUP #include "easysetup/modest-easysetup-wizard.h" +#endif /*MODEST_HAVE_EASYSETUP*/ + #include #include #include @@ -81,6 +87,8 @@ 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); @@ -178,6 +186,10 @@ modest_ui_actions_on_delete (GtkAction *action, ModestWindow *win) /* Free iter */ g_object_unref (G_OBJECT (iter)); } + + if (MODEST_IS_MSG_VIEW_WINDOW (win)) { + gtk_widget_destroy (GTK_WIDGET(win)); + } } @@ -186,7 +198,20 @@ modest_ui_actions_on_quit (GtkAction *action, ModestWindow *win) { /* FIXME: save size of main window */ /* save_sizes (main_window); */ - gtk_widget_destroy (GTK_WIDGET (win)); +/* gtk_widget_destroy (GTK_WIDGET (win)); */ + gtk_main_quit (); +} + +void +modest_ui_actions_on_close_window (GtkAction *action, ModestWindow *win) +{ + if (MODEST_IS_MSG_VIEW_WINDOW (win)) { + gtk_widget_destroy (GTK_WIDGET (win)); + } else if (MODEST_IS_WINDOW (win)) { + gtk_widget_destroy (GTK_WIDGET (win)); + } else { + g_return_if_reached (); + } } void @@ -205,13 +230,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 */ @@ -234,15 +279,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); -} - -void -modest_ui_actions_on_new_account (GtkAction *action, ModestWindow *win) -{ - ModestEasysetupWizardDialog *wizard = modest_easysetup_wizard_dialog_new (); - gtk_window_set_transient_for (GTK_WINDOW (wizard), win); - gtk_dialog_run (GTK_DIALOG (wizard)); - gtk_widget_destroy (wizard); +#endif /* MODEST_PLATFORM_MAEMO */ } void @@ -255,6 +292,7 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) gchar *from_str = NULL; GError *err = NULL; TnyAccount *account; + ModestWindowMgr *mgr; account_name = g_strdup(modest_window_get_active_account (win)); if (!account_name) @@ -290,7 +328,11 @@ modest_ui_actions_on_new_msg (GtkAction *action, ModestWindow *win) goto cleanup; } + /* Create and register edit window */ msg_win = modest_msg_edit_window_new (msg, account_name); + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, msg_win); + if (win) gtk_window_set_transient_for (GTK_WINDOW (msg_win), GTK_WINDOW (win)); @@ -328,6 +370,7 @@ reply_forward_func (gpointer data, gpointer user_data) GError *err = NULL; TnyFolder *folder = NULL; TnyAccount *account = NULL; + ModestWindowMgr *mgr; msg = TNY_MSG (data); helper = (GetMsgAsyncHelper *) user_data; @@ -385,9 +428,13 @@ reply_forward_func (gpointer data, gpointer user_data) g_error_free (err); goto cleanup; } - - /* Show edit window */ + + /* Create and register the windows */ msg_win = modest_msg_edit_window_new (new_msg, rf_helper->account_name); + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, msg_win); + + /* Show edit window */ gtk_widget_show_all (GTK_WIDGET (msg_win)); cleanup: @@ -494,32 +541,43 @@ modest_ui_actions_on_reply_all (GtkAction *action, ModestWindow *win) void modest_ui_actions_on_next (GtkAction *action, - ModestMainWindow *main_window) + ModestWindow *window) { - GtkWidget *header_view; - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + if (MODEST_IS_MAIN_WINDOW (window)) { + GtkWidget *header_view; - header_view = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_HEADER_VIEW); - if (!header_view) - return; + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window), + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!header_view) + return; - modest_header_view_select_next (MODEST_HEADER_VIEW(header_view)); + modest_header_view_select_next (MODEST_HEADER_VIEW(header_view)); + } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) { + modest_msg_view_window_select_next_message (MODEST_MSG_VIEW_WINDOW (window)); + } else { + g_return_if_reached (); + } } void modest_ui_actions_on_prev (GtkAction *action, - ModestMainWindow *main_window) + ModestWindow *window) { - GtkWidget *header_view; - g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); + g_return_if_fail (MODEST_IS_WINDOW(window)); - header_view = modest_main_window_get_child_widget (main_window, - MODEST_WIDGET_TYPE_HEADER_VIEW); - if (!header_view) - return; - - modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view)); + if (MODEST_IS_MAIN_WINDOW (window)) { + GtkWidget *header_view; + header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(window), + MODEST_WIDGET_TYPE_HEADER_VIEW); + if (!header_view) + return; + + modest_header_view_select_prev (MODEST_HEADER_VIEW(header_view)); + } else if (MODEST_IS_MSG_VIEW_WINDOW (window)) { + modest_msg_view_window_select_previous_message (MODEST_MSG_VIEW_WINDOW (window)); + } else { + g_return_if_reached (); + } } @@ -740,6 +798,10 @@ modest_ui_actions_on_header_activated (ModestHeaderView *folder_view, TnyHeader TnyFolder *folder = NULL; TnyMsg *msg = NULL; gchar *account = NULL; + GtkTreeModel *model = NULL; + GtkTreeSelection *sel = NULL; + GtkTreeIter iter; + ModestWindowMgr *mgr; g_return_if_fail (MODEST_IS_MAIN_WINDOW(main_window)); @@ -762,8 +824,17 @@ modest_ui_actions_on_header_activated (ModestHeaderView *folder_view, TnyHeader account = g_strdup(modest_window_get_active_account(MODEST_WINDOW(main_window))); if (!account) account = modest_account_mgr_get_default_account (modest_runtime_get_account_mgr()); - - win = modest_msg_view_window_new (msg, account); + + /* Create and register message view window */ + sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (folder_view)); + if (gtk_tree_selection_get_selected (sel, &model, &iter)) { + win = modest_msg_view_window_new_with_header_model (msg, account, model, iter); + } else { + win = modest_msg_view_window_new (msg, account); + } + mgr = modest_runtime_get_window_mgr (); + modest_window_mgr_register_window (mgr, win); + gtk_window_set_transient_for (GTK_WINDOW (win), GTK_WINDOW (main_window)); @@ -879,7 +950,7 @@ void modest_ui_actions_on_msg_link_hover (ModestMsgView *msgview, const gchar* link, ModestWindow *win) { - g_message (__FUNCTION__); + g_message ("%s %s", __FUNCTION__, link); } @@ -887,7 +958,14 @@ void modest_ui_actions_on_msg_link_clicked (ModestMsgView *msgview, const gchar* link, ModestWindow *win) { - g_message (__FUNCTION__); + modest_platform_activate_uri (link); +} + +void +modest_ui_actions_on_msg_link_contextual (ModestMsgView *msgview, const gchar* link, + ModestWindow *win) +{ + modest_platform_show_uri_popup (link); } void @@ -1392,3 +1470,82 @@ modest_ui_actions_on_select_all (GtkAction *action, gtk_text_buffer_select_range (buffer, &start, &end); } } + +void +modest_ui_actions_on_change_zoom (GtkRadioAction *action, + GtkRadioAction *selected, + ModestWindow *window) +{ + gint value; + + value = gtk_radio_action_get_current_value (selected); + if (MODEST_IS_WINDOW (window)) { + modest_window_set_zoom (MODEST_WINDOW (window), ((gdouble)value)/100); + } +} + +void +modest_ui_actions_on_toggle_fullscreen (GtkToggleAction *toggle, + ModestWindow *window) +{ + g_return_if_fail (MODEST_IS_WINDOW (window)); + + if (gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (toggle))) { + gtk_window_fullscreen (GTK_WINDOW (window)); + } else { + gtk_window_unfullscreen (GTK_WINDOW (window)); + } +} + +static void +modest_ui_actions_message_details_cb (gpointer msg_data, + gpointer helper_data) +{ + 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); + 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) +{ + 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; + + if (MODEST_IS_MSG_VIEW_WINDOW (win)) { + TnyMsg *msg; + + msg = modest_msg_view_window_get_message (MODEST_MSG_VIEW_WINDOW (win)); + if (!msg) + return; + else { + modest_ui_actions_message_details_cb (msg, helper); + } + } else { + /* here we should add an implementation to run the message details dialog + from the main window */ + g_return_if_reached (); + } +}