X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fmaemo%2Fmodest-maemo-global-settings-dialog.c;h=a62f9b96a66cbcdb11780ec4611b5833bd3afe58;hb=ceb44609ce092fb7d12bfcec333a816d4a1d02b2;hp=d2a1d1ac7f3c3fd01c8c661c08aafb7d17df3bd6;hpb=fcbc6a6dfa1a10921d2ca889256a21b192adbe98;p=modest diff --git a/src/maemo/modest-maemo-global-settings-dialog.c b/src/maemo/modest-maemo-global-settings-dialog.c index d2a1d1a..a62f9b9 100644 --- a/src/maemo/modest-maemo-global-settings-dialog.c +++ b/src/maemo/modest-maemo-global-settings-dialog.c @@ -31,15 +31,8 @@ #include #endif /*HAVE_CONFIG_H*/ -#ifdef MODEST_HAVE_HILDON0_WIDGETS -#include -#include -#include -#else -#include -#include -#include -#endif /*MODEST_HAVE_HILDON0_WIDGETS*/ +#include +#include #include #include @@ -50,12 +43,13 @@ #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" #include "widgets/modest-ui-constants.h" #include -#include + #define MSG_SIZE_MAX_VAL 5000 #define MSG_SIZE_DEF_VAL 1000 @@ -84,6 +78,10 @@ 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_toggled (GtkToggleButton *togglebutton, gpointer user_data); @@ -91,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; @@ -182,13 +182,8 @@ on_switch_page (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gp { /* grab the focus to the default element in the current page */ GtkWidget *selected_page = NULL, *focus_item = NULL; - ModestGlobalSettingsDialogPrivate *ppriv; - ModestMaemoGlobalSettingsDialogPrivate *priv; SwitchPageHelper *helper; - priv = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (user_data); - ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (user_data); - selected_page = gtk_notebook_get_nth_page (notebook, page_num); focus_item = GTK_WIDGET(g_object_get_data (G_OBJECT(selected_page), DEFAULT_FOCUS_WIDGET)); if (!focus_item) { @@ -220,7 +215,11 @@ modest_maemo_global_settings_dialog_init (ModestMaemoGlobalSettingsDialog *self) ppriv->updating_page = create_updating_page (self); ppriv->composing_page = create_composing_page (self); - + + /* Add the buttons: */ + gtk_dialog_add_button (GTK_DIALOG (self), _("mcen_bd_dialog_ok"), GTK_RESPONSE_OK); + gtk_dialog_add_button (GTK_DIALOG (self), _("mcen_bd_dialog_cancel"), GTK_RESPONSE_CANCEL); + /* Set the default focusable widgets */ g_object_set_data (G_OBJECT(ppriv->updating_page), DEFAULT_FOCUS_WIDGET, (gpointer)ppriv->auto_update); @@ -232,20 +231,22 @@ 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); + gtk_window_set_default_size (GTK_WINDOW (self), 700, 300); + g_signal_connect (G_OBJECT (self), "key-press-event", G_CALLBACK (on_inner_tabs_key_pressed), 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); + + hildon_help_dialog_help_enable (GTK_DIALOG(self), "applications_email_options_dialog", + modest_maemo_utils_get_osso_context()); } static void @@ -258,12 +259,8 @@ modest_maemo_global_settings_dialog_finalize (GObject *obj) ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj); if (priv->switch_handler && ppriv->notebook) { - /* TODO: This causes a g_warning: - modest[13409]: GLIB WARNING ** GLib-GObject - invalid unclassed pointer in cast to `GObject' - modest[13409]: GLIB WARNING ** GLib-GObject - instance with invalid (NULL) class pointer - modest[13409]: GLIB CRITICAL ** GLib-GObject - g_signal_handler_disconnect: assertion `G_TYPE_CHECK_INSTANCE (instance)' failed - */ - g_signal_handler_disconnect (G_OBJECT (ppriv->notebook), priv->switch_handler); + /* TODO: This causes a g_warning and a valgrind mem error: */ + /* g_signal_handler_disconnect (G_OBJECT (ppriv->notebook), priv->switch_handler);*/ priv->switch_handler = 0; } @@ -274,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; } /* @@ -286,8 +288,13 @@ create_updating_page (ModestMaemoGlobalSettingsDialog *self) GtkWidget *vbox, *vbox_update, *vbox_limit, *caption; GtkSizeGroup *size_group; ModestGlobalSettingsDialogPrivate *ppriv; + GtkWidget *scrollwin = NULL; + GtkAdjustment *focus_adjustment = NULL; ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self); + scrollwin = gtk_scrolled_window_new (NULL, NULL); + gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin), + GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC); vbox = gtk_vbox_new (FALSE, MODEST_MARGIN_DEFAULT); @@ -348,6 +355,7 @@ create_updating_page (ModestMaemoGlobalSettingsDialog *self) 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); caption = hildon_caption_new (size_group, _("mcen_fi_advsetup_sizelimit"), ppriv->size_limit, @@ -366,8 +374,12 @@ create_updating_page (ModestMaemoGlobalSettingsDialog *self) /* Add to vbox */ gtk_box_pack_start (GTK_BOX (vbox), vbox_limit, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrollwin), vbox); + focus_adjustment = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (scrollwin)); + gtk_container_set_focus_vadjustment (GTK_CONTAINER (vbox), focus_adjustment); + gtk_widget_show (scrollwin); - return vbox; + return scrollwin; } /* @@ -475,39 +487,21 @@ on_range_error (HildonNumberEditor *editor, 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) { - TnyAccountStore *account_store = NULL; - TnyDevice *device = NULL; - ModestConnectedVia retval = MODEST_CONNECTED_VIA_ANY; - - account_store = TNY_ACCOUNT_STORE (modest_runtime_get_account_store ()); - device = tny_account_store_get_device (account_store); - - if (!tny_device_is_online (device)) - return MODEST_CONNECTED_VIA_ANY; - - /* Get iap id */ - const gchar *iap_id = tny_maemo_conic_device_get_current_iap_id (TNY_MAEMO_CONIC_DEVICE (device)); - if (iap_id) { - ConIcIap *iap = tny_maemo_conic_device_get_iap ( - TNY_MAEMO_CONIC_DEVICE (device), iap_id); - const gchar *bearer_type = con_ic_iap_get_bearer_type (iap); - if (bearer_type) { - if (!strcmp (bearer_type, CON_IC_BEARER_WLAN_INFRA) || - !strcmp (bearer_type, CON_IC_BEARER_WLAN_ADHOC)) - retval = MODEST_CONNECTED_VIA_WLAN; - else - retval = MODEST_CONNECTED_VIA_ANY; - } - - g_object_unref (iap); - } - - g_object_unref (device); - - return retval; + return modest_platform_get_current_connection (); } static gboolean @@ -520,7 +514,7 @@ on_inner_tabs_key_pressed (GtkWidget *widget, ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (user_data); - if (widget == user_data) { + if (widget == ppriv->notebook) { if (event->keyval == GDK_Right) { gtk_notebook_next_page (GTK_NOTEBOOK (ppriv->notebook)); retval = TRUE; @@ -532,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; +}