X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fhildon2%2Fmodest-maemo-global-settings-dialog.c;h=4ed2a8261cf708a88b1d710deae5307c8437f977;hp=6d96477ff8418f8d29d330dacdedbd828cb5e41d;hb=cdbab669714f015b98fbce83b8e147df6ab27e82;hpb=0f1fe981ed79b61b9b2d1abc2b5912e20caee50f diff --git a/src/hildon2/modest-maemo-global-settings-dialog.c b/src/hildon2/modest-maemo-global-settings-dialog.c index 6d96477..4ed2a82 100644 --- a/src/hildon2/modest-maemo-global-settings-dialog.c +++ b/src/hildon2/modest-maemo-global-settings-dialog.c @@ -44,9 +44,12 @@ #include #include "modest-runtime.h" #include "widgets/modest-global-settings-dialog-priv.h" -#include "widgets/modest-combo-box.h" +#include "modest-selector-picker.h" +#include "hildon/hildon-check-button.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 @@ -63,15 +66,7 @@ static void modest_maemo_global_settings_dialog_finalize (GObject *obj); static ModestConnectedVia current_connection (void); -/* list my signals */ -enum { - /* MY_SIGNAL_1, */ - /* MY_SIGNAL_2, */ - LAST_SIGNAL -}; - static GtkWidget* create_updating_page (ModestMaemoGlobalSettingsDialog *self); -static GtkWidget* create_composing_page (ModestMaemoGlobalSettingsDialog *self); static gboolean on_range_error (HildonNumberEditor *editor, HildonNumberEditorErrorType type, @@ -81,17 +76,12 @@ static void on_size_notify (HildonNumberEditor *editor, GParamSpec *arg1, gpointer user_data); -static void on_auto_update_toggled (GtkToggleButton *togglebutton, +static void on_auto_update_clicked (GtkButton *button, gpointer user_data); -static gboolean on_inner_tabs_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data); - typedef struct _ModestMaemoGlobalSettingsDialogPrivate ModestMaemoGlobalSettingsDialogPrivate; struct _ModestMaemoGlobalSettingsDialogPrivate { ModestPairList *connect_via_list; - gint switch_handler; }; #define MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ MODEST_TYPE_MAEMO_GLOBAL_SETTINGS_DIALOG, \ @@ -99,9 +89,6 @@ struct _ModestMaemoGlobalSettingsDialogPrivate { /* globals */ static GtkDialogClass *parent_class = NULL; -/* uncomment the following if you have defined any signals */ -/* static guint signals[LAST_SIGNAL] = {0}; */ - GType modest_maemo_global_settings_dialog_get_type (void) { @@ -145,61 +132,6 @@ typedef struct { GtkWidget *focus_widget; } SwitchPageHelper; -static gboolean -idle_select_default_focus (gpointer data) -{ - ModestGlobalSettingsDialogPrivate *ppriv; - ModestMaemoGlobalSettingsDialogPrivate *priv; - SwitchPageHelper *helper; - - helper = (SwitchPageHelper *) data; - priv = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (helper->dia); - ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (helper->dia); - - /* Grab focus, we need to block in order to prevent a - recursive call to this callback */ - g_signal_handler_block (G_OBJECT (ppriv->notebook), priv->switch_handler); - - /* This is a GDK lock because we are an idle callback and - * the code below is or does Gtk+ code */ - - gdk_threads_enter (); /* CHECKED */ - gtk_widget_grab_focus (helper->focus_widget); - gdk_threads_leave (); /* CHECKED */ - - g_signal_handler_unblock (G_OBJECT (ppriv->notebook), priv->switch_handler); - g_free (helper); - - return FALSE; -} - - -static void -on_switch_page (GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data) -{ - /* grab the focus to the default element in the current page */ - GtkWidget *selected_page = NULL, *focus_item = NULL; - SwitchPageHelper *helper; - - 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) { - g_printerr ("modest: cannot get focus item\n"); - return; - } - - /* Create the helper */ - helper = g_malloc0 (sizeof (SwitchPageHelper)); - helper->dia = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG (user_data); - helper->focus_widget = focus_item; - - /* Focus the widget in an idle. We need to do this in an idle, - because this handler is executed *before* the page was - really switched, so the focus is not placed in the right - widget */ - g_idle_add (idle_select_default_focus, helper); -} - static void modest_maemo_global_settings_dialog_init (ModestMaemoGlobalSettingsDialog *self) @@ -211,40 +143,23 @@ modest_maemo_global_settings_dialog_init (ModestMaemoGlobalSettingsDialog *self) ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (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); + 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); - g_object_set_data (G_OBJECT(ppriv->composing_page), DEFAULT_FOCUS_WIDGET, - (gpointer)ppriv->msg_format); - - /* Add the notebook pages: */ - gtk_notebook_append_page (GTK_NOTEBOOK (ppriv->notebook), ppriv->updating_page, - 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); + 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); - 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); + /* gtk_window_set_default_size (GTK_WINDOW (self), 700, 300); */ /* 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()); } @@ -258,12 +173,6 @@ modest_maemo_global_settings_dialog_finalize (GObject *obj) priv = MODEST_MAEMO_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj); ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (obj); - if (priv->switch_handler && ppriv->notebook) { - /* 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; - } - /* free/unref instance resources here */ G_OBJECT_CLASS(parent_class)->finalize (obj); } @@ -280,61 +189,41 @@ modest_maemo_global_settings_dialog_new (void) static GtkWidget* create_updating_page (ModestMaemoGlobalSettingsDialog *self) { - GtkWidget *vbox, *vbox_update, *vbox_limit, *caption; + GtkWidget *vbox, *vbox_update, *vbox_limit, *label, *hbox; 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); vbox_update = gtk_vbox_new (FALSE, MODEST_MARGIN_DEFAULT); size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); /* Auto update */ - ppriv->auto_update = gtk_check_button_new (); - caption = hildon_caption_new (size_group, - _("mcen_fi_options_autoupdate"), - ppriv->auto_update, - NULL, - HILDON_CAPTION_MANDATORY); - gtk_box_pack_start (GTK_BOX (vbox_update), caption, FALSE, FALSE, MODEST_MARGIN_HALF); - g_signal_connect (ppriv->auto_update, "toggled", G_CALLBACK (on_auto_update_toggled), self); + ppriv->auto_update = hildon_check_button_new (HILDON_SIZE_AUTO); + gtk_button_set_label (GTK_BUTTON (ppriv->auto_update), _("mcen_fi_options_autoupdate")); + 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 combo - * that uses it, because the ModestComboBox uses the ID opaquely, + /* 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_combo_box_new (ppriv->connect_via_list, g_int_equal); - - caption = hildon_caption_new (size_group, - _("mcen_fi_options_connectiontype"), - ppriv->connect_via, - NULL, - HILDON_CAPTION_MANDATORY); - gtk_box_pack_start (GTK_BOX (vbox_update), caption, FALSE, FALSE, MODEST_MARGIN_HALF); + ppriv->connect_via = modest_selector_picker_new (ppriv->connect_via_list, g_int_equal); + hildon_button_set_title (HILDON_BUTTON (ppriv->connect_via), _("mcen_fi_options_connectiontype")); + 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 combo - * that uses it, because the ModestComboBox uses the ID opaquely, + /* 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_combo_box_new (ppriv->update_interval_list, g_int_equal); - - caption = hildon_caption_new (size_group, - _("mcen_fi_options_updateinterval"), - ppriv->update_interval, - NULL, - HILDON_CAPTION_MANDATORY); - gtk_box_pack_start (GTK_BOX (vbox_update), caption, FALSE, FALSE, MODEST_MARGIN_HALF); + ppriv->update_interval = modest_selector_picker_new (ppriv->update_interval_list, g_int_equal); + hildon_button_set_title (HILDON_BUTTON (ppriv->update_interval), _("mcen_fi_options_updateinterval")); + gtk_box_pack_start (GTK_BOX (vbox_update), ppriv->update_interval, FALSE, FALSE, MODEST_MARGIN_HALF); /* Add to vbox */ gtk_box_pack_start (GTK_BOX (vbox), vbox_update, FALSE, FALSE, MODEST_MARGIN_HALF); @@ -351,82 +240,44 @@ create_updating_page (ModestMaemoGlobalSettingsDialog *self) 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, - NULL, - HILDON_CAPTION_MANDATORY); - gtk_box_pack_start (GTK_BOX (vbox_limit), caption, FALSE, FALSE, MODEST_MARGIN_HALF); - - /* Play sound */ - ppriv->play_sound = gtk_check_button_new (); - caption = hildon_caption_new (size_group, - _("mcen_fi_options_playsound"), - ppriv->play_sound, - NULL, - HILDON_CAPTION_MANDATORY); - gtk_box_pack_start (GTK_BOX (vbox_limit), caption, FALSE, FALSE, MODEST_MARGIN_HALF); - - /* Add to vbox */ + 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_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 scrollwin; -} + gtk_widget_show_all (vbox_limit); -/* - * Creates the composing page - */ -static GtkWidget* -create_composing_page (ModestMaemoGlobalSettingsDialog *self) -{ - GtkWidget *vbox; - GtkSizeGroup *size_group; - ModestGlobalSettingsDialogPrivate *ppriv; - GtkWidget *caption; - - ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (self); - size_group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL); - vbox = gtk_vbox_new (FALSE, MODEST_MARGIN_DEFAULT); - - /* Update interval */ + /* Separator */ + gtk_box_pack_start (GTK_BOX (vbox), gtk_hseparator_new (), FALSE, FALSE, MODEST_MARGIN_HALF); - /* Note: This ModestPairList* must exist for as long as the combo - * that uses it, because the ModestComboBox uses the ID opaquely, + /* 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_combo_box_new (ppriv->msg_format_list, g_int_equal); + ppriv->msg_format = modest_selector_picker_new (ppriv->msg_format_list, g_int_equal); + hildon_button_set_title (HILDON_BUTTON (ppriv->msg_format), _("mcen_fi_options_messageformat")); - caption = hildon_caption_new (size_group, - _("mcen_fi_options_messageformat"), - ppriv->msg_format, - NULL, - HILDON_CAPTION_MANDATORY); - gtk_box_pack_start (GTK_BOX (vbox), caption, FALSE, FALSE, MODEST_MARGIN_HALF); + gtk_box_pack_start (GTK_BOX (vbox), ppriv->msg_format, FALSE, FALSE, MODEST_MARGIN_HALF); return vbox; } + static void -on_auto_update_toggled (GtkToggleButton *togglebutton, +on_auto_update_clicked (GtkButton *button, gpointer user_data) { ModestGlobalSettingsDialogPrivate *ppriv; - GtkWidget *caption1, *caption2; ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (user_data); - caption1 = gtk_widget_get_ancestor (ppriv->connect_via, HILDON_TYPE_CAPTION); - caption2 = gtk_widget_get_ancestor (ppriv->update_interval, HILDON_TYPE_CAPTION); - if (gtk_toggle_button_get_active (togglebutton)) { - gtk_widget_set_sensitive (caption1, TRUE); - gtk_widget_set_sensitive (caption2, TRUE); + if (hildon_check_button_get_active (button)) { + gtk_widget_set_sensitive (ppriv->connect_via, TRUE); + gtk_widget_set_sensitive (ppriv->update_interval, TRUE); } else { - gtk_widget_set_sensitive (caption1, FALSE); - gtk_widget_set_sensitive (caption2, FALSE); + gtk_widget_set_sensitive (ppriv->connect_via, FALSE); + gtk_widget_set_sensitive (ppriv->update_interval, FALSE); } } @@ -499,25 +350,3 @@ current_connection (void) return modest_platform_get_current_connection (); } -static gboolean -on_inner_tabs_key_pressed (GtkWidget *widget, - GdkEventKey *event, - gpointer user_data) -{ - ModestGlobalSettingsDialogPrivate *ppriv; - gboolean retval = FALSE; - - ppriv = MODEST_GLOBAL_SETTINGS_DIALOG_GET_PRIVATE (user_data); - - if (widget == ppriv->notebook) { - if (event->keyval == GDK_Right) { - gtk_notebook_next_page (GTK_NOTEBOOK (ppriv->notebook)); - retval = TRUE; - } else if (event->keyval == GDK_Left) { - gtk_notebook_prev_page (GTK_NOTEBOOK (ppriv->notebook)); - retval = TRUE; - } - } - - return retval; -}