* Added support in the interface to remove accounts
authorSergio Villar Senin <svillar@igalia.com>
Fri, 15 Dec 2006 18:40:51 +0000 (18:40 +0000)
committerSergio Villar Senin <svillar@igalia.com>
Fri, 15 Dec 2006 18:40:51 +0000 (18:40 +0000)
* Fixed the bug in the account assintant when trying to create new accounts
* Added a forced synchronization in ModestConf when deleting keys
* Added the parent window to some dialogs

pmo-trunk-r562

src/gtk/modest-account-assistant.c
src/gtk/modest-account-view-window.c
src/modest-conf.c
src/modest-widget-factory.c
src/widgets/modest-account-view.c

index 0f26e72..3ea6a80 100644 (file)
@@ -402,8 +402,6 @@ add_final_page (ModestAccountAssistant *self)
                                         page, TRUE);
        gtk_widget_show_all (page);
 }
-       
-
 
 
 static void
@@ -471,7 +469,7 @@ on_cancel (ModestAccountAssistant *self, gpointer user_data)
        switch (response) {
        case GTK_RESPONSE_ACCEPT:
                /* close the assistant */
-               gtk_widget_destroy (GTK_WIDGET(self));
+               gtk_widget_hide (GTK_WIDGET(self));
                break;
        case GTK_RESPONSE_CANCEL:
                /* don't do anything */
@@ -511,6 +509,11 @@ get_email (ModestAccountAssistant *self)
 }
 
 
+static void
+on_close (ModestAccountAssistant *self, gpointer user_data)
+{
+       gtk_widget_hide (GTK_WIDGET (self));
+}
 
 static void
 on_apply (ModestAccountAssistant *self, gpointer user_data)
@@ -554,9 +557,6 @@ on_apply (ModestAccountAssistant *self, gpointer user_data)
                                       get_email(self), FALSE, NULL);
        
        g_free (store_name);
-
-       /* Close the assistant */
-       gtk_widget_destroy (GTK_WIDGET(self));
 }
 
 
@@ -600,6 +600,8 @@ modest_account_assistant_new (ModestAccountMgr *account_mgr, ModestWidgetFactory
                          G_CALLBACK(on_apply), NULL);
        g_signal_connect (G_OBJECT(self), "cancel",
                          G_CALLBACK(on_cancel), NULL);
+       g_signal_connect (G_OBJECT(self), "close",
+                         G_CALLBACK(on_close), NULL);
 
        return GTK_WIDGET(self);
 }
index a8cb91f..d66187f 100644 (file)
@@ -48,7 +48,9 @@ enum {
 typedef struct _ModestAccountViewWindowPrivate ModestAccountViewWindowPrivate;
 struct _ModestAccountViewWindowPrivate {
        ModestWidgetFactory *widget_factory;
-       GtkWidget           *edit_button, *remove_button;
+       GtkWidget           *edit_button;
+       GtkWidget           *remove_button;
+       ModestAccountView   *account_view;
 };
 #define MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                         MODEST_TYPE_ACCOUNT_VIEW_WINDOW, \
@@ -145,39 +147,56 @@ on_selection_changed (GtkTreeSelection *sel, ModestAccountViewWindow *self)
        gtk_widget_set_sensitive (priv->remove_button, has_selection);  
 }
 
-
-
 static void
 on_remove_button_clicked (GtkWidget *button, ModestAccountViewWindow *self)
 {
        TnyPlatformFactory *fact;
        ModestAccountViewWindowPrivate *priv;
        ModestAccountMgr *account_mgr;
-       ModestAccountView *account_view;
-       gchar *account_name;
+       const gchar *account_name;
        
        priv = MODEST_ACCOUNT_VIEW_WINDOW_GET_PRIVATE(self);
        fact = modest_tny_platform_factory_get_instance ();
        account_mgr = modest_tny_platform_factory_get_modest_account_mgr_instance (fact);
 
-       account_view = modest_widget_factory_get_account_view (priv->widget_factory);
-       account_name = modest_account_view_get_selected_account (account_view);
+       account_name = modest_account_view_get_selected_account (priv->account_view);
 
        if (account_name) {
                gboolean removed;
                GError *err = NULL;
-
-               removed = modest_account_mgr_remove_account (account_mgr,
-                                                            account_name,
-                                                            FALSE,
-                                                            &err);
-               if (removed) {
-                       /* Show confirmation dialog */
-                       /* Remove from model & reload it */
-               } else {
-                       if (err)
-                               g_error_free (err);
+               GtkWidget *dialog;
+               gchar *txt;
+
+               dialog = gtk_dialog_new_with_buttons (_("Confirmation dialog"),
+                                                     GTK_WINDOW (self),
+                                                     GTK_DIALOG_MODAL,
+                                                     GTK_STOCK_CANCEL,
+                                                     GTK_RESPONSE_REJECT,
+                                                     GTK_STOCK_OK,
+                                                     GTK_RESPONSE_ACCEPT,
+                                                     NULL);
+               txt = g_strdup_printf (_("Do you really want to delete the account %s?"), account_name);
+               gtk_box_pack_start (GTK_BOX(GTK_DIALOG(dialog)->vbox), 
+                                   gtk_label_new (txt), FALSE, FALSE, 0);
+               gtk_widget_show_all (GTK_WIDGET(GTK_DIALOG(dialog)->vbox));
+               g_free (txt);
+
+               if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) {
+                       /* Remove account. If succeeded it removes also 
+                          the account from the ModestAccountView */
+                       removed = modest_account_mgr_remove_account (account_mgr,
+                                                                    account_name,
+                                                                    FALSE,
+                                                                    &err);
+                       if (removed) {
+                               /* Show confirmation dialog ??? */
+                       } else {
+                               /* Show error dialog ??? */
+                               if (err)
+                                       g_error_free (err);
+                       }
                }
+               gtk_widget_destroy (dialog);
        }
 }
 
@@ -274,6 +293,7 @@ window_vbox_new (ModestAccountViewWindow *self)
        main_hbox     = gtk_hbox_new (FALSE, 6);
        
        account_view = modest_widget_factory_get_account_view (priv->widget_factory);
+       priv->account_view = account_view;
        gtk_widget_set_size_request (GTK_WIDGET(account_view), 300, 400);
 
        sel = gtk_tree_view_get_selection (GTK_TREE_VIEW(account_view));
index 2a4d986..c6535e7 100644 (file)
@@ -352,13 +352,17 @@ gboolean
 modest_conf_remove_key (ModestConf* self, const gchar* key, GError **err)
 {
        ModestConfPrivate *priv;
+       gboolean retval;
        
        g_return_val_if_fail (self,FALSE);
        g_return_val_if_fail (key, FALSE);
        
        priv = MODEST_CONF_GET_PRIVATE(self);
                        
-       return gconf_client_recursive_unset (priv->gconf_client,key,0,err);
+       retval = gconf_client_recursive_unset (priv->gconf_client,key,0,err);
+       gconf_client_suggest_sync (priv->gconf_client, NULL);
+
+       return retval;
 }
 
 
index b51b749..92ed3ec 100644 (file)
@@ -719,7 +719,7 @@ on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
                   ModestWidgetFactory *self)
 {
        /* FIXME ==> ask from UI... */
-       GtkWidget *dialog;
+       GtkWidget *dialog, *window;
        gchar *txt;
        gboolean online;
        gchar *item = type == MODEST_ITEM_TYPE_FOLDER ? "folder" : "message";
@@ -732,9 +732,11 @@ on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
        
        gdk_threads_enter ();
        online = tny_device_is_online (device);
+       /* FIXME: get main window */
+       window = NULL;
        if (online) {
                /* already online -- the item is simply not there... */
-               dialog = gtk_message_dialog_new (NULL,
+               dialog = gtk_message_dialog_new (window,
                                                 GTK_DIALOG_MODAL,
                                                 GTK_MESSAGE_WARNING,
                                                 GTK_BUTTONS_OK,
@@ -744,7 +746,7 @@ on_item_not_found (ModestHeaderView* header_view, ModestItemType type,
        } else {
 
                dialog = gtk_dialog_new_with_buttons (_("Connection requested"),
-                                                     NULL,
+                                                     window,
                                                      GTK_DIALOG_MODAL,
                                                      GTK_STOCK_CANCEL,
                                                      GTK_RESPONSE_REJECT,
@@ -775,10 +777,12 @@ on_password_requested (ModestTnyAccountStore *account_store, const gchar* accoun
                       gchar **password, gboolean *cancel, gboolean *remember, ModestWidgetFactory *self)
 {
        gchar *txt;
-       GtkWidget *dialog, *entry, *remember_pass_check;
+       GtkWidget *dialog, *entry, *remember_pass_check, *window;
        
+       /* FIXME: get main window */
+       window = NULL;
        dialog = gtk_dialog_new_with_buttons (_("Password requested"),
-                                             NULL,
+                                             window,
                                              GTK_DIALOG_MODAL,
                                              GTK_STOCK_CANCEL,
                                              GTK_RESPONSE_REJECT,
index e236c69..a9e3bb2 100644 (file)
@@ -239,12 +239,10 @@ on_account_enable_toggled (GtkCellRendererToggle *cell_renderer, gchar *path,
        g_free (account_name);
 }
 
-
 static void
 init_view (ModestAccountView *self)
 {
        ModestAccountViewPrivate *priv;
-       GtkTreeSelection *sel;
        GtkCellRenderer *renderer;
        GtkListStore *model;
        
@@ -279,8 +277,6 @@ init_view (ModestAccountView *self)
                                             gtk_cell_renderer_text_new (),
                                             "text", PROTO_COLUMN, NULL));
 
-       sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(self));
-       
        priv->sig1 = g_signal_connect (G_OBJECT(priv->account_mgr),
                                       "account_removed",
                                       G_CALLBACK(on_account_removed), self);