From: Steven Luo Date: Tue, 5 Jan 2010 05:19:26 +0000 (-0800) Subject: Revise GUI for Fremantle to be more finger-friendly X-Git-Tag: v3.1~7 X-Git-Url: http://git.maemo.org/git/?p=browser-switch;a=commitdiff_plain;h=18bad5e9d35f3418a9f53a730cf5877c91c0b366 Revise GUI for Fremantle to be more finger-friendly Make the GUI for Fremantle more finger-friendly by making the widgets larger and using HildonTouchSelector widgets in place of combo box/radiobutton widgets. Based on a patch by Faheem Pervez (qwerty12): http://slexy.org/view/s2JL7ye01p --- diff --git a/config-ui/browser-switchboard-cp.c b/config-ui/browser-switchboard-cp.c index 7d462f5..1846a46 100644 --- a/config-ui/browser-switchboard-cp.c +++ b/config-ui/browser-switchboard-cp.c @@ -33,18 +33,31 @@ #include #include #include + #ifdef HILDON #include #include + +#ifdef FREMANTLE +#include +#include +#include +#include +#endif /* FREMANTLE */ + #ifdef HILDON_CP_APPLET #include -#endif -#endif +#endif /* HILDON_CP_APPLET */ +#endif /* HILDON */ #include "configfile.h" #define CONTINUOUS_MODE_DEFAULT 0 +#if defined(HILDON) && defined(FREMANTLE) +#define _HILDON_SIZE_DEFAULT (HILDON_SIZE_AUTO_WIDTH|HILDON_SIZE_FINGER_HEIGHT) +#endif + struct browser_entry { char *config; char *displayname; @@ -59,9 +72,14 @@ struct browser_entry browsers[] = { }; struct config_widgets { +#if defined(HILDON) && defined(FREMANTLE) + GtkWidget *continuous_mode_selector; + GtkWidget *default_browser_selector; +#else GtkWidget *continuous_mode_off_radio; GtkWidget *continuous_mode_on_radio; GtkWidget *default_browser_combo; +#endif GtkWidget *other_browser_cmd_entry; GtkWidget *other_browser_cmd_entry_label; }; @@ -73,6 +91,21 @@ GtkWidget *dialog; * Configuration routines **********************************************************************/ +#if defined(HILDON) && defined(FREMANTLE) + +static inline int get_continuous_mode(void) { + return hildon_touch_selector_get_active(HILDON_TOUCH_SELECTOR(cw.continuous_mode_selector), 0); +} +static inline void set_continuous_mode(int state) { + hildon_touch_selector_set_active(HILDON_TOUCH_SELECTOR(cw.continuous_mode_selector), 0, state); +} + +static inline char *get_default_browser(void) { + return browsers[hildon_touch_selector_get_active(HILDON_TOUCH_SELECTOR(cw.default_browser_selector), 0)].config; +} + +#else /* !defined(HILDON) || !defined(FREMANTLE) */ + static inline int get_continuous_mode(void) { return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(cw.continuous_mode_on_radio)); } @@ -86,6 +119,9 @@ static inline void set_continuous_mode(int state) { static inline char *get_default_browser(void) { return browsers[gtk_combo_box_get_active(GTK_COMBO_BOX(cw.default_browser_combo))].config; } + +#endif /* defined(HILDON) && defined(FREMANTLE) */ + static void set_default_browser(char *browser) { gint i; @@ -97,7 +133,11 @@ static void set_default_browser(char *browser) { /* No match found, set to the default browser */ i = 0; +#if defined(HILDON) && defined(FREMANTLE) + hildon_touch_selector_set_active(HILDON_TOUCH_SELECTOR(cw.default_browser_selector), 0, i); +#else gtk_combo_box_set_active(GTK_COMBO_BOX(cw.default_browser_combo), i); +#endif } static inline char *get_other_browser_cmd(void) { @@ -271,11 +311,18 @@ static void do_reconfig(void) { * Callbacks **********************************************************************/ +#if defined(HILDON) && defined(FREMANTLE) +static void default_browser_selector_callback(GtkWidget *widget, + gint column, gpointer data) { +#else static void default_browser_combo_callback(GtkWidget *widget, gpointer data) { +#endif if (!strcmp(get_default_browser(), "other")) { + gtk_editable_set_editable(GTK_EDITABLE(cw.other_browser_cmd_entry), TRUE); gtk_widget_set_sensitive(cw.other_browser_cmd_entry, TRUE); gtk_widget_set_sensitive(cw.other_browser_cmd_entry_label, TRUE); } else { + gtk_editable_set_editable(GTK_EDITABLE(cw.other_browser_cmd_entry), FALSE); /* FREMANTLE: give the text the greyed-out look */ gtk_widget_set_sensitive(cw.other_browser_cmd_entry, FALSE); gtk_widget_set_sensitive(cw.other_browser_cmd_entry_label, FALSE); } @@ -286,6 +333,84 @@ static void default_browser_combo_callback(GtkWidget *widget, gpointer data) { * Interface **********************************************************************/ +#if defined(HILDON) && defined(FREMANTLE) +/* + * Fremantle Hildon dialog + */ +static GtkDialog *swb_config_dialog(gpointer cp_window) { + GtkWidget *dialog_vbox; + + GtkWidget *default_browser_selector_button; + GtkWidget *continuous_mode_selector_button; + int i; + HildonGtkInputMode input_mode; + + dialog = gtk_dialog_new_with_buttons( + "Browser Switchboard", + GTK_WINDOW(cp_window), + GTK_DIALOG_MODAL, + GTK_STOCK_OK, + GTK_RESPONSE_OK, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL, + NULL); + + dialog_vbox = GTK_DIALOG(dialog)->vbox; + + /* Config options */ + cw.default_browser_selector = hildon_touch_selector_new_text(); + for (i = 0; browsers[i].config; ++i) + hildon_touch_selector_append_text(HILDON_TOUCH_SELECTOR(cw.default_browser_selector), browsers[i].displayname); + hildon_touch_selector_set_active(HILDON_TOUCH_SELECTOR(cw.default_browser_selector), 0, 0); + default_browser_selector_button = hildon_picker_button_new(_HILDON_SIZE_DEFAULT, HILDON_BUTTON_ARRANGEMENT_HORIZONTAL); + hildon_button_set_title(HILDON_BUTTON(default_browser_selector_button), + "Default browser:"); + hildon_picker_button_set_selector(HILDON_PICKER_BUTTON(default_browser_selector_button), HILDON_TOUCH_SELECTOR(cw.default_browser_selector)); + hildon_button_set_alignment(HILDON_BUTTON(default_browser_selector_button), + 0, 0.5, 0, 0); + g_signal_connect(G_OBJECT(cw.default_browser_selector), "changed", + G_CALLBACK(default_browser_selector_callback), NULL); + gtk_box_pack_start(GTK_BOX(dialog_vbox), + default_browser_selector_button, FALSE, FALSE, 0); + + cw.other_browser_cmd_entry = hildon_entry_new(_HILDON_SIZE_DEFAULT); + input_mode = hildon_gtk_entry_get_input_mode(GTK_ENTRY(cw.other_browser_cmd_entry)); + input_mode &= ~HILDON_GTK_INPUT_MODE_AUTOCAP; + input_mode &= ~HILDON_GTK_INPUT_MODE_DICTIONARY; + hildon_gtk_entry_set_input_mode(GTK_ENTRY(cw.other_browser_cmd_entry), input_mode); + + cw.other_browser_cmd_entry_label = hildon_caption_new(NULL, + "Command (%s for URI):", + cw.other_browser_cmd_entry, + NULL, HILDON_CAPTION_OPTIONAL); + gtk_widget_set_sensitive(cw.other_browser_cmd_entry, FALSE); + gtk_widget_set_sensitive(cw.other_browser_cmd_entry_label, FALSE); + hildon_gtk_widget_set_theme_size(cw.other_browser_cmd_entry_label, _HILDON_SIZE_DEFAULT); + gtk_box_pack_start(GTK_BOX(dialog_vbox), + cw.other_browser_cmd_entry_label, FALSE, FALSE, 0); + + cw.continuous_mode_selector = hildon_touch_selector_new_text(); + hildon_touch_selector_append_text(HILDON_TOUCH_SELECTOR(cw.continuous_mode_selector), "Lower memory usage"); + hildon_touch_selector_append_text(HILDON_TOUCH_SELECTOR(cw.continuous_mode_selector), "Faster browser startup time"); + + continuous_mode_selector_button = hildon_picker_button_new(_HILDON_SIZE_DEFAULT, HILDON_BUTTON_ARRANGEMENT_VERTICAL); + hildon_button_set_title(HILDON_BUTTON(continuous_mode_selector_button), + "Optimize Browser Switchboard for:"); + hildon_picker_button_set_selector(HILDON_PICKER_BUTTON(continuous_mode_selector_button), HILDON_TOUCH_SELECTOR(cw.continuous_mode_selector)); + hildon_button_set_alignment(HILDON_BUTTON(continuous_mode_selector_button), + 0, 0, 0, 0); + set_continuous_mode(CONTINUOUS_MODE_DEFAULT); + gtk_box_pack_start(GTK_BOX(dialog_vbox), + continuous_mode_selector_button, FALSE, FALSE, 0); + + gtk_widget_show_all(dialog); + return GTK_DIALOG(dialog); +} + +#else /* !defined(HILDON) || !defined(FREMANTLE) */ +/* + * GTK+/Diablo Hildon dialog + */ static GtkDialog *swb_config_dialog(gpointer cp_window) { GtkWidget *dialog_vbox; @@ -385,6 +510,8 @@ static GtkDialog *swb_config_dialog(gpointer cp_window) { return GTK_DIALOG(dialog); } +#endif /* defined(HILDON) && defined(FREMANTLE) */ + /********************************************************************** * Entry @@ -442,4 +569,4 @@ int main(int argc, char *argv[]) { exit(0); } -#endif +#endif /* HILDON_CP_APPLET */