X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-platform.c;h=a59415dffe34c94d67056fe934df5e8817f2c1d7;hp=26fa4baa78585c200435327f21c2a1a4ac3e7e68;hb=837a00595080e7b3d8bf137b8afd468acf33ecd5;hpb=ec27da3222537c88f6458f52b5a1e2f19bf01fcd diff --git a/src/hildon2/modest-platform.c b/src/hildon2/modest-platform.c index 26fa4ba..a59415d 100644 --- a/src/hildon2/modest-platform.c +++ b/src/hildon2/modest-platform.c @@ -91,6 +91,8 @@ #define COMMON_FOLDER_DIALOG_ENTRY "entry" #define COMMON_FOLDER_DIALOG_ACCOUNT_PICKER "account-picker" +#define FOLDER_PICKER_CURRENT_FOLDER "current-folder" + static void _modest_platform_play_email_tone (void); @@ -630,16 +632,10 @@ on_response (GtkDialog *dialog, exists = FALSE; if (picker != NULL) { - const gchar *active_id; - active_id = modest_selector_picker_get_active_id (MODEST_SELECTOR_PICKER (picker)); - parent = TNY_FOLDER_STORE ( - modest_tny_account_store_get_server_account (modest_runtime_get_account_store (), - active_id, - TNY_ACCOUNT_TYPE_STORE)); - } else { - g_object_ref (parent); + parent = g_object_get_data (G_OBJECT (picker), FOLDER_PICKER_CURRENT_FOLDER); } + /* Look for another folder with the same name */ if (modest_tny_folder_has_subfolder_with_name (parent, new_name, @@ -668,7 +664,6 @@ on_response (GtkDialog *dialog, g_signal_stop_emission_by_name (dialog, "response"); } - g_object_unref (parent); } typedef struct _FolderChooserData { @@ -722,8 +717,6 @@ folder_chooser_dialog_run (ModestFolderView *original) return userdata.store; } -#define FOLDER_PICKER_CURRENT_FOLDER "current-folder" - static gchar * folder_store_get_display_name (TnyFolderStore *store) { @@ -760,6 +753,23 @@ folder_store_get_display_name (TnyFolderStore *store) } static void +folder_picker_set_store (GtkButton *button, TnyFolderStore *store) +{ + gchar *name; + + if (store == NULL) { + g_object_set_data (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER, NULL); + } else { + g_object_ref (store); + g_object_set_data_full (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER, + store, (GDestroyNotify) g_object_unref); + name = folder_store_get_display_name (store); + hildon_button_set_value (HILDON_BUTTON (button), name); + g_free (name); + } +} + +static void folder_picker_clicked (GtkButton *button, ModestFolderView *folder_view) { @@ -767,16 +777,12 @@ folder_picker_clicked (GtkButton *button, store = folder_chooser_dialog_run (folder_view); if (store) { - gchar *name; - g_object_set_data (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER, store); - name = folder_store_get_display_name (store); - hildon_button_set_value (HILDON_BUTTON (button), name); - g_free (name); + folder_picker_set_store (GTK_BUTTON (button), store); } } static GtkWidget * -folder_picker_new (ModestFolderView *folder_view) +folder_picker_new (ModestFolderView *folder_view, TnyFolderStore *suggested) { GtkWidget *button; GdkPixbuf *pixbuf; @@ -790,6 +796,10 @@ folder_picker_new (ModestFolderView *folder_view) gtk_image_new_from_pixbuf (pixbuf)); hildon_button_set_alignment (HILDON_BUTTON (button), 0.0, 0.5, 1.0, 1.0); + if (suggested) { + folder_picker_set_store (GTK_BUTTON (button), suggested); + } + g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (folder_picker_clicked), folder_view); return button; @@ -808,16 +818,20 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, TnyFolderStore **parent) { GtkWidget *accept_btn = NULL; - GtkWidget *dialog, *entry, *label_entry, *label_location, *hbox; - GtkWidget *account_picker; + GtkWidget *dialog, *entry = NULL, *label_entry = NULL, *label_location = NULL, *hbox; + GtkWidget *account_picker = NULL; GList *buttons = NULL; gint result; GtkSizeGroup *sizegroup; ModestFolderView *folder_view; + ModestWindow *folder_window; + ModestHildon2WindowMgr *window_mgr; - g_return_val_if_fail (MODEST_IS_FOLDER_WINDOW (parent_window), GTK_RESPONSE_NONE); + window_mgr = (ModestHildon2WindowMgr *) modest_runtime_get_window_mgr (); + folder_window = modest_hildon2_window_mgr_get_folder_window (window_mgr); + g_return_val_if_fail (MODEST_IS_FOLDER_WINDOW (folder_window), GTK_RESPONSE_NONE); - folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (parent_window)); + folder_view = modest_folder_window_get_folder_view (MODEST_FOLDER_WINDOW (folder_window)); /* Ask the user for the folder name */ dialog = gtk_dialog_new_with_buttons (dialog_title, @@ -858,7 +872,7 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, gtk_misc_set_alignment (GTK_MISC (label_location), 0.0, 0.5); gtk_size_group_add_widget (sizegroup, label_location); - account_picker = folder_picker_new (folder_view); + account_picker = folder_picker_new (folder_view, suggested_parent); } g_object_unref (sizegroup); @@ -912,13 +926,15 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window, modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), GTK_WINDOW (dialog), parent_window); gtk_widget_show_all (GTK_WIDGET(dialog)); - + result = gtk_dialog_run (GTK_DIALOG(dialog)); if (result == GTK_RESPONSE_ACCEPT) { if (show_name) *folder_name = g_strdup (gtk_entry_get_text (GTK_ENTRY (entry))); if (show_parent) { *parent = g_object_get_data (G_OBJECT (account_picker), FOLDER_PICKER_CURRENT_FOLDER); + if (*parent) + g_object_ref (*parent); } } @@ -973,6 +989,12 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window, real_suggested_name = suggested_name; } + /* In hildon 2.2 we always suggest the archive folder as parent */ + suggested_folder = TNY_FOLDER_STORE ( + modest_tny_account_get_special_folder + (modest_tny_account_store_get_local_folders_account (modest_runtime_get_account_store ()), + TNY_FOLDER_TYPE_ARCHIVE)); + tmp = g_strconcat (_("mcen_fi_new_folder_name"), ":", NULL); result = modest_platform_run_folder_common_dialog (parent_window, suggested_folder, @@ -1868,48 +1890,49 @@ modest_platform_run_certificate_confirmation_dialog (const gchar* server_name, g_signal_connect (G_OBJECT(note), "response", G_CALLBACK(on_cert_dialog_response), (gpointer) certificate); - + response = gtk_dialog_run(GTK_DIALOG(note)); on_destroy_dialog (note); g_free (question); - + return response == GTK_RESPONSE_OK; } gboolean -modest_platform_run_alert_dialog (const gchar* prompt, +modest_platform_run_alert_dialog (const gchar* prompt, gboolean is_question) -{ - ModestWindow *main_win; +{ + ModestWindow *top_win; + HildonWindowStack *stack; - if (!modest_window_mgr_main_window_exists (modest_runtime_get_window_mgr())) { - g_warning ("%s:\n'%s'\ndon't show dialogs if there's no main window;" - " assuming 'Cancel' for questions, 'Ok' otherwise", prompt, __FUNCTION__); - return is_question ? FALSE : TRUE; + stack = hildon_window_stack_get_default (); + top_win = MODEST_WINDOW (hildon_window_stack_peek (stack)); + + if (!top_win) { + g_warning ("%s: don't show dialogs if there's no window shown; assuming 'Cancel'", + __FUNCTION__); + return FALSE; } - main_win = modest_window_mgr_get_main_window (modest_runtime_get_window_mgr (), FALSE); - g_return_val_if_fail (main_win, FALSE); /* should not happen */ - gboolean retval = TRUE; if (is_question) { - /* The Tinymail documentation says that we should show Yes and No buttons, + /* The Tinymail documentation says that we should show Yes and No buttons, * when it is a question. * Obviously, we need tinymail to use more specific error codes instead, * so we know what buttons to show. */ - GtkWidget *dialog = GTK_WIDGET (hildon_note_new_confirmation (GTK_WINDOW (main_win), + GtkWidget *dialog = GTK_WIDGET (hildon_note_new_confirmation (GTK_WINDOW (top_win), prompt)); modest_window_mgr_set_modal (modest_runtime_get_window_mgr (), - GTK_WINDOW (dialog), GTK_WINDOW (main_win)); - + GTK_WINDOW (dialog), GTK_WINDOW (top_win)); + const int response = gtk_dialog_run (GTK_DIALOG (dialog)); retval = (response == GTK_RESPONSE_YES) || (response == GTK_RESPONSE_OK); - - on_destroy_dialog (dialog); + + on_destroy_dialog (dialog); } else { /* Just show the error text and use the default response: */ - modest_platform_run_information_dialog (GTK_WINDOW (main_win), + modest_platform_run_information_dialog (GTK_WINDOW (top_win), prompt, FALSE); } return retval;