Set archive folder as default parent for new folder in hildon 2.2
authorJose Dapena Paz <jdapena@igalia.com>
Mon, 22 Dec 2008 11:34:18 +0000 (11:34 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Mon, 22 Dec 2008 11:34:18 +0000 (11:34 +0000)
pmo-trunk-r6977

src/hildon2/modest-platform.c
src/widgets/modest-folder-view.c

index 26fa4ba..87eab67 100644 (file)
@@ -91,6 +91,8 @@
 
 #define COMMON_FOLDER_DIALOG_ENTRY "entry"
 #define COMMON_FOLDER_DIALOG_ACCOUNT_PICKER "account-picker"
 
 #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);
 
 
 static void _modest_platform_play_email_tone (void);
 
@@ -630,16 +632,10 @@ on_response (GtkDialog *dialog,
        exists = FALSE;
        
        if (picker != NULL) {
        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,
        /* 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_signal_stop_emission_by_name (dialog, "response");
        }
 
-       g_object_unref (parent);
 }
 
 typedef struct _FolderChooserData {
 }
 
 typedef struct _FolderChooserData {
@@ -722,8 +717,6 @@ folder_chooser_dialog_run (ModestFolderView *original)
        return userdata.store;
 }
 
        return userdata.store;
 }
 
-#define FOLDER_PICKER_CURRENT_FOLDER "current-folder"
-
 static gchar *
 folder_store_get_display_name (TnyFolderStore *store)
 {
 static gchar *
 folder_store_get_display_name (TnyFolderStore *store)
 {
@@ -760,6 +753,23 @@ folder_store_get_display_name (TnyFolderStore *store)
 }
 
 static void
 }
 
 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)
 {
 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) {
 
        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 *
        }
 }
 
 static GtkWidget *
-folder_picker_new (ModestFolderView *folder_view)
+folder_picker_new (ModestFolderView *folder_view, TnyFolderStore *suggested)
 {
        GtkWidget *button;
        GdkPixbuf *pixbuf;
 {
        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);
 
                                 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;
        g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (folder_picker_clicked), folder_view);
 
        return button;
@@ -858,7 +868,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);
 
                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);
        }
 
        g_object_unref (sizegroup);
@@ -919,6 +929,8 @@ modest_platform_run_folder_common_dialog (GtkWindow *parent_window,
                        *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);
                        *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 +985,12 @@ modest_platform_run_new_folder_dialog (GtkWindow *parent_window,
                real_suggested_name = suggested_name;
        }
 
                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,
        tmp = g_strconcat (_("mcen_fi_new_folder_name"), ":", NULL);
        result = modest_platform_run_folder_common_dialog (parent_window, 
                                                           suggested_folder,
index 12514f6..14abcb5 100644 (file)
@@ -3325,9 +3325,7 @@ modest_folder_view_set_filter (ModestFolderView *self,
        priv->filter = filter;
 
        filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
        priv->filter = filter;
 
        filter_model = gtk_tree_view_get_model (GTK_TREE_VIEW (self));
-       if (!GTK_IS_TREE_MODEL_FILTER(filter_model)) {
-               g_warning ("BUG: %s: not a valid filter model", __FUNCTION__);
-               return;
+       if (GTK_IS_TREE_MODEL_FILTER(filter_model)) {
+               gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));  
        }
        }
-       gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (filter_model));  
 }
 }