X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-platform.c;h=b9bf2117f98e8fa2ed8b429d9cb9ecedfa2db49e;hb=e0b68c3da77c07ea249cae31206f43dd094a5a2a;hp=e7e3f6770a655a26b342f1b745c8cf6ff231cb1b;hpb=634b6564edf0d2eab5a1d5c84550edde9155be8e;p=modest diff --git a/src/hildon2/modest-platform.c b/src/hildon2/modest-platform.c index e7e3f67..b9bf211 100644 --- a/src/hildon2/modest-platform.c +++ b/src/hildon2/modest-platform.c @@ -2274,7 +2274,7 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window, account = TNY_ACCOUNT (g_object_ref (folder_store)); } - if (tny_account_get_account_type (account) == TNY_ACCOUNT_TYPE_STORE) { + if (account && (tny_account_get_account_type (account) == TNY_ACCOUNT_TYPE_STORE)) { if (!modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account))) { /* No need to connect a local account */ if (callback) @@ -2496,6 +2496,7 @@ _modest_platform_play_email_tone (void) #define MOVE_TO_DIALOG_FOLDER_VIEW "folder-view" #define MOVE_TO_DIALOG_BACK_BUTTON "back-button" +#define MOVE_TO_DIALOG_ACTION_BUTTON "action-button" #define MOVE_TO_DIALOG_SELECTION_LABEL "selection-label" #define MOVE_TO_DIALOG_SHOWING_FOLDERS "showing-folders" #define MOVE_TO_DIALOG_PANNABLE "pannable" @@ -2507,13 +2508,16 @@ move_to_dialog_show_accounts (GtkWidget *dialog) GtkWidget *back_button; GtkWidget *folder_view; GtkWidget *pannable; + GtkWidget *action_button; selection_label = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SELECTION_LABEL)); back_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_BACK_BUTTON)); + action_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON)); folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); pannable = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_PANNABLE)); gtk_widget_set_sensitive (back_button, FALSE); + gtk_widget_set_sensitive (action_button, FALSE); gtk_label_set_text (GTK_LABEL (selection_label), ""); modest_folder_view_show_non_move_folders (MODEST_FOLDER_VIEW (folder_view), TRUE); @@ -2521,6 +2525,10 @@ move_to_dialog_show_accounts (GtkWidget *dialog) modest_folder_view_set_filter (MODEST_FOLDER_VIEW (folder_view), MODEST_FOLDER_VIEW_FILTER_HIDE_FOLDERS); hildon_pannable_area_jump_to (HILDON_PANNABLE_AREA (pannable), 0, 0); + g_object_set (G_OBJECT (folder_view), + "hildon-ui-mode", HILDON_UI_MODE_NORMAL, + NULL); + g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SHOWING_FOLDERS, GINT_TO_POINTER (FALSE)); } @@ -2534,13 +2542,20 @@ move_to_dialog_show_folders (GtkWidget *dialog, TnyFolderStore *folder_store) const gchar *account_id; gchar *selection_label_text; GtkWidget *pannable; + GtkWidget *action_button; selection_label = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SELECTION_LABEL)); back_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_BACK_BUTTON)); + action_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON)); folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); pannable = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_PANNABLE)); gtk_widget_set_sensitive (back_button, TRUE); + gtk_widget_set_sensitive (action_button, FALSE); + + g_object_set (G_OBJECT (folder_view), + "hildon-ui-mode", HILDON_UI_MODE_EDIT, + NULL); account = TNY_ACCOUNT (folder_store); if (modest_tny_account_is_virtual_local_folders (account)) { @@ -2585,6 +2600,31 @@ move_to_dialog_show_folders (GtkWidget *dialog, TnyFolderStore *folder_store) } static void +move_to_dialog_set_selected_folder (GtkWidget *dialog, TnyFolderStore *folder_store) +{ + GtkWidget *selection_label; + GtkWidget *action_button; + gchar *folder_name; + + selection_label = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SELECTION_LABEL)); + action_button = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON)); + + gtk_widget_set_sensitive (action_button, TRUE); + + if (TNY_IS_FOLDER (folder_store)) { + folder_name = modest_tny_folder_get_display_name (TNY_FOLDER (folder_store)); + } else if (TNY_IS_ACCOUNT (folder_store)) { + folder_name = g_strdup (tny_account_get_name (TNY_ACCOUNT (folder_store))); + } else { + folder_name = g_strdup (""); + } + + gtk_label_set_text (GTK_LABEL (selection_label), folder_name); + g_free (folder_name); + +} + +static void on_move_to_dialog_back_clicked (GtkButton *button, gpointer userdata) { @@ -2615,9 +2655,7 @@ on_move_to_dialog_folder_activated (GtkTreeView *tree_view, dialog = (GtkWidget *) user_data; showing_folders = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SHOWING_FOLDERS)); - if (showing_folders) { - gtk_dialog_response (GTK_DIALOG (user_data), GTK_RESPONSE_OK); - } else { + if (!showing_folders) { folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); selected = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); @@ -2627,6 +2665,46 @@ on_move_to_dialog_folder_activated (GtkTreeView *tree_view, } } +static void +on_move_to_dialog_selection_changed (GtkTreeSelection *selection, + gpointer user_data) +{ + TnyFolderStore *selected; + GtkWidget *dialog; + GtkWidget *folder_view; + gboolean showing_folders; + + dialog = (GtkWidget *) user_data; + showing_folders = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SHOWING_FOLDERS)); + if (showing_folders) { + folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); + selected = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); + + if (selected) + move_to_dialog_set_selected_folder (dialog, selected); + } +} + +static void +on_move_to_dialog_action_clicked (GtkButton *selection, + gpointer user_data) +{ + TnyFolderStore *selected; + GtkWidget *dialog; + GtkWidget *folder_view; + gboolean showing_folders; + + dialog = (GtkWidget *) user_data; + showing_folders = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SHOWING_FOLDERS)); + if (showing_folders) { + folder_view = GTK_WIDGET (g_object_get_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW)); + selected = modest_folder_view_get_selected (MODEST_FOLDER_VIEW (folder_view)); + + if (selected) + gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); + } +} + GtkWidget * modest_platform_create_move_to_dialog (GtkWindow *parent_window, GtkWidget **folder_view) @@ -2637,6 +2715,8 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, GtkWidget *back_button, *selection_label; GdkPixbuf *back_pixbuf; GtkWidget *top_vbox; + GtkWidget *action_button; + GtkTreeSelection *selection; /* Create dialog. We cannot use a touch selector because we need to use here the folder view widget directly */ @@ -2654,6 +2734,10 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, /* Create folder view */ *folder_view = modest_platform_create_folder_view (NULL); + modest_folder_view_set_cell_style (MODEST_FOLDER_VIEW (*folder_view), + MODEST_FOLDER_VIEW_CELL_STYLE_COMPACT); + modest_folder_view_show_message_count (MODEST_FOLDER_VIEW (*folder_view), + FALSE); tny_account_store_view_set_account_store (TNY_ACCOUNT_STORE_VIEW (*folder_view), (TnyAccountStore *) modest_runtime_get_account_store ()); @@ -2666,9 +2750,14 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, } selection_label = gtk_label_new (""); gtk_misc_set_alignment (GTK_MISC (selection_label), 0.0, 0.5); + + action_button = gtk_button_new (); + gtk_container_add (GTK_CONTAINER (action_button), selection_label); + gtk_box_pack_start (GTK_BOX (buttons_hbox), back_button, FALSE, FALSE, 0); - gtk_box_pack_start (GTK_BOX (buttons_hbox), selection_label, TRUE, TRUE, 0); + gtk_box_pack_start (GTK_BOX (buttons_hbox), action_button, TRUE, TRUE, 0); gtk_widget_set_sensitive (GTK_WIDGET (back_button), FALSE); + gtk_widget_set_sensitive (GTK_WIDGET (action_button), FALSE); gtk_box_pack_start (GTK_BOX (top_vbox), buttons_hbox, FALSE, FALSE, 0); /* Create pannable and add it to the dialog */ @@ -2688,10 +2777,12 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, gtk_widget_show (*folder_view); gtk_widget_show_all (back_button); gtk_widget_show (selection_label); + gtk_widget_show (action_button); gtk_widget_show (buttons_hbox); g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_FOLDER_VIEW, *folder_view); g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_BACK_BUTTON, back_button); + g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_ACTION_BUTTON, action_button); g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_SELECTION_LABEL, selection_label); g_object_set_data (G_OBJECT (dialog), MOVE_TO_DIALOG_PANNABLE, folder_view_container); @@ -2701,6 +2792,15 @@ modest_platform_create_move_to_dialog (GtkWindow *parent_window, G_CALLBACK (on_move_to_dialog_folder_activated), dialog); + selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (*folder_view)); + g_signal_connect (selection, "changed", + G_CALLBACK (on_move_to_dialog_selection_changed), + dialog); + + g_signal_connect (action_button, "clicked", + G_CALLBACK (on_move_to_dialog_action_clicked), + dialog); + g_signal_connect (back_button, "clicked", G_CALLBACK (on_move_to_dialog_back_clicked), dialog);