* Fixes NB#92030
authorJose Dapena Paz <jdapena@igalia.com>
Thu, 4 Dec 2008 21:17:00 +0000 (21:17 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Thu, 4 Dec 2008 21:17:00 +0000 (21:17 +0000)
pmo-drop-split-view-r6641

src/gnome/modest-gnome-global-settings-dialog.c
src/hildon2/Makefile.am
src/hildon2/modest-hildon2-global-settings-dialog.c [new file with mode: 0644]
src/hildon2/modest-hildon2-global-settings-dialog.h [new file with mode: 0644]
src/hildon2/modest-maemo-global-settings-dialog.c [deleted file]
src/hildon2/modest-maemo-global-settings-dialog.h [deleted file]
src/hildon2/modest-platform.c
src/maemo/modest-maemo-global-settings-dialog.c
src/widgets/modest-account-settings-dialog.c
src/widgets/modest-global-settings-dialog.c
src/widgets/modest-global-settings-dialog.h

index e855bcb..d6e2a31 100644 (file)
@@ -140,9 +140,6 @@ modest_gnome_global_settings_dialog_init (ModestGnomeGlobalSettingsDialog *self)
 
        gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (self)->action_area), 0);
 
-       /* Load current config */
-       _modest_global_settings_dialog_load_conf (MODEST_GLOBAL_SETTINGS_DIALOG (self));
-
        /* Add the buttons: */
        gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
        gtk_dialog_add_button (GTK_DIALOG (self), GTK_STOCK_SAVE, GTK_RESPONSE_OK);
@@ -160,7 +157,12 @@ modest_gnome_global_settings_dialog_finalize (GObject *obj)
 GtkWidget*
 modest_gnome_global_settings_dialog_new (void)
 {
-       return GTK_WIDGET(g_object_new(MODEST_TYPE_GNOME_GLOBAL_SETTINGS_DIALOG, NULL));
+       GtkWidget *self = GTK_WIDGET(g_object_new(MODEST_TYPE_GNOME_GLOBAL_SETTINGS_DIALOG, NULL));
+
+       /* Load settings */
+       modest_gnome_global_settings_dialog_load_settings (MODEST_GLOBAL_SETTINGS_DIALOG (self));
+
+       return self;
 }
 
 
@@ -320,3 +322,82 @@ current_connection (void)
 {
        return MODEST_CONNECTED_VIA_ANY;
 }
+
+static void
+modest_gnome_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self)
+{
+       ModestConf *conf;
+       gboolean checked;
+       gint combo_id, value;
+       GError *error = NULL;
+       ModestGlobalSettingsDialogPrivate *priv;
+
+       priv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+       conf = modest_runtime_get_conf ();
+
+       /* Autoupdate */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_AUTO_UPDATE, &error);
+       if (error) {
+               g_clear_error (&error);
+               error = NULL;
+               checked = FALSE;
+       }
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->auto_update), checked);
+       priv->initial_state.auto_update = checked;
+
+       /* Connected by */
+       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_CONNECTED_VIA_WLAN_OR_WIMAX;
+       }
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->connect_via),
+                                       (gpointer) &combo_id);
+       priv->initial_state.connect_via = combo_id;
+
+       /* Update interval */
+       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_INTERVAL, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_UPDATE_INTERVAL_15_MIN;
+       }
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->update_interval),
+                                       (gpointer) &combo_id);
+       priv->initial_state.update_interval = combo_id;
+
+       /* Size limit */
+       value  = modest_conf_get_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               value = 1000;
+       }
+       /* It's better to do this in the subclasses, but it's just one
+          line, so we'll leave it here for the moment */
+       gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->size_limit), value);
+       priv->initial_state.size_limit = value;
+
+       /* Play sound */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               checked = FALSE;
+       }
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->play_sound), checked);
+       priv->initial_state.play_sound = checked;
+
+       /* Msg format */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_FILE_FORMAT_FORMATTED_TEXT;
+       }
+       combo_id = (checked) ? MODEST_FILE_FORMAT_FORMATTED_TEXT : MODEST_FILE_FORMAT_PLAIN_TEXT;
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->msg_format),
+                                       (gpointer) &combo_id);
+       priv->initial_state.prefer_formatted_text = checked;
+}
index e9d56cd..414b538 100644 (file)
@@ -64,8 +64,8 @@ libmodest_ui_la_SOURCES=              \
        modest-header-window.c \
        modest-header-window.h \
        modest-icon-names.h           \
-       modest-maemo-global-settings-dialog.c \
-       modest-maemo-global-settings-dialog.h \
+       modest-hildon2-global-settings-dialog.c \
+       modest-hildon2-global-settings-dialog.h \
        modest-maemo-security-options-view.c \
        modest-main-window.c          \
        modest-main-window-ui.h       \
diff --git a/src/hildon2/modest-hildon2-global-settings-dialog.c b/src/hildon2/modest-hildon2-global-settings-dialog.c
new file mode 100644 (file)
index 0000000..5f8afc6
--- /dev/null
@@ -0,0 +1,530 @@
+/* Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif /*HAVE_CONFIG_H*/
+
+#include <modest-hildon-includes.h>
+#include <modest-maemo-utils.h>
+
+#include <glib/gi18n.h>
+#include <string.h>
+#include <gtk/gtkbox.h>
+#include <gtk/gtkvbox.h>
+#include <gtk/gtknotebook.h>
+#include <gtk/gtklabel.h>
+#include <gtk/gtkcheckbutton.h>
+#include "modest-runtime.h"
+#include "widgets/modest-global-settings-dialog-priv.h"
+#include "modest-selector-picker.h"
+#include "hildon/hildon-pannable-area.h"
+#include "modest-hildon2-global-settings-dialog.h"
+#include "widgets/modest-ui-constants.h"
+#include "modest-text-utils.h"
+#include "modest-defs.h"
+#include <tny-account-store.h>
+#include <modest-account-mgr-helpers.h>
+
+
+#define MSG_SIZE_MAX_VAL 5000
+#define MSG_SIZE_DEF_VAL 1000
+#define MSG_SIZE_MIN_VAL 1
+
+#define DEFAULT_FOCUS_WIDGET "default-focus-widget"
+
+/* 'private'/'protected' functions */
+static void modest_hildon2_global_settings_dialog_class_init (ModestHildon2GlobalSettingsDialogClass *klass);
+static void modest_hildon2_global_settings_dialog_init       (ModestHildon2GlobalSettingsDialog *obj);
+static void modest_hildon2_global_settings_dialog_finalize   (GObject *obj);
+
+static ModestConnectedVia current_connection (void);
+
+static GtkWidget* create_updating_page   (ModestHildon2GlobalSettingsDialog *self);
+
+static gboolean   on_range_error         (HildonNumberEditor *editor, 
+                                         HildonNumberEditorErrorType type,
+                                         gpointer user_data);
+
+static void       on_size_notify         (HildonNumberEditor *editor, 
+                                         GParamSpec *arg1,
+                                         gpointer user_data);
+
+static void       on_auto_update_clicked (GtkButton *button,
+                                         gpointer user_data);
+static void       update_sensitive       (ModestGlobalSettingsDialog *dialog);
+static ModestPairList * get_accounts_list (void);
+
+static void modest_hildon2_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self);
+
+typedef struct _ModestHildon2GlobalSettingsDialogPrivate ModestHildon2GlobalSettingsDialogPrivate;
+struct _ModestHildon2GlobalSettingsDialogPrivate {
+       ModestPairList *connect_via_list;
+};
+#define MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
+                                                           MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG, \
+                                                           ModestHildon2GlobalSettingsDialogPrivate))
+/* globals */
+static GtkDialogClass *parent_class = NULL;
+
+GType
+modest_hildon2_global_settings_dialog_get_type (void)
+{
+       static GType my_type = 0;
+       if (!my_type) {
+               static const GTypeInfo my_info = {
+                       sizeof(ModestHildon2GlobalSettingsDialogClass),
+                       NULL,           /* base init */
+                       NULL,           /* base finalize */
+                       (GClassInitFunc) modest_hildon2_global_settings_dialog_class_init,
+                       NULL,           /* class finalize */
+                       NULL,           /* class data */
+                       sizeof(ModestHildon2GlobalSettingsDialog),
+                       1,              /* n_preallocs */
+                       (GInstanceInitFunc) modest_hildon2_global_settings_dialog_init,
+                       NULL
+               };
+               my_type = g_type_register_static (MODEST_TYPE_GLOBAL_SETTINGS_DIALOG,
+                                                 "ModestHildon2GlobalSettingsDialog",
+                                                 &my_info, 0);
+       }
+       return my_type;
+}
+
+static void
+modest_hildon2_global_settings_dialog_class_init (ModestHildon2GlobalSettingsDialogClass *klass)
+{
+       GObjectClass *gobject_class;
+       gobject_class = (GObjectClass*) klass;
+
+       parent_class            = g_type_class_peek_parent (klass);
+       gobject_class->finalize = modest_hildon2_global_settings_dialog_finalize;
+
+       g_type_class_add_private (gobject_class, sizeof(ModestHildon2GlobalSettingsDialogPrivate));
+
+       MODEST_GLOBAL_SETTINGS_DIALOG_CLASS (klass)->current_connection_func = current_connection;
+}
+
+typedef struct {
+       ModestHildon2GlobalSettingsDialog *dia;
+       GtkWidget *focus_widget;
+} SwitchPageHelper;
+
+
+static void
+modest_hildon2_global_settings_dialog_init (ModestHildon2GlobalSettingsDialog *self)
+{
+       ModestHildon2GlobalSettingsDialogPrivate *priv;
+       ModestGlobalSettingsDialogPrivate *ppriv;
+
+       priv  = MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+
+       ppriv->updating_page = create_updating_page (self);
+
+       /* Add the buttons: */
+       gtk_dialog_add_button (GTK_DIALOG (self), _HL("wdgt_bd_save"), GTK_RESPONSE_OK);
+
+       /* Set the default focusable widgets */
+       g_object_set_data (G_OBJECT(ppriv->updating_page), DEFAULT_FOCUS_WIDGET,
+                          (gpointer)ppriv->auto_update);
+
+       gtk_container_add (GTK_CONTAINER (GTK_DIALOG (self)->vbox), ppriv->updating_page);
+       gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (self)->vbox), MODEST_MARGIN_HALF);
+       gtk_window_set_default_size (GTK_WINDOW (self), -1, 340);
+}
+
+static void
+modest_hildon2_global_settings_dialog_finalize (GObject *obj)
+{
+       ModestGlobalSettingsDialogPrivate *ppriv;
+       ModestHildon2GlobalSettingsDialogPrivate *priv;
+
+       priv = MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj);
+       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj);
+
+/*     free/unref instance resources here */
+       G_OBJECT_CLASS(parent_class)->finalize (obj);
+}
+
+GtkWidget*
+modest_hildon2_global_settings_dialog_new (void)
+{
+       GtkWidget *self = GTK_WIDGET(g_object_new(MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG, NULL));
+
+       /* Load settings */
+       modest_hildon2_global_settings_dialog_load_settings (MODEST_GLOBAL_SETTINGS_DIALOG (self));
+
+       return self;
+}
+
+/*
+ * Creates the updating page
+ */
+static GtkWidget*
+create_updating_page (ModestHildon2GlobalSettingsDialog *self)
+{
+       GtkWidget *vbox, *vbox_update, *vbox_limit, *label, *hbox;
+       GtkSizeGroup *title_size_group;
+       GtkSizeGroup *value_size_group;
+       ModestGlobalSettingsDialogPrivate *ppriv;
+       GtkWidget *pannable;
+       ModestHildon2GlobalSettingsDialogPrivate *priv;
+
+       priv = MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+       vbox = gtk_vbox_new (FALSE, MODEST_MARGIN_HALF);
+
+       vbox_update = gtk_vbox_new (FALSE, MODEST_MARGIN_HALF);
+       title_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+       value_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+       /* Auto update */
+       ppriv->auto_update = hildon_check_button_new (MODEST_EDITABLE_SIZE);
+       gtk_button_set_label (GTK_BUTTON (ppriv->auto_update), _("mcen_fi_options_autoupdate"));
+       gtk_button_set_alignment (GTK_BUTTON (ppriv->auto_update), 0.0, 0.5);
+       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->auto_update, FALSE, FALSE, MODEST_MARGIN_HALF);
+       g_signal_connect (ppriv->auto_update, "clicked", G_CALLBACK (on_auto_update_clicked), self);
+
+       /* Connected via */
+
+       /* Note: This ModestPairList* must exist for as long as the picker
+        * that uses it, because the ModestSelectorPicker uses the ID opaquely, 
+        * so it can't know how to manage its memory. */ 
+       ppriv->connect_via_list = _modest_global_settings_dialog_get_connected_via ();
+       ppriv->connect_via = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
+                                                        HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+                                                        ppriv->connect_via_list, g_int_equal);
+       modest_maemo_utils_set_vbutton_layout (title_size_group, 
+                                              _("mcen_fi_options_connectiontype"),
+                                              ppriv->connect_via);
+       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->connect_via, FALSE, FALSE, MODEST_MARGIN_HALF);
+
+       /* Update interval */
+
+       /* Note: This ModestPairList* must exist for as long as the picker
+        * that uses it, because the ModestSelectorPicker uses the ID opaquely, 
+        * so it can't know how to manage its memory. */ 
+       ppriv->update_interval_list = _modest_global_settings_dialog_get_update_interval ();
+       ppriv->update_interval = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
+                                                            HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+                                                            ppriv->update_interval_list, g_int_equal);
+       modest_maemo_utils_set_vbutton_layout (title_size_group, 
+                                              _("mcen_fi_options_updateinterval"), 
+                                              ppriv->update_interval);
+       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->update_interval, FALSE, FALSE, MODEST_MARGIN_HALF);
+
+       /* Default account selector */
+       ppriv->accounts_list = get_accounts_list ();
+       ppriv->default_account_selector = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
+                                                                     HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+                                                                     ppriv->accounts_list,
+                                                                     g_str_equal);
+       if (ppriv->accounts_list == NULL) {
+               gtk_widget_set_sensitive (GTK_WIDGET (ppriv->default_account_selector), FALSE);
+       } else {
+               gchar *default_account;
+
+               default_account = modest_account_mgr_get_default_account (
+                       modest_runtime_get_account_mgr ());
+               if (default_account) {
+                       modest_selector_picker_set_active_id (
+                               MODEST_SELECTOR_PICKER (ppriv->default_account_selector),
+                               default_account);
+                       ppriv->initial_state.default_account = default_account;
+               }
+       }
+       modest_maemo_utils_set_vbutton_layout (title_size_group, 
+                                              _("mcen_ti_default_account"), 
+                                              ppriv->default_account_selector);
+       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->default_account_selector, 
+                           FALSE, FALSE, MODEST_MARGIN_HALF);
+
+       /* Add to vbox */
+       gtk_box_pack_start (GTK_BOX (vbox), vbox_update, FALSE, FALSE, MODEST_MARGIN_HALF);
+
+       g_object_unref (title_size_group);
+       g_object_unref (value_size_group);
+
+       /* Limits */
+       vbox_limit = gtk_vbox_new (FALSE, MODEST_MARGIN_HALF);
+       title_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+       value_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
+
+       /* Size limit */
+       ppriv->size_limit = hildon_number_editor_new (MSG_SIZE_MIN_VAL, MSG_SIZE_MAX_VAL);
+       hildon_number_editor_set_value (HILDON_NUMBER_EDITOR (ppriv->size_limit), MSG_SIZE_DEF_VAL);
+       g_signal_connect (ppriv->size_limit, "range_error", G_CALLBACK (on_range_error), self);
+       g_signal_connect (ppriv->size_limit, "notify", G_CALLBACK (on_size_notify), self);
+       label = gtk_label_new (_("mcen_fi_advsetup_sizelimit"));
+       hbox = gtk_hbox_new (FALSE, MODEST_MARGIN_HALF);
+       gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
+       gtk_box_pack_start (GTK_BOX (hbox), ppriv->size_limit, TRUE, TRUE, 0);
+       gtk_box_pack_start (GTK_BOX (vbox_limit), hbox, FALSE, FALSE, MODEST_MARGIN_HALF);
+       gtk_box_pack_start (GTK_BOX (vbox), vbox_limit, FALSE, FALSE, MODEST_MARGIN_HALF);
+       gtk_widget_show_all (vbox_limit);
+
+       /* Note: This ModestPairList* must exist for as long as the picker
+        * that uses it, because the ModestSelectorPicker uses the ID opaquely, 
+        * so it can't know how to manage its memory. */ 
+       ppriv->msg_format_list = _modest_global_settings_dialog_get_msg_formats ();
+       ppriv->msg_format = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
+                                                       HILDON_BUTTON_ARRANGEMENT_VERTICAL,
+                                                       ppriv->msg_format_list, g_int_equal);
+       modest_maemo_utils_set_vbutton_layout (title_size_group, 
+                                              _("mcen_fi_options_messageformat"), 
+                                              ppriv->msg_format);
+
+       gtk_box_pack_start (GTK_BOX (vbox), ppriv->msg_format, FALSE, FALSE, MODEST_MARGIN_HALF);
+
+       pannable = g_object_new (HILDON_TYPE_PANNABLE_AREA, "initial-hint", TRUE, NULL);
+
+       hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (pannable), vbox);
+       gtk_widget_show (vbox);
+       gtk_widget_show (pannable);
+
+       g_object_unref (title_size_group);
+       g_object_unref (value_size_group);
+
+       return pannable;
+}
+
+
+static void
+update_sensitive (ModestGlobalSettingsDialog *dialog)
+{
+       ModestGlobalSettingsDialogPrivate *ppriv;
+
+       g_return_if_fail (MODEST_IS_GLOBAL_SETTINGS_DIALOG (dialog));
+       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (dialog);
+
+       if (hildon_check_button_get_active (HILDON_CHECK_BUTTON (ppriv->auto_update))) {
+               gtk_widget_set_sensitive (ppriv->connect_via, TRUE);
+               gtk_widget_set_sensitive (ppriv->update_interval, TRUE);
+       } else {
+               gtk_widget_set_sensitive (ppriv->connect_via, FALSE);
+               gtk_widget_set_sensitive (ppriv->update_interval, FALSE);
+       }
+}
+
+static void
+on_auto_update_clicked (GtkButton *button,
+                       gpointer user_data)
+{
+       g_return_if_fail (MODEST_IS_GLOBAL_SETTINGS_DIALOG (user_data));
+       update_sensitive ((ModestGlobalSettingsDialog *) user_data);
+}
+static gboolean
+on_range_error (HildonNumberEditor *editor, 
+               HildonNumberEditorErrorType type,
+               gpointer user_data)
+{
+       gchar *msg;
+       gint new_val;
+
+       switch (type) {
+       case HILDON_NUMBER_EDITOR_ERROR_MAXIMUM_VALUE_EXCEED:
+               msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_maximum_value"), MSG_SIZE_MAX_VAL);
+               new_val = MSG_SIZE_MAX_VAL;
+               break;
+       case HILDON_NUMBER_EDITOR_ERROR_MINIMUM_VALUE_EXCEED:
+               msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_minimum_value"), MSG_SIZE_MIN_VAL);
+               new_val = MSG_SIZE_MIN_VAL;
+               break;
+       case HILDON_NUMBER_EDITOR_ERROR_ERRONEOUS_VALUE:
+               msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_set_a_value_within_range"), 
+                                      MSG_SIZE_MIN_VAL, 
+                                      MSG_SIZE_MAX_VAL);
+               /* FIXME: use the previous */
+               new_val = MSG_SIZE_DEF_VAL;
+               break;
+       default:
+               g_return_val_if_reached (FALSE);
+       }
+
+       /* Restore value */
+       hildon_number_editor_set_value (editor, new_val);
+
+       /* Show error */
+       hildon_banner_show_information (GTK_WIDGET (user_data), NULL, msg);
+
+       /* Free */
+       g_free (msg);
+
+       return TRUE;
+}
+
+static void
+on_size_notify         (HildonNumberEditor *editor, 
+                       GParamSpec *arg1,
+                       gpointer user_data)
+{
+       ModestHildon2GlobalSettingsDialog *dialog = MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG (user_data);
+       gint value = hildon_number_editor_get_value (editor);
+
+       gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, value > 0);
+}
+
+static ModestConnectedVia
+current_connection (void)
+{
+       return modest_platform_get_current_connection ();
+}
+
+static ModestPairList * 
+get_accounts_list (void)
+{
+       GSList *list = NULL;
+       GSList *cursor, *account_names;
+       ModestAccountMgr *account_mgr;
+
+       account_mgr = modest_runtime_get_account_mgr ();
+
+       cursor = account_names = modest_account_mgr_account_names (account_mgr, TRUE /*only enabled*/);
+       while (cursor) {
+               gchar *account_name;
+               ModestAccountSettings *settings;
+               ModestServerAccountSettings *store_settings;
+               
+               account_name = (gchar*)cursor->data;
+               
+               settings = modest_account_mgr_load_account_settings (account_mgr, account_name);
+               if (!settings) {
+                       g_printerr ("modest: failed to get account data for %s\n", account_name);
+                       continue;
+               }
+               store_settings = modest_account_settings_get_store_settings (settings);
+
+               /* don't display accounts without stores */
+               if (modest_server_account_settings_get_account_name (store_settings) != NULL) {
+
+                       if (modest_account_settings_get_enabled (settings)) {
+                               ModestPair *pair;
+
+                               pair = modest_pair_new (
+                                       g_strdup (account_name),
+                                       g_strdup (modest_account_settings_get_display_name (settings)),
+                                       FALSE);
+                               list = g_slist_prepend (list, pair);
+                       }
+               }
+
+               g_object_unref (store_settings);
+               g_object_unref (settings);
+               cursor = cursor->next;
+       }
+
+       return (ModestPairList *) g_slist_reverse (list);
+}
+
+
+static void
+modest_hildon2_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self)
+{
+       ModestConf *conf;
+       gboolean checked;
+       gint combo_id, value;
+       GError *error = NULL;
+       ModestGlobalSettingsDialogPrivate *ppriv;
+
+       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+       conf = modest_runtime_get_conf ();
+
+       /* Autoupdate */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_AUTO_UPDATE, &error);
+       if (error) {
+               g_clear_error (&error);
+               error = NULL;
+               checked = FALSE;
+       }
+       hildon_check_button_set_active (HILDON_CHECK_BUTTON (ppriv->auto_update), checked);
+       ppriv->initial_state.auto_update = checked;
+
+       /* Connected by */
+       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_CONNECTED_VIA_WLAN_OR_WIMAX;
+       }
+       modest_selector_picker_set_active_id (MODEST_SELECTOR_PICKER (ppriv->connect_via),
+                                             (gpointer) &combo_id);
+       ppriv->initial_state.connect_via = combo_id;
+
+       /* Emit toggled to update the visibility of connect_by caption */
+       gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (ppriv->auto_update));
+
+       /* Update interval */
+       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_INTERVAL, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_UPDATE_INTERVAL_15_MIN;
+       }
+       modest_selector_picker_set_active_id (MODEST_SELECTOR_PICKER (ppriv->update_interval),
+                                       (gpointer) &combo_id);
+       ppriv->initial_state.update_interval = combo_id;
+
+       /* Size limit */
+       value  = modest_conf_get_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               value = 1000;
+       }
+       /* It's better to do this in the subclasses, but it's just one
+          line, so we'll leave it here for the moment */
+       hildon_number_editor_set_value (HILDON_NUMBER_EDITOR (ppriv->size_limit), value);
+       ppriv->initial_state.size_limit = value;
+
+       /* Play sound */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               checked = FALSE;
+       }
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ppriv->play_sound), checked);
+       ppriv->initial_state.play_sound = checked;
+
+       /* Msg format */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_FILE_FORMAT_FORMATTED_TEXT;
+       }
+       combo_id = (checked) ? MODEST_FILE_FORMAT_FORMATTED_TEXT : MODEST_FILE_FORMAT_PLAIN_TEXT;
+       modest_selector_picker_set_active_id (MODEST_SELECTOR_PICKER (ppriv->msg_format),
+                                             (gpointer) &combo_id);
+       ppriv->initial_state.prefer_formatted_text = checked;
+
+       /* force update of sensitiveness */
+       update_sensitive (MODEST_GLOBAL_SETTINGS_DIALOG (self));
+}
diff --git a/src/hildon2/modest-hildon2-global-settings-dialog.h b/src/hildon2/modest-hildon2-global-settings-dialog.h
new file mode 100644 (file)
index 0000000..dda574f
--- /dev/null
@@ -0,0 +1,64 @@
+/* Copyright (c) 2006, Nokia Corporation
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in the
+ *   documentation and/or other materials provided with the distribution.
+ * * Neither the name of the Nokia Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived from
+ *   this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+ * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+ * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_H__
+#define __MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_H__
+
+#include "widgets/modest-global-settings-dialog.h"
+
+G_BEGIN_DECLS
+
+/* convenience macros */
+#define MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG             (modest_hildon2_global_settings_dialog_get_type())
+#define MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG,ModestHildon2GlobalSettingsDialog))
+#define MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG,ModestHildon2GlobalSettingsDialogClass))
+#define MODEST_IS_HILDON2_GLOBAL_SETTINGS_DIALOG(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG))
+#define MODEST_IS_HILDON2_GLOBAL_SETTINGS_DIALOG_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG))
+#define MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_HILDON2_GLOBAL_SETTINGS_DIALOG,ModestHildon2GlobalSettingsDialogClass))
+
+typedef struct _ModestHildon2GlobalSettingsDialog      ModestHildon2GlobalSettingsDialog;
+typedef struct _ModestHildon2GlobalSettingsDialogClass ModestHildon2GlobalSettingsDialogClass;
+
+struct _ModestHildon2GlobalSettingsDialog {
+        ModestGlobalSettingsDialog parent;
+};
+
+struct _ModestHildon2GlobalSettingsDialogClass {
+       ModestGlobalSettingsDialogClass parent_class;
+};
+
+/* member functions */
+GType        modest_hildon2_global_settings_dialog_get_type    (void) G_GNUC_CONST;
+
+GtkWidget*   modest_hildon2_global_settings_dialog_new         (void);
+
+G_END_DECLS
+
+#endif /* __MODEST_HILDON2_GLOBAL_SETTINGS_DIALOG_H__ */
+
diff --git a/src/hildon2/modest-maemo-global-settings-dialog.c b/src/hildon2/modest-maemo-global-settings-dialog.c
deleted file mode 100644 (file)
index 75c45cd..0000000
+++ /dev/null
@@ -1,454 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif /*HAVE_CONFIG_H*/
-
-#include <modest-hildon-includes.h>
-#include <modest-maemo-utils.h>
-
-#include <glib/gi18n.h>
-#include <string.h>
-#include <gtk/gtkbox.h>
-#include <gtk/gtkvbox.h>
-#include <gtk/gtknotebook.h>
-#include <gtk/gtklabel.h>
-#include <gtk/gtkcheckbutton.h>
-#include "modest-runtime.h"
-#include "widgets/modest-global-settings-dialog-priv.h"
-#include "modest-selector-picker.h"
-#include "hildon/hildon-pannable-area.h"
-#include "modest-maemo-global-settings-dialog.h"
-#include "widgets/modest-ui-constants.h"
-#include "modest-text-utils.h"
-#include <tny-account-store.h>
-#include <modest-account-mgr-helpers.h>
-
-
-#define MSG_SIZE_MAX_VAL 5000
-#define MSG_SIZE_DEF_VAL 1000
-#define MSG_SIZE_MIN_VAL 1
-
-#define DEFAULT_FOCUS_WIDGET "default-focus-widget"
-
-/* 'private'/'protected' functions */
-static void modest_maemo_global_settings_dialog_class_init (ModestMaemoGlobalSettingsDialogClass *klass);
-static void modest_maemo_global_settings_dialog_init       (ModestMaemoGlobalSettingsDialog *obj);
-static void modest_maemo_global_settings_dialog_finalize   (GObject *obj);
-
-static ModestConnectedVia current_connection (void);
-
-static GtkWidget* create_updating_page   (ModestMaemoGlobalSettingsDialog *self);
-
-static gboolean   on_range_error         (HildonNumberEditor *editor, 
-                                         HildonNumberEditorErrorType type,
-                                         gpointer user_data);
-
-static void       on_size_notify         (HildonNumberEditor *editor, 
-                                         GParamSpec *arg1,
-                                         gpointer user_data);
-
-static void       on_auto_update_clicked (GtkButton *button,
-                                         gpointer user_data);
-static void       update_sensitive       (ModestGlobalSettingsDialog *dialog);
-static ModestPairList * get_accounts_list (void);
-
-typedef struct _ModestMaemoGlobalSettingsDialogPrivate ModestMaemoGlobalSettingsDialogPrivate;
-struct _ModestMaemoGlobalSettingsDialogPrivate {
-       ModestPairList *connect_via_list;
-};
-#define MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
-                                                           MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG, \
-                                                           ModestMaemoGlobalSettingsDialogPrivate))
-/* globals */
-static GtkDialogClass *parent_class = NULL;
-
-GType
-modest_maemo_global_settings_dialog_get_type (void)
-{
-       static GType my_type = 0;
-       if (!my_type) {
-               static const GTypeInfo my_info = {
-                       sizeof(ModestMaemoGlobalSettingsDialogClass),
-                       NULL,           /* base init */
-                       NULL,           /* base finalize */
-                       (GClassInitFunc) modest_maemo_global_settings_dialog_class_init,
-                       NULL,           /* class finalize */
-                       NULL,           /* class data */
-                       sizeof(ModestMaemoGlobalSettingsDialog),
-                       1,              /* n_preallocs */
-                       (GInstanceInitFunc) modest_maemo_global_settings_dialog_init,
-                       NULL
-               };
-               my_type = g_type_register_static (MODEST_TYPE_GLOBAL_SETTINGS_DIALOG,
-                                                 "ModestMaemoGlobalSettingsDialog",
-                                                 &my_info, 0);
-       }
-       return my_type;
-}
-
-static void
-modest_maemo_global_settings_dialog_class_init (ModestMaemoGlobalSettingsDialogClass *klass)
-{
-       GObjectClass *gobject_class;
-       gobject_class = (GObjectClass*) klass;
-
-       parent_class            = g_type_class_peek_parent (klass);
-       gobject_class->finalize = modest_maemo_global_settings_dialog_finalize;
-
-       g_type_class_add_private (gobject_class, sizeof(ModestMaemoGlobalSettingsDialogPrivate));
-
-       MODEST_GLOBAL_SETTINGS_DIALOG_CLASS (klass)->current_connection_func = current_connection;
-}
-
-typedef struct {
-       ModestMaemoGlobalSettingsDialog *dia;
-       GtkWidget *focus_widget;
-} SwitchPageHelper;
-
-
-static void
-modest_maemo_global_settings_dialog_init (ModestMaemoGlobalSettingsDialog *self)
-{
-       ModestMaemoGlobalSettingsDialogPrivate *priv;
-       ModestGlobalSettingsDialogPrivate *ppriv;
-
-       priv  = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
-       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
-
-       ppriv->updating_page = create_updating_page (self);
-
-       /* Add the buttons: */
-       gtk_dialog_add_button (GTK_DIALOG (self), _HL("wdgt_bd_save"), GTK_RESPONSE_OK);
-
-       /* Set the default focusable widgets */
-       g_object_set_data (G_OBJECT(ppriv->updating_page), DEFAULT_FOCUS_WIDGET,
-                          (gpointer)ppriv->auto_update);
-
-       gtk_container_add (GTK_CONTAINER (GTK_DIALOG (self)->vbox), ppriv->updating_page);
-       gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (self)->vbox), MODEST_MARGIN_HALF);
-       gtk_window_set_default_size (GTK_WINDOW (self), -1, 340);
-
-       /* Load current config */
-       _modest_global_settings_dialog_load_conf (MODEST_GLOBAL_SETTINGS_DIALOG (self));
-       /* force update of sensitiveness */
-       update_sensitive (MODEST_GLOBAL_SETTINGS_DIALOG (self));
-
-}
-
-static void
-modest_maemo_global_settings_dialog_finalize (GObject *obj)
-{
-       ModestGlobalSettingsDialogPrivate *ppriv;
-       ModestMaemoGlobalSettingsDialogPrivate *priv;
-
-       priv = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj);
-       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj);
-
-/*     free/unref instance resources here */
-       G_OBJECT_CLASS(parent_class)->finalize (obj);
-}
-
-GtkWidget*
-modest_maemo_global_settings_dialog_new (void)
-{
-       return GTK_WIDGET(g_object_new(MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG, NULL));
-}
-
-/*
- * Creates the updating page
- */
-static GtkWidget*
-create_updating_page (ModestMaemoGlobalSettingsDialog *self)
-{
-       GtkWidget *vbox, *vbox_update, *vbox_limit, *label, *hbox;
-       GtkSizeGroup *title_size_group;
-       GtkSizeGroup *value_size_group;
-       ModestGlobalSettingsDialogPrivate *ppriv;
-       GtkWidget *pannable;
-       ModestMaemoGlobalSettingsDialogPrivate *priv;
-
-       priv = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
-       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
-       vbox = gtk_vbox_new (FALSE, MODEST_MARGIN_HALF);
-
-       vbox_update = gtk_vbox_new (FALSE, MODEST_MARGIN_HALF);
-       title_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-       value_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
-       /* Auto update */
-       ppriv->auto_update = hildon_check_button_new (MODEST_EDITABLE_SIZE);
-       gtk_button_set_label (GTK_BUTTON (ppriv->auto_update), _("mcen_fi_options_autoupdate"));
-       gtk_button_set_alignment (GTK_BUTTON (ppriv->auto_update), 0.0, 0.5);
-       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->auto_update, FALSE, FALSE, MODEST_MARGIN_HALF);
-       g_signal_connect (ppriv->auto_update, "clicked", G_CALLBACK (on_auto_update_clicked), self);
-
-       /* Connected via */
-
-       /* Note: This ModestPairList* must exist for as long as the picker
-        * that uses it, because the ModestSelectorPicker uses the ID opaquely, 
-        * so it can't know how to manage its memory. */ 
-       ppriv->connect_via_list = _modest_global_settings_dialog_get_connected_via ();
-       ppriv->connect_via = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
-                                                        HILDON_BUTTON_ARRANGEMENT_VERTICAL,
-                                                        ppriv->connect_via_list, g_int_equal);
-       modest_maemo_utils_set_vbutton_layout (title_size_group, 
-                                              _("mcen_fi_options_connectiontype"),
-                                              ppriv->connect_via);
-       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->connect_via, FALSE, FALSE, MODEST_MARGIN_HALF);
-
-       /* Update interval */
-
-       /* Note: This ModestPairList* must exist for as long as the picker
-        * that uses it, because the ModestSelectorPicker uses the ID opaquely, 
-        * so it can't know how to manage its memory. */ 
-       ppriv->update_interval_list = _modest_global_settings_dialog_get_update_interval ();
-       ppriv->update_interval = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
-                                                            HILDON_BUTTON_ARRANGEMENT_VERTICAL,
-                                                            ppriv->update_interval_list, g_int_equal);
-       modest_maemo_utils_set_vbutton_layout (title_size_group, 
-                                              _("mcen_fi_options_updateinterval"), 
-                                              ppriv->update_interval);
-       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->update_interval, FALSE, FALSE, MODEST_MARGIN_HALF);
-
-       /* Default account selector */
-       ppriv->accounts_list = get_accounts_list ();
-       ppriv->default_account_selector = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
-                                                                     HILDON_BUTTON_ARRANGEMENT_VERTICAL,
-                                                                     ppriv->accounts_list,
-                                                                     g_str_equal);
-       if (ppriv->accounts_list == NULL) {
-               gtk_widget_set_sensitive (GTK_WIDGET (ppriv->default_account_selector), FALSE);
-       } else {
-               gchar *default_account;
-
-               default_account = modest_account_mgr_get_default_account (
-                       modest_runtime_get_account_mgr ());
-               if (default_account) {
-                       modest_selector_picker_set_active_id (
-                               MODEST_SELECTOR_PICKER (ppriv->default_account_selector),
-                               default_account);
-                       g_free (default_account);
-               }
-       }
-       modest_maemo_utils_set_vbutton_layout (title_size_group, 
-                                              _("mcen_ti_default_account"), 
-                                              ppriv->default_account_selector);
-       gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->default_account_selector, 
-                           FALSE, FALSE, MODEST_MARGIN_HALF);
-
-       /* Add to vbox */
-       gtk_box_pack_start (GTK_BOX (vbox), vbox_update, FALSE, FALSE, MODEST_MARGIN_HALF);
-
-       g_object_unref (title_size_group);
-       g_object_unref (value_size_group);
-
-       /* Limits */
-       vbox_limit = gtk_vbox_new (FALSE, MODEST_MARGIN_HALF);
-       title_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-       value_size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
-
-       /* Size limit */
-       ppriv->size_limit = hildon_number_editor_new (MSG_SIZE_MIN_VAL, MSG_SIZE_MAX_VAL);
-       hildon_number_editor_set_value (HILDON_NUMBER_EDITOR (ppriv->size_limit), MSG_SIZE_DEF_VAL);
-       g_signal_connect (ppriv->size_limit, "range_error", G_CALLBACK (on_range_error), self);
-       g_signal_connect (ppriv->size_limit, "notify", G_CALLBACK (on_size_notify), self);
-       label = gtk_label_new (_("mcen_fi_advsetup_sizelimit"));
-       hbox = gtk_hbox_new (FALSE, MODEST_MARGIN_HALF);
-       gtk_box_pack_start (GTK_BOX (hbox), label, FALSE, FALSE, 0);
-       gtk_box_pack_start (GTK_BOX (hbox), ppriv->size_limit, TRUE, TRUE, 0);
-       gtk_box_pack_start (GTK_BOX (vbox_limit), hbox, FALSE, FALSE, MODEST_MARGIN_HALF);
-       gtk_box_pack_start (GTK_BOX (vbox), vbox_limit, FALSE, FALSE, MODEST_MARGIN_HALF);
-       gtk_widget_show_all (vbox_limit);
-
-       /* Note: This ModestPairList* must exist for as long as the picker
-        * that uses it, because the ModestSelectorPicker uses the ID opaquely, 
-        * so it can't know how to manage its memory. */ 
-       ppriv->msg_format_list = _modest_global_settings_dialog_get_msg_formats ();
-       ppriv->msg_format = modest_selector_picker_new (MODEST_EDITABLE_SIZE,
-                                                       HILDON_BUTTON_ARRANGEMENT_VERTICAL,
-                                                       ppriv->msg_format_list, g_int_equal);
-       modest_maemo_utils_set_vbutton_layout (title_size_group, 
-                                              _("mcen_fi_options_messageformat"), 
-                                              ppriv->msg_format);
-
-       gtk_box_pack_start (GTK_BOX (vbox), ppriv->msg_format, FALSE, FALSE, MODEST_MARGIN_HALF);
-
-       pannable = g_object_new (HILDON_TYPE_PANNABLE_AREA, "initial-hint", TRUE, NULL);
-
-       hildon_pannable_area_add_with_viewport (HILDON_PANNABLE_AREA (pannable), vbox);
-       gtk_widget_show (vbox);
-       gtk_widget_show (pannable);
-
-       g_object_unref (title_size_group);
-       g_object_unref (value_size_group);
-
-       return pannable;
-}
-
-
-static void
-update_sensitive (ModestGlobalSettingsDialog *dialog)
-{
-       ModestGlobalSettingsDialogPrivate *ppriv;
-
-       g_return_if_fail (MODEST_IS_GLOBAL_SETTINGS_DIALOG (dialog));
-       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (dialog);
-
-       if (hildon_check_button_get_active (HILDON_CHECK_BUTTON (ppriv->auto_update))) {
-               gtk_widget_set_sensitive (ppriv->connect_via, TRUE);
-               gtk_widget_set_sensitive (ppriv->update_interval, TRUE);
-       } else {
-               gtk_widget_set_sensitive (ppriv->connect_via, FALSE);
-               gtk_widget_set_sensitive (ppriv->update_interval, FALSE);
-       }
-}
-
-static void
-on_auto_update_clicked (GtkButton *button,
-                       gpointer user_data)
-{
-       g_return_if_fail (MODEST_IS_GLOBAL_SETTINGS_DIALOG (user_data));
-       update_sensitive ((ModestGlobalSettingsDialog *) user_data);
-}
-static gboolean
-on_range_error (HildonNumberEditor *editor, 
-               HildonNumberEditorErrorType type,
-               gpointer user_data)
-{
-       gchar *msg;
-       gint new_val;
-
-       switch (type) {
-#ifdef MODEST_HAVE_HILDON0_WIDGETS
-       case MAXIMUM_VALUE_EXCEED:
-#else
-       case HILDON_NUMBER_EDITOR_ERROR_MAXIMUM_VALUE_EXCEED:
-#endif
-               msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_maximum_value"), MSG_SIZE_MAX_VAL);
-               new_val = MSG_SIZE_MAX_VAL;
-               break;
-#ifdef MODEST_HAVE_HILDON0_WIDGETS
-       case MINIMUM_VALUE_EXCEED:
-#else
-       case HILDON_NUMBER_EDITOR_ERROR_MINIMUM_VALUE_EXCEED:
-#endif
-               msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_minimum_value"), MSG_SIZE_MIN_VAL);
-               new_val = MSG_SIZE_MIN_VAL;
-               break;
-#ifdef MODEST_HAVE_HILDON0_WIDGETS
-       case ERRONEOUS_VALUE:
-#else
-       case HILDON_NUMBER_EDITOR_ERROR_ERRONEOUS_VALUE:
-#endif
-               msg = g_strdup_printf (dgettext("hildon-libs", "ckct_ib_set_a_value_within_range"), 
-                                      MSG_SIZE_MIN_VAL, 
-                                      MSG_SIZE_MAX_VAL);
-               /* FIXME: use the previous */
-               new_val = MSG_SIZE_DEF_VAL;
-               break;
-       default:
-               g_return_val_if_reached (FALSE);
-       }
-
-       /* Restore value */
-       hildon_number_editor_set_value (editor, new_val);
-
-       /* Show error */
-       hildon_banner_show_information (GTK_WIDGET (user_data), NULL, msg);
-
-       /* Free */
-       g_free (msg);
-
-       return TRUE;
-}
-
-static void       
-on_size_notify         (HildonNumberEditor *editor, 
-                       GParamSpec *arg1,
-                       gpointer user_data)
-{
-       ModestMaemoGlobalSettingsDialog *dialog = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG (user_data);
-       gint value = hildon_number_editor_get_value (editor);
-
-       gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, value > 0);
-}
-
-static ModestConnectedVia
-current_connection (void)
-{
-       return modest_platform_get_current_connection ();
-}
-
-static ModestPairList * 
-get_accounts_list (void)
-{
-       GSList *list = NULL;
-       GSList *cursor, *account_names;
-       ModestAccountMgr *account_mgr;
-
-       account_mgr = modest_runtime_get_account_mgr ();
-
-       cursor = account_names = modest_account_mgr_account_names (account_mgr, TRUE /*only enabled*/);
-       while (cursor) {
-               gchar *account_name;
-               ModestAccountSettings *settings;
-               ModestServerAccountSettings *store_settings;
-               
-               account_name = (gchar*)cursor->data;
-               
-               settings = modest_account_mgr_load_account_settings (account_mgr, account_name);
-               if (!settings) {
-                       g_printerr ("modest: failed to get account data for %s\n", account_name);
-                       continue;
-               }
-               store_settings = modest_account_settings_get_store_settings (settings);
-
-               /* don't display accounts without stores */
-               if (modest_server_account_settings_get_account_name (store_settings) != NULL) {
-
-                       if (modest_account_settings_get_enabled (settings)) {
-                               ModestPair *pair;
-
-                               pair = modest_pair_new (
-                                       g_strdup (account_name),
-                                       g_strdup (modest_account_settings_get_display_name (settings)),
-                                       FALSE);
-                               list = g_slist_prepend (list, pair);
-                       }
-               }
-               
-               g_object_unref (store_settings);
-               g_object_unref (settings);
-               cursor = cursor->next;
-       }
-
-       return (ModestPairList *) g_slist_reverse (list);
-}
diff --git a/src/hildon2/modest-maemo-global-settings-dialog.h b/src/hildon2/modest-maemo-global-settings-dialog.h
deleted file mode 100644 (file)
index 351807d..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-/* Copyright (c) 2006, Nokia Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of the Nokia Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
- * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
- * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
- * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
- * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
- * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef __MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_H__
-#define __MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_H__
-
-#include "widgets/modest-global-settings-dialog.h"
-
-G_BEGIN_DECLS
-
-/* convenience macros */
-#define MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG             (modest_maemo_global_settings_dialog_get_type())
-#define MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG(obj)             (G_TYPE_CHECK_INSTANCE_CAST((obj),MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG,ModestMaemoGlobalSettingsDialog))
-#define MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_CLASS(klass)     (G_TYPE_CHECK_CLASS_CAST((klass),MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG,ModestMaemoGlobalSettingsDialogClass))
-#define MODEST_IS_MAEMO_GLOBAL_SETTINGS_DIALOG(obj)          (G_TYPE_CHECK_INSTANCE_TYPE((obj),MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG))
-#define MODEST_IS_MAEMO_GLOBAL_SETTINGS_DIALOG_CLASS(klass)  (G_TYPE_CHECK_CLASS_TYPE((klass),MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG))
-#define MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_CLASS(obj)   (G_TYPE_INSTANCE_GET_CLASS((obj),MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG,ModestMaemoGlobalSettingsDialogClass))
-
-typedef struct _ModestMaemoGlobalSettingsDialog      ModestMaemoGlobalSettingsDialog;
-typedef struct _ModestMaemoGlobalSettingsDialogClass ModestMaemoGlobalSettingsDialogClass;
-
-struct _ModestMaemoGlobalSettingsDialog {
-        ModestGlobalSettingsDialog parent;
-};
-
-struct _ModestMaemoGlobalSettingsDialogClass {
-       ModestGlobalSettingsDialogClass parent_class;
-};
-
-/* member functions */
-GType        modest_maemo_global_settings_dialog_get_type    (void) G_GNUC_CONST;
-
-GtkWidget*   modest_maemo_global_settings_dialog_new         (void);
-
-G_END_DECLS
-
-#endif /* __MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_H__ */
-
index b3371b7..871ca67 100644 (file)
@@ -33,7 +33,7 @@
 #include <modest-runtime.h>
 #include <modest-main-window.h>
 #include <modest-header-view.h>
-#include "modest-maemo-global-settings-dialog.h"
+#include "modest-hildon2-global-settings-dialog.h"
 #include "modest-widget-memory.h"
 #include <modest-hildon-includes.h>
 #include <modest-maemo-utils.h>
@@ -43,8 +43,6 @@
 #include <tny-maemo-conic-device.h>
 #include <tny-simple-list.h>
 #include <tny-folder.h>
-#include <tny-camel-imap-store-account.h>
-#include <tny-camel-pop-store-account.h>
 #include <gtk/gtkicontheme.h>
 #include <gtk/gtkmenuitem.h>
 #include <gtk/gtkmain.h>
@@ -983,7 +981,7 @@ modest_platform_connect_and_wait (GtkWindow *parent_window,
        /* Connect the device */
        if (!device_online) {
                /* Track account connection status changes */
-               data->handler = g_signal_connect (account, "connection-status-changed",                                     
+               data->handler = g_signal_connect (account, "connection-status-changed",
                                                  G_CALLBACK (on_connection_status_changed),
                                                  data);
                /* Try to connect the device */
@@ -1028,8 +1026,7 @@ gboolean
 modest_platform_connect_and_wait_if_network_account (GtkWindow *parent_window, TnyAccount *account)
 {
        if (tny_account_get_account_type (account) == TNY_ACCOUNT_TYPE_STORE) {
-               if (!TNY_IS_CAMEL_POP_STORE_ACCOUNT (account) &&
-                   !TNY_IS_CAMEL_IMAP_STORE_ACCOUNT (account)) {
+               if (!modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account))) {
                        /* This must be a maildir account, which does not require a connection: */
                        return TRUE;
                }
@@ -1363,7 +1360,7 @@ modest_platform_remove_new_mail_notifications (gboolean only_visuals)
 GtkWidget * 
 modest_platform_get_global_settings_dialog ()
 {
-       return modest_maemo_global_settings_dialog_new ();
+       return modest_hildon2_global_settings_dialog_new ();
 }
 
 void
@@ -1564,24 +1561,17 @@ modest_platform_check_and_wait_for_account_is_online(TnyAccount *account)
        gboolean is_online;
 
        g_return_val_if_fail (account, FALSE);
-       
-       printf ("DEBUG: %s: account id=%s\n", __FUNCTION__, tny_account_get_id (account));
-       
+
        if (!tny_device_is_online (modest_runtime_get_device())) {
                printf ("DEBUG: %s: device is offline.\n", __FUNCTION__);
                return FALSE;
        }
-       
+
        /* The local_folders account never seems to leave TNY_CONNECTION_STATUS_INIT,
         * so we avoid wait unnecessarily: */
-       if (!TNY_IS_CAMEL_POP_STORE_ACCOUNT (account) && 
-               !TNY_IS_CAMEL_IMAP_STORE_ACCOUNT (account) ) {
-               return TRUE;            
-       }
-               
-       printf ("DEBUG: %s: tny_account_get_connection_status()==%d\n",
-               __FUNCTION__, tny_account_get_connection_status (account));
-       
+       if (!modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account)))
+               return TRUE;
+
        /* The POP & IMAP store accounts seem to be TNY_CONNECTION_STATUS_DISCONNECTED, 
         * and that seems to be an OK time to use them. Maybe it's just TNY_CONNECTION_STATUS_INIT that 
         * we want to avoid. */
@@ -1940,11 +1930,8 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window,
                if (callback) {
                        callback (FALSE, NULL, parent_window, NULL, user_data);
                }
-               return; 
-               
-               /* Original comment: Maybe it is something local. */
-               /* PVH's comment: maybe we should KNOW this in stead of assuming? */
-               
+               return;
+
        } else if (TNY_IS_FOLDER (folder_store)) {
                /* Get the folder's parent account: */
                account = tny_folder_get_account (TNY_FOLDER (folder_store));
@@ -1952,11 +1939,9 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window,
                /* Use the folder store as an account: */
                account = TNY_ACCOUNT (g_object_ref (folder_store));
        }
+
        if (tny_account_get_account_type (account) == TNY_ACCOUNT_TYPE_STORE) {
-               if (!TNY_IS_CAMEL_POP_STORE_ACCOUNT (account) &&
-                   !TNY_IS_CAMEL_IMAP_STORE_ACCOUNT (account)) {
+               if (!modest_tny_folder_store_is_remote (TNY_FOLDER_STORE (account))) {
                        /* No need to connect a local account */
                        if (callback)
                                callback (FALSE, NULL, parent_window, account, user_data);
@@ -1965,17 +1950,17 @@ modest_platform_connect_if_remote_and_perform (GtkWindow *parent_window,
                }
        }
        modest_platform_connect_and_perform (parent_window, force, account, callback, user_data);
+
  clean:
        if (account)
                g_object_unref (account);
 }
 
 static void
-src_account_connect_performer (gboolean canceled, 
+src_account_connect_performer (gboolean canceled,
                               GError *err,
-                              GtkWindow *parent_window, 
-                              TnyAccount *src_account, 
+                              GtkWindow *parent_window,
+                              TnyAccount *src_account,
                               gpointer user_data)
 {
        DoubleConnectionInfo *info = (DoubleConnectionInfo *) user_data;
index 3d192ea..a62f9b9 100644 (file)
@@ -43,6 +43,7 @@
 #include <gtk/gtkcheckbutton.h>
 #include <gtk/gtkhseparator.h>
 #include "modest-runtime.h"
+#include "modest-defs.h"
 #include "widgets/modest-global-settings-dialog-priv.h"
 #include "widgets/modest-combo-box.h"
 #include "maemo/modest-maemo-global-settings-dialog.h"
@@ -88,6 +89,8 @@ static gboolean   on_inner_tabs_key_pressed (GtkWidget *widget,
                                             GdkEventKey *event,
                                             gpointer user_data);
 
+static void modest_maemo_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self);
+
 typedef struct _ModestMaemoGlobalSettingsDialogPrivate ModestMaemoGlobalSettingsDialogPrivate;
 struct _ModestMaemoGlobalSettingsDialogPrivate {
        ModestPairList *connect_via_list;
@@ -228,7 +231,7 @@ modest_maemo_global_settings_dialog_init (ModestMaemoGlobalSettingsDialog *self)
                                  gtk_label_new (_("mcen_ti_options_updating")));
        gtk_notebook_append_page (GTK_NOTEBOOK (ppriv->notebook), ppriv->composing_page, 
                                  gtk_label_new (_("mcen_ti_options_composing")));
-               
+
        gtk_container_add (GTK_CONTAINER (GTK_DIALOG (self)->vbox), ppriv->notebook);
        gtk_container_set_border_width (GTK_CONTAINER (GTK_DIALOG (self)->vbox), MODEST_MARGIN_HALF);
 
@@ -239,9 +242,6 @@ modest_maemo_global_settings_dialog_init (ModestMaemoGlobalSettingsDialog *self)
        priv->switch_handler = g_signal_connect (G_OBJECT(ppriv->notebook), "switch-page",
                                                 G_CALLBACK(on_switch_page), self);
 
-       /* Load current config */
-       _modest_global_settings_dialog_load_conf (MODEST_GLOBAL_SETTINGS_DIALOG (self));
-
        /* Set first page */
        gtk_notebook_set_current_page (GTK_NOTEBOOK (ppriv->notebook), 0);
 
@@ -271,7 +271,12 @@ modest_maemo_global_settings_dialog_finalize (GObject *obj)
 GtkWidget*
 modest_maemo_global_settings_dialog_new (void)
 {
-       return GTK_WIDGET(g_object_new(MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG, NULL));
+       GtkWidget *self = GTK_WIDGET(g_object_new(MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG, NULL));
+
+       /* Load settings */
+       modest_maemo_global_settings_dialog_load_settings (MODEST_GLOBAL_SETTINGS_DIALOG (self));
+
+       return self;
 }
 
 /*
@@ -521,3 +526,85 @@ on_inner_tabs_key_pressed (GtkWidget *widget,
 
        return retval;
 }
+
+static void 
+modest_maemo_global_settings_dialog_load_settings (ModestGlobalSettingsDialog *self)
+{
+       ModestConf *conf;
+       gboolean checked;
+       gint combo_id, value;
+       GError *error = NULL;
+       ModestGlobalSettingsDialogPrivate *ppriv;
+
+       ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
+       conf = modest_runtime_get_conf ();
+
+       /* Autoupdate */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_AUTO_UPDATE, &error);
+       if (error) {
+               g_clear_error (&error);
+               error = NULL;
+               checked = FALSE;
+       }
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ppriv->auto_update), checked);
+       ppriv->initial_state.auto_update = checked;
+
+       /* Connected by */
+       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_CONNECTED_VIA_WLAN_OR_WIMAX;
+       }
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (ppriv->connect_via), 
+                                       (gpointer) &combo_id);
+       ppriv->initial_state.connect_via = combo_id;
+
+       /* Emit toggled to update the visibility of connect_by caption */
+       gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (ppriv->auto_update));
+
+       /* Update interval */
+       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_INTERVAL, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_UPDATE_INTERVAL_15_MIN;
+       }
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (ppriv->update_interval), 
+                                       (gpointer) &combo_id);
+       ppriv->initial_state.update_interval = combo_id;
+
+       /* Size limit */
+       value  = modest_conf_get_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               value = 1000;
+       }
+       /* It's better to do this in the subclasses, but it's just one
+          line, so we'll leave it here for the moment */
+       hildon_number_editor_set_value (HILDON_NUMBER_EDITOR (ppriv->size_limit), value);
+       ppriv->initial_state.size_limit = value;
+
+       /* Play sound */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               checked = FALSE;
+       }
+       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ppriv->play_sound), checked);
+       ppriv->initial_state.play_sound = checked;
+
+       /* Msg format */
+       checked = modest_conf_get_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, &error);
+       if (error) {
+               g_error_free (error);
+               error = NULL;
+               combo_id = MODEST_FILE_FORMAT_FORMATTED_TEXT;
+       }
+       combo_id = (checked) ? MODEST_FILE_FORMAT_FORMATTED_TEXT : MODEST_FILE_FORMAT_PLAIN_TEXT;
+       modest_combo_box_set_active_id (MODEST_COMBO_BOX (ppriv->msg_format),
+                                       (gpointer) &combo_id);
+       ppriv->initial_state.prefer_formatted_text = checked;
+}
index 512b62d..fc175c3 100644 (file)
@@ -5,8 +5,8 @@
 
 static void modest_account_settings_dialog_base_init (gpointer g_class);
 
-void     
-modest_account_settings_dialog_load_settings (ModestAccountSettingsDialog *self, 
+void
+modest_account_settings_dialog_load_settings (ModestAccountSettingsDialog *self,
                                            ModestAccountSettings *settings)
 {
        g_return_if_fail (MODEST_IS_ACCOUNT_SETTINGS_DIALOG (self));
index 45a0145..61400f8 100644 (file)
@@ -66,11 +66,17 @@ static void modest_global_settings_dialog_finalize   (GObject *obj);
 static void on_response (GtkDialog *dialog,
                         gint arg1,
                         gpointer user_data);
-static void get_current_settings (ModestGlobalSettingsDialogPrivate *priv, 
+static gboolean on_delete_event (GtkWidget *widget,
+                                GdkEvent  *event,
+                                gpointer   user_data);
+
+static void get_current_settings (ModestGlobalSettingsDialogPrivate *priv,
                                  ModestGlobalSettingsState *state);
 
 static ModestConnectedVia current_connection_default (void);
 
+static gboolean modest_global_settings_dialog_save_settings_default (ModestGlobalSettingsDialog *self);
+
 /* list my signals  */
 enum {
        /* MY_SIGNAL_1, */
@@ -126,6 +132,7 @@ modest_global_settings_dialog_class_init (ModestGlobalSettingsDialogClass *klass
        g_type_class_add_private (gobject_class, sizeof(ModestGlobalSettingsDialogPrivate));
 
        klass->current_connection_func = current_connection_default;
+       klass->save_settings_func = modest_global_settings_dialog_save_settings_default;
 }
 
 static void
@@ -139,8 +146,9 @@ modest_global_settings_dialog_init (ModestGlobalSettingsDialog *self)
        priv->default_account_selector = NULL;
        priv->accounts_list = NULL;
 
-       /* Connect to the dialog's response signal: */
+       /* Connect to the dialog's "response" and "delete-event" signals */
        g_signal_connect (G_OBJECT (self), "response", G_CALLBACK (on_response), self);
+       g_signal_connect (G_OBJECT (self), "delete-event", G_CALLBACK (on_delete_event), self);
 
        /* Set title */
        gtk_window_set_title (GTK_WINDOW (self), _("mcen_ti_options"));
@@ -157,7 +165,7 @@ modest_global_settings_dialog_finalize (GObject *obj)
        modest_pair_list_free (priv->update_interval_list);
        modest_pair_list_free (priv->msg_format_list);
        modest_pair_list_free (priv->accounts_list);
-       
+
        G_OBJECT_CLASS(parent_class)->finalize (obj);
 }
 
@@ -248,118 +256,9 @@ _modest_global_settings_dialog_get_msg_formats (void)
        return (ModestPairList *) g_slist_reverse (list);
 }
 
-void   
-_modest_global_settings_dialog_load_conf (ModestGlobalSettingsDialog *self)
-{
-       ModestConf *conf;
-       gboolean checked;
-       gint combo_id, value;
-       GError *error = NULL;
-       ModestGlobalSettingsDialogPrivate *priv;
-
-       priv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self);
-       conf = modest_runtime_get_conf ();
-
-       /* Autoupdate */
-       checked = modest_conf_get_bool (conf, MODEST_CONF_AUTO_UPDATE, &error);
-       if (error) {
-               g_clear_error (&error);
-               error = NULL;
-               checked = FALSE;
-       }
-#ifdef MODEST_TOOLKIT_HILDON2
-       hildon_check_button_set_active (HILDON_CHECK_BUTTON (priv->auto_update), checked);
-#else
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->auto_update), checked);
-#endif
-       priv->initial_state.auto_update = checked;
-
-       /* Connected by */
-       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_WHEN_CONNECTED_BY, &error);
-       if (error) {
-               g_error_free (error);
-               error = NULL;
-               combo_id = MODEST_CONNECTED_VIA_WLAN_OR_WIMAX;
-       }
-#ifdef MODEST_TOOLKIT_HILDON2
-       modest_selector_picker_set_active_id (MODEST_SELECTOR_PICKER (priv->connect_via), 
-                                             (gpointer) &combo_id);
-#else
-       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->connect_via), 
-                                       (gpointer) &combo_id);
-#endif
-       priv->initial_state.connect_via = combo_id;
-
-       /* Emit toggled to update the visibility of connect_by caption */
-#ifndef MODEST_TOOLKIT_HILDON2
-       gtk_toggle_button_toggled (GTK_TOGGLE_BUTTON (priv->auto_update));
-#endif
-
-       /* Update interval */
-       combo_id = modest_conf_get_int (conf, MODEST_CONF_UPDATE_INTERVAL, &error);
-       if (error) {
-               g_error_free (error);
-               error = NULL;
-               combo_id = MODEST_UPDATE_INTERVAL_15_MIN;
-       }
-#ifdef MODEST_TOOLKIT_HILDON2
-       modest_selector_picker_set_active_id (MODEST_SELECTOR_PICKER (priv->update_interval), 
-                                       (gpointer) &combo_id);
-#else
-       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->update_interval), 
-                                       (gpointer) &combo_id);
-#endif
-       priv->initial_state.update_interval = combo_id;
-
-       /* Size limit */
-       value  = modest_conf_get_int (conf, MODEST_CONF_MSG_SIZE_LIMIT, &error);
-       if (error) {
-               g_error_free (error);
-               error = NULL;
-               value = 1000;
-       }
-       /* It's better to do this in the subclasses, but it's just one
-          line, so we'll leave it here for the moment */
-#ifndef MODEST_TOOLKIT_GTK
-       hildon_number_editor_set_value (HILDON_NUMBER_EDITOR (priv->size_limit), value);
-#else
-       gtk_spin_button_set_value (GTK_SPIN_BUTTON (priv->size_limit), value);
-#endif
-       priv->initial_state.size_limit = value;
-
-       /* Play sound */
-       checked = modest_conf_get_bool (conf, MODEST_CONF_PLAY_SOUND_MSG_ARRIVE, &error);
-       if (error) {
-               g_error_free (error);
-               error = NULL;
-               checked = FALSE;
-       }
-#ifndef MODEST_TOOLKIT_HILDON2
-       gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (priv->play_sound), checked);
-#endif
-       priv->initial_state.play_sound = checked;
-
-       /* Msg format */
-       checked = modest_conf_get_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, &error);
-       if (error) {
-               g_error_free (error);
-               error = NULL;
-               combo_id = MODEST_FILE_FORMAT_FORMATTED_TEXT;
-       }       
-       combo_id = (checked) ? MODEST_FILE_FORMAT_FORMATTED_TEXT : MODEST_FILE_FORMAT_PLAIN_TEXT;
-#ifdef MODEST_TOOLKIT_HILDON2
-       modest_selector_picker_set_active_id (MODEST_SELECTOR_PICKER (priv->msg_format), 
-                                             (gpointer) &combo_id);
-#else
-       modest_combo_box_set_active_id (MODEST_COMBO_BOX (priv->msg_format), 
-                                       (gpointer) &combo_id);
-#endif
-       priv->initial_state.prefer_formatted_text = checked;
-}
-
-static void 
-get_current_settings (ModestGlobalSettingsDialogPrivate *priv, 
-                     ModestGlobalSettingsState *state) 
+static void
+get_current_settings (ModestGlobalSettingsDialogPrivate *priv,
+                     ModestGlobalSettingsState *state)
 {
        gint *id;
 
@@ -396,8 +295,8 @@ get_current_settings (ModestGlobalSettingsDialogPrivate *priv,
        state->prefer_formatted_text = (*id == MODEST_FILE_FORMAT_FORMATTED_TEXT) ? TRUE : FALSE;
 }
 
-gboolean
-_modest_global_settings_dialog_save_conf (ModestGlobalSettingsDialog *self)
+static gboolean
+modest_global_settings_dialog_save_settings_default (ModestGlobalSettingsDialog *self)
 {
        ModestConf *conf;
        ModestGlobalSettingsState current_state;
@@ -424,14 +323,14 @@ _modest_global_settings_dialog_save_conf (ModestGlobalSettingsDialog *self)
        modest_conf_set_bool (conf, MODEST_CONF_PREFER_FORMATTED_TEXT, current_state.prefer_formatted_text, NULL);
        RETURN_FALSE_ON_ERROR(error);
        if (current_state.default_account &&
-           (!priv->initial_state.default_account || 
+           (!priv->initial_state.default_account ||
             strcmp (current_state.default_account, priv->initial_state.default_account)!= 0)) {
                modest_account_mgr_set_default_account (modest_runtime_get_account_mgr (),
                                                        current_state.default_account);
        }
 
        /* Apply changes */
-       if (priv->initial_state.auto_update != current_state.auto_update || 
+       if (priv->initial_state.auto_update != current_state.auto_update ||
            priv->initial_state.connect_via != current_state.connect_via ||
            priv->initial_state.update_interval != current_state.update_interval) {
                
@@ -456,7 +355,7 @@ _modest_global_settings_dialog_save_conf (ModestGlobalSettingsDialog *self)
                                   selected the same connect_via
                                   method than the one already used by
                                   the device */
-                               ModestConnectedVia connect_via = 
+                               ModestConnectedVia connect_via =
                                        MODEST_GLOBAL_SETTINGS_DIALOG_GET_CLASS(self)->current_connection_func ();
                                
                                if (current_state.connect_via == connect_via)
@@ -493,6 +392,23 @@ settings_changed (ModestGlobalSettingsState initial_state,
                return FALSE;
 }
 
+static gboolean
+on_delete_event (GtkWidget *widget,
+                 GdkEvent  *event,
+                 gpointer   user_data)
+{
+       ModestGlobalSettingsDialogPrivate *priv;
+       ModestGlobalSettingsState current_state;
+
+       priv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (user_data);
+
+       /* If settings changed, them the response method already asked
+          the user, because it's always executed before (see
+          GtkDialog code). If it's not then simply close */
+       get_current_settings (priv, &current_state);
+       return settings_changed (priv->initial_state, current_state);
+}
+
 static void
 on_response (GtkDialog *dialog,
             gint arg1,
@@ -511,7 +427,7 @@ on_response (GtkDialog *dialog,
                if (changed) {
                        gboolean saved;
 
-                       saved = _modest_global_settings_dialog_save_conf (MODEST_GLOBAL_SETTINGS_DIALOG (dialog));
+                       saved = modest_global_settings_dialog_save_settings (MODEST_GLOBAL_SETTINGS_DIALOG (dialog));
                        if (saved) {
                                modest_platform_information_banner (NULL, NULL,
                                                                    _("mcen_ib_advsetup_settings_saved"));
@@ -523,18 +439,26 @@ on_response (GtkDialog *dialog,
        } else {
                if (changed) {
                        gint response;
-                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (user_data), 
+                       response = modest_platform_run_confirmation_dialog (GTK_WINDOW (user_data),
                                                                            _("imum_nc_wizard_confirm_lose_changes"));
                        /* Do not close if the user Cancels */
-                       if (response == GTK_RESPONSE_CANCEL)
+                       if (response != GTK_RESPONSE_OK)
                                g_signal_stop_emission_by_name (user_data, "response");
                }
        }
 }
 
-static ModestConnectedVia 
+static ModestConnectedVia
 current_connection_default (void)
 {
        g_warning ("You must implement %s", __FUNCTION__);
        g_return_val_if_reached (MODEST_CONNECTED_VIA_ANY);
 }
+
+gboolean
+modest_global_settings_dialog_save_settings (ModestGlobalSettingsDialog *self)
+{
+       g_return_val_if_fail (MODEST_IS_GLOBAL_SETTINGS_DIALOG (self), FALSE);
+
+       return MODEST_GLOBAL_SETTINGS_DIALOG_GET_CLASS(self)->save_settings_func (self);
+}
index 79c988b..bc4b768 100644 (file)
@@ -79,16 +79,13 @@ struct _ModestGlobalSettingsDialogClass {
 
        /* Returns the current connection method. Assumes that the device is online */
        ModestConnectedVia (*current_connection_func) (void);
+       gboolean (*save_settings_func)  (ModestGlobalSettingsDialog *self);
 };
 
 /* member functions */
 GType        modest_global_settings_dialog_get_type    (void) G_GNUC_CONST;
 
-/* Do *NOT* use this functions directly. They must be only used by
-   subclasses. We put them here and not in the -priv header file
-   because recursive dependencies */
-void     _modest_global_settings_dialog_load_conf (ModestGlobalSettingsDialog *self);
-gboolean _modest_global_settings_dialog_save_conf (ModestGlobalSettingsDialog *self);
+gboolean modest_global_settings_dialog_save_settings (ModestGlobalSettingsDialog *self);
 
 
 G_END_DECLS