#include <gtk/gtk.h>
#include <hildon/hildon-helper.h>
+#if MAEMO_VERSION >= 5
+#include <hildon/hildon-gtk.h>
+#include <hildon/hildon-pannable-area.h>
+#include <hildon/hildon-check-button.h>
+#endif
+
#include "../platform/hgw.h"
#include "plugin.h"
#include "cellrendererkey.h"
static GtkDialog* dialog;
static GtkComboBox* combo;
static GtkLabel* none_label;
+#if MAEMO_VERSION >= 5
+static HildonPannableArea* keys_scroll;
+#else
static GtkScrolledWindow* keys_scroll;
+#endif
static GtkListStore* keys_store;
static GtkTreeView* keys_list;
-static GtkLabel* ts_label;
+#if MAEMO_VERSION >= 5
+static HildonCheckButton* ts_show_check;
+#else
+static GtkCheckButton* ts_show_check;
+#endif
enum
{
gtk_widget_show_all(GTK_WIDGET(combo));
gtk_widget_hide_all(GTK_WIDGET(none_label));
gtk_widget_hide_all(GTK_WIDGET(keys_scroll));
- gtk_widget_hide_all(GTK_WIDGET(ts_label));
+ gtk_widget_hide_all(GTK_WIDGET(ts_show_check));
switch (gtk_combo_box_get_active(combo)) {
case 0:
gtk_widget_show_all(GTK_WIDGET(none_label));
gtk_widget_show_all(GTK_WIDGET(keys_scroll));
break;
case 2: // Touchscreen
- gtk_widget_show_all(GTK_WIDGET(ts_label));
+ gtk_widget_show_all(GTK_WIDGET(ts_show_check));
break;
case 3: // Touchscreen + keys
gtk_widget_show_all(GTK_WIDGET(keys_scroll));
+ gtk_widget_show_all(GTK_WIDGET(ts_show_check));
break;
case 4: // Mouse
- gtk_widget_show_all(GTK_WIDGET(ts_label));
break;
case 5: // Mouse + keys
gtk_widget_show_all(GTK_WIDGET(keys_scroll));
gconf_client_preload(gcc, kGConfKeysPath, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
gtk_tree_model_foreach(GTK_TREE_MODEL(keys_store), load_key_config, NULL);
+ gboolean ts_show_active =
+ gconf_client_get_bool(gcc, kGConfDisplayControls, NULL);
+#if MAEMO_VERSION >= 5
+ hildon_check_button_set_active(ts_show_check, ts_show_active);
+#else
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(ts_show_check), ts_show_active);
+#endif
+
show_widgets();
gconf_value_free(mapping);
}
button_entry->scancode = 0;
}
+static void cb_ts_show_toggled(void * widget, gpointer data)
+{
+ gboolean active;
+#if MAEMO_VERSION >= 5
+ active = hildon_check_button_get_active(ts_show_check);
+#else
+ active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(ts_show_check));
+#endif
+ gconf_client_set_bool(gcc, kGConfDisplayControls, active, NULL);
+}
+
static void cb_combo_changed(GtkComboBox * widget, gpointer data)
{
show_widgets();
void controls_setup()
{
- GConfValue* mapping = gconf_client_get(gcc, kGConfMapping, NULL);
int i;
- if (!mapping) {
- // Key not set; setup defaults
- for (i = 0; buttons[i].name; i++) {
- gconf_client_set_int(gcc, buttons[i].gconf_key,
- buttons[i].default_scancode, NULL);
- }
+ // Check if all the keys exist. If not, fill them with default values.
+ // XXX Note that not filling a key will cause HGW to crash.
- g_debug("Loading default key mappings\n");
+ gconf_client_preload(gcc, kGConfKeysPath, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+ for (i = 0; buttons[i].name; i++) {
+ GConfValue *mapping = gconf_client_get(gcc, buttons[i].gconf_key, NULL);
- gconf_client_set_int(gcc, kGConfMapping, 1, NULL);
- } else {
- // If this key is set, consider defaults loaded.
- gconf_value_free(mapping);
-
- // We still have to check if all the keys exist
- gconf_client_preload(gcc, kGConfKeysPath, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
- for (i = 0; buttons[i].name; i++) {
- mapping = gconf_client_get(gcc, buttons[i].gconf_key, NULL);
-
- if (!mapping) {
- // Not set; set to default.
- gconf_client_set_int(gcc, buttons[i].gconf_key,
- buttons[i].default_scancode, NULL);
- } else {
- gconf_value_free(mapping);
- }
+ if (!mapping) {
+ // Not set; set to default.
+ gconf_client_set_int(gcc, buttons[i].gconf_key,
+ buttons[i].default_scancode, NULL);
+ } else {
+ gconf_value_free(mapping);
}
}
}
none_label = GTK_LABEL(gtk_label_new("Check documentation for details."));
- keys_scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
- gtk_scrolled_window_set_policy(keys_scroll,
- GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
keys_store = GTK_LIST_STORE(gtk_list_store_new(N_COLUMNS,
G_TYPE_STRING, G_TYPE_POINTER));
+#if MAEMO_VERSION >= 5
+ keys_list = GTK_TREE_VIEW(hildon_gtk_tree_view_new_with_model(
+ HILDON_UI_MODE_EDIT, GTK_TREE_MODEL(keys_store)));
+ keys_scroll = HILDON_PANNABLE_AREA(hildon_pannable_area_new());
+#else
keys_list = GTK_TREE_VIEW(
gtk_tree_view_new_with_model(GTK_TREE_MODEL(keys_store)));
+ keys_scroll = GTK_SCROLLED_WINDOW(gtk_scrolled_window_new(NULL, NULL));
+ gtk_scrolled_window_set_policy(keys_scroll,
+ GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+#endif
GtkCellRenderer* renderer = GTK_CELL_RENDERER(gtk_cell_renderer_text_new());
GtkTreeViewColumn * column =
column = gtk_tree_view_column_new_with_attributes("Key", renderer, NULL);
gtk_tree_view_column_set_cell_data_func(column, renderer, accel_set_func, NULL, NULL);
gtk_tree_view_column_set_resizable(column, FALSE);
- gtk_tree_view_column_set_min_width(column, 240);
+#if MAEMO_VERSION >= 5
+ gtk_tree_view_column_set_min_width(column, 340);
+#else
+ gtk_tree_view_column_set_min_width(column, 250);
+#endif
gtk_tree_view_append_column(keys_list, column);
gtk_tree_view_set_headers_visible(keys_list, TRUE);
-1);
}
- ts_label = GTK_LABEL(gtk_label_new("Check layout somewhere else for now."));
-
+#if MAEMO_VERSION >= 5
+ ts_show_check =
+ HILDON_CHECK_BUTTON(hildon_check_button_new(
+ HILDON_SIZE_FULLSCREEN_WIDTH | HILDON_SIZE_FINGER_HEIGHT));
+ gtk_button_set_label(GTK_BUTTON(ts_show_check), "Show onscreen buttons");
+#else
+ ts_show_check =
+ GTK_CHECK_BUTTON(gtk_check_button_new_with_label("Show onscreen buttons"));
+#endif
+
+#if MAEMO_VERSION >= 5
+ gtk_window_resize(GTK_WINDOW(dialog), 800, 380);
+#else
gtk_window_resize(GTK_WINDOW(dialog), 600, 340);
+#endif
gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(combo),
FALSE, FALSE, HILDON_MARGIN_HALF);
gtk_container_add(GTK_CONTAINER(keys_scroll), GTK_WIDGET(keys_list));
gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(none_label));
gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(keys_scroll));
- gtk_box_pack_start_defaults(GTK_BOX(dialog->vbox), GTK_WIDGET(ts_label));
+ gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(ts_show_check), FALSE, FALSE, 0);
load_config();
G_CALLBACK(cb_key_edited), NULL);
g_signal_connect(G_OBJECT(renderer), "accel_cleared",
G_CALLBACK(cb_key_cleared), NULL);
+ g_signal_connect(G_OBJECT(ts_show_check), "toggled",
+ G_CALLBACK(cb_ts_show_toggled), NULL);
gtk_widget_show(GTK_WIDGET(dialog));
}