OK, I accept it. The only issue I have is that I have never programmed under GTK, so I am not willing to write a patch on this.
Nevertheless, I can -- and did -- debug the application, and this is what I see: [EMAIL PROTECTED]:/usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard$ gdb /usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard/.libs/lt-gnome-keyboard-properties GNU gdb 6.6-debian Copyright (C) 2006 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "x86_64-linux-gnu"... Using host libthread_db library "/lib/libthread_db.so.1". (gdb) run Starting program: /usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard/.libs/lt-gnome-keyboard-properties [Thread debugging using libthread_db enabled] [New Thread 47079464161120 (LWP 29427)] Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 47079464161120 (LWP 29427)] def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:128 128 if (value->type == GCONF_VALUE_INT) { (gdb) backtrace #0 def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:128 #1 0x000000000040a60f in xkb_layouts_fill_selected_tree (dialog=0x629100) at gnome-keyboard-properties-xkblt.c:417 #2 0x0000000000408b2d in setup_xkb_tabs (dialog=0x629100, changeset=0x0) at gnome-keyboard-properties-xkb.c:179 #3 0x00000000004084a7 in main (argc=<value optimized out>, argv=<value optimized out>) at gnome-keyboard-properties.c:172 (gdb) list 123 guint cnxn_id, 124 GConfEntry * entry, GladeXML * dialog) 125 { 126 GConfValue *value = gconf_entry_get_value (entry); 127 128 if (value->type == GCONF_VALUE_INT) { 129 GtkWidget *tree_view = WID ("xkb_layouts_selected"); 130 GtkTreeModel *model = 131 GTK_TREE_MODEL (gtk_tree_view_get_model 132 (GTK_TREE_VIEW (tree_view))); (gdb) backtrace #0 def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:128 #1 0x000000000040a60f in xkb_layouts_fill_selected_tree (dialog=0x629100) at gnome-keyboard-properties-xkblt.c:417 #2 0x0000000000408b2d in setup_xkb_tabs (dialog=0x629100, changeset=0x0) at gnome-keyboard-properties-xkb.c:179 #3 0x00000000004084a7 in main (argc=<value optimized out>, argv=<value optimized out>) at gnome-keyboard-properties.c:172 (gdb) list 123 118 gtk_tree_path_free (chpath); 119 } 120 121 static void 122 def_group_in_gconf_changed (GConfClient * client, 123 guint cnxn_id, 124 GConfEntry * entry, GladeXML * dialog) 125 { 126 GConfValue *value = gconf_entry_get_value (entry); 127 (gdb) list 128 if (value->type == GCONF_VALUE_INT) { 129 GtkWidget *tree_view = WID ("xkb_layouts_selected"); 130 GtkTreeModel *model = 131 GTK_TREE_MODEL (gtk_tree_view_get_model 132 (GTK_TREE_VIEW (tree_view))); 133 GtkTreeIter iter; 134 int counter = 0; 135 default_group = gconf_value_get_int (value); 136 if (gtk_tree_model_get_iter_first (model, &iter)) { 137 do { (gdb) break 123 Breakpoint 1 at 0x409b00: file gnome-keyboard-properties-xkblt.c, line 123. (gdb) run The program being debugged has been started already. Start it from the beginning? (y or n) y Starting program: /usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard/.libs/lt-gnome-keyboard-properties [Thread debugging using libthread_db enabled] [New Thread 47910289698656 (LWP 29596)] [Switching to Thread 47910289698656 (LWP 29596)] Breakpoint 1, def_group_in_gconf_changed (client=0x64c0c0, cnxn_id=4294967295, entry=0x8c12e0, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:125 125 { (gdb) next 126 GConfValue *value = gconf_entry_get_value (entry); (gdb) next 128 if (value->type == GCONF_VALUE_INT) { (gdb) next Program received signal SIGSEGV, Segmentation fault. def_group_in_gconf_changed (client=<value optimized out>, cnxn_id=<value optimized out>, entry=<value optimized out>, dialog=0x629100) at gnome-keyboard-properties-xkblt.c:128 128 if (value->type == GCONF_VALUE_INT) { (gdb) inspect value $1 = (GConfValue *) 0x0 (gdb) [EMAIL PROTECTED]:/usr/src/src/gnome-control-center/control-center-2.17.90/capplets/keyboard$ So, we segfaulted while testing 'value->type', and it makes sense, since 'value' is NULL. Looking down on the code, the call to 'def_group_in_gconf_changed' is being make in 'xkb_layouts_fill_selected_tree()'. There we see this: gce = gconf_client_get_entry (xkb_gconf_client, GKBD_DESKTOP_CONFIG_KEY_DEFAULT_GROUP, NULL, TRUE, &err); if (err == NULL) { def_group_in_gconf_changed (xkb_gconf_client, -1, gce, dialog); and gce is the 'value' being passed above, and 'err' *is* NULL. Now it is out of my depth. -- segfault in gnome-keyboard-properties https://launchpad.net/bugs/82373 -- desktop-bugs mailing list desktop-bugs@lists.ubuntu.com https://lists.ubuntu.com/mailman/listinfo/desktop-bugs