Check current selection in new folder dialog picker for filling the chooser
authorJose Dapena Paz <jdapena@igalia.com>
Fri, 29 May 2009 09:06:22 +0000 (11:06 +0200)
committerJose Dapena Paz <jdapena@igalia.com>
Fri, 29 May 2009 09:11:15 +0000 (11:11 +0200)
* src/hildon2/modest-platform.c (folder_picker_clicked,
  folder_chooser_dialog_run): now we pass the current selected store to the
  folder chooser dialog, to show the proper account folders. Fixes NB#117246).

src/hildon2/modest-platform.c

index 7882d20..c301dfd 100644 (file)
@@ -692,12 +692,12 @@ folder_chooser_activated (ModestFolderView *folder_view,
 }
 
 static TnyFolderStore *
-folder_chooser_dialog_run (ModestFolderView *original)
+folder_chooser_dialog_run (ModestFolderView *original, TnyFolderStore *current)
 {
        GtkWidget *folder_view;
        FolderChooserData userdata = {NULL, NULL};
        GtkWidget *pannable;
-       const gchar *visible_id = NULL;
+       gchar *visible_id = NULL;
 
        userdata.dialog = hildon_dialog_new ();
        pannable = hildon_pannable_area_new ();
@@ -708,10 +708,27 @@ folder_chooser_dialog_run (ModestFolderView *original)
        modest_folder_view_copy_model (MODEST_FOLDER_VIEW (original), 
                                       MODEST_FOLDER_VIEW (folder_view));
 
-       visible_id = 
-               modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(original));
+       if (TNY_IS_FOLDER_STORE (current)) {
+               if (TNY_IS_ACCOUNT (current)) {
+                       visible_id = g_strdup (tny_account_get_id (TNY_ACCOUNT (current)));
+               } else if (TNY_IS_FOLDER (current)) {
+                       TnyAccount *account;
+
+                       account = tny_folder_get_account (TNY_FOLDER (current));
+                       if (account) {
+                               visible_id = g_strdup (tny_account_get_id (TNY_ACCOUNT (current)));
+                       }
+               }
+       }
+
+       if (visible_id == NULL) {
+               visible_id = g_strdup (
+                       modest_folder_view_get_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(original)));
+       }
+
        modest_folder_view_set_account_id_of_visible_server_account (MODEST_FOLDER_VIEW(folder_view),
                                                                     visible_id);
+       g_free (visible_id);
 
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG (userdata.dialog)->vbox), pannable);
        gtk_container_add (GTK_CONTAINER (pannable), folder_view);
@@ -896,9 +913,11 @@ static void
 folder_picker_clicked (GtkButton *button,
                       FolderPickerHelper *helper)
 {
-       TnyFolderStore *store;
+       TnyFolderStore *store, *current;
+
+       current = g_object_get_data (G_OBJECT (button), FOLDER_PICKER_CURRENT_FOLDER);
 
-       store = folder_chooser_dialog_run (helper->folder_view);
+       store = folder_chooser_dialog_run (helper->folder_view, current);
        if (store) {
                const gchar *current_name;
                gboolean exists = FALSE;