diff --git a/trunk/desmume/src/gtk-glade/callbacks_IO.c b/trunk/desmume/src/gtk-glade/callbacks_IO.c
index 8900c9b40..f10b1decc 100755
--- a/trunk/desmume/src/gtk-glade/callbacks_IO.c
+++ b/trunk/desmume/src/gtk-glade/callbacks_IO.c
@@ -335,3 +335,44 @@ void on_button_Start_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMU
void on_button_Select_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_Select); }
void on_button_Debug_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_DEBUG); }
void on_button_Boost_clicked (GtkButton *b, gpointer user_data) { ask(b,DESMUME_KEY_BOOST); }
+
+/* Joystick configuration / Key definition */
+/* FIXME: popup is not shown!? */
+void ask_joy_key(GtkButton*b, int key)
+{
+ char text[50];
+ u16 joykey;
+
+ key--; /* remove 1 to get index */
+ GtkDialog * dlg = (GtkDialog*)glade_xml_get_widget(xml, "wJoyDlg");
+ GtkDialog * parent = (GtkDialog*)glade_xml_get_widget(xml, "wJoyConfDlg");
+ gtk_widget_set_sensitive(parent, FALSE); /* Ugly workaround for bug below */
+ gtk_widget_show_now(dlg);
+ /* FIXME: when the following line is not commented, the widget is not even shown!! */
+ joykey = get_set_joy_key(key);
+ sprintf(text,"%s : %d\0\0",DESMUME_KEY_NAMES[key],joykey);
+ gtk_button_set_label(b,text);
+ gtk_widget_hide((GtkWidget*)dlg);
+ gtk_widget_set_sensitive(parent, TRUE); /* Ugly workaround for bug below */
+}
+
+void on_joy_button_A_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_A); }
+void on_joy_button_B_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_B); }
+void on_joy_button_X_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_X); }
+void on_joy_button_Y_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_Y); }
+void on_joy_button_L_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_L); }
+void on_joy_button_R_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_R); }
+void on_joy_button_Select_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_Select); }
+void on_joy_button_Start_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_Start); }
+void on_joy_button_Boost_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_BOOST); }
+void on_joy_button_Debug_clicked (GtkButton *b, gpointer user_data)
+{ ask_joy_key(b,DESMUME_KEY_DEBUG); }
diff --git a/trunk/desmume/src/gtk-glade/callbacks_IO.h b/trunk/desmume/src/gtk-glade/callbacks_IO.h
index d6335b57d..ea14bc339 100755
--- a/trunk/desmume/src/gtk-glade/callbacks_IO.h
+++ b/trunk/desmume/src/gtk-glade/callbacks_IO.h
@@ -63,3 +63,15 @@ void on_button_Start_clicked (GtkButton *button, gpointer user_data);
void on_button_Select_clicked (GtkButton *button, gpointer user_data);
void on_button_Debug_clicked (GtkButton *button, gpointer user_data);
void on_button_Boost_clicked (GtkButton *button, gpointer user_data);
+
+/* Joystick configuration / Key definition */
+void on_joy_button_Y_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_X_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_A_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_B_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_Select_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_L_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_R_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_Debug_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_Start_clicked (GtkButton *button, gpointer user_data);
+void on_joy_button_Boost_clicked (GtkButton *button, gpointer user_data);
diff --git a/trunk/desmume/src/gtk-glade/glade/DeSmuMe.glade b/trunk/desmume/src/gtk-glade/glade/DeSmuMe.glade
index a8d513963..1082e1abf 100755
--- a/trunk/desmume/src/gtk-glade/glade/DeSmuMe.glade
+++ b/trunk/desmume/src/gtk-glade/glade/DeSmuMe.glade
@@ -1379,4 +1379,372 @@
+
+ Joystick Config
+ GTK_WINDOW_TOPLEVEL
+ GTK_WIN_POS_CENTER_ON_PARENT
+ False
+ True
+ True
+ DeSmuME.xpm
+ True
+ False
+ False
+ GDK_WINDOW_TYPE_HINT_DIALOG
+ GDK_GRAVITY_NORTH_WEST
+ True
+ False
+ True
+
+
+
+
+
+ True
+ False
+ 0
+
+
+
+ True
+ GTK_BUTTONBOX_END
+
+
+
+ True
+ True
+ True
+ gtk-cancel
+ True
+ GTK_RELIEF_NORMAL
+ True
+ -6
+
+
+
+
+
+ True
+ True
+ True
+ gtk-ok
+ True
+ GTK_RELIEF_NORMAL
+ True
+ -5
+
+
+
+
+ 0
+ False
+ True
+ GTK_PACK_END
+
+
+
+
+
+ True
+ 5
+ 7
+ True
+ 0
+ 0
+
+
+
+ True
+ True
+ Y :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 4
+ 5
+ 3
+ 4
+ fill
+
+
+
+
+
+
+ True
+ True
+ X :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 5
+ 6
+ 2
+ 3
+ fill
+
+
+
+
+
+
+ True
+ True
+ A :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 6
+ 7
+ 3
+ 4
+ fill
+
+
+
+
+
+
+ True
+ True
+ B :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 5
+ 6
+ 4
+ 5
+ fill
+
+
+
+
+
+
+ True
+ True
+ Select :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 3
+ 4
+ 1
+ 2
+ fill
+
+
+
+
+
+
+ True
+ True
+ L :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 0
+ 2
+ 0
+ 1
+ fill
+
+
+
+
+
+
+ True
+ True
+ R :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 5
+ 7
+ 0
+ 1
+ fill
+
+
+
+
+
+
+ True
+ True
+ Debug :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 2
+ 3
+ 0
+ 1
+ fill
+
+
+
+
+
+
+ True
+ True
+ Start :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 3
+ 4
+ 0
+ 1
+ fill
+
+
+
+
+
+
+ True
+ True
+ Boost :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+ 4
+ 5
+ 0
+ 1
+ fill
+
+
+
+
+
+
+ True
+ False
+ True
+ Axis :
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+ 1
+ 2
+ 3
+ 4
+ fill
+
+
+
+
+
+ 0
+ True
+ True
+
+
+
+
+
+
+
+ GDK_KEY_RELEASE_MASK
+ Key definition
+ GTK_WINDOW_POPUP
+ GTK_WIN_POS_CENTER_ALWAYS
+ True
+ False
+ False
+ DeSmuME.xpm
+ False
+ False
+ False
+ GDK_WINDOW_TYPE_HINT_DIALOG
+ GDK_GRAVITY_NORTH_WEST
+ True
+ False
+ False
+
+
+
+ True
+ False
+ 0
+
+
+
+ True
+ GTK_BUTTONBOX_END
+
+
+ 0
+ False
+ True
+ GTK_PACK_END
+
+
+
+
+
+ True
+ Press a button...
+ False
+ False
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0.5
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ 0
+ True
+ True
+
+
+
+
+
+