snes mouse support
[drnoksnes] / gui / controls.c
index 377f2f8..ae147b1 100644 (file)
@@ -52,7 +52,7 @@ typedef struct ButtonEntry {
        { desc, kGConfKeysPath "/" name, 0, default }
 #define BUTTON_LAST    \
        { 0 }
-static const ButtonEntry buttons[] = {
+static ButtonEntry buttons[] = {
        BUTTON_INITIALIZER("A", "a", 48),
        BUTTON_INITIALIZER("B", "b", 20),
        BUTTON_INITIALIZER("X", "x", 32),
@@ -79,14 +79,22 @@ static void show_widgets()
        switch (gtk_combo_box_get_active(combo)) {
                case 0:
                        gtk_widget_show_all(GTK_WIDGET(none_label));
-                       g_debug("Showing label\n");
                        break;
-               case 1:
+               case 1: // Keys
                        gtk_widget_show_all(GTK_WIDGET(keys_scroll));
                        break;
-               case 2:
+               case 2: // Touchscreen
                        gtk_widget_show_all(GTK_WIDGET(ts_label));
                        break;
+               case 3: // Touchscreen + keys
+                       gtk_widget_show_all(GTK_WIDGET(keys_scroll));
+                       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));
+                       break;
        }
 }
 
@@ -101,6 +109,7 @@ static gboolean load_key_config(GtkTreeModel *model, GtkTreePath *path,
 
        int scancode = gconf_client_get_int(gcc, button_entry->gconf_key, NULL);
        button_entry->scancode = scancode;
+
        gtk_tree_model_row_changed(GTK_TREE_MODEL(keys_store), path, iter);
 
        return FALSE;
@@ -190,7 +199,8 @@ cb_key_cleared(GtkCellRendererText *cell, const char *path_string,
                -1);
 
        g_debug("Clearing scancode for button %s\n", button_entry->name);
-       gconf_client_unset(gcc, button_entry->gconf_key, NULL);
+       gconf_client_set_int(gcc, button_entry->gconf_key, 0, NULL);
+               // prefer 0 value over unset key.
 
        button_entry->scancode = 0;
 }
@@ -238,6 +248,9 @@ void controls_dialog(GtkWindow* parent)
        gtk_combo_box_append_text(combo, "No controls/Use config file");
        gtk_combo_box_append_text(combo, "Use physical keys");
        gtk_combo_box_append_text(combo, "Use touchscreen");
+       gtk_combo_box_append_text(combo, "Use touchscreen + physical keys");
+       gtk_combo_box_append_text(combo, "Use SNES mouse");
+       gtk_combo_box_append_text(combo, "Use SNES mouse + physical keys");
 
        none_label = GTK_LABEL(gtk_label_new("Check documentation for details."));
 
@@ -263,7 +276,7 @@ void controls_dialog(GtkWindow* parent)
        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, 200);
+       gtk_tree_view_column_set_min_width(column, 240);
        gtk_tree_view_append_column(keys_list, column);
        gtk_tree_view_set_headers_visible(keys_list, TRUE);
 
@@ -277,7 +290,7 @@ void controls_dialog(GtkWindow* parent)
                        -1);
        }
 
-       ts_label = GTK_LABEL(gtk_label_new("Not implemented."));
+       ts_label = GTK_LABEL(gtk_label_new("Check layout somewhere else for now."));
 
        gtk_window_resize(GTK_WINDOW(dialog), 600, 340);
        gtk_box_pack_start(GTK_BOX(dialog->vbox), GTK_WIDGET(combo),