From 7ca19ec4d309e66adcc5c04790b29d72f85e4800 Mon Sep 17 00:00:00 2001 From: Sergio Villar Senin Date: Mon, 24 Nov 2008 15:04:51 +0000 Subject: [PATCH] * Fixes NB#92030 pmo-trunk-r6383 --- src/gnome/modest-gnome-global-settings-dialog.c | 89 +++- src/hildon2/Makefile.am | 4 +- .../modest-hildon2-global-settings-dialog.c | 530 ++++++++++++++++++++ .../modest-hildon2-global-settings-dialog.h | 64 +++ src/hildon2/modest-maemo-global-settings-dialog.c | 454 ----------------- src/hildon2/modest-maemo-global-settings-dialog.h | 64 --- src/hildon2/modest-platform.c | 49 +- src/maemo/modest-maemo-global-settings-dialog.c | 97 +++- src/widgets/modest-account-settings-dialog.c | 4 +- src/widgets/modest-global-settings-dialog.c | 172 ++----- src/widgets/modest-global-settings-dialog.h | 7 +- 11 files changed, 842 insertions(+), 692 deletions(-) create mode 100644 src/hildon2/modest-hildon2-global-settings-dialog.c create mode 100644 src/hildon2/modest-hildon2-global-settings-dialog.h delete mode 100644 src/hildon2/modest-maemo-global-settings-dialog.c delete mode 100644 src/hildon2/modest-maemo-global-settings-dialog.h diff --git a/src/gnome/modest-gnome-global-settings-dialog.c b/src/gnome/modest-gnome-global-settings-dialog.c index e855bcb..d6e2a31 100644 --- a/src/gnome/modest-gnome-global-settings-dialog.c +++ b/src/gnome/modest-gnome-global-settings-dialog.c @@ -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; +} diff --git a/src/hildon2/Makefile.am b/src/hildon2/Makefile.am index 28cb1cb..d601c2d 100644 --- a/src/hildon2/Makefile.am +++ b/src/hildon2/Makefile.am @@ -58,8 +58,8 @@ libmodest_ui_la_SOURCES= \ modest-serversecurity-picker.h modest-serversecurity-picker.c \ modest-servertype-picker.h modest-servertype-picker.c \ 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 index 0000000..5f8afc6 --- /dev/null +++ b/src/hildon2/modest-hildon2-global-settings-dialog.c @@ -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 +#endif /*HAVE_CONFIG_H*/ + +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#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 +#include + + +#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 index 0000000..dda574f --- /dev/null +++ b/src/hildon2/modest-hildon2-global-settings-dialog.h @@ -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 index 75c45cd..0000000 --- a/src/hildon2/modest-maemo-global-settings-dialog.c +++ /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 -#endif /*HAVE_CONFIG_H*/ - -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#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 -#include - - -#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 index 351807d..0000000 --- a/src/hildon2/modest-maemo-global-settings-dialog.h +++ /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__ */ - diff --git a/src/hildon2/modest-platform.c b/src/hildon2/modest-platform.c index 9092493..56915b6 100644 --- a/src/hildon2/modest-platform.c +++ b/src/hildon2/modest-platform.c @@ -33,7 +33,7 @@ #include #include #include -#include "modest-maemo-global-settings-dialog.h" +#include "modest-hildon2-global-settings-dialog.h" #include "modest-widget-memory.h" #include #include @@ -43,8 +43,6 @@ #include #include #include -#include -#include #include #include #include @@ -982,7 +980,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 */ @@ -1027,8 +1025,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; } @@ -1365,7 +1362,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 @@ -1566,24 +1563,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. */ @@ -1947,11 +1937,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)); @@ -1959,11 +1946,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); @@ -1972,17 +1957,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; diff --git a/src/maemo/modest-maemo-global-settings-dialog.c b/src/maemo/modest-maemo-global-settings-dialog.c index 3d192ea..a62f9b9 100644 --- a/src/maemo/modest-maemo-global-settings-dialog.c +++ b/src/maemo/modest-maemo-global-settings-dialog.c @@ -43,6 +43,7 @@ #include #include #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; +} diff --git a/src/widgets/modest-account-settings-dialog.c b/src/widgets/modest-account-settings-dialog.c index 512b62d..fc175c3 100644 --- a/src/widgets/modest-account-settings-dialog.c +++ b/src/widgets/modest-account-settings-dialog.c @@ -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)); diff --git a/src/widgets/modest-global-settings-dialog.c b/src/widgets/modest-global-settings-dialog.c index 45a0145..61400f8 100644 --- a/src/widgets/modest-global-settings-dialog.c +++ b/src/widgets/modest-global-settings-dialog.c @@ -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, ¤t_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); +} diff --git a/src/widgets/modest-global-settings-dialog.h b/src/widgets/modest-global-settings-dialog.h index 79c988b..bc4b768 100644 --- a/src/widgets/modest-global-settings-dialog.h +++ b/src/widgets/modest-global-settings-dialog.h @@ -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 -- 1.7.9.5