2006-07-15 Glynn Foster <[email protected]>
authorgf115653
Fri, 14 Jul 2006 19:35:57 +0000
changeset 7641 be56ee2129b0
parent 7640 2c612a2ecbfd
child 7642 e86a24e183a1
2006-07-15 Glynn Foster <[email protected]> * control-center.spec: Update. * patches/control-center-04-keyboard-layout.diff, * patches/control-center-06-xkb-workaround.diff, * patches/control-center-14-no-xkb-dialog.diff, * patches/control-center-17-xkb-check-remote-login.diff: Remove these keyboard layout patches to be replaced with a single patch that removes the layout functionality. This affects both the gnome-settings-daemon and the keyboard preference dialog. * control-center-04-remove-xkb-layout.diff: Add new patch. * control-center-*.diff: Rename the rest.
ChangeLog
control-center.spec
patches/control-center-04-keyboard-layout.diff
patches/control-center-04-remove-xkb-layout.diff
patches/control-center-06-logout-shortcut.diff
patches/control-center-06-xkb-workaround.diff
patches/control-center-07-custom-keybinding.diff
patches/control-center-07-logout-shortcut.diff
patches/control-center-08-custom-keybinding.diff
patches/control-center-08-keybinding-caps-lock.diff
patches/control-center-09-keybinding-caps-lock.diff
patches/control-center-09-volume-control.diff
patches/control-center-10-homefolder-keybindings.diff
patches/control-center-10-volume-control.diff
patches/control-center-11-anykey-grab.diff
patches/control-center-11-homefolder-keybindings.diff
patches/control-center-12-anykey-grab.diff
patches/control-center-12-wall.diff
patches/control-center-13-layout-deletion.diff
patches/control-center-13-wall.diff
patches/control-center-14-background-crash.diff
patches/control-center-14-layout-deletion.diff
patches/control-center-14-no-xkb-dialog.diff
patches/control-center-15-background-crash.diff
patches/control-center-15-fix-keyboard-dialog.diff
patches/control-center-15-layout-deletion.diff
patches/control-center-16-background-crash.diff
patches/control-center-16-mouse-dialog.diff
patches/control-center-17-disable-gnome-screensaver.diff
patches/control-center-17-fix-keyboard-dialog.diff
patches/control-center-17-mouse-dialog.diff
patches/control-center-17-xkb-check-remote-login.diff
patches/control-center-18-disable-gnome-screensaver.diff
patches/control-center-18-fix-keyboard-dialog.diff
patches/control-center-18-menu-entry.diff
patches/control-center-19-menu-entry.diff
patches/control-center-19-mouse-dialog.diff
patches/control-center-19-negative-refresh-rates.diff
patches/control-center-20-disable-gnome-screensaver.diff
patches/control-center-20-negative-refresh-rates.diff
patches/control-center-20-trusted-extensions.diff
patches/control-center-21-menu-entry.diff
patches/control-center-21-trusted-extensions.diff
patches/control-center-22-negative-refresh-rates.diff
patches/control-center-23-trusted-extensions.diff
--- a/ChangeLog	Fri Jul 14 17:27:04 2006 +0000
+++ b/ChangeLog	Fri Jul 14 19:35:57 2006 +0000
@@ -1,3 +1,17 @@
+2006-07-15  Glynn Foster  <[email protected]>
+
+	* control-center.spec: Update.
+	* patches/control-center-04-keyboard-layout.diff,
+	* patches/control-center-06-xkb-workaround.diff,
+	* patches/control-center-14-no-xkb-dialog.diff,
+	* patches/control-center-17-xkb-check-remote-login.diff:
+	Remove these keyboard layout patches to be replaced with
+	a single patch that removes the layout functionality.
+	This affects both the gnome-settings-daemon and the 
+	keyboard preference dialog.
+	* control-center-04-remove-xkb-layout.diff: Add new patch.
+	* control-center-*.diff: Rename the rest.
+
 2006-07-14  Laszlo Kovacs <[email protected]>
 	
 	* Solaris/SUNWkeyring.spec:
--- a/control-center.spec	Fri Jul 14 17:27:04 2006 +0000
+++ b/control-center.spec	Fri Jul 14 19:35:57 2006 +0000
@@ -36,26 +36,23 @@
 Patch1:       control-center-01-keybindings-close.diff
 Patch2:       control-center-02-ctrl-alt-del.diff
 Patch3:	      control-center-03-gsd-not-session-managed.diff
-Patch4:       control-center-04-keyboard-layout.diff
+Patch4:       control-center-04-remove-xkb-layout.diff
 Patch5:       control-center-05-add-wallpaper-dialog.diff
-Patch6:       control-center-06-xkb-workaround.diff
-Patch7:       control-center-07-logout-shortcut.diff
-Patch8:       control-center-08-custom-keybinding.diff
-Patch9:       control-center-09-keybinding-caps-lock.diff
-Patch10:      control-center-10-volume-control.diff
-Patch11:      control-center-11-homefolder-keybindings.diff
-Patch12:      control-center-12-anykey-grab.diff
-Patch13:      control-center-13-wall.diff
-Patch14:      control-center-14-no-xkb-dialog.diff
-Patch15:      control-center-15-layout-deletion.diff
-Patch16:      control-center-16-background-crash.diff
-Patch17:      control-center-17-xkb-check-remote-login.diff
-Patch18:      control-center-18-fix-keyboard-dialog.diff
-Patch19:      control-center-19-mouse-dialog.diff
-Patch20:      control-center-20-disable-gnome-screensaver.diff
-Patch21:      control-center-21-menu-entry.diff
-Patch22:      control-center-22-negative-refresh-rates.diff
-Patch23:      control-center-23-trusted-extensions.diff
+Patch6:       control-center-06-logout-shortcut.diff
+Patch7:       control-center-07-custom-keybinding.diff
+Patch8:       control-center-08-keybinding-caps-lock.diff
+Patch9:       control-center-09-volume-control.diff
+Patch10:      control-center-10-homefolder-keybindings.diff
+Patch11:      control-center-11-anykey-grab.diff
+Patch12:      control-center-12-wall.diff
+Patch13:      control-center-13-layout-deletion.diff
+Patch14:      control-center-14-background-crash.diff
+Patch15:      control-center-15-fix-keyboard-dialog.diff
+Patch16:      control-center-16-mouse-dialog.diff
+Patch17:      control-center-17-disable-gnome-screensaver.diff
+Patch18:      control-center-18-menu-entry.diff
+Patch19:      control-center-19-negative-refresh-rates.diff
+Patch20:      control-center-20-trusted-extensions.diff
 
 URL:          http://www.gnome.org
 BuildRoot:    %{_tmppath}/%{name}-%{version}-build
@@ -120,13 +117,13 @@
 %patch6 -p1
 %patch7 -p1
 %patch8 -p1
+%ifos solaris
 %patch9 -p1
+%endif
 %patch10 -p1
 %patch11 -p1
 %patch12 -p1
-%ifos solaris
 %patch13 -p1
-%endif
 %patch14 -p1
 %patch15 -p1
 %patch16 -p1
@@ -134,9 +131,6 @@
 %patch18 -p1
 %patch19 -p1
 %patch20 -p1
-%patch21 -p1
-%patch22 -p1
-%patch23 -p1
 
 %build
 %ifos linux
@@ -255,6 +249,10 @@
 %{_libdir}/*.so
 
 %changelog
+* Sat Jul 15 2006 - [email protected]
+- Remove all the xkb layout related patches to be
+  replaced by a single patch that removes the layout
+  options completely.
 * Mon Jun 12 2006 - [email protected]
 - Added patch22 to fix issue with negative refresh rates:
   Bug #6437221
--- a/patches/control-center-04-keyboard-layout.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
---- control-center-2.10.1/capplets/keyboard/gnome-keyboard-properties.c	Thu May 12 16:46:18 2005
-+++ control-center-2.10.1-new/capplets/keyboard/gnome-keyboard-properties.c	Fri May 13 10:36:51 2005
-@@ -38,6 +38,14 @@
- #include "capplet-stock-icons.h"
- #include <../accessibility/keyboard/accessibility-keyboard.h>
- 
-+#include <X11/X.h>
-+#include <X11/Xlib.h>
-+#include <X11/Xatom.h>
-+#include <X11/XKBlib.h>
-+#include <X11/extensions/XKBrules.h>
-+#include <gdk/gdk.h>
-+#include <gdk/gdkx.h>
-+
- #include "gnome-keyboard-properties-xkb.h"
- 
- enum
-@@ -46,6 +54,51 @@ enum
- 	RESPONSE_CLOSE
- };
- 
-+static gboolean check_xkb_support = FALSE;
-+
-+static gboolean
-+CheckXKB (void)
-+{
-+	gboolean have_xkb = FALSE;
-+	int opcode, errorBase, major, minor, xkbEventBase;
-+	Display *dpy = GDK_DISPLAY ();
-+
-+	gdk_error_trap_push ();
-+	have_xkb = XkbQueryExtension (dpy,
-+				      &opcode, &xkbEventBase, &errorBase,
-+				      &major, &minor)
-+		   && XkbUseExtension (dpy, &major, &minor);
-+	XSync (dpy, FALSE);
-+	gdk_error_trap_pop ();
-+
-+	if (have_xkb) {
-+		Atom rules_name;
-+		Atom ret;
-+		int fmt, scr;
-+		Status status;
-+		unsigned long nitems, extraBytes;
-+		unsigned char *prop = NULL;
-+
-+		scr = DefaultScreen (dpy);
-+		rules_name = XInternAtom (dpy,
-+					  _XKB_RF_NAMES_PROP_ATOM, True);
-+
-+		if (rules_name == None)
-+			return FALSE;
-+		
-+		status = XGetWindowProperty (dpy, RootWindow (dpy, scr),
-+					     rules_name, 0L,
-+					     _XKB_RF_NAMES_PROP_MAXLEN, False,
-+					     XA_STRING, &ret, &fmt, &nitems,
-+					     &extraBytes, &prop);
-+
-+		if (status == Success && prop)
-+			return TRUE;
-+	}
-+
-+	return FALSE;
-+}
-+
- static GladeXML *
- create_dialog (void)
- {
-@@ -69,6 +122,14 @@ create_dialog (void)
- 	gtk_size_group_add_widget (size_group, WID ("repeat_speed_scale"));
- 	gtk_size_group_add_widget (size_group, WID ("cursor_blink_time_scale"));
- 
-+	if (!check_xkb_support) {
-+		GtkWidget *layout_tab = WID ("xkb_model_layout_panels");
-+		GtkWidget *layout_options_tab = WID ("xkb_options_panels");
-+	    
-+		gtk_widget_hide (layout_tab);
-+		gtk_widget_hide (layout_options_tab);
-+	}
-+
- 	return dialog;
- }
- 
-@@ -168,8 +229,9 @@ setup_dialog (GladeXML       *dialog,
- 	g_signal_connect (G_OBJECT (WID ("keyboard_dialog")), "response", (GCallback) dialog_response, changeset);
- 	
- 	gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("break_enabled_toggle"))->child), TRUE);
--	
--        setup_xkb_tabs(dialog,changeset);
-+
-+	if (check_xkb_support)
-+		setup_xkb_tabs (dialog, changeset);
- }
- 
- static void
-@@ -247,6 +309,7 @@ main (int argc, char **argv) 
- 		get_legacy_settings ();
- 	} else {
- 		changeset = NULL;
-+		check_xkb_support = CheckXKB ();
- 		dialog = create_dialog ();
- 		setup_dialog (dialog, changeset);
- 		if (switch_to_typing_break_page) {
---- control-center-2.10.1/capplets/keyboard/gnome-keyboard-properties.glade	Thu May 12 16:46:19 2005
-+++ control-center-2.10.1-new/capplets/keyboard/gnome-keyboard-properties.glade	Fri May 13 10:36:51 2005
-@@ -772,7 +772,7 @@
- 	  </child>
- 
- 	  <child>
--	    <widget class="GtkVBox" id="vbox33">
-+	    <widget class="GtkVBox" id="xkb_model_layout_panels">
- 	      <property name="border_width">12</property>
- 	      <property name="visible">True</property>
- 	      <property name="homogeneous">False</property>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-04-remove-xkb-layout.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,2871 @@
+diff -urN control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.c control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.c
+--- control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.c	2006-01-27 07:30:22.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.c	2006-07-14 18:39:15.272839000 +1200
+@@ -169,7 +169,9 @@
+ 	
+ 	gtk_label_set_use_markup (GTK_LABEL (GTK_BIN (WID ("break_enabled_toggle"))->child), TRUE);
+ 	
++        /* HACK: Remove keyboard layout options
+         setup_xkb_tabs(dialog,changeset);
++	*/
+ }
+ 
+ static void
+diff -urN control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.glade control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.glade
+--- control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.glade	2006-01-11 23:37:38.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.glade	2006-07-14 20:43:41.885202000 +1200
+@@ -16,6 +16,8 @@
+   <property name="skip_pager_hint">False</property>
+   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="focus_on_map">True</property>
++  <property name="urgency_hint">False</property>
+   <property name="has_separator">False</property>
+ 
+   <child internal-child="vbox">
+@@ -100,6 +102,10 @@
+ 			  <property name="yalign">0.5</property>
+ 			  <property name="xpad">0</property>
+ 			  <property name="ypad">0</property>
++			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++			  <property name="width_chars">-1</property>
++			  <property name="single_line_mode">False</property>
++			  <property name="angle">0</property>
+ 			</widget>
+ 			<packing>
+ 			  <property name="padding">0</property>
+@@ -174,6 +180,10 @@
+ 		      <property name="yalign">0.5</property>
+ 		      <property name="xpad">0</property>
+ 		      <property name="ypad">0</property>
++		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++		      <property name="width_chars">-1</property>
++		      <property name="single_line_mode">False</property>
++		      <property name="angle">0</property>
+ 		    </widget>
+ 		    <packing>
+ 		      <property name="padding">0</property>
+@@ -201,6 +211,10 @@
+ 			  <property name="yalign">0.5</property>
+ 			  <property name="xpad">0</property>
+ 			  <property name="ypad">0</property>
++			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++			  <property name="width_chars">-1</property>
++			  <property name="single_line_mode">False</property>
++			  <property name="angle">0</property>
+ 			</widget>
+ 			<packing>
+ 			  <property name="padding">0</property>
+@@ -260,6 +274,10 @@
+ 				      <property name="xpad">0</property>
+ 				      <property name="ypad">0</property>
+ 				      <property name="mnemonic_widget">repeat_delay_scale</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -282,6 +300,10 @@
+ 				      <property name="xpad">0</property>
+ 				      <property name="ypad">0</property>
+ 				      <property name="mnemonic_widget">repeat_speed_scale</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -316,6 +338,10 @@
+ 				      <property name="yalign">0.5</property>
+ 				      <property name="xpad">10</property>
+ 				      <property name="ypad">0</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -337,6 +363,10 @@
+ 				      <property name="yalign">0.5</property>
+ 				      <property name="xpad">10</property>
+ 				      <property name="ypad">0</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -386,8 +416,8 @@
+ 				      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
+ 				      <property name="inverted">False</property>
+ 				      <property name="adjustment">30 10 110 10 10 0</property>
+-                                      <accessibility>
+-				        <atkproperty name="AtkObject::accessible_description" translatable="yes">Repeat keys speed</atkproperty>
++				      <accessibility>
++					<atkproperty name="AtkObject::accessible_description" translatable="yes">Repeat keys speed</atkproperty>
+ 				      </accessibility>
+ 				    </widget>
+ 				    <packing>
+@@ -423,6 +453,10 @@
+ 				      <property name="yalign">0.5</property>
+ 				      <property name="xpad">0</property>
+ 				      <property name="ypad">0</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -444,6 +478,10 @@
+ 				      <property name="yalign">0.5</property>
+ 				      <property name="xpad">0</property>
+ 				      <property name="ypad">0</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -506,6 +544,10 @@
+ 		      <property name="yalign">0.5</property>
+ 		      <property name="xpad">0</property>
+ 		      <property name="ypad">0</property>
++		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++		      <property name="width_chars">-1</property>
++		      <property name="single_line_mode">False</property>
++		      <property name="angle">0</property>
+ 		    </widget>
+ 		    <packing>
+ 		      <property name="padding">0</property>
+@@ -533,6 +575,10 @@
+ 			  <property name="yalign">0.5</property>
+ 			  <property name="xpad">0</property>
+ 			  <property name="ypad">0</property>
++			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++			  <property name="width_chars">-1</property>
++			  <property name="single_line_mode">False</property>
++			  <property name="angle">0</property>
+ 			</widget>
+ 			<packing>
+ 			  <property name="padding">0</property>
+@@ -586,6 +632,10 @@
+ 				  <property name="xpad">0</property>
+ 				  <property name="ypad">0</property>
+ 				  <property name="mnemonic_widget">cursor_blink_time_scale</property>
++				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				  <property name="width_chars">-1</property>
++				  <property name="single_line_mode">False</property>
++				  <property name="angle">0</property>
+ 				</widget>
+ 				<packing>
+ 				  <property name="padding">0</property>
+@@ -613,6 +663,10 @@
+ 				      <property name="yalign">0.5</property>
+ 				      <property name="xpad">10</property>
+ 				      <property name="ypad">0</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -632,7 +686,7 @@
+ 				      <property name="inverted">False</property>
+ 				      <property name="adjustment">1000 100 2500 200 200 0</property>
+ 				      <accessibility>
+-				        <atkproperty name="AtkObject::accessible_description" translatable="yes">Cursor blinks speed</atkproperty>
++					<atkproperty name="AtkObject::accessible_description" translatable="yes">Cursor blinks speed</atkproperty>
+ 				      </accessibility>
+ 				    </widget>
+ 				    <packing>
+@@ -655,6 +709,10 @@
+ 				      <property name="yalign">0.5</property>
+ 				      <property name="xpad">0</property>
+ 				      <property name="ypad">0</property>
++				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++				      <property name="width_chars">-1</property>
++				      <property name="single_line_mode">False</property>
++				      <property name="angle">0</property>
+ 				    </widget>
+ 				    <packing>
+ 				      <property name="padding">0</property>
+@@ -718,6 +776,10 @@
+ 		      <property name="xpad">0</property>
+ 		      <property name="ypad">0</property>
+ 		      <property name="mnemonic_widget">test_entry</property>
++		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++		      <property name="width_chars">-1</property>
++		      <property name="single_line_mode">False</property>
++		      <property name="angle">0</property>
+ 		    </widget>
+ 		    <packing>
+ 		      <property name="padding">0</property>
+@@ -735,7 +797,7 @@
+ 		      <property name="max_length">256</property>
+ 		      <property name="text" translatable="yes"></property>
+ 		      <property name="has_frame">True</property>
+-		      <property name="invisible_char" translatable="yes">*</property>
++		      <property name="invisible_char">*</property>
+ 		      <property name="activates_default">False</property>
+ 		    </widget>
+ 		    <packing>
+@@ -771,522 +833,10 @@
+ 	      <property name="yalign">0.5</property>
+ 	      <property name="xpad">0</property>
+ 	      <property name="ypad">0</property>
+-	    </widget>
+-	    <packing>
+-	      <property name="type">tab</property>
+-	    </packing>
+-	  </child>
+-
+-	  <child>
+-	    <widget class="GtkVBox" id="vbox33">
+-	      <property name="border_width">12</property>
+-	      <property name="visible">True</property>
+-	      <property name="homogeneous">False</property>
+-	      <property name="spacing">0</property>
+-
+-	      <child>
+-		<widget class="GtkVBox" id="vbox34">
+-		  <property name="visible">True</property>
+-		  <property name="homogeneous">False</property>
+-		  <property name="spacing">6</property>
+-
+-		  <child>
+-		    <widget class="GtkHBox" id="xkb_models_box">
+-		      <property name="visible">True</property>
+-		      <property name="homogeneous">False</property>
+-		      <property name="spacing">12</property>
+-
+-		      <child>
+-			<widget class="GtkLabel" id="label48">
+-			  <property name="visible">True</property>
+-			  <property name="label" translatable="yes">Keyboard _model:</property>
+-			  <property name="use_underline">True</property>
+-			  <property name="use_markup">False</property>
+-			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+-			  <property name="wrap">False</property>
+-			  <property name="selectable">False</property>
+-			  <property name="xalign">0</property>
+-			  <property name="yalign">0.5</property>
+-			  <property name="xpad">0</property>
+-			  <property name="ypad">0</property>
+-			  <property name="mnemonic_widget">xkb_model</property>
+-			</widget>
+-			<packing>
+-			  <property name="padding">0</property>
+-			  <property name="expand">False</property>
+-			  <property name="fill">False</property>
+-			</packing>
+-		      </child>
+-
+-		      <child>
+-			<widget class="GtkEntry" id="xkb_model">
+-			  <property name="visible">True</property>
+-			  <property name="editable">False</property>
+-			  <property name="visibility">True</property>
+-			  <property name="max_length">0</property>
+-			  <property name="text" translatable="yes">Microsoft Natural Keyboard</property>
+-			  <property name="has_frame">True</property>
+-			  <property name="invisible_char" translatable="yes">*</property>
+-			  <property name="activates_default">False</property>
+-			</widget>
+-			<packing>
+-			  <property name="padding">0</property>
+-			  <property name="expand">True</property>
+-			  <property name="fill">True</property>
+-			</packing>
+-		      </child>
+-
+-		      <child>
+-			<widget class="GtkButton" id="xkb_model_pick">
+-			  <property name="visible">True</property>
+-			  <property name="can_focus">True</property>
+-			  <property name="label" translatable="yes">...</property>
+-			  <property name="use_underline">True</property>
+-			  <property name="relief">GTK_RELIEF_NORMAL</property>
+-			  <property name="focus_on_click">True</property>
+-			</widget>
+-			<packing>
+-			  <property name="padding">0</property>
+-			  <property name="expand">False</property>
+-			  <property name="fill">False</property>
+-			</packing>
+-		      </child>
+-
+-		      <child>
+-			<placeholder/>
+-		      </child>
+-		    </widget>
+-		    <packing>
+-		      <property name="padding">0</property>
+-		      <property name="expand">False</property>
+-		      <property name="fill">False</property>
+-		    </packing>
+-		  </child>
+-
+-		  <child>
+-		    <widget class="GtkHBox" id="xkb_layouts_panels">
+-		      <property name="visible">True</property>
+-		      <property name="homogeneous">False</property>
+-		      <property name="spacing">6</property>
+-
+-		      <child>
+-			<widget class="GtkVBox" id="vbox39">
+-			  <property name="visible">True</property>
+-			  <property name="homogeneous">False</property>
+-			  <property name="spacing">6</property>
+-
+-			  <child>
+-			    <widget class="GtkLabel" id="label52">
+-			      <property name="visible">True</property>
+-			      <property name="label" translatable="yes">_Selected layouts:</property>
+-			      <property name="use_underline">True</property>
+-			      <property name="use_markup">False</property>
+-			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+-			      <property name="wrap">False</property>
+-			      <property name="selectable">False</property>
+-			      <property name="xalign">0</property>
+-			      <property name="yalign">0.5</property>
+-			      <property name="xpad">0</property>
+-			      <property name="ypad">0</property>
+-			      <property name="mnemonic_widget">xkb_layouts_selected</property>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">False</property>
+-			      <property name="fill">False</property>
+-			    </packing>
+-			  </child>
+-
+-			  <child>
+-			    <widget class="GtkScrolledWindow" id="scrolledwindow1">
+-			      <property name="visible">True</property>
+-			      <property name="can_focus">True</property>
+-			      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+-			      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+-			      <property name="shadow_type">GTK_SHADOW_IN</property>
+-			      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+-
+-			      <child>
+-				<widget class="GtkTreeView" id="xkb_layouts_selected">
+-				  <property name="visible">True</property>
+-				  <property name="can_focus">True</property>
+-				  <property name="headers_visible">True</property>
+-				  <property name="rules_hint">False</property>
+-				  <property name="reorderable">False</property>
+-				  <property name="enable_search">True</property>
+-				</widget>
+-			      </child>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">True</property>
+-			      <property name="fill">True</property>
+-			    </packing>
+-			  </child>
+-			</widget>
+-			<packing>
+-			  <property name="padding">0</property>
+-			  <property name="expand">True</property>
+-			  <property name="fill">True</property>
+-			</packing>
+-		      </child>
+-
+-		      <child>
+-			<widget class="GtkVBox" id="vbox35">
+-			  <property name="border_width">6</property>
+-			  <property name="visible">True</property>
+-			  <property name="homogeneous">False</property>
+-			  <property name="spacing">12</property>
+-
+-			  <child>
+-			    <widget class="GtkLabel" id="label54">
+-			      <property name="visible">True</property>
+-			      <property name="label" translatable="yes"></property>
+-			      <property name="use_underline">False</property>
+-			      <property name="use_markup">False</property>
+-			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+-			      <property name="wrap">False</property>
+-			      <property name="selectable">False</property>
+-			      <property name="xalign">0.5</property>
+-			      <property name="yalign">0.5</property>
+-			      <property name="xpad">0</property>
+-			      <property name="ypad">0</property>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">False</property>
+-			      <property name="fill">False</property>
+-			    </packing>
+-			  </child>
+-
+-			  <child>
+-			    <widget class="GtkButton" id="xkb_layouts_add">
+-			      <property name="visible">True</property>
+-			      <property name="can_focus">True</property>
+-			      <property name="relief">GTK_RELIEF_NORMAL</property>
+-			      <property name="focus_on_click">True</property>
+-
+-			      <child>
+-				<widget class="GtkAlignment" id="alignment3">
+-				  <property name="visible">True</property>
+-				  <property name="xalign">0.5</property>
+-				  <property name="yalign">0.5</property>
+-				  <property name="xscale">0</property>
+-				  <property name="yscale">0</property>
+-				  <property name="top_padding">0</property>
+-				  <property name="bottom_padding">0</property>
+-				  <property name="left_padding">0</property>
+-				  <property name="right_padding">0</property>
+-
+-				  <child>
+-				    <widget class="GtkHBox" id="hbox31">
+-				      <property name="visible">True</property>
+-				      <property name="homogeneous">False</property>
+-				      <property name="spacing">2</property>
+-
+-				      <child>
+-					<widget class="GtkImage" id="image4">
+-					  <property name="visible">True</property>
+-					  <property name="stock">gtk-add</property>
+-					  <property name="icon_size">4</property>
+-					  <property name="xalign">0.5</property>
+-					  <property name="yalign">0.5</property>
+-					  <property name="xpad">0</property>
+-					  <property name="ypad">0</property>
+-					</widget>
+-					<packing>
+-					  <property name="padding">0</property>
+-					  <property name="expand">False</property>
+-					  <property name="fill">False</property>
+-					</packing>
+-				      </child>
+-
+-				      <child>
+-					<widget class="GtkLabel" id="label60">
+-					  <property name="visible">True</property>
+-					  <property name="label" translatable="yes">_Add...</property>
+-					  <property name="use_underline">True</property>
+-					  <property name="use_markup">False</property>
+-					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+-					  <property name="wrap">False</property>
+-					  <property name="selectable">False</property>
+-					  <property name="xalign">0.5</property>
+-					  <property name="yalign">0.5</property>
+-					  <property name="xpad">0</property>
+-					  <property name="ypad">0</property>
+-					</widget>
+-					<packing>
+-					  <property name="padding">0</property>
+-					  <property name="expand">False</property>
+-					  <property name="fill">False</property>
+-					</packing>
+-				      </child>
+-				    </widget>
+-				  </child>
+-				</widget>
+-			      </child>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">False</property>
+-			      <property name="fill">False</property>
+-			    </packing>
+-			  </child>
+-
+-			  <child>
+-			    <widget class="GtkButton" id="xkb_layouts_remove">
+-			      <property name="visible">True</property>
+-			      <property name="can_focus">True</property>
+-			      <property name="label">gtk-remove</property>
+-			      <property name="use_stock">True</property>
+-			      <property name="relief">GTK_RELIEF_NORMAL</property>
+-			      <property name="focus_on_click">True</property>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">False</property>
+-			      <property name="fill">False</property>
+-			    </packing>
+-			  </child>
+-
+-			  <child>
+-			    <widget class="GtkButton" id="xkb_layouts_up">
+-			      <property name="visible">True</property>
+-			      <property name="can_focus">True</property>
+-			      <property name="label">gtk-go-up</property>
+-			      <property name="use_stock">True</property>
+-			      <property name="relief">GTK_RELIEF_NORMAL</property>
+-			      <property name="focus_on_click">True</property>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">False</property>
+-			      <property name="fill">False</property>
+-			    </packing>
+-			  </child>
+-
+-			  <child>
+-			    <widget class="GtkButton" id="xkb_layouts_down">
+-			      <property name="visible">True</property>
+-			      <property name="can_focus">True</property>
+-			      <property name="label">gtk-go-down</property>
+-			      <property name="use_stock">True</property>
+-			      <property name="relief">GTK_RELIEF_NORMAL</property>
+-			      <property name="focus_on_click">True</property>
+-			    </widget>
+-			    <packing>
+-			      <property name="padding">0</property>
+-			      <property name="expand">False</property>
+-			      <property name="fill">False</property>
+-			    </packing>
+-			  </child>
+-
+-			  <child>
+-			    <placeholder/>
+-			  </child>
+-			</widget>
+-			<packing>
+-			  <property name="padding">0</property>
+-			  <property name="expand">False</property>
+-			  <property name="fill">False</property>
+-			</packing>
+-		      </child>
+-		    </widget>
+-		    <packing>
+-		      <property name="padding">0</property>
+-		      <property name="expand">True</property>
+-		      <property name="fill">True</property>
+-		    </packing>
+-		  </child>
+-
+-		  <child>
+-		    <widget class="GtkCheckButton" id="chk_separate_group_per_window">
+-		      <property name="visible">True</property>
+-		      <property name="can_focus">True</property>
+-		      <property name="label" translatable="yes">Separate _group for each window</property>
+-		      <property name="use_underline">True</property>
+-		      <property name="relief">GTK_RELIEF_NORMAL</property>
+-		      <property name="focus_on_click">True</property>
+-		      <property name="active">False</property>
+-		      <property name="inconsistent">False</property>
+-		      <property name="draw_indicator">True</property>
+-		    </widget>
+-		    <packing>
+-		      <property name="padding">0</property>
+-		      <property name="expand">False</property>
+-		      <property name="fill">False</property>
+-		    </packing>
+-		  </child>
+-
+-		  <child>
+-		    <widget class="GtkHBox" id="hbox30">
+-		      <property name="visible">True</property>
+-		      <property name="homogeneous">False</property>
+-		      <property name="spacing">6</property>
+-
+-		      <child>
+-			<placeholder/>
+-		      </child>
+-
+-		      <child>
+-			<widget class="GtkButton" id="xkb_reset_to_defaults">
+-			  <property name="visible">True</property>
+-			  <property name="can_focus">True</property>
+-			  <property name="relief">GTK_RELIEF_NORMAL</property>
+-			  <property name="focus_on_click">True</property>
+-
+-			  <child>
+-			    <widget class="GtkAlignment" id="alignment2">
+-			      <property name="visible">True</property>
+-			      <property name="xalign">0.5</property>
+-			      <property name="yalign">0.5</property>
+-			      <property name="xscale">0</property>
+-			      <property name="yscale">0</property>
+-			      <property name="top_padding">0</property>
+-			      <property name="bottom_padding">0</property>
+-			      <property name="left_padding">0</property>
+-			      <property name="right_padding">0</property>
+-
+-			      <child>
+-				<widget class="GtkHBox" id="hbox29">
+-				  <property name="visible">True</property>
+-				  <property name="homogeneous">False</property>
+-				  <property name="spacing">2</property>
+-
+-				  <child>
+-				    <widget class="GtkImage" id="image3">
+-				      <property name="visible">True</property>
+-				      <property name="stock">gtk-refresh</property>
+-				      <property name="icon_size">4</property>
+-				      <property name="xalign">0.5</property>
+-				      <property name="yalign">0.5</property>
+-				      <property name="xpad">0</property>
+-				      <property name="ypad">0</property>
+-				    </widget>
+-				    <packing>
+-				      <property name="padding">0</property>
+-				      <property name="expand">False</property>
+-				      <property name="fill">False</property>
+-				    </packing>
+-				  </child>
+-
+-				  <child>
+-				    <widget class="GtkLabel" id="label51">
+-				      <property name="visible">True</property>
+-				      <property name="label" translatable="yes">Reset To De_faults</property>
+-				      <property name="use_underline">True</property>
+-				      <property name="use_markup">False</property>
+-				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+-				      <property name="wrap">False</property>
+-				      <property name="selectable">False</property>
+-				      <property name="xalign">0.5</property>
+-				      <property name="yalign">0.5</property>
+-				      <property name="xpad">0</property>
+-				      <property name="ypad">0</property>
+-				    </widget>
+-				    <packing>
+-				      <property name="padding">0</property>
+-				      <property name="expand">False</property>
+-				      <property name="fill">False</property>
+-				      <property name="pack_type">GTK_PACK_END</property>
+-				    </packing>
+-				  </child>
+-				</widget>
+-			      </child>
+-			    </widget>
+-			  </child>
+-			</widget>
+-			<packing>
+-			  <property name="padding">0</property>
+-			  <property name="expand">False</property>
+-			  <property name="fill">False</property>
+-			  <property name="pack_type">GTK_PACK_END</property>
+-			</packing>
+-		      </child>
+-		    </widget>
+-		    <packing>
+-		      <property name="padding">0</property>
+-		      <property name="expand">False</property>
+-		      <property name="fill">True</property>
+-		    </packing>
+-		  </child>
+-		</widget>
+-		<packing>
+-		  <property name="padding">0</property>
+-		  <property name="expand">True</property>
+-		  <property name="fill">True</property>
+-		</packing>
+-	      </child>
+-	    </widget>
+-	    <packing>
+-	      <property name="tab_expand">False</property>
+-	      <property name="tab_fill">True</property>
+-	    </packing>
+-	  </child>
+-
+-	  <child>
+-	    <widget class="GtkLabel" id="label46">
+-	      <property name="visible">True</property>
+-	      <property name="label" translatable="yes">Layouts</property>
+-	      <property name="use_underline">False</property>
+-	      <property name="use_markup">False</property>
+-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+-	      <property name="wrap">False</property>
+-	      <property name="selectable">False</property>
+-	      <property name="xalign">0.5</property>
+-	      <property name="yalign">0.5</property>
+-	      <property name="xpad">0</property>
+-	      <property name="ypad">0</property>
+-	    </widget>
+-	    <packing>
+-	      <property name="type">tab</property>
+-	    </packing>
+-	  </child>
+-
+-	  <child>
+-	    <widget class="GtkScrolledWindow" id="scrolledwindow7">
+-	      <property name="border_width">12</property>
+-	      <property name="visible">True</property>
+-	      <property name="can_focus">True</property>
+-	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+-	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+-	      <property name="shadow_type">GTK_SHADOW_NONE</property>
+-	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+-
+-	      <child>
+-		<widget class="GtkViewport" id="viewport1">
+-		  <property name="visible">True</property>
+-		  <property name="shadow_type">GTK_SHADOW_NONE</property>
+-
+-		  <child>
+-		    <widget class="GtkVBox" id="options_vbox">
+-		      <property name="visible">True</property>
+-		      <property name="homogeneous">False</property>
+-		      <property name="spacing">0</property>
+-		    </widget>
+-		  </child>
+-		</widget>
+-	      </child>
+-	    </widget>
+-	    <packing>
+-	      <property name="tab_expand">False</property>
+-	      <property name="tab_fill">True</property>
+-	    </packing>
+-	  </child>
+-
+-	  <child>
+-	    <widget class="GtkLabel" id="label64">
+-	      <property name="visible">True</property>
+-	      <property name="label" translatable="yes">Layout Options</property>
+-	      <property name="use_underline">False</property>
+-	      <property name="use_markup">False</property>
+-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+-	      <property name="wrap">False</property>
+-	      <property name="selectable">False</property>
+-	      <property name="xalign">0.5</property>
+-	      <property name="yalign">0.5</property>
+-	      <property name="xpad">0</property>
+-	      <property name="ypad">0</property>
++	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++	      <property name="width_chars">-1</property>
++	      <property name="single_line_mode">False</property>
++	      <property name="angle">0</property>
+ 	    </widget>
+ 	    <packing>
+ 	      <property name="type">tab</property>
+@@ -1351,6 +901,10 @@
+ 			      <property name="yalign">0.5</property>
+ 			      <property name="xpad">0</property>
+ 			      <property name="ypad">0</property>
++			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++			      <property name="width_chars">-1</property>
++			      <property name="single_line_mode">False</property>
++			      <property name="angle">0</property>
+ 			    </widget>
+ 			    <packing>
+ 			      <property name="padding">0</property>
+@@ -1391,6 +945,10 @@
+ 					  <property name="xpad">0</property>
+ 					  <property name="ypad">0</property>
+ 					  <property name="mnemonic_widget">break_enabled_spin</property>
++					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++					  <property name="width_chars">-1</property>
++					  <property name="single_line_mode">False</property>
++					  <property name="angle">0</property>
+ 					</widget>
+ 					<packing>
+ 					  <property name="padding">0</property>
+@@ -1413,6 +971,10 @@
+ 					  <property name="xpad">0</property>
+ 					  <property name="ypad">0</property>
+ 					  <property name="mnemonic_widget">break_interval_spin</property>
++					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++					  <property name="width_chars">-1</property>
++					  <property name="single_line_mode">False</property>
++					  <property name="angle">0</property>
+ 					</widget>
+ 					<packing>
+ 					  <property name="padding">0</property>
+@@ -1506,6 +1068,10 @@
+ 					      <property name="yalign">0.5</property>
+ 					      <property name="xpad">0</property>
+ 					      <property name="ypad">0</property>
++					      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++					      <property name="width_chars">-1</property>
++					      <property name="single_line_mode">False</property>
++					      <property name="angle">0</property>
+ 					    </widget>
+ 					    <packing>
+ 					      <property name="padding">0</property>
+@@ -1527,6 +1093,10 @@
+ 					      <property name="yalign">0.5</property>
+ 					      <property name="xpad">0</property>
+ 					      <property name="ypad">0</property>
++					      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++					      <property name="width_chars">-1</property>
++					      <property name="single_line_mode">False</property>
++					      <property name="angle">0</property>
+ 					    </widget>
+ 					    <packing>
+ 					      <property name="padding">0</property>
+@@ -1623,6 +1193,10 @@
+ 	      <property name="yalign">0.5</property>
+ 	      <property name="xpad">0</property>
+ 	      <property name="ypad">0</property>
++	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++	      <property name="width_chars">-1</property>
++	      <property name="single_line_mode">False</property>
++	      <property name="angle">0</property>
+ 	    </widget>
+ 	    <packing>
+ 	      <property name="type">tab</property>
+@@ -1655,6 +1229,8 @@
+   <property name="skip_pager_hint">False</property>
+   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="focus_on_map">True</property>
++  <property name="urgency_hint">False</property>
+   <property name="has_separator">False</property>
+ 
+   <child internal-child="vbox">
+@@ -1722,6 +1298,10 @@
+ 	      <property name="yalign">0.5</property>
+ 	      <property name="xpad">0</property>
+ 	      <property name="ypad">0</property>
++	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++	      <property name="width_chars">-1</property>
++	      <property name="single_line_mode">False</property>
++	      <property name="angle">0</property>
+ 	    </widget>
+ 	    <packing>
+ 	      <property name="padding">0</property>
+@@ -1747,6 +1327,9 @@
+ 		  <property name="rules_hint">False</property>
+ 		  <property name="reorderable">False</property>
+ 		  <property name="enable_search">True</property>
++		  <property name="fixed_height_mode">False</property>
++		  <property name="hover_selection">False</property>
++		  <property name="hover_expand">False</property>
+ 		</widget>
+ 	      </child>
+ 	    </widget>
+@@ -1783,6 +1366,8 @@
+   <property name="skip_pager_hint">False</property>
+   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="focus_on_map">True</property>
++  <property name="urgency_hint">False</property>
+   <property name="has_separator">False</property>
+ 
+   <child internal-child="vbox">
+@@ -1856,6 +1441,10 @@
+ 		  <property name="xpad">0</property>
+ 		  <property name="ypad">0</property>
+ 		  <property name="mnemonic_widget">hpaned1</property>
++		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++		  <property name="width_chars">-1</property>
++		  <property name="single_line_mode">False</property>
++		  <property name="angle">0</property>
+ 		</widget>
+ 		<packing>
+ 		  <property name="padding">0</property>
+@@ -1881,6 +1470,9 @@
+ 		      <property name="rules_hint">False</property>
+ 		      <property name="reorderable">False</property>
+ 		      <property name="enable_search">True</property>
++		      <property name="fixed_height_mode">False</property>
++		      <property name="hover_selection">False</property>
++		      <property name="hover_expand">False</property>
+ 		    </widget>
+ 		  </child>
+ 		</widget>
+@@ -1917,6 +1509,10 @@
+ 		  <property name="yalign">0.5</property>
+ 		  <property name="xpad">0</property>
+ 		  <property name="ypad">0</property>
++		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
++		  <property name="width_chars">-1</property>
++		  <property name="single_line_mode">False</property>
++		  <property name="angle">0</property>
+ 		</widget>
+ 		<packing>
+ 		  <property name="padding">0</property>
+diff -urN control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.glade.bak control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.glade.bak
+--- control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.glade.bak	1970-01-01 12:00:00.000000000 +1200
++++ control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.glade.bak	2006-07-14 18:00:49.590711000 +1200
+@@ -0,0 +1,1948 @@
++<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
++<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
++
++<glade-interface>
++
++<widget class="GtkDialog" id="keyboard_dialog">
++  <property name="border_width">6</property>
++  <property name="title" translatable="yes">Keyboard Preferences</property>
++  <property name="type">GTK_WINDOW_TOPLEVEL</property>
++  <property name="window_position">GTK_WIN_POS_NONE</property>
++  <property name="modal">False</property>
++  <property name="resizable">True</property>
++  <property name="destroy_with_parent">False</property>
++  <property name="decorated">True</property>
++  <property name="skip_taskbar_hint">False</property>
++  <property name="skip_pager_hint">False</property>
++  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
++  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="has_separator">False</property>
++
++  <child internal-child="vbox">
++    <widget class="GtkVBox" id="dialog-vbox1">
++      <property name="visible">True</property>
++      <property name="homogeneous">False</property>
++      <property name="spacing">2</property>
++
++      <child internal-child="action_area">
++	<widget class="GtkHButtonBox" id="hbuttonbox1">
++	  <property name="visible">True</property>
++	  <property name="layout_style">GTK_BUTTONBOX_END</property>
++
++	  <child>
++	    <widget class="GtkButton" id="helpbutton1">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-help</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-11</property>
++	    </widget>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="button3">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">0</property>
++	      <signal name="clicked" handler="accessibility_button_clicked" last_modification_time="Tue, 02 Jul 2002 06:58:29 GMT"/>
++
++	      <child>
++		<widget class="GtkAlignment" id="alignment1">
++		  <property name="visible">True</property>
++		  <property name="xalign">0.5</property>
++		  <property name="yalign">0.5</property>
++		  <property name="xscale">0</property>
++		  <property name="yscale">0</property>
++		  <property name="top_padding">0</property>
++		  <property name="bottom_padding">0</property>
++		  <property name="left_padding">0</property>
++		  <property name="right_padding">0</property>
++
++		  <child>
++		    <widget class="GtkHBox" id="hbox7">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">2</property>
++
++		      <child>
++			<widget class="GtkImage" id="image2">
++			  <property name="visible">True</property>
++			  <property name="stock">gtk-jump-to</property>
++			  <property name="icon_size">4</property>
++			  <property name="xalign">0.5</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkLabel" id="label19">
++			  <property name="visible">True</property>
++			  <property name="label" translatable="yes">_Accessibility...</property>
++			  <property name="use_underline">True</property>
++			  <property name="use_markup">False</property>
++			  <property name="justify">GTK_JUSTIFY_LEFT</property>
++			  <property name="wrap">False</property>
++			  <property name="selectable">False</property>
++			  <property name="xalign">0.5</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++		    </widget>
++		  </child>
++		</widget>
++	      </child>
++	    </widget>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="button4">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="has_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="has_focus">True</property>
++	      <property name="label">gtk-close</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-7</property>
++	    </widget>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">False</property>
++	  <property name="fill">True</property>
++	  <property name="pack_type">GTK_PACK_END</property>
++	</packing>
++      </child>
++
++      <child>
++	<widget class="GtkNotebook" id="keyboard_notebook">
++	  <property name="border_width">5</property>
++	  <property name="visible">True</property>
++	  <property name="can_focus">True</property>
++	  <property name="show_tabs">True</property>
++	  <property name="show_border">True</property>
++	  <property name="tab_pos">GTK_POS_TOP</property>
++	  <property name="scrollable">False</property>
++	  <property name="enable_popup">False</property>
++
++	  <child>
++	    <widget class="GtkVBox" id="vbox2">
++	      <property name="border_width">12</property>
++	      <property name="visible">True</property>
++	      <property name="homogeneous">False</property>
++	      <property name="spacing">18</property>
++
++	      <child>
++		<widget class="GtkVBox" id="vbox22">
++		  <property name="visible">True</property>
++		  <property name="homogeneous">False</property>
++		  <property name="spacing">6</property>
++
++		  <child>
++		    <widget class="GtkLabel" id="label1">
++		      <property name="visible">True</property>
++		      <property name="label" translatable="yes">&lt;b&gt;Repeat Keys&lt;/b&gt;</property>
++		      <property name="use_underline">False</property>
++		      <property name="use_markup">True</property>
++		      <property name="justify">GTK_JUSTIFY_LEFT</property>
++		      <property name="wrap">False</property>
++		      <property name="selectable">False</property>
++		      <property name="xalign">0</property>
++		      <property name="yalign">0.5</property>
++		      <property name="xpad">0</property>
++		      <property name="ypad">0</property>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">False</property>
++		      <property name="fill">False</property>
++		    </packing>
++		  </child>
++
++		  <child>
++		    <widget class="GtkHBox" id="hbox19">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">0</property>
++
++		      <child>
++			<widget class="GtkLabel" id="label43">
++			  <property name="visible">True</property>
++			  <property name="label" translatable="yes">    </property>
++			  <property name="use_underline">False</property>
++			  <property name="use_markup">False</property>
++			  <property name="justify">GTK_JUSTIFY_LEFT</property>
++			  <property name="wrap">False</property>
++			  <property name="selectable">False</property>
++			  <property name="xalign">0.5</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkVBox" id="vbox3">
++			  <property name="visible">True</property>
++			  <property name="homogeneous">False</property>
++			  <property name="spacing">6</property>
++
++			  <child>
++			    <widget class="GtkCheckButton" id="repeat_toggle">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="label" translatable="yes">Key presses _repeat when key is held down</property>
++			      <property name="use_underline">True</property>
++			      <property name="relief">GTK_RELIEF_NORMAL</property>
++			      <property name="focus_on_click">True</property>
++			      <property name="active">False</property>
++			      <property name="inconsistent">False</property>
++			      <property name="draw_indicator">True</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkHBox" id="repeat_table">
++			      <property name="visible">True</property>
++			      <property name="homogeneous">False</property>
++			      <property name="spacing">12</property>
++
++			      <child>
++				<widget class="GtkVBox" id="vbox24">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">6</property>
++
++				  <child>
++				    <widget class="GtkLabel" id="repeat_delay_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">_Delay:</property>
++				      <property name="use_underline">True</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_CENTER</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">0</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				      <property name="mnemonic_widget">repeat_delay_scale</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkLabel" id="repeat_speed_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">_Speed:</property>
++				      <property name="use_underline">True</property>
++				      <property name="use_markup">False</property>
++				      <property name="justify">GTK_JUSTIFY_CENTER</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">0</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				      <property name="mnemonic_widget">repeat_speed_scale</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">False</property>
++				  <property name="fill">False</property>
++				</packing>
++			      </child>
++
++			      <child>
++				<widget class="GtkVBox" id="vbox25">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">6</property>
++
++				  <child>
++				    <widget class="GtkLabel" id="delay_short_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;Short&lt;/i&gt;&lt;/small&gt;</property>
++				      <property name="use_underline">False</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">1</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">10</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkLabel" id="repeat_slow_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;Slow&lt;/i&gt;&lt;/small&gt;</property>
++				      <property name="use_underline">False</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">1</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">10</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">False</property>
++				  <property name="fill">False</property>
++				</packing>
++			      </child>
++
++			      <child>
++				<widget class="GtkVBox" id="vbox26">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">6</property>
++
++				  <child>
++				    <widget class="GtkHScale" id="repeat_delay_scale">
++				      <property name="visible">True</property>
++				      <property name="can_focus">True</property>
++				      <property name="draw_value">False</property>
++				      <property name="value_pos">GTK_POS_TOP</property>
++				      <property name="digits">1</property>
++				      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
++				      <property name="inverted">False</property>
++				      <property name="adjustment">500 100 1500 10 10 0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkHScale" id="repeat_speed_scale">
++				      <property name="visible">True</property>
++				      <property name="can_focus">True</property>
++				      <property name="draw_value">False</property>
++				      <property name="value_pos">GTK_POS_TOP</property>
++				      <property name="digits">1</property>
++				      <property name="update_policy">GTK_UPDATE_CONTINUOUS</property>
++				      <property name="inverted">False</property>
++				      <property name="adjustment">30 10 110 10 10 0</property>
++                                      <accessibility>
++				        <atkproperty name="AtkObject::accessible_description" translatable="yes">Repeat keys speed</atkproperty>
++				      </accessibility>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">True</property>
++				  <property name="fill">True</property>
++				</packing>
++			      </child>
++
++			      <child>
++				<widget class="GtkVBox" id="vbox27">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">6</property>
++
++				  <child>
++				    <widget class="GtkLabel" id="delay_long_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;Long&lt;/i&gt;&lt;/small&gt;</property>
++				      <property name="use_underline">False</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">0</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkLabel" id="repeat_fast_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;Fast&lt;/i&gt;&lt;/small&gt;</property>
++				      <property name="use_underline">False</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">0</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">False</property>
++				  <property name="fill">False</property>
++				</packing>
++			      </child>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">True</property>
++			    </packing>
++			  </child>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">True</property>
++			  <property name="fill">True</property>
++			</packing>
++		      </child>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">True</property>
++		      <property name="fill">True</property>
++		    </packing>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">False</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<widget class="GtkVBox" id="vbox23">
++		  <property name="visible">True</property>
++		  <property name="homogeneous">False</property>
++		  <property name="spacing">6</property>
++
++		  <child>
++		    <widget class="GtkLabel" id="label5">
++		      <property name="visible">True</property>
++		      <property name="label" translatable="yes">&lt;b&gt;Cursor Blinking&lt;/b&gt;</property>
++		      <property name="use_underline">False</property>
++		      <property name="use_markup">True</property>
++		      <property name="justify">GTK_JUSTIFY_LEFT</property>
++		      <property name="wrap">False</property>
++		      <property name="selectable">False</property>
++		      <property name="xalign">0</property>
++		      <property name="yalign">0.5</property>
++		      <property name="xpad">0</property>
++		      <property name="ypad">0</property>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">False</property>
++		      <property name="fill">False</property>
++		    </packing>
++		  </child>
++
++		  <child>
++		    <widget class="GtkHBox" id="hbox20">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">0</property>
++
++		      <child>
++			<widget class="GtkLabel" id="label44">
++			  <property name="visible">True</property>
++			  <property name="label" translatable="yes">    </property>
++			  <property name="use_underline">False</property>
++			  <property name="use_markup">False</property>
++			  <property name="justify">GTK_JUSTIFY_LEFT</property>
++			  <property name="wrap">False</property>
++			  <property name="selectable">False</property>
++			  <property name="xalign">0.5</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkVBox" id="cursor_vbox">
++			  <property name="visible">True</property>
++			  <property name="homogeneous">False</property>
++			  <property name="spacing">6</property>
++
++			  <child>
++			    <widget class="GtkCheckButton" id="cursor_toggle">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="label" translatable="yes">Cursor _blinks in text boxes and fields</property>
++			      <property name="use_underline">True</property>
++			      <property name="relief">GTK_RELIEF_NORMAL</property>
++			      <property name="focus_on_click">True</property>
++			      <property name="active">False</property>
++			      <property name="inconsistent">False</property>
++			      <property name="draw_indicator">True</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkHBox" id="cursor_hbox">
++			      <property name="visible">True</property>
++			      <property name="homogeneous">False</property>
++			      <property name="spacing">12</property>
++
++			      <child>
++				<widget class="GtkLabel" id="cursor_speed_label">
++				  <property name="visible">True</property>
++				  <property name="label" translatable="yes">S_peed:</property>
++				  <property name="use_underline">True</property>
++				  <property name="use_markup">False</property>
++				  <property name="justify">GTK_JUSTIFY_CENTER</property>
++				  <property name="wrap">False</property>
++				  <property name="selectable">False</property>
++				  <property name="xalign">0</property>
++				  <property name="yalign">0.5</property>
++				  <property name="xpad">0</property>
++				  <property name="ypad">0</property>
++				  <property name="mnemonic_widget">cursor_blink_time_scale</property>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">False</property>
++				  <property name="fill">False</property>
++				</packing>
++			      </child>
++
++			      <child>
++				<widget class="GtkHBox" id="hbox25">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">6</property>
++
++				  <child>
++				    <widget class="GtkLabel" id="blink_slow_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;Slow&lt;/i&gt;&lt;/small&gt;</property>
++				      <property name="use_underline">False</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">1</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">10</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">False</property>
++				      <property name="fill">False</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkHScale" id="cursor_blink_time_scale">
++				      <property name="visible">True</property>
++				      <property name="can_focus">True</property>
++				      <property name="draw_value">False</property>
++				      <property name="value_pos">GTK_POS_TOP</property>
++				      <property name="digits">1</property>
++				      <property name="update_policy">GTK_UPDATE_DISCONTINUOUS</property>
++				      <property name="inverted">False</property>
++				      <property name="adjustment">1000 100 2500 200 200 0</property>
++				      <accessibility>
++				        <atkproperty name="AtkObject::accessible_description" translatable="yes">Cursor blinks speed</atkproperty>
++				      </accessibility>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">True</property>
++				      <property name="fill">True</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkLabel" id="blink_fast_label">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">&lt;small&gt;&lt;i&gt;Fast&lt;/i&gt;&lt;/small&gt;</property>
++				      <property name="use_underline">False</property>
++				      <property name="use_markup">True</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">0</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">False</property>
++				      <property name="fill">False</property>
++				    </packing>
++				  </child>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">True</property>
++				  <property name="fill">True</property>
++				</packing>
++			      </child>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">True</property>
++			      <property name="fill">True</property>
++			    </packing>
++			  </child>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">True</property>
++			  <property name="fill">True</property>
++			</packing>
++		      </child>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">True</property>
++		      <property name="fill">True</property>
++		    </packing>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">False</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<widget class="GtkHBox" id="hbox21">
++		  <property name="visible">True</property>
++		  <property name="homogeneous">False</property>
++		  <property name="spacing">12</property>
++
++		  <child>
++		    <widget class="GtkLabel" id="label42">
++		      <property name="visible">True</property>
++		      <property name="label" translatable="yes">_Type to test settings:</property>
++		      <property name="use_underline">True</property>
++		      <property name="use_markup">False</property>
++		      <property name="justify">GTK_JUSTIFY_LEFT</property>
++		      <property name="wrap">False</property>
++		      <property name="selectable">False</property>
++		      <property name="xalign">0.5</property>
++		      <property name="yalign">0.5</property>
++		      <property name="xpad">0</property>
++		      <property name="ypad">0</property>
++		      <property name="mnemonic_widget">test_entry</property>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">False</property>
++		      <property name="fill">False</property>
++		    </packing>
++		  </child>
++
++		  <child>
++		    <widget class="GtkEntry" id="test_entry">
++		      <property name="visible">True</property>
++		      <property name="can_focus">True</property>
++		      <property name="editable">True</property>
++		      <property name="visibility">True</property>
++		      <property name="max_length">256</property>
++		      <property name="text" translatable="yes"></property>
++		      <property name="has_frame">True</property>
++		      <property name="invisible_char" translatable="yes">*</property>
++		      <property name="activates_default">False</property>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">True</property>
++		      <property name="fill">True</property>
++		    </packing>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">False</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="tab_expand">False</property>
++	      <property name="tab_fill">True</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkLabel" id="label1">
++	      <property name="visible">True</property>
++	      <property name="label" translatable="yes">Keyboard</property>
++	      <property name="use_underline">False</property>
++	      <property name="use_markup">False</property>
++	      <property name="justify">GTK_JUSTIFY_CENTER</property>
++	      <property name="wrap">False</property>
++	      <property name="selectable">False</property>
++	      <property name="xalign">0.5</property>
++	      <property name="yalign">0.5</property>
++	      <property name="xpad">0</property>
++	      <property name="ypad">0</property>
++	    </widget>
++	    <packing>
++	      <property name="type">tab</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkVBox" id="vbox33">
++	      <property name="border_width">12</property>
++	      <property name="visible">True</property>
++	      <property name="homogeneous">False</property>
++	      <property name="spacing">0</property>
++
++	      <child>
++		<widget class="GtkVBox" id="vbox34">
++		  <property name="visible">True</property>
++		  <property name="homogeneous">False</property>
++		  <property name="spacing">6</property>
++
++		  <child>
++		    <widget class="GtkHBox" id="xkb_models_box">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">12</property>
++
++		      <child>
++			<widget class="GtkLabel" id="label48">
++			  <property name="visible">True</property>
++			  <property name="label" translatable="yes">Keyboard _model:</property>
++			  <property name="use_underline">True</property>
++			  <property name="use_markup">False</property>
++			  <property name="justify">GTK_JUSTIFY_LEFT</property>
++			  <property name="wrap">False</property>
++			  <property name="selectable">False</property>
++			  <property name="xalign">0</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			  <property name="mnemonic_widget">xkb_model</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkEntry" id="xkb_model">
++			  <property name="visible">True</property>
++			  <property name="editable">False</property>
++			  <property name="visibility">True</property>
++			  <property name="max_length">0</property>
++			  <property name="text" translatable="yes">Microsoft Natural Keyboard</property>
++			  <property name="has_frame">True</property>
++			  <property name="invisible_char" translatable="yes">*</property>
++			  <property name="activates_default">False</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">True</property>
++			  <property name="fill">True</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkButton" id="xkb_model_pick">
++			  <property name="visible">True</property>
++			  <property name="can_focus">True</property>
++			  <property name="label" translatable="yes">...</property>
++			  <property name="use_underline">True</property>
++			  <property name="relief">GTK_RELIEF_NORMAL</property>
++			  <property name="focus_on_click">True</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<placeholder/>
++		      </child>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">False</property>
++		      <property name="fill">False</property>
++		    </packing>
++		  </child>
++
++		  <child>
++		    <widget class="GtkHBox" id="xkb_layouts_panels">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">6</property>
++
++		      <child>
++			<widget class="GtkVBox" id="vbox39">
++			  <property name="visible">True</property>
++			  <property name="homogeneous">False</property>
++			  <property name="spacing">6</property>
++
++			  <child>
++			    <widget class="GtkLabel" id="label52">
++			      <property name="visible">True</property>
++			      <property name="label" translatable="yes">_Selected layouts:</property>
++			      <property name="use_underline">True</property>
++			      <property name="use_markup">False</property>
++			      <property name="justify">GTK_JUSTIFY_LEFT</property>
++			      <property name="wrap">False</property>
++			      <property name="selectable">False</property>
++			      <property name="xalign">0</property>
++			      <property name="yalign">0.5</property>
++			      <property name="xpad">0</property>
++			      <property name="ypad">0</property>
++			      <property name="mnemonic_widget">xkb_layouts_selected</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkScrolledWindow" id="scrolledwindow1">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
++			      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
++			      <property name="shadow_type">GTK_SHADOW_IN</property>
++			      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
++
++			      <child>
++				<widget class="GtkTreeView" id="xkb_layouts_selected">
++				  <property name="visible">True</property>
++				  <property name="can_focus">True</property>
++				  <property name="headers_visible">True</property>
++				  <property name="rules_hint">False</property>
++				  <property name="reorderable">False</property>
++				  <property name="enable_search">True</property>
++				</widget>
++			      </child>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">True</property>
++			      <property name="fill">True</property>
++			    </packing>
++			  </child>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">True</property>
++			  <property name="fill">True</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkVBox" id="vbox35">
++			  <property name="border_width">6</property>
++			  <property name="visible">True</property>
++			  <property name="homogeneous">False</property>
++			  <property name="spacing">12</property>
++
++			  <child>
++			    <widget class="GtkLabel" id="label54">
++			      <property name="visible">True</property>
++			      <property name="label" translatable="yes"></property>
++			      <property name="use_underline">False</property>
++			      <property name="use_markup">False</property>
++			      <property name="justify">GTK_JUSTIFY_LEFT</property>
++			      <property name="wrap">False</property>
++			      <property name="selectable">False</property>
++			      <property name="xalign">0.5</property>
++			      <property name="yalign">0.5</property>
++			      <property name="xpad">0</property>
++			      <property name="ypad">0</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkButton" id="xkb_layouts_add">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="relief">GTK_RELIEF_NORMAL</property>
++			      <property name="focus_on_click">True</property>
++
++			      <child>
++				<widget class="GtkAlignment" id="alignment3">
++				  <property name="visible">True</property>
++				  <property name="xalign">0.5</property>
++				  <property name="yalign">0.5</property>
++				  <property name="xscale">0</property>
++				  <property name="yscale">0</property>
++				  <property name="top_padding">0</property>
++				  <property name="bottom_padding">0</property>
++				  <property name="left_padding">0</property>
++				  <property name="right_padding">0</property>
++
++				  <child>
++				    <widget class="GtkHBox" id="hbox31">
++				      <property name="visible">True</property>
++				      <property name="homogeneous">False</property>
++				      <property name="spacing">2</property>
++
++				      <child>
++					<widget class="GtkImage" id="image4">
++					  <property name="visible">True</property>
++					  <property name="stock">gtk-add</property>
++					  <property name="icon_size">4</property>
++					  <property name="xalign">0.5</property>
++					  <property name="yalign">0.5</property>
++					  <property name="xpad">0</property>
++					  <property name="ypad">0</property>
++					</widget>
++					<packing>
++					  <property name="padding">0</property>
++					  <property name="expand">False</property>
++					  <property name="fill">False</property>
++					</packing>
++				      </child>
++
++				      <child>
++					<widget class="GtkLabel" id="label60">
++					  <property name="visible">True</property>
++					  <property name="label" translatable="yes">_Add...</property>
++					  <property name="use_underline">True</property>
++					  <property name="use_markup">False</property>
++					  <property name="justify">GTK_JUSTIFY_LEFT</property>
++					  <property name="wrap">False</property>
++					  <property name="selectable">False</property>
++					  <property name="xalign">0.5</property>
++					  <property name="yalign">0.5</property>
++					  <property name="xpad">0</property>
++					  <property name="ypad">0</property>
++					</widget>
++					<packing>
++					  <property name="padding">0</property>
++					  <property name="expand">False</property>
++					  <property name="fill">False</property>
++					</packing>
++				      </child>
++				    </widget>
++				  </child>
++				</widget>
++			      </child>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkButton" id="xkb_layouts_remove">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="label">gtk-remove</property>
++			      <property name="use_stock">True</property>
++			      <property name="relief">GTK_RELIEF_NORMAL</property>
++			      <property name="focus_on_click">True</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkButton" id="xkb_layouts_up">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="label">gtk-go-up</property>
++			      <property name="use_stock">True</property>
++			      <property name="relief">GTK_RELIEF_NORMAL</property>
++			      <property name="focus_on_click">True</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkButton" id="xkb_layouts_down">
++			      <property name="visible">True</property>
++			      <property name="can_focus">True</property>
++			      <property name="label">gtk-go-down</property>
++			      <property name="use_stock">True</property>
++			      <property name="relief">GTK_RELIEF_NORMAL</property>
++			      <property name="focus_on_click">True</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <placeholder/>
++			  </child>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">True</property>
++		      <property name="fill">True</property>
++		    </packing>
++		  </child>
++
++		  <child>
++		    <widget class="GtkCheckButton" id="chk_separate_group_per_window">
++		      <property name="visible">True</property>
++		      <property name="can_focus">True</property>
++		      <property name="label" translatable="yes">Separate _group for each window</property>
++		      <property name="use_underline">True</property>
++		      <property name="relief">GTK_RELIEF_NORMAL</property>
++		      <property name="focus_on_click">True</property>
++		      <property name="active">False</property>
++		      <property name="inconsistent">False</property>
++		      <property name="draw_indicator">True</property>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">False</property>
++		      <property name="fill">False</property>
++		    </packing>
++		  </child>
++
++		  <child>
++		    <widget class="GtkHBox" id="hbox30">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">6</property>
++
++		      <child>
++			<placeholder/>
++		      </child>
++
++		      <child>
++			<widget class="GtkButton" id="xkb_reset_to_defaults">
++			  <property name="visible">True</property>
++			  <property name="can_focus">True</property>
++			  <property name="relief">GTK_RELIEF_NORMAL</property>
++			  <property name="focus_on_click">True</property>
++
++			  <child>
++			    <widget class="GtkAlignment" id="alignment2">
++			      <property name="visible">True</property>
++			      <property name="xalign">0.5</property>
++			      <property name="yalign">0.5</property>
++			      <property name="xscale">0</property>
++			      <property name="yscale">0</property>
++			      <property name="top_padding">0</property>
++			      <property name="bottom_padding">0</property>
++			      <property name="left_padding">0</property>
++			      <property name="right_padding">0</property>
++
++			      <child>
++				<widget class="GtkHBox" id="hbox29">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">2</property>
++
++				  <child>
++				    <widget class="GtkImage" id="image3">
++				      <property name="visible">True</property>
++				      <property name="stock">gtk-refresh</property>
++				      <property name="icon_size">4</property>
++				      <property name="xalign">0.5</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">False</property>
++				      <property name="fill">False</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkLabel" id="label51">
++				      <property name="visible">True</property>
++				      <property name="label" translatable="yes">Reset To De_faults</property>
++				      <property name="use_underline">True</property>
++				      <property name="use_markup">False</property>
++				      <property name="justify">GTK_JUSTIFY_LEFT</property>
++				      <property name="wrap">False</property>
++				      <property name="selectable">False</property>
++				      <property name="xalign">0.5</property>
++				      <property name="yalign">0.5</property>
++				      <property name="xpad">0</property>
++				      <property name="ypad">0</property>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">False</property>
++				      <property name="fill">False</property>
++				      <property name="pack_type">GTK_PACK_END</property>
++				    </packing>
++				  </child>
++				</widget>
++			      </child>
++			    </widget>
++			  </child>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			  <property name="pack_type">GTK_PACK_END</property>
++			</packing>
++		      </child>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">False</property>
++		      <property name="fill">True</property>
++		    </packing>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">True</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="tab_expand">False</property>
++	      <property name="tab_fill">True</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkLabel" id="label46">
++	      <property name="visible">True</property>
++	      <property name="label" translatable="yes">Layouts</property>
++	      <property name="use_underline">False</property>
++	      <property name="use_markup">False</property>
++	      <property name="justify">GTK_JUSTIFY_LEFT</property>
++	      <property name="wrap">False</property>
++	      <property name="selectable">False</property>
++	      <property name="xalign">0.5</property>
++	      <property name="yalign">0.5</property>
++	      <property name="xpad">0</property>
++	      <property name="ypad">0</property>
++	    </widget>
++	    <packing>
++	      <property name="type">tab</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkScrolledWindow" id="scrolledwindow7">
++	      <property name="border_width">12</property>
++	      <property name="visible">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
++	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
++	      <property name="shadow_type">GTK_SHADOW_NONE</property>
++	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
++
++	      <child>
++		<widget class="GtkViewport" id="viewport1">
++		  <property name="visible">True</property>
++		  <property name="shadow_type">GTK_SHADOW_NONE</property>
++
++		  <child>
++		    <widget class="GtkVBox" id="options_vbox">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">0</property>
++		    </widget>
++		  </child>
++		</widget>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="tab_expand">False</property>
++	      <property name="tab_fill">True</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkLabel" id="label64">
++	      <property name="visible">True</property>
++	      <property name="label" translatable="yes">Layout Options</property>
++	      <property name="use_underline">False</property>
++	      <property name="use_markup">False</property>
++	      <property name="justify">GTK_JUSTIFY_LEFT</property>
++	      <property name="wrap">False</property>
++	      <property name="selectable">False</property>
++	      <property name="xalign">0.5</property>
++	      <property name="yalign">0.5</property>
++	      <property name="xpad">0</property>
++	      <property name="ypad">0</property>
++	    </widget>
++	    <packing>
++	      <property name="type">tab</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkVBox" id="vbox14">
++	      <property name="visible">True</property>
++	      <property name="homogeneous">False</property>
++	      <property name="spacing">12</property>
++
++	      <child>
++		<widget class="GtkVBox" id="vbox18">
++		  <property name="border_width">12</property>
++		  <property name="visible">True</property>
++		  <property name="homogeneous">False</property>
++		  <property name="spacing">18</property>
++
++		  <child>
++		    <widget class="GtkVBox" id="vbox28">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">6</property>
++
++		      <child>
++			<widget class="GtkCheckButton" id="break_enabled_toggle">
++			  <property name="visible">True</property>
++			  <property name="tooltip" translatable="yes">Lock screen after a certain duration to help prevent repetitive keyboard use injuries</property>
++			  <property name="can_focus">True</property>
++			  <property name="label" translatable="yes">&lt;b&gt;_Lock screen to enforce typing break&lt;/b&gt;</property>
++			  <property name="use_underline">True</property>
++			  <property name="relief">GTK_RELIEF_NORMAL</property>
++			  <property name="focus_on_click">True</property>
++			  <property name="active">False</property>
++			  <property name="inconsistent">False</property>
++			  <property name="draw_indicator">True</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkHBox" id="hbox26">
++			  <property name="visible">True</property>
++			  <property name="homogeneous">False</property>
++			  <property name="spacing">0</property>
++
++			  <child>
++			    <widget class="GtkLabel" id="label45">
++			      <property name="visible">True</property>
++			      <property name="label" translatable="yes">    </property>
++			      <property name="use_underline">False</property>
++			      <property name="use_markup">False</property>
++			      <property name="justify">GTK_JUSTIFY_LEFT</property>
++			      <property name="wrap">False</property>
++			      <property name="selectable">False</property>
++			      <property name="xalign">0.5</property>
++			      <property name="yalign">0.5</property>
++			      <property name="xpad">0</property>
++			      <property name="ypad">0</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkVBox" id="break_details_table">
++			      <property name="visible">True</property>
++			      <property name="homogeneous">False</property>
++			      <property name="spacing">6</property>
++
++			      <child>
++				<widget class="GtkHBox" id="hbox27">
++				  <property name="visible">True</property>
++				  <property name="homogeneous">False</property>
++				  <property name="spacing">12</property>
++
++				  <child>
++				    <widget class="GtkVBox" id="vbox30">
++				      <property name="visible">True</property>
++				      <property name="homogeneous">False</property>
++				      <property name="spacing">6</property>
++
++				      <child>
++					<widget class="GtkLabel" id="label37">
++					  <property name="visible">True</property>
++					  <property name="label" translatable="yes">_Work interval lasts:</property>
++					  <property name="use_underline">True</property>
++					  <property name="use_markup">False</property>
++					  <property name="justify">GTK_JUSTIFY_LEFT</property>
++					  <property name="wrap">False</property>
++					  <property name="selectable">False</property>
++					  <property name="xalign">0</property>
++					  <property name="yalign">0.5</property>
++					  <property name="xpad">0</property>
++					  <property name="ypad">0</property>
++					  <property name="mnemonic_widget">break_enabled_spin</property>
++					</widget>
++					<packing>
++					  <property name="padding">0</property>
++					  <property name="expand">True</property>
++					  <property name="fill">True</property>
++					</packing>
++				      </child>
++
++				      <child>
++					<widget class="GtkLabel" id="label30">
++					  <property name="visible">True</property>
++					  <property name="label" translatable="yes">_Break interval lasts:</property>
++					  <property name="use_underline">True</property>
++					  <property name="use_markup">True</property>
++					  <property name="justify">GTK_JUSTIFY_LEFT</property>
++					  <property name="wrap">False</property>
++					  <property name="selectable">False</property>
++					  <property name="xalign">0</property>
++					  <property name="yalign">0.5</property>
++					  <property name="xpad">0</property>
++					  <property name="ypad">0</property>
++					  <property name="mnemonic_widget">break_interval_spin</property>
++					</widget>
++					<packing>
++					  <property name="padding">0</property>
++					  <property name="expand">True</property>
++					  <property name="fill">True</property>
++					</packing>
++				      </child>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">False</property>
++				      <property name="fill">False</property>
++				    </packing>
++				  </child>
++
++				  <child>
++				    <widget class="GtkHBox" id="hbox28">
++				      <property name="visible">True</property>
++				      <property name="homogeneous">False</property>
++				      <property name="spacing">6</property>
++
++				      <child>
++					<widget class="GtkVBox" id="vbox31">
++					  <property name="visible">True</property>
++					  <property name="homogeneous">False</property>
++					  <property name="spacing">6</property>
++
++					  <child>
++					    <widget class="GtkSpinButton" id="break_enabled_spin">
++					      <property name="visible">True</property>
++					      <property name="tooltip" translatable="yes">Duration of work before forcing a break</property>
++					      <property name="can_focus">True</property>
++					      <property name="climb_rate">1</property>
++					      <property name="digits">0</property>
++					      <property name="numeric">False</property>
++					      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
++					      <property name="snap_to_ticks">False</property>
++					      <property name="wrap">False</property>
++					      <property name="adjustment">1 1 100000 1 10 10</property>
++					    </widget>
++					    <packing>
++					      <property name="padding">0</property>
++					      <property name="expand">True</property>
++					      <property name="fill">True</property>
++					    </packing>
++					  </child>
++
++					  <child>
++					    <widget class="GtkSpinButton" id="break_interval_spin">
++					      <property name="visible">True</property>
++					      <property name="tooltip" translatable="yes">Duration of the break when typing is disallowed</property>
++					      <property name="can_focus">True</property>
++					      <property name="climb_rate">1</property>
++					      <property name="digits">0</property>
++					      <property name="numeric">False</property>
++					      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
++					      <property name="snap_to_ticks">False</property>
++					      <property name="wrap">False</property>
++					      <property name="adjustment">1 1 100000 1 10 10</property>
++					    </widget>
++					    <packing>
++					      <property name="padding">0</property>
++					      <property name="expand">True</property>
++					      <property name="fill">True</property>
++					    </packing>
++					  </child>
++					</widget>
++					<packing>
++					  <property name="padding">0</property>
++					  <property name="expand">True</property>
++					  <property name="fill">True</property>
++					</packing>
++				      </child>
++
++				      <child>
++					<widget class="GtkVBox" id="vbox32">
++					  <property name="visible">True</property>
++					  <property name="homogeneous">False</property>
++					  <property name="spacing">6</property>
++
++					  <child>
++					    <widget class="GtkLabel" id="label39">
++					      <property name="visible">True</property>
++					      <property name="label" translatable="yes">minutes</property>
++					      <property name="use_underline">False</property>
++					      <property name="use_markup">False</property>
++					      <property name="justify">GTK_JUSTIFY_LEFT</property>
++					      <property name="wrap">False</property>
++					      <property name="selectable">False</property>
++					      <property name="xalign">0</property>
++					      <property name="yalign">0.5</property>
++					      <property name="xpad">0</property>
++					      <property name="ypad">0</property>
++					    </widget>
++					    <packing>
++					      <property name="padding">0</property>
++					      <property name="expand">True</property>
++					      <property name="fill">True</property>
++					    </packing>
++					  </child>
++
++					  <child>
++					    <widget class="GtkLabel" id="label31">
++					      <property name="visible">True</property>
++					      <property name="label" translatable="yes">minutes</property>
++					      <property name="use_underline">False</property>
++					      <property name="use_markup">False</property>
++					      <property name="justify">GTK_JUSTIFY_LEFT</property>
++					      <property name="wrap">False</property>
++					      <property name="selectable">False</property>
++					      <property name="xalign">0</property>
++					      <property name="yalign">0.5</property>
++					      <property name="xpad">0</property>
++					      <property name="ypad">0</property>
++					    </widget>
++					    <packing>
++					      <property name="padding">0</property>
++					      <property name="expand">True</property>
++					      <property name="fill">True</property>
++					    </packing>
++					  </child>
++					</widget>
++					<packing>
++					  <property name="padding">0</property>
++					  <property name="expand">True</property>
++					  <property name="fill">True</property>
++					</packing>
++				      </child>
++				    </widget>
++				    <packing>
++				      <property name="padding">0</property>
++				      <property name="expand">False</property>
++				      <property name="fill">False</property>
++				    </packing>
++				  </child>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">True</property>
++				  <property name="fill">True</property>
++				</packing>
++			      </child>
++
++			      <child>
++				<widget class="GtkCheckButton" id="break_postponement_toggle">
++				  <property name="visible">True</property>
++				  <property name="tooltip" translatable="yes">Check if breaks are allowed to be postponed</property>
++				  <property name="can_focus">True</property>
++				  <property name="label" translatable="yes">All_ow postponing of breaks</property>
++				  <property name="use_underline">True</property>
++				  <property name="relief">GTK_RELIEF_NORMAL</property>
++				  <property name="focus_on_click">True</property>
++				  <property name="active">False</property>
++				  <property name="inconsistent">False</property>
++				  <property name="draw_indicator">True</property>
++				</widget>
++				<packing>
++				  <property name="padding">0</property>
++				  <property name="expand">False</property>
++				  <property name="fill">False</property>
++				</packing>
++			      </child>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">True</property>
++			      <property name="fill">True</property>
++			    </packing>
++			  </child>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++		    </widget>
++		    <packing>
++		      <property name="padding">0</property>
++		      <property name="expand">True</property>
++		      <property name="fill">True</property>
++		    </packing>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">True</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="tab_expand">False</property>
++	      <property name="tab_fill">True</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkLabel" id="label20">
++	      <property name="visible">True</property>
++	      <property name="label" translatable="yes">Typing Break</property>
++	      <property name="use_underline">False</property>
++	      <property name="use_markup">False</property>
++	      <property name="justify">GTK_JUSTIFY_LEFT</property>
++	      <property name="wrap">False</property>
++	      <property name="selectable">False</property>
++	      <property name="xalign">0.5</property>
++	      <property name="yalign">0.5</property>
++	      <property name="xpad">0</property>
++	      <property name="ypad">0</property>
++	    </widget>
++	    <packing>
++	      <property name="type">tab</property>
++	    </packing>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">True</property>
++	  <property name="fill">True</property>
++	</packing>
++      </child>
++    </widget>
++  </child>
++</widget>
++
++<widget class="GtkDialog" id="xkb_model_chooser">
++  <property name="border_width">5</property>
++  <property name="visible">True</property>
++  <property name="title" translatable="yes">Choose a Keyboard Model</property>
++  <property name="type">GTK_WINDOW_TOPLEVEL</property>
++  <property name="window_position">GTK_WIN_POS_NONE</property>
++  <property name="modal">True</property>
++  <property name="default_width">450</property>
++  <property name="default_height">300</property>
++  <property name="resizable">True</property>
++  <property name="destroy_with_parent">False</property>
++  <property name="decorated">True</property>
++  <property name="skip_taskbar_hint">False</property>
++  <property name="skip_pager_hint">False</property>
++  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
++  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="has_separator">False</property>
++
++  <child internal-child="vbox">
++    <widget class="GtkVBox" id="dialog-vbox2">
++      <property name="visible">True</property>
++      <property name="homogeneous">False</property>
++      <property name="spacing">2</property>
++
++      <child internal-child="action_area">
++	<widget class="GtkHButtonBox" id="dialog-action_area1">
++	  <property name="visible">True</property>
++	  <property name="layout_style">GTK_BUTTONBOX_END</property>
++
++	  <child>
++	    <widget class="GtkButton" id="cancelbutton1">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-cancel</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-6</property>
++	    </widget>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="btnOk">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-ok</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-5</property>
++	    </widget>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">False</property>
++	  <property name="fill">True</property>
++	  <property name="pack_type">GTK_PACK_END</property>
++	</packing>
++      </child>
++
++      <child>
++	<widget class="GtkVBox" id="xkb_model_chooser_pane">
++	  <property name="border_width">5</property>
++	  <property name="visible">True</property>
++	  <property name="homogeneous">False</property>
++	  <property name="spacing">6</property>
++
++	  <child>
++	    <widget class="GtkLabel" id="label58">
++	      <property name="visible">True</property>
++	      <property name="label" translatable="yes">_Models:</property>
++	      <property name="use_underline">True</property>
++	      <property name="use_markup">False</property>
++	      <property name="justify">GTK_JUSTIFY_LEFT</property>
++	      <property name="wrap">False</property>
++	      <property name="selectable">False</property>
++	      <property name="xalign">0</property>
++	      <property name="yalign">0.5</property>
++	      <property name="xpad">0</property>
++	      <property name="ypad">0</property>
++	    </widget>
++	    <packing>
++	      <property name="padding">0</property>
++	      <property name="expand">False</property>
++	      <property name="fill">False</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkScrolledWindow" id="scrolledwindow5">
++	      <property name="visible">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
++	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
++	      <property name="shadow_type">GTK_SHADOW_IN</property>
++	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
++
++	      <child>
++		<widget class="GtkTreeView" id="models_list">
++		  <property name="visible">True</property>
++		  <property name="can_focus">True</property>
++		  <property name="headers_visible">False</property>
++		  <property name="rules_hint">False</property>
++		  <property name="reorderable">False</property>
++		  <property name="enable_search">True</property>
++		</widget>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="padding">0</property>
++	      <property name="expand">True</property>
++	      <property name="fill">True</property>
++	    </packing>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">True</property>
++	  <property name="fill">True</property>
++	</packing>
++      </child>
++    </widget>
++  </child>
++</widget>
++
++<widget class="GtkDialog" id="xkb_layout_chooser">
++  <property name="border_width">5</property>
++  <property name="visible">True</property>
++  <property name="title" translatable="yes">Choose a Layout</property>
++  <property name="type">GTK_WINDOW_TOPLEVEL</property>
++  <property name="window_position">GTK_WIN_POS_NONE</property>
++  <property name="modal">False</property>
++  <property name="default_width">670</property>
++  <property name="default_height">350</property>
++  <property name="resizable">True</property>
++  <property name="destroy_with_parent">False</property>
++  <property name="decorated">True</property>
++  <property name="skip_taskbar_hint">False</property>
++  <property name="skip_pager_hint">False</property>
++  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
++  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="has_separator">False</property>
++
++  <child internal-child="vbox">
++    <widget class="GtkVBox" id="dialog-vbox3">
++      <property name="visible">True</property>
++      <property name="homogeneous">False</property>
++      <property name="spacing">2</property>
++
++      <child internal-child="action_area">
++	<widget class="GtkHButtonBox" id="dialog-action_area2">
++	  <property name="visible">True</property>
++	  <property name="layout_style">GTK_BUTTONBOX_END</property>
++
++	  <child>
++	    <widget class="GtkButton" id="cancelbutton2">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-cancel</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-6</property>
++	    </widget>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="btnOk">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-ok</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-5</property>
++	    </widget>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">False</property>
++	  <property name="fill">True</property>
++	  <property name="pack_type">GTK_PACK_END</property>
++	</packing>
++      </child>
++
++      <child>
++	<widget class="GtkHPaned" id="hpaned1">
++	  <property name="visible">True</property>
++	  <property name="can_focus">True</property>
++
++	  <child>
++	    <widget class="GtkVBox" id="vbox43">
++	      <property name="border_width">5</property>
++	      <property name="visible">True</property>
++	      <property name="homogeneous">False</property>
++	      <property name="spacing">6</property>
++
++	      <child>
++		<widget class="GtkLabel" id="label59">
++		  <property name="visible">True</property>
++		  <property name="label" translatable="yes">A_vailable layouts:</property>
++		  <property name="use_underline">True</property>
++		  <property name="use_markup">False</property>
++		  <property name="justify">GTK_JUSTIFY_LEFT</property>
++		  <property name="wrap">False</property>
++		  <property name="selectable">False</property>
++		  <property name="xalign">0</property>
++		  <property name="yalign">0.5</property>
++		  <property name="xpad">0</property>
++		  <property name="ypad">0</property>
++		  <property name="mnemonic_widget">hpaned1</property>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">False</property>
++		  <property name="fill">False</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<widget class="GtkScrolledWindow" id="scrolledwindow6">
++		  <property name="visible">True</property>
++		  <property name="can_focus">True</property>
++		  <property name="hscrollbar_policy">GTK_POLICY_ALWAYS</property>
++		  <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
++		  <property name="shadow_type">GTK_SHADOW_IN</property>
++		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
++
++		  <child>
++		    <widget class="GtkTreeView" id="xkb_layouts_available">
++		      <property name="visible">True</property>
++		      <property name="can_focus">True</property>
++		      <property name="headers_visible">False</property>
++		      <property name="rules_hint">False</property>
++		      <property name="reorderable">False</property>
++		      <property name="enable_search">True</property>
++		    </widget>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">True</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="shrink">True</property>
++	      <property name="resize">False</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkVBox" id="vboxPreview">
++	      <property name="border_width">5</property>
++	      <property name="visible">True</property>
++	      <property name="homogeneous">False</property>
++	      <property name="spacing">6</property>
++
++	      <child>
++		<widget class="GtkLabel" id="label61">
++		  <property name="visible">True</property>
++		  <property name="label" translatable="yes">Preview:</property>
++		  <property name="use_underline">False</property>
++		  <property name="use_markup">False</property>
++		  <property name="justify">GTK_JUSTIFY_LEFT</property>
++		  <property name="wrap">False</property>
++		  <property name="selectable">False</property>
++		  <property name="xalign">0</property>
++		  <property name="yalign">0.5</property>
++		  <property name="xpad">0</property>
++		  <property name="ypad">0</property>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">False</property>
++		  <property name="fill">False</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<placeholder/>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="shrink">True</property>
++	      <property name="resize">True</property>
++	    </packing>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">True</property>
++	  <property name="fill">True</property>
++	</packing>
++      </child>
++    </widget>
++  </child>
++</widget>
++
++</glade-interface>
+diff -urN control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.gladep control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.gladep
+--- control-center-2.14.1/capplets/keyboard/gnome-keyboard-properties.gladep	1970-01-01 12:00:00.000000000 +1200
++++ control-center-2.14.1-hacked/capplets/keyboard/gnome-keyboard-properties.gladep	2006-07-14 20:43:41.879407000 +1200
+@@ -0,0 +1,8 @@
++<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
++<!DOCTYPE glade-project SYSTEM "http://glade.gnome.org/glade-project-2.0.dtd">
++
++<glade-project>
++  <name></name>
++  <program_name></program_name>
++  <gnome_support>FALSE</gnome_support>
++</glade-project>
+diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-daemon.c control-center-2.14.1-hacked/gnome-settings-daemon/gnome-settings-daemon.c
+--- control-center-2.14.1/gnome-settings-daemon/gnome-settings-daemon.c	2005-11-15 04:21:11.000000000 +1300
++++ control-center-2.14.1-hacked/gnome-settings-daemon/gnome-settings-daemon.c	2006-07-14 18:35:42.578931000 +1200
+@@ -341,8 +341,10 @@
+   gnome_settings_xsettings_init (client);
+   gnome_settings_mouse_init (client);
+ /* Essential - xkb initialization should happen before */
++/* HACK: Remove all settings for XKB keyboard initialization
+   gnome_settings_keyboard_xkb_set_post_activation_callback ((PostActivationCallback)gnome_settings_load_modmap_files, NULL);
+   gnome_settings_keyboard_xkb_init (client);
++*/
+   gnome_settings_keyboard_init (client);
+   gnome_settings_multimedia_keys_init (client);
+ /* */
+@@ -396,7 +398,9 @@
+   gnome_settings_xsettings_load (client);
+   gnome_settings_mouse_load (client);
+ /* Essential - xkb initialization should happen before */
++  /* HACK: Remove all settings for XKB keyboard loading
+   gnome_settings_keyboard_xkb_load (client);
++  */
+   gnome_settings_keyboard_load (client);
+   gnome_settings_multimedia_keys_load (client);
+ /* */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-06-logout-shortcut.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,80 @@
+--- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 10:16:36 2005
++++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 10:58:51 2005
+@@ -41,12 +41,12 @@ typedef struct
+ const KeyListEntry desktop_key_list[] =
+ {
+   { "/apps/gnome_settings_daemon/keybindings/help", ALWAYS_VISIBLE, 0 },
+-  { "/apps/gnome_settings_daemon/keybindings/power", ALWAYS_VISIBLE, 0 },
+   { "/apps/gnome_settings_daemon/keybindings/sleep", ALWAYS_VISIBLE, 0 },
+   { "/apps/gnome_settings_daemon/keybindings/screensaver", ALWAYS_VISIBLE, 0 },
+   { "/apps/gnome_settings_daemon/keybindings/home", ALWAYS_VISIBLE, 0 },
+   { "/apps/gnome_settings_daemon/keybindings/search", ALWAYS_VISIBLE, 0 },
+   { "/apps/gnome_settings_daemon/keybindings/email", ALWAYS_VISIBLE, 0 },
++  { "/apps/metacity/global_keybindings/logout", ALWAYS_VISIBLE, 0 },
+   { "/apps/gnome_settings_daemon/keybindings/www", ALWAYS_VISIBLE, 0 },
+   { "/apps/metacity/global_keybindings/panel_run_dialog", ALWAYS_VISIBLE, 0 },
+   { "/apps/metacity/global_keybindings/panel_main_menu", ALWAYS_VISIBLE, 0 },
+--- control-center-2.10.1/gnome-settings-daemon/actions/acme.h	Thu May 12 16:46:32 2005
++++ control-center-2.10.1-new/gnome-settings-daemon/actions/acme.h	Fri May 13 10:59:14 2005
+@@ -29,7 +29,6 @@ enum {
+ 	MUTE_KEY,
+ 	VOLUME_DOWN_KEY,
+ 	VOLUME_UP_KEY,
+-	POWER_KEY,
+ 	EJECT_KEY,
+ 	HOME_KEY,
+ 	SEARCH_KEY,
+@@ -64,7 +63,6 @@ static struct {
+ 	{ MUTE_KEY, GCONF_BINDING_DIR "/volume_mute",NULL },
+ 	{ VOLUME_DOWN_KEY, GCONF_BINDING_DIR "/volume_down", NULL },
+ 	{ VOLUME_UP_KEY, GCONF_BINDING_DIR "/volume_up", NULL },
+-	{ POWER_KEY, GCONF_BINDING_DIR "/power", NULL },
+ 	{ EJECT_KEY, GCONF_BINDING_DIR "/eject", NULL },
+ 	{ HOME_KEY, GCONF_BINDING_DIR "/home", NULL },
+ 	{ SEARCH_KEY, GCONF_BINDING_DIR "/search", NULL },
+--- control-center-2.10.1/schemas/apps_gnome_settings_daemon_keybindings.schemas.in	Thu May 12 16:46:32 2005
++++ control-center-2.10.1-new/schemas/apps_gnome_settings_daemon_keybindings.schemas.in	Fri May 13 11:43:43 2005
+@@ -50,18 +50,6 @@
+ 
+ 
+         <schema>
+-            <key>/schemas/apps/gnome_settings_daemon/keybindings/power</key>
+-            <applyto>/apps/gnome_settings_daemon/keybindings/power</applyto>
+-            <type>string</type>
+-            <default></default>
+-            <locale name="C">
+-                <short>Log out</short>
+-                <long>Log out's shortcut.</long>
+-            </locale>
+-        </schema>
+-
+-
+-        <schema>
+             <key>/schemas/apps/gnome_settings_daemon/keybindings/eject</key>
+             <applyto>/apps/gnome_settings_daemon/keybindings/eject</applyto>
+             <type>string</type>
+--- control-center-2.10.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Thu May 12 16:46:31 2005
++++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Fri May 13 11:42:17 2005
+@@ -661,12 +661,6 @@ do_www_action (Acme *acme, const char *u
+ }
+ 
+ static void
+-do_exit_action (Acme *acme)
+-{
+-	execute ("gnome-session-save --kill", FALSE);
+-}
+-
+-static void
+ do_eject_action (Acme *acme)
+ {
+ 	GtkWidget *progress;
+@@ -806,9 +800,6 @@ do_action (Acme *acme, int type)
+ 	case VOLUME_DOWN_KEY:
+ 	case VOLUME_UP_KEY:
+ 		do_sound_action (acme, type);
+-		break;
+-	case POWER_KEY:
+-		do_exit_action (acme);
+ 		break;
+ 	case EJECT_KEY:
+ 		do_eject_action (acme);
--- a/patches/control-center-06-xkb-workaround.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,51 +0,0 @@
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-daemon.c	Thu May 12 16:46:31 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-daemon.c	Fri May 13 10:52:17 2005
-@@ -227,6 +227,8 @@ gnome_settings_daemon_new (void)
-   GdkDisplay *display;
-   int i;
-   int n_screens;
-+  Display *x_dpy; int opcode, event, error;
-+  gboolean xserver_is_sun = FALSE;
- 
-   display = gdk_display_get_default ();
-   n_screens = gdk_display_get_n_screens (display);
-@@ -266,6 +268,10 @@ gnome_settings_daemon_new (void)
-       managers [i] = NULL;
-     }
- 
-+  x_dpy = gdk_x11_display_get_xdisplay (display); 
-+  if ((strcmp(ServerVendor(x_dpy), "Sun Microsystems, Inc.") == 0)) 
-+      xserver_is_sun = TRUE;
-+
-   /* We use GConfClient not GConfClient because a cache isn't useful
-    * for us
-    */
-@@ -276,8 +282,16 @@ gnome_settings_daemon_new (void)
-   gnome_settings_xsettings_init (client);
-   gnome_settings_mouse_init (client);
- /* Essential - xkb initialization should happen before */
--  gnome_settings_keyboard_xkb_set_post_activation_callback ((PostActivationCallback)gnome_settings_load_modmap_files, NULL);
--  gnome_settings_keyboard_xkb_init (client);
-+/* dirty hack to avoid xkb errors due to incompatilibilities
-+* between XSun XKB implementation and libxklavier. This effectively
-+* disables the XKB layout support for Gnome when running Xsun
-+* with +xkb enabled */
-+
-+ if (!xserver_is_sun) {
-+    gnome_settings_keyboard_xkb_set_post_activation_callback ((PostActivationCallback)gnome_settings_load_modmap_files, NULL);
-+    gnome_settings_keyboard_xkb_init (client);
-+  }
-+
-   gnome_settings_keyboard_init (client);
-   gnome_settings_multimedia_keys_init (client);
- /* */
-@@ -331,7 +345,8 @@ gnome_settings_daemon_new (void)
-   gnome_settings_xsettings_load (client);
-   gnome_settings_mouse_load (client);
- /* Essential - xkb initialization should happen before */
--  gnome_settings_keyboard_xkb_load (client);
-+  if (!xserver_is_sun)
-+    gnome_settings_keyboard_xkb_load (client);
-   gnome_settings_keyboard_load (client);
-   gnome_settings_multimedia_keys_load (client);
- /* */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-07-custom-keybinding.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,1570 @@
+--- /dev/null	Fri May 13 10:45:25 2005
++++ control-center-2.10.1-new/capplets/keybindings/custom-binding.h	Fri May 13 11:51:17 2005
+@@ -0,0 +1,106 @@
++/* Erwann Chenede 2002 */
++
++#include <config.h>
++
++#include <string.h>
++#include <gtk/gtk.h>
++#include <gconf/gconf-client.h>
++#include <gdk/gdkx.h>
++#include <glade/glade.h>
++#include <X11/Xatom.h>
++
++#include "wm-common.h"
++#include "capplet-util.h"
++#include "eggcellrendererkeys.h"
++#include "activate-settings-daemon.h"
++
++#ifndef __CUSTOM_BINDING__H__
++#define __CUSTOM_BINDING__H__
++
++#define GCONF_CUSTOM_BINDING_DIR "/desktop/gnome/keybindings"
++
++typedef enum {
++  ALWAYS_VISIBLE,
++  N_WORKSPACES_GT
++} KeyListEntryVisibility;
++
++typedef struct
++{
++  const char *name;
++  KeyListEntryVisibility visibility;
++  gint data;
++} KeyListEntry;
++
++enum
++{
++  DESCRIPTION_COLUMN,
++  KEYENTRY_COLUMN,
++  N_COLUMNS
++};
++
++typedef struct
++{
++  char *gconf_key;
++  guint keyval;
++  guint keycode;
++  EggVirtualModifierType mask;
++  gboolean editable;
++  GtkTreeModel *model;
++  guint gconf_cnxn;
++  gboolean custom_key;
++  guint cmd_line_cnxn;
++  char *action;
++  char *binding;
++  char *description;
++} KeyEntry;
++
++void
++my_verbose (const char *format, ...);
++
++void
++cmd_line_changed (GConfClient *client,
++		  guint        cnxn_id,
++		  GConfEntry  *entry,
++		  gpointer     user_data);
++
++void 
++disable_custom (GtkWidget *widget, GtkTreeView *tree_view);
++
++gboolean
++grab_key_callback (GtkWidget    *widget,
++                   GdkEventKey  *event,
++                   void         *data);
++void grab_key (GtkWidget *widget, GladeXML *dialog);
++
++void custom_cancel (GtkWidget *widget, GladeXML *dialog);
++
++void delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer *user_data);
++
++GladeXML *
++setup_custom_binding_dialog ();
++
++void 
++add_custom (GtkWidget *widget);
++
++void 
++edit_custom (GtkWidget *widget);
++
++void 
++create_custom_bindings_list ();
++
++KeyEntry *
++custom_key_new (char *dir);
++
++gboolean
++is_gconf_key_custom_binding (char *key);
++
++gboolean
++keybinding_key_changed_foreach (GtkTreeModel *model,
++				GtkTreePath  *path,
++				GtkTreeIter  *iter,
++				gpointer      user_data);
++
++void
++reload_key_entries (gpointer wm_name, GladeXML *dialog);
++#endif /*__CUSTOM_BINDING__H__*/
++
+--- /dev/null	Fri May 13 10:45:25 2005
++++ control-center-2.10.1-new/capplets/keybindings/custom-binding.c	Fri May 13 11:51:17 2005
+@@ -0,0 +1,480 @@
++/* Erwann Chenede 2002 */
++
++#include <config.h>
++
++#include <string.h>
++#include <gtk/gtk.h>
++#include <gconf/gconf-client.h>
++#include <gdk/gdkx.h>
++#include <glade/glade.h>
++#include <X11/Xatom.h>
++
++#include "wm-common.h"
++#include "capplet-util.h"
++#include "eggcellrendererkeys.h"
++#include "activate-settings-daemon.h"
++#include "custom-binding.h"
++
++extern KeyListEntry *custom_binding_list;
++extern GladeXML *main_dialog;
++
++void
++my_verbose (const char *format, ...)
++{
++  va_list args;
++  gchar *str;
++
++  if (format == NULL)
++    return;
++
++  if (1) /*DEBUG*/
++    return;
++  
++  va_start (args, format);
++  str = g_strdup_vprintf (format, args);
++  va_end (args);
++  
++  fputs (str, stderr);
++
++  fflush (stderr);
++  
++  g_free (str);
++}
++
++void
++cmd_line_changed (GConfClient *client,
++		  guint        cnxn_id,
++		  GConfEntry  *entry,
++		  gpointer     user_data)
++{
++  KeyEntry *key_entry;
++
++  my_verbose ("In cmd_line_changed\n");
++  
++  key_entry = (KeyEntry *)user_data;
++  g_free (key_entry->action);
++  key_entry->action = g_strdup (gconf_value_get_string (entry->value));
++  key_entry->editable = gconf_entry_get_is_writable (entry);
++
++  /* update the model */
++  gtk_tree_model_foreach (key_entry->model, keybinding_key_changed_foreach, key_entry);
++}
++
++KeyEntry *
++find_keyentry_selected (GtkTreeView *tree_view)
++{
++  GtkTreeSelection* sel = NULL;
++  sel = gtk_tree_view_get_selection (tree_view);
++  
++  if (sel)
++    {
++      GtkTreeIter iter;
++      GtkTreeModel *model;
++      if (gtk_tree_selection_get_selected (sel, &model, &iter))
++	{
++	  KeyEntry *key_entry;
++
++	  gtk_tree_model_get (model, &iter, KEYENTRY_COLUMN, &key_entry, -1);
++	  return key_entry;
++	}
++    }
++  return NULL;
++}
++	
++static gboolean key_delete_cleanup (KeyEntry *key_entry)
++{
++  GConfClient *client = gconf_client_get_default();
++
++  gconf_client_recursive_unset (client, key_entry->gconf_key, 0, NULL);
++
++  create_custom_bindings_list ();
++  reload_key_entries (wm_common_get_current_window_manager(), main_dialog);
++
++  return FALSE;
++}
++
++void 
++disable_custom (GtkWidget *widget, GtkTreeView *tree_view)
++{
++  KeyEntry *key_entry = find_keyentry_selected (tree_view);
++  
++  if (key_entry)
++    {
++      if (key_entry->custom_key)
++	{
++	  GConfClient *client = gconf_client_get_default();
++	  gchar *binding = g_strdup_printf ("%s/binding", key_entry->gconf_key);
++	  gchar *binding_str;
++
++	  gconf_client_notify_remove (client, key_entry->gconf_cnxn);
++	  gconf_client_notify_remove (client, key_entry->cmd_line_cnxn);
++
++	  key_entry->gconf_cnxn = 0;
++	  key_entry->cmd_line_cnxn = 0;
++
++	  binding_str = gconf_client_get_string (client,binding, NULL);
++	
++	  if (binding_str && strcmp (binding_str, "disabled")) {
++		/* This is a neccessery evil. We need to follow a similar
++		   pattern of sequence in setting the binding to disabled state
++		   before deleting it. The timeout is to ensure that when
++		   g-s-d is getting the changes it does not find a key which
++		   is non-existent and crash.
++		*/
++		gconf_client_set_string (client,
++					binding,
++					"disabled",
++					NULL);
++	  	g_timeout_add (1000,  (GSourceFunc) key_delete_cleanup, key_entry);
++
++		g_free (binding_str);
++	  } else 
++		key_delete_cleanup (key_entry);
++
++	  g_free (binding);
++	}
++      else
++	gconf_client_set_string (gconf_client_get_default(),key_entry->gconf_key, "", NULL);
++    }
++}
++
++static int
++get_trailing_num (char *str)
++{
++  char **result = g_strsplit (str, "_", 2);
++  int i = atoi (result[1]);
++  g_strfreev (result);
++  return i;
++}
++
++static char *
++find_free_custom_gconf_key ()
++{
++  GConfClient *client;
++  GSList *list, *li;
++  int num_bindings = 0;
++  int max_num = 0;
++  
++  client  = gconf_client_get_default ();
++
++  list = gconf_client_all_dirs (client, GCONF_CUSTOM_BINDING_DIR, NULL);
++
++  num_bindings = g_slist_length (list);
++
++  custom_binding_list = g_new0 (KeyListEntry, num_bindings+1);
++
++  /*find the highest num */
++
++  for (li = list; li != NULL; li = li->next)
++    {
++      char *subdir = li->data;
++      char *key = g_path_get_basename(subdir);
++      li->data = NULL;
++
++      if (g_ascii_strncasecmp(key, "custom_", 7) == 0)
++	{
++	  int i = get_trailing_num (key);
++	  if (i > max_num)
++	    max_num = i;
++	}
++    }
++  g_slist_free (list);
++  
++  return g_strdup_printf ("%s/custom_%d",GCONF_CUSTOM_BINDING_DIR, max_num + 1);
++}
++
++
++static void 
++add_real_key (GtkWidget *widget, GladeXML *dialog)
++{
++  KeyEntry *entry = NULL;
++  GError *err = NULL;
++  GtkWidget *area_tf = WID ("action_tf");
++  char *binding_key, *action_key;
++  char *action = g_strdup (gtk_entry_get_text (GTK_ENTRY (area_tf)));
++
++  entry = g_object_steal_data (G_OBJECT (area_tf), "key_entry");
++  
++  if (!entry)
++    {
++      char *new_gconf_key = find_free_custom_gconf_key ();
++      GConfClient *client = gconf_client_get_default ();
++      
++      binding_key = g_strdup_printf ("%s/binding", new_gconf_key);
++      action_key = g_strdup_printf ("%s/action", new_gconf_key);
++      
++      gconf_client_set_string (client, new_gconf_key, "", &err);
++      
++      gconf_client_set_string  (client, binding_key, "", &err);
++      
++      gconf_client_set_string  (client,	action_key, action, &err);
++      
++      create_custom_bindings_list ();
++      reload_key_entries (wm_common_get_current_window_manager(), main_dialog);
++      g_free (binding_key);
++      g_free (new_gconf_key);
++    }
++  else
++    {
++      action_key = g_strdup_printf ("%s/action", entry->gconf_key);
++      gconf_client_set_string  (gconf_client_get_default (),
++				action_key, action, &err);
++    }
++
++  g_free (action);
++  g_free (action_key);
++
++  custom_cancel (widget, dialog);
++}
++
++void 
++custom_cancel (GtkWidget *widget, GladeXML *dialog)
++{
++  gtk_entry_set_text (GTK_ENTRY (WID ("action_tf")), "");
++
++  gtk_widget_hide (WID ("custom-binding-dialog"));
++}
++
++void
++delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer *user_data)
++{
++  GtkWidget *entry = GTK_WIDGET (user_data);
++  gtk_entry_set_text (GTK_ENTRY (entry), "");
++
++  gtk_widget_hide (widget);
++}
++
++static void 
++cb_dialog_response (GtkWidget *widget, GladeXML *dialog)
++{
++	capplet_help (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
++		      "user-guide.xml",
++		      "goscustdesk-39");
++}
++
++typedef struct 
++{
++  GtkFileSelection *fs;
++  GladeXML *dialog;
++} FileSelData;
++
++
++static void 
++command_selection_ok (FileSelData *fs_data)
++{
++  GtkWidget *action_tf = glade_xml_get_widget (fs_data->dialog, "action_tf");
++  gchar **selections;
++
++  selections = gtk_file_selection_get_selections (fs_data->fs);
++
++  gtk_entry_set_text (GTK_ENTRY (action_tf), selections[0]);
++  gtk_widget_destroy (GTK_WIDGET (fs_data->fs));
++}
++
++static void 
++set_command (GtkWidget *widget, GladeXML *dialog)
++{
++  GtkWidget *window;
++  FileSelData *fs_data = g_new (FileSelData, 1);
++  
++  window = gtk_file_selection_new ("Select Command");
++
++  gtk_window_set_screen (GTK_WINDOW (window),
++			 gtk_widget_get_screen (widget));
++
++  gtk_file_selection_set_select_multiple (GTK_FILE_SELECTION (window),
++					  FALSE);
++
++  g_signal_connect (window, "destroy",
++		    G_CALLBACK (gtk_widget_destroyed),
++		    &window);
++ 
++  fs_data->fs = GTK_FILE_SELECTION (window);
++  fs_data->dialog = dialog;
++  
++  g_signal_connect_swapped (GTK_FILE_SELECTION (window)->ok_button,
++			    "clicked",			    
++			    G_CALLBACK (command_selection_ok),
++			    fs_data);
++
++  g_signal_connect_swapped (GTK_FILE_SELECTION (window)->cancel_button,
++			    "clicked",
++			    G_CALLBACK (gtk_widget_destroy),
++			    window);
++  gtk_widget_show (window);
++}
++
++GladeXML *
++setup_custom_binding_dialog ()
++{
++  static GladeXML *dialog = NULL;
++  GtkWidget *widget, *entry;
++
++  if (dialog)
++    return dialog;
++
++  /* setup dialog */
++  dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keybinding-properties.glade", "custom-binding-dialog", NULL);
++  
++  widget = WID ("custom-binding-dialog");
++  entry = WID ("action_tf");
++  g_signal_connect (G_OBJECT (widget), "delete_event",
++		    G_CALLBACK (delete_event_cb),
++		    entry);
++
++  g_signal_connect (G_OBJECT (WID ("browse_button")), "clicked", 
++		    G_CALLBACK (set_command), dialog);
++
++  g_signal_connect (G_OBJECT (WID ("cancelbutton1")), "clicked", 
++		    G_CALLBACK (custom_cancel), dialog);
++
++  g_signal_connect (G_OBJECT (WID ("okbutton1")), "clicked", 
++		    G_CALLBACK (add_real_key), dialog);
++  
++  g_signal_connect (G_OBJECT (WID ("helpbutton2")), "clicked", 
++		    G_CALLBACK (cb_dialog_response), NULL);
++
++  /* gtk_widget_hide (WID ("custom-binding-dialog")); */
++  return dialog;
++}
++void 
++edit_custom (GtkWidget *widget)
++{
++  KeyEntry *entry = find_keyentry_selected (GTK_TREE_VIEW (glade_xml_get_widget (main_dialog,"shortcut_treeview")));
++  if (entry)
++    {
++      if (entry->custom_key)
++	{
++	  GladeXML *dialog = setup_custom_binding_dialog ();
++	  GtkWidget *widget;
++	  widget =  WID ("action_tf");
++	  g_object_set_data (G_OBJECT (widget), "key_entry", entry);
++	  gtk_entry_set_text (GTK_ENTRY (widget), entry->action);
++	  gtk_widget_show_all (WID ("custom-binding-dialog"));
++	}
++    }
++}
++void 
++add_custom (GtkWidget *widget) 
++{
++  GladeXML *dialog = setup_custom_binding_dialog ();
++  GtkWidget *action_widget;
++  action_widget =  WID ("action_tf");
++  g_object_set_data (G_OBJECT (action_widget), "key_entry", NULL);
++  gtk_widget_show_all (WID ("custom-binding-dialog"));
++}
++
++void 
++create_custom_bindings_list ()
++{
++  GConfClient *client;
++  GSList *list, *li;
++  int num_bindings = 0, i = 0;
++  
++  client  = gconf_client_get_default ();
++
++  list = gconf_client_all_dirs (client, GCONF_CUSTOM_BINDING_DIR, NULL);
++
++  num_bindings = g_slist_length (list);
++
++  if (custom_binding_list)
++    g_free (custom_binding_list);
++    
++
++  custom_binding_list = g_new0 (KeyListEntry, num_bindings+1);
++
++  for (li = list; li != NULL; li = li->next)
++    {
++      char *subdir = li->data;
++      li->data = NULL;
++      custom_binding_list[i].name = subdir;
++      custom_binding_list[i].visibility = ALWAYS_VISIBLE;
++      i++;
++    }
++  g_slist_free (list);
++}
++
++KeyEntry *
++custom_key_new (char *dir)
++{
++  GConfValue *value;
++  KeyEntry *new_binding;
++  GSList *tmp_elem = NULL, *list = NULL, *li;
++  char *gconf_key;
++  char *action = NULL;
++  char *key = NULL;
++  
++  g_return_val_if_fail (dir != NULL, NULL);
++  
++  /* value = gconf_entry_get_value (entry); */
++  gconf_key = dir;
++
++  if (!gconf_key)
++    return NULL;
++
++  /* Get entries for this binding */
++  list = gconf_client_all_entries (gconf_client_get_default (), dir, NULL);
++
++  for (li = list; li != NULL; li = li->next)
++    {
++      GConfEntry *entry = li->data;
++      char *key_name = g_path_get_basename (gconf_entry_get_key (entry));
++      if (strcmp (key_name, "action") == 0)
++	{
++	  if (!action)
++	    {
++	      value = gconf_entry_get_value (entry);
++              if (value) 
++               {
++	          if (value->type != GCONF_VALUE_STRING)
++		     return NULL;
++	          action = g_strdup (gconf_value_get_string (value));
++              }
++	    }
++	  else
++	    g_warning (_("Key Binding (%s) has its action defined multiple times\n"),
++		       gconf_key);
++	}
++      if (strcmp (key_name, "binding") == 0)
++	{
++	  if (!key)
++	    {
++	      value = gconf_entry_get_value (entry);
++              if (value)
++                {
++	          if (value->type != GCONF_VALUE_STRING)
++		     return NULL;
++	          key = g_strdup (gconf_value_get_string (value));
++               }
++	    }
++	  else
++	    g_warning (_("Key Binding (%s) has its binding defined multiple times\n"),
++		       gconf_key);
++	}
++    }
++  if (!action || !key)
++    { 
++      g_warning (_("Key Binding (%s) is incomplete\n"), gconf_key);
++      return NULL;
++    }
++  
++  new_binding = g_new0 (KeyEntry, 1);
++  
++  
++  new_binding->binding = key;
++  new_binding->action = action;
++  new_binding->gconf_key = gconf_key;
++  return new_binding;
++}
++
++gboolean
++is_gconf_key_custom_binding (char *key)
++{
++  char *str = NULL;
++
++  str = g_strrstr (key, "keybindings");
++
++  if (str)
++    return TRUE;
++  return FALSE;
++}
+--- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.glade	Thu May 12 16:46:18 2005
++++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.glade	Fri May 13 11:51:17 2005
+@@ -11,6 +11,11 @@
+   <property name="modal">False</property>
+   <property name="resizable">True</property>
+   <property name="destroy_with_parent">False</property>
++  <property name="decorated">True</property>
++  <property name="skip_taskbar_hint">False</property>
++  <property name="skip_pager_hint">False</property>
++  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
++  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+   <property name="has_separator">False</property>
+ 
+   <child internal-child="vbox">
+@@ -32,6 +37,7 @@
+ 	      <property name="label">gtk-help</property>
+ 	      <property name="use_stock">True</property>
+ 	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
+ 	      <property name="response_id">-11</property>
+ 	    </widget>
+ 	  </child>
+@@ -44,6 +50,7 @@
+ 	      <property name="label">gtk-close</property>
+ 	      <property name="use_stock">True</property>
+ 	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
+ 	      <property name="response_id">-7</property>
+ 	    </widget>
+ 	  </child>
+@@ -152,6 +159,362 @@
+ 	      <property name="padding">0</property>
+ 	      <property name="expand">True</property>
+ 	      <property name="fill">True</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkHBox" id="hbox2">
++	      <property name="border_width">5</property>
++	      <property name="visible">True</property>
++	      <property name="homogeneous">False</property>
++	      <property name="spacing">6</property>
++
++	      <child>
++		<widget class="GtkLabel" id="label13">
++		  <property name="visible">True</property>
++		  <property name="label" translatable="yes">Custom Shortcuts:</property>
++		  <property name="use_underline">False</property>
++		  <property name="use_markup">False</property>
++		  <property name="justify">GTK_JUSTIFY_LEFT</property>
++		  <property name="wrap">False</property>
++		  <property name="selectable">False</property>
++		  <property name="xalign">0.5</property>
++		  <property name="yalign">0.5</property>
++		  <property name="xpad">0</property>
++		  <property name="ypad">0</property>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">False</property>
++		  <property name="fill">False</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<widget class="GtkButton" id="add_custom_button">
++		  <property name="width_request">60</property>
++		  <property name="height_request">30</property>
++		  <property name="visible">True</property>
++		  <property name="can_focus">True</property>
++		  <property name="label">gtk-new</property>
++		  <property name="use_stock">True</property>
++		  <property name="relief">GTK_RELIEF_NORMAL</property>
++		  <property name="focus_on_click">True</property>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">True</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<widget class="GtkButton" id="edit_custom_button">
++		  <property name="visible">True</property>
++		  <property name="can_focus">True</property>
++		  <property name="relief">GTK_RELIEF_NORMAL</property>
++		  <property name="focus_on_click">True</property>
++
++		  <child>
++		    <widget class="GtkAlignment" id="alignment1">
++		      <property name="visible">True</property>
++		      <property name="xalign">0.5</property>
++		      <property name="yalign">0.5</property>
++		      <property name="xscale">0</property>
++		      <property name="yscale">0</property>
++		      <property name="top_padding">0</property>
++		      <property name="bottom_padding">0</property>
++		      <property name="left_padding">0</property>
++		      <property name="right_padding">0</property>
++
++		      <child>
++			<widget class="GtkHBox" id="hbox3">
++			  <property name="visible">True</property>
++			  <property name="homogeneous">False</property>
++			  <property name="spacing">2</property>
++
++			  <child>
++			    <widget class="GtkImage" id="image2">
++			      <property name="visible">True</property>
++			      <property name="stock">gtk-preferences</property>
++			      <property name="icon_size">4</property>
++			      <property name="xalign">0.5</property>
++			      <property name="yalign">0.5</property>
++			      <property name="xpad">0</property>
++			      <property name="ypad">0</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++
++			  <child>
++			    <widget class="GtkLabel" id="label14">
++			      <property name="visible">True</property>
++			      <property name="label" translatable="yes">_Edit...</property>
++			      <property name="use_underline">True</property>
++			      <property name="use_markup">False</property>
++			      <property name="justify">GTK_JUSTIFY_LEFT</property>
++			      <property name="wrap">False</property>
++			      <property name="selectable">False</property>
++			      <property name="xalign">0.5</property>
++			      <property name="yalign">0.5</property>
++			      <property name="xpad">0</property>
++			      <property name="ypad">0</property>
++			    </widget>
++			    <packing>
++			      <property name="padding">0</property>
++			      <property name="expand">False</property>
++			      <property name="fill">False</property>
++			    </packing>
++			  </child>
++			</widget>
++		      </child>
++		    </widget>
++		  </child>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">True</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++
++	      <child>
++		<widget class="GtkButton" id="disable_custom_button">
++		  <property name="visible">True</property>
++		  <property name="can_focus">True</property>
++		  <property name="label">gtk-delete</property>
++		  <property name="use_stock">True</property>
++		  <property name="relief">GTK_RELIEF_NORMAL</property>
++		  <property name="focus_on_click">True</property>
++		</widget>
++		<packing>
++		  <property name="padding">0</property>
++		  <property name="expand">True</property>
++		  <property name="fill">True</property>
++		</packing>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="padding">0</property>
++	      <property name="expand">False</property>
++	      <property name="fill">False</property>
++	      <property name="pack_type">GTK_PACK_END</property>
++	    </packing>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">True</property>
++	  <property name="fill">True</property>
++	</packing>
++      </child>
++    </widget>
++  </child>
++</widget>
++
++<widget class="GtkDialog" id="custom-binding-dialog">
++  <property name="visible">True</property>
++  <property name="title" translatable="yes">Custom Binding</property>
++  <property name="type">GTK_WINDOW_TOPLEVEL</property>
++  <property name="window_position">GTK_WIN_POS_NONE</property>
++  <property name="modal">False</property>
++  <property name="resizable">True</property>
++  <property name="destroy_with_parent">False</property>
++  <property name="decorated">True</property>
++  <property name="skip_taskbar_hint">False</property>
++  <property name="skip_pager_hint">False</property>
++  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
++  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
++  <property name="has_separator">True</property>
++  <accessibility>
++    <atkproperty name="AtkObject::accessible_name" translatable="yes">Custom Binding</atkproperty>
++  </accessibility>
++
++  <child internal-child="vbox">
++    <widget class="GtkVBox" id="dialog-vbox1">
++      <property name="visible">True</property>
++      <property name="homogeneous">False</property>
++      <property name="spacing">0</property>
++
++      <child internal-child="action_area">
++	<widget class="GtkHButtonBox" id="dialog-action_area2">
++	  <property name="visible">True</property>
++	  <property name="layout_style">GTK_BUTTONBOX_END</property>
++
++	  <child>
++	    <widget class="GtkButton" id="helpbutton2">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-help</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-11</property>
++	    </widget>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="cancelbutton1">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-cancel</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-6</property>
++	    </widget>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="okbutton1">
++	      <property name="visible">True</property>
++	      <property name="can_default">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="label">gtk-ok</property>
++	      <property name="use_stock">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <property name="response_id">-5</property>
++	    </widget>
++	  </child>
++	</widget>
++	<packing>
++	  <property name="padding">0</property>
++	  <property name="expand">False</property>
++	  <property name="fill">True</property>
++	  <property name="pack_type">GTK_PACK_END</property>
++	</packing>
++      </child>
++
++      <child>
++	<widget class="GtkHBox" id="hbox5">
++	  <property name="visible">True</property>
++	  <property name="homogeneous">False</property>
++	  <property name="spacing">0</property>
++
++	  <child>
++	    <widget class="GtkLabel" id="label15">
++	      <property name="visible">True</property>
++	      <property name="label" translatable="yes">_New Command: </property>
++	      <property name="use_underline">True</property>
++	      <property name="use_markup">False</property>
++	      <property name="justify">GTK_JUSTIFY_LEFT</property>
++	      <property name="wrap">False</property>
++	      <property name="selectable">False</property>
++	      <property name="xalign">0.5</property>
++	      <property name="yalign">0.5</property>
++	      <property name="xpad">0</property>
++	      <property name="ypad">0</property>
++	    </widget>
++	    <packing>
++	      <property name="padding">0</property>
++	      <property name="expand">False</property>
++	      <property name="fill">False</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkEntry" id="action_tf">
++	      <property name="visible">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="editable">True</property>
++	      <property name="visibility">True</property>
++	      <property name="max_length">0</property>
++	      <property name="text" translatable="yes"></property>
++	      <property name="has_frame">True</property>
++	      <property name="invisible_char" translatable="yes">*</property>
++	      <property name="activates_default">False</property>
++	      <accessibility>
++		<atkproperty name="AtkObject::accessible_name" translatable="yes">action_tf</atkproperty>
++	      </accessibility>
++	    </widget>
++	    <packing>
++	      <property name="padding">0</property>
++	      <property name="expand">True</property>
++	      <property name="fill">True</property>
++	    </packing>
++	  </child>
++
++	  <child>
++	    <widget class="GtkButton" id="browse_button">
++	      <property name="visible">True</property>
++	      <property name="can_focus">True</property>
++	      <property name="relief">GTK_RELIEF_NORMAL</property>
++	      <property name="focus_on_click">True</property>
++	      <accessibility>
++		<atkproperty name="AtkObject::accessible_name" translatable="yes">Browse</atkproperty>
++	      </accessibility>
++
++	      <child>
++		<widget class="GtkAlignment" id="alignment2">
++		  <property name="visible">True</property>
++		  <property name="xalign">0.5</property>
++		  <property name="yalign">0.5</property>
++		  <property name="xscale">0</property>
++		  <property name="yscale">0</property>
++		  <property name="top_padding">0</property>
++		  <property name="bottom_padding">0</property>
++		  <property name="left_padding">0</property>
++		  <property name="right_padding">0</property>
++
++		  <child>
++		    <widget class="GtkHBox" id="hbox6">
++		      <property name="visible">True</property>
++		      <property name="homogeneous">False</property>
++		      <property name="spacing">2</property>
++
++		      <child>
++			<widget class="GtkImage" id="image3">
++			  <property name="visible">True</property>
++			  <property name="stock">gtk-open</property>
++			  <property name="icon_size">4</property>
++			  <property name="xalign">0.5</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++
++		      <child>
++			<widget class="GtkLabel" id="label16">
++			  <property name="visible">True</property>
++			  <property name="label" translatable="yes">_Browse</property>
++			  <property name="use_underline">True</property>
++			  <property name="use_markup">False</property>
++			  <property name="justify">GTK_JUSTIFY_LEFT</property>
++			  <property name="wrap">False</property>
++			  <property name="selectable">False</property>
++			  <property name="xalign">0.5</property>
++			  <property name="yalign">0.5</property>
++			  <property name="xpad">0</property>
++			  <property name="ypad">0</property>
++			</widget>
++			<packing>
++			  <property name="padding">0</property>
++			  <property name="expand">False</property>
++			  <property name="fill">False</property>
++			</packing>
++		      </child>
++		    </widget>
++		  </child>
++		</widget>
++	      </child>
++	    </widget>
++	    <packing>
++	      <property name="padding">0</property>
++	      <property name="expand">False</property>
++	      <property name="fill">False</property>
+ 	    </packing>
+ 	  </child>
+ 	</widget>
+--- control-center-2.10.1/capplets/keybindings/Makefile.am	Thu May 12 16:46:18 2005
++++ control-center-2.10.1-new/capplets/keybindings/Makefile.am	Fri May 13 11:51:17 2005
+@@ -3,6 +3,8 @@ bin_PROGRAMS = gnome-keybinding-properti
+ gnome_keybinding_properties_LDADD = $(GNOMECC_CAPPLETS_LIBS)
+ gnome_keybinding_properties_SOURCES = 	\
+ 	gnome-keybinding-properties.c	\
++	custom-binding.c		\
++	custom-binding.h		\
+ 	eggcellrendererkeys.c		\
+ 	eggcellrendererkeys.h		\
+ 	eggaccelerators.c		\
+--- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 11:47:36 2005
++++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 12:00:15 2005
+@@ -16,6 +16,7 @@
+ #include "capplet-util.h"
+ #include "eggcellrendererkeys.h"
+ #include "activate-settings-daemon.h"
++#include "custom-binding.h"
+ 
+ #define LABEL_DATA "gnome-keybinding-properties-label"
+ #define MAX_ELEMENTS_BEFORE_SCROLLING 10
+@@ -25,19 +25,6 @@
+ #else
+ #undef USE_FBLEVEL
+ #endif
+-
+-typedef enum {
+-  ALWAYS_VISIBLE,
+-  N_WORKSPACES_GT
+-} KeyListEntryVisibility;
+-
+-typedef struct
+-{
+-  const char *name;
+-  KeyListEntryVisibility visibility;
+-  gint data;
+-} KeyListEntry;
+-
+ static const KeyListEntry desktop_key_list[] =
+ {
+   { "/apps/gnome_settings_daemon/keybindings/help", ALWAYS_VISIBLE, 0 },
+@@ -134,13 +122,7 @@ const KeyListEntry metacity_key_list[] =
+   { NULL }
+ };
+ 
+-enum
+-{
+-  DESCRIPTION_COLUMN,
+-  KEYENTRY_COLUMN,
+-  N_COLUMNS
+-};
+-
++/*
+ typedef struct
+ {
+   char *gconf_key;
+@@ -152,9 +134,11 @@ typedef struct
+   guint gconf_cnxn;
+   char *description;
+ } KeyEntry;
++*/
++
++KeyListEntry *custom_binding_list = NULL;
++GladeXML *main_dialog;
+ 
+-static void  reload_key_entries (gpointer                wm_name,
+-                                 GladeXML               *dialog);
+ static char* binding_name       (guint                   keyval,
+ 				 guint			 keycode,
+                                  EggVirtualModifierType  mask,
+@@ -179,11 +163,8 @@ get_real_model (GtkTreeView *tree_view)
+ static GladeXML *
+ create_dialog (void)
+ {
+-  GladeXML *dialog;
+-
+-  dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keybinding-properties.glade", "gnome-keybinding-dialog", NULL);
+-
+-  return dialog;
++   main_dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keybinding-properties.glade", "gnome-keybinding-dialog", NULL);
++   return main_dialog;
+ }
+ 
+ static char*
+@@ -194,7 +175,7 @@ binding_name (guint                   ke
+ {
+   if (keyval != 0 || keycode != 0)
+     return egg_virtual_accelerator_name (keyval, keycode, mask);
+-  else
++  else 
+     return translate ? g_strdup (_("Disabled")) : g_strdup ("disabled");
+ }
+ 
+@@ -259,7 +240,7 @@ accel_set_func (GtkTreeViewColumn *tree_
+ 		  NULL);
+ }
+ 
+-static gboolean
++gboolean
+ keybinding_key_changed_foreach (GtkTreeModel *model,
+ 				GtkTreePath  *path,
+ 				GtkTreeIter  *iter,
+@@ -275,6 +256,11 @@ keybinding_key_changed_foreach (GtkTreeM
+ 
+   if (key_entry == tmp_key_entry)
+     {
++      if (key_entry->custom_key)
++        gtk_tree_store_set (GTK_TREE_STORE (key_entry->model), iter,
++                            DESCRIPTION_COLUMN, key_entry->action,
++                            -1);
++
+       gtk_tree_model_row_changed (key_entry->model, path, iter);
+       return TRUE;
+     }
+@@ -289,7 +275,6 @@ keybinding_key_changed (GConfClient *cli
+ {
+   KeyEntry *key_entry;
+   const gchar *key_value;
+-
+   key_entry = (KeyEntry *)user_data;
+   key_value = gconf_value_get_string (entry->value);
+ 
+@@ -362,10 +347,11 @@ clear_old_model (GladeXML  *dialog,
+ {
+   GtkTreeModel *model;
+   GtkTreeModel *sort_model;
+-  GtkTreeIter iter;
++  GtkTreeIter iter, parent_iter;
+   KeyEntry *key_entry;
+   gboolean valid;
+   GConfClient *client;
++  int children, i;
+ 
+   client = gconf_client_get_default ();
+   model = get_real_model (GTK_TREE_VIEW (tree_view));
+@@ -374,21 +360,33 @@ clear_old_model (GladeXML  *dialog,
+     {
+       g_object_ref (model);
+ 
+-      for (valid = gtk_tree_model_get_iter_first (model, &iter);
+-	   valid;
+-	   valid = gtk_tree_model_iter_next (model, &iter))
++	valid = gtk_tree_model_get_iter_first (model, &parent_iter);
++	while  (valid)
+ 	{
+-	  gtk_tree_model_get (model, &iter,
+-			      KEYENTRY_COLUMN, &key_entry,
+-			      -1);
+-	  if (key_entry != NULL)
+-	    {
+-	      gconf_client_notify_remove (client, key_entry->gconf_cnxn);
+-	      g_free (key_entry->gconf_key);
+-              g_free (key_entry->description);
+-	      g_free (key_entry);
+-            }
+-	}
++          children = gtk_tree_model_iter_n_children (model,&parent_iter);
++
++          for (i = 0; i < children ; i++)
++             {
++                if (gtk_tree_model_iter_nth_child (model, &iter, &parent_iter, i))
++                  {
++                        gtk_tree_model_get (model, &iter,
++                                            KEYENTRY_COLUMN, &key_entry,
++                                            -1);
++	                if (key_entry != NULL)
++	                  {
++			      if (key_entry->custom_key == TRUE)
++	                           gconf_client_notify_remove (client, key_entry->cmd_line_cnxn);
++	                      gconf_client_notify_remove (client, key_entry->gconf_cnxn);
++	                      g_free (key_entry->gconf_key);
++                              g_free (key_entry->description);
++	                      g_free (key_entry);
++                          }
++            
++                  }
++
++	      }
++            valid = gtk_tree_model_iter_next (model, &parent_iter);
++         }
+       g_object_unref (model);
+     }
+ 
+@@ -446,7 +444,8 @@ should_show_key (const KeyListEntry *ent
+ static void
+ append_keys_to_tree (GladeXML           *dialog,
+ 		     const gchar        *title,
+-		     const KeyListEntry *keys_list)
++		     const KeyListEntry *keys_list,
++		     gboolean            custom_binding)
+ {
+   GConfClient *client;
+   GtkTreeIter parent_iter;
+@@ -466,57 +465,97 @@ append_keys_to_tree (GladeXML           
+ 
+   for (j = 0; keys_list[j].name != NULL; j++)
+     {
+-      GConfEntry *entry;
++      GConfEntry *entry = NULL;
+       GConfSchema *schema = NULL;
+-      KeyEntry *key_entry;
++      KeyEntry *key_entry = NULL;
+       GError *error = NULL;
+       GtkTreeIter iter;
+       const gchar *key_string;
+       gchar *key_value;
+ 
+       if (!should_show_key (&keys_list[j]))
+-	continue;
+-      
+-      key_string = keys_list[j].name;
++        continue;
+ 
+-      entry = gconf_client_get_entry (client,
+-                                      key_string,
+-				      NULL,
+-				      TRUE,
+-				      &error);
+-      if (error || entry == NULL)
+-	{
+-	  /* We don't actually want to popup a dialog - just skip this one */
+-	  if (error)
+-	    g_error_free (error);
+-	  continue;
+-	}
++      if (!custom_binding)
++       {
++          key_string = keys_list[j].name;
++
++	  entry = gconf_client_get_entry (client,
++					  key_string,
++					  NULL,
++					  TRUE,
++					  &error);
++       }
++      else if (error || entry == NULL)
++       {
++          key_entry = custom_key_new ((char *)keys_list[j].name);
++          if (!key_entry)
++            continue;
++          key_string = key_entry->gconf_key;
++       }
++
++
++      if (!custom_binding)
++       {
++         if (error || entry == NULL)
++           {
++             /* We don't actually want to popup a dialog - just skip this one */
++             if (error)
++               g_error_free (error);
++             continue;
++           }
+ 
+-      if (gconf_entry_get_schema_name (entry))
+-	schema = gconf_client_get_schema (client, gconf_entry_get_schema_name (entry), &error);
++         if (gconf_entry_get_schema_name (entry))
++           schema = gconf_client_get_schema (client, gconf_entry_get_schema_name (entry), &error);
+       
+-      if (error || schema == NULL)
+-	{
+-	  /* We don't actually want to popup a dialog - just skip this one */
+-	  if (error)
+-	    g_error_free (error);
+-	  continue;
++         if (error || schema == NULL)
++	   {
++	     /* We don't actually want to popup a dialog - just skip this one */
++	     if (error)
++	       g_error_free (error);
++		continue;
++           }
+ 	}
+ 
+-      key_value = gconf_client_get_string (client, key_string, &error);
++      if (!custom_binding)
++        {
+ 
+-      key_entry = g_new0 (KeyEntry, 1);
+-      key_entry->gconf_key = g_strdup (key_string);
+-      key_entry->editable = gconf_entry_get_is_writable (entry);
+-      key_entry->model = model;
+-      gconf_client_add_dir (client, key_string, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+-      key_entry->gconf_cnxn = gconf_client_notify_add (client,
+-						       key_string,
+-						       (GConfClientNotifyFunc) &keybinding_key_changed,
+-						       key_entry, NULL, NULL);
+-      binding_from_string (key_value, &key_entry->keyval, &key_entry->keycode, &key_entry->mask);
+-      g_free (key_value);
+-      key_entry->description = g_strdup (gconf_schema_get_short_desc (schema));
++           key_entry = g_new0 (KeyEntry, 1);
++           key_value = gconf_client_get_string (client, key_string, &error);
++           key_entry->gconf_key = g_strdup (key_string);
++           key_entry->editable = gconf_entry_get_is_writable (entry);
++           key_entry->model = model;
++           gconf_client_add_dir (client, key_string, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
++           key_entry->gconf_cnxn = gconf_client_notify_add (client,
++						            key_string,
++						            (GConfClientNotifyFunc) &keybinding_key_changed,
++						            key_entry, NULL, NULL);
++           binding_from_string (key_value, &key_entry->keyval, &key_entry->keycode, &key_entry->mask);
++           g_free (key_value);
++           key_entry->description = g_strdup (gconf_schema_get_short_desc (schema));
++        }
++      else 
++        {
++           char *key_binding = g_strdup_printf ("%s/binding", key_entry->gconf_key);
++           char *cmd_binding = g_strdup_printf ("%s/action", key_entry->gconf_key);
++           key_entry->editable = TRUE;
++           key_entry->model = model;
++           gconf_client_add_dir (client, key_entry->gconf_key, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
++
++           key_entry->gconf_cnxn = gconf_client_notify_add (client,
++                                                            key_binding,
++                                                            (GConfClientNotifyFunc) &keybinding_key_changed,
++                                                            key_entry, NULL, NULL);
++           binding_from_string (key_entry->binding, &key_entry->keyval, &key_entry->keycode, &key_entry->mask);
++
++           key_entry->custom_key = TRUE;
++           key_entry->cmd_line_cnxn = gconf_client_notify_add (client, cmd_binding,
++                                                              (GConfClientNotifyFunc) &cmd_line_changed,
++                                                              key_entry, NULL, NULL);
++           key_entry->action = g_strdup (gconf_client_get_string (client, cmd_binding, &error));
++           g_free (key_binding);
++           g_free (cmd_binding);
++        }
+ 
+       if (i == MAX_ELEMENTS_BEFORE_SCROLLING)
+ 	{
+@@ -529,20 +568,33 @@ append_keys_to_tree (GladeXML           
+ 	}
+       i++;
+       gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent_iter);
+-      if (gconf_schema_get_short_desc (schema))
+-	gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
+-			    DESCRIPTION_COLUMN,
+-                            key_entry->description,
+-			    KEYENTRY_COLUMN, key_entry,
+-			    -1);
+-      else
+-	gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
+-			    DESCRIPTION_COLUMN, _("<Unknown Action>"),
+-			    KEYENTRY_COLUMN, key_entry,
+-			    -1);
++      if (!custom_binding)
++        {
++          if (gconf_schema_get_short_desc (schema))
++	    gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
++			        DESCRIPTION_COLUMN,
++                                key_entry->description,
++			        KEYENTRY_COLUMN, key_entry,
++			        -1);
++          else
++	    gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
++			        DESCRIPTION_COLUMN, _("<Unknown Action>"),
++			        KEYENTRY_COLUMN, key_entry,
++			        -1);
++        }
++      else {
++            gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
++                                DESCRIPTION_COLUMN, key_entry->action,
++                                KEYENTRY_COLUMN, key_entry,
++                                -1);
++      }
++
+       gtk_tree_view_expand_all (GTK_TREE_VIEW (WID ("shortcut_treeview")));
+-      gconf_entry_free (entry);
+-      gconf_schema_free (schema);
++
++      if (entry)
++        gconf_entry_free (entry);
++      if (schema)
++        gconf_schema_free (schema);
+     }
+ 
+   if (i == 0)
+@@ -551,18 +603,20 @@ append_keys_to_tree (GladeXML           
+       gtk_widget_show (WID ("shortcuts_vbox"));
+ }
+ 
+-static void
++void
+ reload_key_entries (gpointer wm_name, GladeXML *dialog)
+ {
+   clear_old_model (dialog, WID ("shortcut_treeview"));
+   
+-  append_keys_to_tree (dialog, _("Desktop"), desktop_key_list);
+-  append_keys_to_tree (dialog, _("Sound"), sounds_key_list);
++  append_keys_to_tree (dialog, _("Desktop"), desktop_key_list, FALSE);
++  append_keys_to_tree (dialog, _("Sound"), sounds_key_list, FALSE);
+   
+   if (strcmp((char *) wm_name, WM_COMMON_METACITY) == 0)
+     {
+-      append_keys_to_tree (dialog, _("Window Management"), metacity_key_list);
++      append_keys_to_tree (dialog, _("Window Management"), metacity_key_list, FALSE);
+     }
++ 
++  append_keys_to_tree (dialog, _("Custom Shortcuts"), custom_binding_list, TRUE);
+ }
+ 
+ static void
+@@ -630,7 +684,6 @@ accel_edited_callback (GtkCellRendererTe
+   /* sanity check */
+   if (key_entry == NULL)
+     return;
+-
+   model = get_real_model (view);
+   tmp_key.model  = model;
+   tmp_key.keyval = keyval;
+@@ -675,10 +728,22 @@ accel_edited_callback (GtkCellRendererTe
+   str = binding_name (keyval, keycode, mask, FALSE);
+ 
+   client = gconf_client_get_default();
+-  gconf_client_set_string (client,
+-                           key_entry->gconf_key,
+-                           str,
+-                           &err);
++
++  if (!key_entry->custom_key)
++     gconf_client_set_string (gconf_client_get_default(),
++                             key_entry->gconf_key,
++                             str,
++                             &err);
++   else
++     {
++       char *key = g_strdup_printf ("%s/binding", key_entry->gconf_key);
++       gconf_client_set_string (gconf_client_get_default(),
++                               key,
++                               str,
++                               &err);
++       g_free (key);
++     }
++
+   g_free (str);
+   g_object_unref (G_OBJECT (client));
+ 
+@@ -726,6 +791,22 @@ accel_cleared_callback (GtkCellRendererT
+ 
+   /* Unset the key */
+   client = gconf_client_get_default();
++
++  if (!key_entry->custom_key) {
++      gconf_client_set_string (gconf_client_get_default(),
++                             key_entry->gconf_key,
++                             "disabled",
++                             &err);
++    } else {
++      char *key = g_strdup_printf ("%s/binding", key_entry->gconf_key);
++      gconf_client_set_string (gconf_client_get_default(),
++                             key,
++                             "disabled",
++                             &err);
++      g_free (key);
++
++    }
++
+   gconf_client_set_string (client,
+ 			   key_entry->gconf_key,
+ 			   "disabled",
+@@ -793,6 +874,8 @@ start_editing_cb (GtkTreeView    *tree_v
+ {
+   GtkTreePath *path;
+ 
++  my_verbose ("In start_editing_cb\n");
++
+   if (event->window != gtk_tree_view_get_bin_window (tree_view))
+     return FALSE;
+ 
+@@ -841,10 +924,7 @@ setup_dialog (GladeXML *dialog)
+   client = gconf_client_get_default ();
+ 
+   g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
+-		    "button_press_event",
+-		    G_CALLBACK (start_editing_cb), dialog),
+-	g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
+-	      "row-activated",
++	            "row-activated",
+ 		    G_CALLBACK (start_editing_kb_cb), dialog),
+ 		    
+   column = gtk_tree_view_column_new_with_attributes (_("Action"),
+@@ -856,6 +936,7 @@ setup_dialog (GladeXML *dialog)
+   gtk_tree_view_append_column (GTK_TREE_VIEW (WID ("shortcut_treeview")), column);
+   gtk_tree_view_column_set_sort_column_id (column, DESCRIPTION_COLUMN);  
+   
++
+   renderer = (GtkCellRenderer *) g_object_new (EGG_TYPE_CELL_RENDERER_KEYS,
+ 					       "editable", TRUE,
+ 					       "accel_mode", EGG_CELL_RENDERER_KEYS_MODE_X,
+@@ -881,12 +962,14 @@ setup_dialog (GladeXML *dialog)
+   
+   gconf_client_add_dir (client, "/apps/gnome_keybinding_properties", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+   gconf_client_add_dir (client, "/apps/metacity/general", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
++  gconf_client_add_dir (client, GCONF_CUSTOM_BINDING_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
+   gconf_client_notify_add (client,
+ 			   "/apps/metacity/general/num_workspaces",
+ 			   (GConfClientNotifyFunc) &key_entry_controlling_key_changed,
+ 			   dialog, NULL, NULL);
+   g_object_unref (client);
+ 
++  create_custom_bindings_list ();
+   /* set up the dialog */
+   reload_key_entries (wm_common_get_current_window_manager(), dialog);
+ 
+@@ -894,6 +977,18 @@ setup_dialog (GladeXML *dialog)
+   gtk_widget_show (widget);
+ 
+   g_signal_connect (G_OBJECT (widget), "response", G_CALLBACK(cb_dialog_response), NULL);
++
++  /* set up custom bindings buttons and dialog*/
++  widget = WID ("disable_custom_button");
++  g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (disable_custom),
++                    GTK_TREE_VIEW (WID ("shortcut_treeview")));
++
++  widget = WID ("add_custom_button");
++  g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (add_custom), NULL);
++
++  widget = WID ("edit_custom_button");
++  g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (edit_custom), NULL);
++
+ }
+ 
+ int
+--- control-center-2.10.1/gnome-settings-daemon/gnome-settings-keybindings.c	Thu May 12 16:46:31 2005
++++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-keybindings.c	Fri May 13 11:51:17 2005
+@@ -199,7 +199,7 @@ bindings_get_entry (char *subdir)
+ 	  if (!action)
+ 	    {
+ 	      value = gconf_entry_get_value (entry);
+-	      if (value->type != GCONF_VALUE_STRING)
++	      if (value && value->type != GCONF_VALUE_STRING)
+ 		return FALSE;
+ 	      action = g_strdup (gconf_value_get_string (value));
+ 	    }
+@@ -212,7 +212,7 @@ bindings_get_entry (char *subdir)
+ 	  if (!key)
+ 	    {
+ 	      value = gconf_entry_get_value (entry);
+-	      if (value->type != GCONF_VALUE_STRING)
++	      if (value && value->type != GCONF_VALUE_STRING)
+ 		return FALSE;
+ 	      key = g_strdup (gconf_value_get_string (value));
+ 	    }
+@@ -259,22 +259,6 @@ bindings_get_entry (char *subdir)
+   return TRUE;
+ }
+ 
+-static gboolean 
+-key_already_used (Binding *binding)
+-{
+-  GSList *li;
+-  
+-  for (li = binding_list; li != NULL; li = li->next)
+-    {
+-      Binding *tmp_binding =  (Binding*) li->data;
+-
+-      if (tmp_binding != binding &&  tmp_binding->key.keycode == binding->key.keycode &&
+-	  tmp_binding->key.state == binding->key.state)
+-	return TRUE;
+-    }
+-  return FALSE;
+-}
+-
+ static void
+ grab_key (GdkWindow *root, Key *key, int result, gboolean grab)
+ {
+@@ -344,9 +328,6 @@ binding_register_keys (void)
+       if (binding->previous_key.keycode != binding->key.keycode || 
+ 	  binding->previous_key.state != binding->key.state)
+         {
+-          /* Ungrab key if it changed and not clashing with previously set binding */
+-          if (!key_already_used (binding))
+-            {
+               if (binding->previous_key.keycode)
+ 		do_grab (FALSE, &binding->previous_key);
+ 	      do_grab (TRUE, &binding->key);
+@@ -354,9 +335,6 @@ binding_register_keys (void)
+ 	      binding->previous_key.keysym = binding->key.keysym;
+ 	      binding->previous_key.state = binding->key.state;
+ 	      binding->previous_key.keycode = binding->key.keycode;
+-            }
+-          else
+-            g_warning (_("Key Binding (%s) is already in use\n"), binding->binding_str);
+         }
+     }
+   gdk_flush ();
--- a/patches/control-center-07-logout-shortcut.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,80 +0,0 @@
---- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 10:16:36 2005
-+++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 10:58:51 2005
-@@ -41,12 +41,12 @@ typedef struct
- const KeyListEntry desktop_key_list[] =
- {
-   { "/apps/gnome_settings_daemon/keybindings/help", ALWAYS_VISIBLE, 0 },
--  { "/apps/gnome_settings_daemon/keybindings/power", ALWAYS_VISIBLE, 0 },
-   { "/apps/gnome_settings_daemon/keybindings/sleep", ALWAYS_VISIBLE, 0 },
-   { "/apps/gnome_settings_daemon/keybindings/screensaver", ALWAYS_VISIBLE, 0 },
-   { "/apps/gnome_settings_daemon/keybindings/home", ALWAYS_VISIBLE, 0 },
-   { "/apps/gnome_settings_daemon/keybindings/search", ALWAYS_VISIBLE, 0 },
-   { "/apps/gnome_settings_daemon/keybindings/email", ALWAYS_VISIBLE, 0 },
-+  { "/apps/metacity/global_keybindings/logout", ALWAYS_VISIBLE, 0 },
-   { "/apps/gnome_settings_daemon/keybindings/www", ALWAYS_VISIBLE, 0 },
-   { "/apps/metacity/global_keybindings/panel_run_dialog", ALWAYS_VISIBLE, 0 },
-   { "/apps/metacity/global_keybindings/panel_main_menu", ALWAYS_VISIBLE, 0 },
---- control-center-2.10.1/gnome-settings-daemon/actions/acme.h	Thu May 12 16:46:32 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/actions/acme.h	Fri May 13 10:59:14 2005
-@@ -29,7 +29,6 @@ enum {
- 	MUTE_KEY,
- 	VOLUME_DOWN_KEY,
- 	VOLUME_UP_KEY,
--	POWER_KEY,
- 	EJECT_KEY,
- 	HOME_KEY,
- 	SEARCH_KEY,
-@@ -64,7 +63,6 @@ static struct {
- 	{ MUTE_KEY, GCONF_BINDING_DIR "/volume_mute",NULL },
- 	{ VOLUME_DOWN_KEY, GCONF_BINDING_DIR "/volume_down", NULL },
- 	{ VOLUME_UP_KEY, GCONF_BINDING_DIR "/volume_up", NULL },
--	{ POWER_KEY, GCONF_BINDING_DIR "/power", NULL },
- 	{ EJECT_KEY, GCONF_BINDING_DIR "/eject", NULL },
- 	{ HOME_KEY, GCONF_BINDING_DIR "/home", NULL },
- 	{ SEARCH_KEY, GCONF_BINDING_DIR "/search", NULL },
---- control-center-2.10.1/schemas/apps_gnome_settings_daemon_keybindings.schemas.in	Thu May 12 16:46:32 2005
-+++ control-center-2.10.1-new/schemas/apps_gnome_settings_daemon_keybindings.schemas.in	Fri May 13 11:43:43 2005
-@@ -50,18 +50,6 @@
- 
- 
-         <schema>
--            <key>/schemas/apps/gnome_settings_daemon/keybindings/power</key>
--            <applyto>/apps/gnome_settings_daemon/keybindings/power</applyto>
--            <type>string</type>
--            <default></default>
--            <locale name="C">
--                <short>Log out</short>
--                <long>Log out's shortcut.</long>
--            </locale>
--        </schema>
--
--
--        <schema>
-             <key>/schemas/apps/gnome_settings_daemon/keybindings/eject</key>
-             <applyto>/apps/gnome_settings_daemon/keybindings/eject</applyto>
-             <type>string</type>
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Thu May 12 16:46:31 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Fri May 13 11:42:17 2005
-@@ -661,12 +661,6 @@ do_www_action (Acme *acme, const char *u
- }
- 
- static void
--do_exit_action (Acme *acme)
--{
--	execute ("gnome-session-save --kill", FALSE);
--}
--
--static void
- do_eject_action (Acme *acme)
- {
- 	GtkWidget *progress;
-@@ -806,9 +800,6 @@ do_action (Acme *acme, int type)
- 	case VOLUME_DOWN_KEY:
- 	case VOLUME_UP_KEY:
- 		do_sound_action (acme, type);
--		break;
--	case POWER_KEY:
--		do_exit_action (acme);
- 		break;
- 	case EJECT_KEY:
- 		do_eject_action (acme);
--- a/patches/control-center-08-custom-keybinding.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1570 +0,0 @@
---- /dev/null	Fri May 13 10:45:25 2005
-+++ control-center-2.10.1-new/capplets/keybindings/custom-binding.h	Fri May 13 11:51:17 2005
-@@ -0,0 +1,106 @@
-+/* Erwann Chenede 2002 */
-+
-+#include <config.h>
-+
-+#include <string.h>
-+#include <gtk/gtk.h>
-+#include <gconf/gconf-client.h>
-+#include <gdk/gdkx.h>
-+#include <glade/glade.h>
-+#include <X11/Xatom.h>
-+
-+#include "wm-common.h"
-+#include "capplet-util.h"
-+#include "eggcellrendererkeys.h"
-+#include "activate-settings-daemon.h"
-+
-+#ifndef __CUSTOM_BINDING__H__
-+#define __CUSTOM_BINDING__H__
-+
-+#define GCONF_CUSTOM_BINDING_DIR "/desktop/gnome/keybindings"
-+
-+typedef enum {
-+  ALWAYS_VISIBLE,
-+  N_WORKSPACES_GT
-+} KeyListEntryVisibility;
-+
-+typedef struct
-+{
-+  const char *name;
-+  KeyListEntryVisibility visibility;
-+  gint data;
-+} KeyListEntry;
-+
-+enum
-+{
-+  DESCRIPTION_COLUMN,
-+  KEYENTRY_COLUMN,
-+  N_COLUMNS
-+};
-+
-+typedef struct
-+{
-+  char *gconf_key;
-+  guint keyval;
-+  guint keycode;
-+  EggVirtualModifierType mask;
-+  gboolean editable;
-+  GtkTreeModel *model;
-+  guint gconf_cnxn;
-+  gboolean custom_key;
-+  guint cmd_line_cnxn;
-+  char *action;
-+  char *binding;
-+  char *description;
-+} KeyEntry;
-+
-+void
-+my_verbose (const char *format, ...);
-+
-+void
-+cmd_line_changed (GConfClient *client,
-+		  guint        cnxn_id,
-+		  GConfEntry  *entry,
-+		  gpointer     user_data);
-+
-+void 
-+disable_custom (GtkWidget *widget, GtkTreeView *tree_view);
-+
-+gboolean
-+grab_key_callback (GtkWidget    *widget,
-+                   GdkEventKey  *event,
-+                   void         *data);
-+void grab_key (GtkWidget *widget, GladeXML *dialog);
-+
-+void custom_cancel (GtkWidget *widget, GladeXML *dialog);
-+
-+void delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer *user_data);
-+
-+GladeXML *
-+setup_custom_binding_dialog ();
-+
-+void 
-+add_custom (GtkWidget *widget);
-+
-+void 
-+edit_custom (GtkWidget *widget);
-+
-+void 
-+create_custom_bindings_list ();
-+
-+KeyEntry *
-+custom_key_new (char *dir);
-+
-+gboolean
-+is_gconf_key_custom_binding (char *key);
-+
-+gboolean
-+keybinding_key_changed_foreach (GtkTreeModel *model,
-+				GtkTreePath  *path,
-+				GtkTreeIter  *iter,
-+				gpointer      user_data);
-+
-+void
-+reload_key_entries (gpointer wm_name, GladeXML *dialog);
-+#endif /*__CUSTOM_BINDING__H__*/
-+
---- /dev/null	Fri May 13 10:45:25 2005
-+++ control-center-2.10.1-new/capplets/keybindings/custom-binding.c	Fri May 13 11:51:17 2005
-@@ -0,0 +1,480 @@
-+/* Erwann Chenede 2002 */
-+
-+#include <config.h>
-+
-+#include <string.h>
-+#include <gtk/gtk.h>
-+#include <gconf/gconf-client.h>
-+#include <gdk/gdkx.h>
-+#include <glade/glade.h>
-+#include <X11/Xatom.h>
-+
-+#include "wm-common.h"
-+#include "capplet-util.h"
-+#include "eggcellrendererkeys.h"
-+#include "activate-settings-daemon.h"
-+#include "custom-binding.h"
-+
-+extern KeyListEntry *custom_binding_list;
-+extern GladeXML *main_dialog;
-+
-+void
-+my_verbose (const char *format, ...)
-+{
-+  va_list args;
-+  gchar *str;
-+
-+  if (format == NULL)
-+    return;
-+
-+  if (1) /*DEBUG*/
-+    return;
-+  
-+  va_start (args, format);
-+  str = g_strdup_vprintf (format, args);
-+  va_end (args);
-+  
-+  fputs (str, stderr);
-+
-+  fflush (stderr);
-+  
-+  g_free (str);
-+}
-+
-+void
-+cmd_line_changed (GConfClient *client,
-+		  guint        cnxn_id,
-+		  GConfEntry  *entry,
-+		  gpointer     user_data)
-+{
-+  KeyEntry *key_entry;
-+
-+  my_verbose ("In cmd_line_changed\n");
-+  
-+  key_entry = (KeyEntry *)user_data;
-+  g_free (key_entry->action);
-+  key_entry->action = g_strdup (gconf_value_get_string (entry->value));
-+  key_entry->editable = gconf_entry_get_is_writable (entry);
-+
-+  /* update the model */
-+  gtk_tree_model_foreach (key_entry->model, keybinding_key_changed_foreach, key_entry);
-+}
-+
-+KeyEntry *
-+find_keyentry_selected (GtkTreeView *tree_view)
-+{
-+  GtkTreeSelection* sel = NULL;
-+  sel = gtk_tree_view_get_selection (tree_view);
-+  
-+  if (sel)
-+    {
-+      GtkTreeIter iter;
-+      GtkTreeModel *model;
-+      if (gtk_tree_selection_get_selected (sel, &model, &iter))
-+	{
-+	  KeyEntry *key_entry;
-+
-+	  gtk_tree_model_get (model, &iter, KEYENTRY_COLUMN, &key_entry, -1);
-+	  return key_entry;
-+	}
-+    }
-+  return NULL;
-+}
-+	
-+static gboolean key_delete_cleanup (KeyEntry *key_entry)
-+{
-+  GConfClient *client = gconf_client_get_default();
-+
-+  gconf_client_recursive_unset (client, key_entry->gconf_key, 0, NULL);
-+
-+  create_custom_bindings_list ();
-+  reload_key_entries (wm_common_get_current_window_manager(), main_dialog);
-+
-+  return FALSE;
-+}
-+
-+void 
-+disable_custom (GtkWidget *widget, GtkTreeView *tree_view)
-+{
-+  KeyEntry *key_entry = find_keyentry_selected (tree_view);
-+  
-+  if (key_entry)
-+    {
-+      if (key_entry->custom_key)
-+	{
-+	  GConfClient *client = gconf_client_get_default();
-+	  gchar *binding = g_strdup_printf ("%s/binding", key_entry->gconf_key);
-+	  gchar *binding_str;
-+
-+	  gconf_client_notify_remove (client, key_entry->gconf_cnxn);
-+	  gconf_client_notify_remove (client, key_entry->cmd_line_cnxn);
-+
-+	  key_entry->gconf_cnxn = 0;
-+	  key_entry->cmd_line_cnxn = 0;
-+
-+	  binding_str = gconf_client_get_string (client,binding, NULL);
-+	
-+	  if (binding_str && strcmp (binding_str, "disabled")) {
-+		/* This is a neccessery evil. We need to follow a similar
-+		   pattern of sequence in setting the binding to disabled state
-+		   before deleting it. The timeout is to ensure that when
-+		   g-s-d is getting the changes it does not find a key which
-+		   is non-existent and crash.
-+		*/
-+		gconf_client_set_string (client,
-+					binding,
-+					"disabled",
-+					NULL);
-+	  	g_timeout_add (1000,  (GSourceFunc) key_delete_cleanup, key_entry);
-+
-+		g_free (binding_str);
-+	  } else 
-+		key_delete_cleanup (key_entry);
-+
-+	  g_free (binding);
-+	}
-+      else
-+	gconf_client_set_string (gconf_client_get_default(),key_entry->gconf_key, "", NULL);
-+    }
-+}
-+
-+static int
-+get_trailing_num (char *str)
-+{
-+  char **result = g_strsplit (str, "_", 2);
-+  int i = atoi (result[1]);
-+  g_strfreev (result);
-+  return i;
-+}
-+
-+static char *
-+find_free_custom_gconf_key ()
-+{
-+  GConfClient *client;
-+  GSList *list, *li;
-+  int num_bindings = 0;
-+  int max_num = 0;
-+  
-+  client  = gconf_client_get_default ();
-+
-+  list = gconf_client_all_dirs (client, GCONF_CUSTOM_BINDING_DIR, NULL);
-+
-+  num_bindings = g_slist_length (list);
-+
-+  custom_binding_list = g_new0 (KeyListEntry, num_bindings+1);
-+
-+  /*find the highest num */
-+
-+  for (li = list; li != NULL; li = li->next)
-+    {
-+      char *subdir = li->data;
-+      char *key = g_path_get_basename(subdir);
-+      li->data = NULL;
-+
-+      if (g_ascii_strncasecmp(key, "custom_", 7) == 0)
-+	{
-+	  int i = get_trailing_num (key);
-+	  if (i > max_num)
-+	    max_num = i;
-+	}
-+    }
-+  g_slist_free (list);
-+  
-+  return g_strdup_printf ("%s/custom_%d",GCONF_CUSTOM_BINDING_DIR, max_num + 1);
-+}
-+
-+
-+static void 
-+add_real_key (GtkWidget *widget, GladeXML *dialog)
-+{
-+  KeyEntry *entry = NULL;
-+  GError *err = NULL;
-+  GtkWidget *area_tf = WID ("action_tf");
-+  char *binding_key, *action_key;
-+  char *action = g_strdup (gtk_entry_get_text (GTK_ENTRY (area_tf)));
-+
-+  entry = g_object_steal_data (G_OBJECT (area_tf), "key_entry");
-+  
-+  if (!entry)
-+    {
-+      char *new_gconf_key = find_free_custom_gconf_key ();
-+      GConfClient *client = gconf_client_get_default ();
-+      
-+      binding_key = g_strdup_printf ("%s/binding", new_gconf_key);
-+      action_key = g_strdup_printf ("%s/action", new_gconf_key);
-+      
-+      gconf_client_set_string (client, new_gconf_key, "", &err);
-+      
-+      gconf_client_set_string  (client, binding_key, "", &err);
-+      
-+      gconf_client_set_string  (client,	action_key, action, &err);
-+      
-+      create_custom_bindings_list ();
-+      reload_key_entries (wm_common_get_current_window_manager(), main_dialog);
-+      g_free (binding_key);
-+      g_free (new_gconf_key);
-+    }
-+  else
-+    {
-+      action_key = g_strdup_printf ("%s/action", entry->gconf_key);
-+      gconf_client_set_string  (gconf_client_get_default (),
-+				action_key, action, &err);
-+    }
-+
-+  g_free (action);
-+  g_free (action_key);
-+
-+  custom_cancel (widget, dialog);
-+}
-+
-+void 
-+custom_cancel (GtkWidget *widget, GladeXML *dialog)
-+{
-+  gtk_entry_set_text (GTK_ENTRY (WID ("action_tf")), "");
-+
-+  gtk_widget_hide (WID ("custom-binding-dialog"));
-+}
-+
-+void
-+delete_event_cb (GtkWidget *widget, GdkEventAny *event, gpointer *user_data)
-+{
-+  GtkWidget *entry = GTK_WIDGET (user_data);
-+  gtk_entry_set_text (GTK_ENTRY (entry), "");
-+
-+  gtk_widget_hide (widget);
-+}
-+
-+static void 
-+cb_dialog_response (GtkWidget *widget, GladeXML *dialog)
-+{
-+	capplet_help (GTK_WINDOW (gtk_widget_get_toplevel (widget)),
-+		      "user-guide.xml",
-+		      "goscustdesk-39");
-+}
-+
-+typedef struct 
-+{
-+  GtkFileSelection *fs;
-+  GladeXML *dialog;
-+} FileSelData;
-+
-+
-+static void 
-+command_selection_ok (FileSelData *fs_data)
-+{
-+  GtkWidget *action_tf = glade_xml_get_widget (fs_data->dialog, "action_tf");
-+  gchar **selections;
-+
-+  selections = gtk_file_selection_get_selections (fs_data->fs);
-+
-+  gtk_entry_set_text (GTK_ENTRY (action_tf), selections[0]);
-+  gtk_widget_destroy (GTK_WIDGET (fs_data->fs));
-+}
-+
-+static void 
-+set_command (GtkWidget *widget, GladeXML *dialog)
-+{
-+  GtkWidget *window;
-+  FileSelData *fs_data = g_new (FileSelData, 1);
-+  
-+  window = gtk_file_selection_new ("Select Command");
-+
-+  gtk_window_set_screen (GTK_WINDOW (window),
-+			 gtk_widget_get_screen (widget));
-+
-+  gtk_file_selection_set_select_multiple (GTK_FILE_SELECTION (window),
-+					  FALSE);
-+
-+  g_signal_connect (window, "destroy",
-+		    G_CALLBACK (gtk_widget_destroyed),
-+		    &window);
-+ 
-+  fs_data->fs = GTK_FILE_SELECTION (window);
-+  fs_data->dialog = dialog;
-+  
-+  g_signal_connect_swapped (GTK_FILE_SELECTION (window)->ok_button,
-+			    "clicked",			    
-+			    G_CALLBACK (command_selection_ok),
-+			    fs_data);
-+
-+  g_signal_connect_swapped (GTK_FILE_SELECTION (window)->cancel_button,
-+			    "clicked",
-+			    G_CALLBACK (gtk_widget_destroy),
-+			    window);
-+  gtk_widget_show (window);
-+}
-+
-+GladeXML *
-+setup_custom_binding_dialog ()
-+{
-+  static GladeXML *dialog = NULL;
-+  GtkWidget *widget, *entry;
-+
-+  if (dialog)
-+    return dialog;
-+
-+  /* setup dialog */
-+  dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keybinding-properties.glade", "custom-binding-dialog", NULL);
-+  
-+  widget = WID ("custom-binding-dialog");
-+  entry = WID ("action_tf");
-+  g_signal_connect (G_OBJECT (widget), "delete_event",
-+		    G_CALLBACK (delete_event_cb),
-+		    entry);
-+
-+  g_signal_connect (G_OBJECT (WID ("browse_button")), "clicked", 
-+		    G_CALLBACK (set_command), dialog);
-+
-+  g_signal_connect (G_OBJECT (WID ("cancelbutton1")), "clicked", 
-+		    G_CALLBACK (custom_cancel), dialog);
-+
-+  g_signal_connect (G_OBJECT (WID ("okbutton1")), "clicked", 
-+		    G_CALLBACK (add_real_key), dialog);
-+  
-+  g_signal_connect (G_OBJECT (WID ("helpbutton2")), "clicked", 
-+		    G_CALLBACK (cb_dialog_response), NULL);
-+
-+  /* gtk_widget_hide (WID ("custom-binding-dialog")); */
-+  return dialog;
-+}
-+void 
-+edit_custom (GtkWidget *widget)
-+{
-+  KeyEntry *entry = find_keyentry_selected (GTK_TREE_VIEW (glade_xml_get_widget (main_dialog,"shortcut_treeview")));
-+  if (entry)
-+    {
-+      if (entry->custom_key)
-+	{
-+	  GladeXML *dialog = setup_custom_binding_dialog ();
-+	  GtkWidget *widget;
-+	  widget =  WID ("action_tf");
-+	  g_object_set_data (G_OBJECT (widget), "key_entry", entry);
-+	  gtk_entry_set_text (GTK_ENTRY (widget), entry->action);
-+	  gtk_widget_show_all (WID ("custom-binding-dialog"));
-+	}
-+    }
-+}
-+void 
-+add_custom (GtkWidget *widget) 
-+{
-+  GladeXML *dialog = setup_custom_binding_dialog ();
-+  GtkWidget *action_widget;
-+  action_widget =  WID ("action_tf");
-+  g_object_set_data (G_OBJECT (action_widget), "key_entry", NULL);
-+  gtk_widget_show_all (WID ("custom-binding-dialog"));
-+}
-+
-+void 
-+create_custom_bindings_list ()
-+{
-+  GConfClient *client;
-+  GSList *list, *li;
-+  int num_bindings = 0, i = 0;
-+  
-+  client  = gconf_client_get_default ();
-+
-+  list = gconf_client_all_dirs (client, GCONF_CUSTOM_BINDING_DIR, NULL);
-+
-+  num_bindings = g_slist_length (list);
-+
-+  if (custom_binding_list)
-+    g_free (custom_binding_list);
-+    
-+
-+  custom_binding_list = g_new0 (KeyListEntry, num_bindings+1);
-+
-+  for (li = list; li != NULL; li = li->next)
-+    {
-+      char *subdir = li->data;
-+      li->data = NULL;
-+      custom_binding_list[i].name = subdir;
-+      custom_binding_list[i].visibility = ALWAYS_VISIBLE;
-+      i++;
-+    }
-+  g_slist_free (list);
-+}
-+
-+KeyEntry *
-+custom_key_new (char *dir)
-+{
-+  GConfValue *value;
-+  KeyEntry *new_binding;
-+  GSList *tmp_elem = NULL, *list = NULL, *li;
-+  char *gconf_key;
-+  char *action = NULL;
-+  char *key = NULL;
-+  
-+  g_return_val_if_fail (dir != NULL, NULL);
-+  
-+  /* value = gconf_entry_get_value (entry); */
-+  gconf_key = dir;
-+
-+  if (!gconf_key)
-+    return NULL;
-+
-+  /* Get entries for this binding */
-+  list = gconf_client_all_entries (gconf_client_get_default (), dir, NULL);
-+
-+  for (li = list; li != NULL; li = li->next)
-+    {
-+      GConfEntry *entry = li->data;
-+      char *key_name = g_path_get_basename (gconf_entry_get_key (entry));
-+      if (strcmp (key_name, "action") == 0)
-+	{
-+	  if (!action)
-+	    {
-+	      value = gconf_entry_get_value (entry);
-+              if (value) 
-+               {
-+	          if (value->type != GCONF_VALUE_STRING)
-+		     return NULL;
-+	          action = g_strdup (gconf_value_get_string (value));
-+              }
-+	    }
-+	  else
-+	    g_warning (_("Key Binding (%s) has its action defined multiple times\n"),
-+		       gconf_key);
-+	}
-+      if (strcmp (key_name, "binding") == 0)
-+	{
-+	  if (!key)
-+	    {
-+	      value = gconf_entry_get_value (entry);
-+              if (value)
-+                {
-+	          if (value->type != GCONF_VALUE_STRING)
-+		     return NULL;
-+	          key = g_strdup (gconf_value_get_string (value));
-+               }
-+	    }
-+	  else
-+	    g_warning (_("Key Binding (%s) has its binding defined multiple times\n"),
-+		       gconf_key);
-+	}
-+    }
-+  if (!action || !key)
-+    { 
-+      g_warning (_("Key Binding (%s) is incomplete\n"), gconf_key);
-+      return NULL;
-+    }
-+  
-+  new_binding = g_new0 (KeyEntry, 1);
-+  
-+  
-+  new_binding->binding = key;
-+  new_binding->action = action;
-+  new_binding->gconf_key = gconf_key;
-+  return new_binding;
-+}
-+
-+gboolean
-+is_gconf_key_custom_binding (char *key)
-+{
-+  char *str = NULL;
-+
-+  str = g_strrstr (key, "keybindings");
-+
-+  if (str)
-+    return TRUE;
-+  return FALSE;
-+}
---- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.glade	Thu May 12 16:46:18 2005
-+++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.glade	Fri May 13 11:51:17 2005
-@@ -11,6 +11,11 @@
-   <property name="modal">False</property>
-   <property name="resizable">True</property>
-   <property name="destroy_with_parent">False</property>
-+  <property name="decorated">True</property>
-+  <property name="skip_taskbar_hint">False</property>
-+  <property name="skip_pager_hint">False</property>
-+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-   <property name="has_separator">False</property>
- 
-   <child internal-child="vbox">
-@@ -32,6 +37,7 @@
- 	      <property name="label">gtk-help</property>
- 	      <property name="use_stock">True</property>
- 	      <property name="relief">GTK_RELIEF_NORMAL</property>
-+	      <property name="focus_on_click">True</property>
- 	      <property name="response_id">-11</property>
- 	    </widget>
- 	  </child>
-@@ -44,6 +50,7 @@
- 	      <property name="label">gtk-close</property>
- 	      <property name="use_stock">True</property>
- 	      <property name="relief">GTK_RELIEF_NORMAL</property>
-+	      <property name="focus_on_click">True</property>
- 	      <property name="response_id">-7</property>
- 	    </widget>
- 	  </child>
-@@ -152,6 +159,362 @@
- 	      <property name="padding">0</property>
- 	      <property name="expand">True</property>
- 	      <property name="fill">True</property>
-+	    </packing>
-+	  </child>
-+
-+	  <child>
-+	    <widget class="GtkHBox" id="hbox2">
-+	      <property name="border_width">5</property>
-+	      <property name="visible">True</property>
-+	      <property name="homogeneous">False</property>
-+	      <property name="spacing">6</property>
-+
-+	      <child>
-+		<widget class="GtkLabel" id="label13">
-+		  <property name="visible">True</property>
-+		  <property name="label" translatable="yes">Custom Shortcuts:</property>
-+		  <property name="use_underline">False</property>
-+		  <property name="use_markup">False</property>
-+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
-+		  <property name="wrap">False</property>
-+		  <property name="selectable">False</property>
-+		  <property name="xalign">0.5</property>
-+		  <property name="yalign">0.5</property>
-+		  <property name="xpad">0</property>
-+		  <property name="ypad">0</property>
-+		</widget>
-+		<packing>
-+		  <property name="padding">0</property>
-+		  <property name="expand">False</property>
-+		  <property name="fill">False</property>
-+		</packing>
-+	      </child>
-+
-+	      <child>
-+		<widget class="GtkButton" id="add_custom_button">
-+		  <property name="width_request">60</property>
-+		  <property name="height_request">30</property>
-+		  <property name="visible">True</property>
-+		  <property name="can_focus">True</property>
-+		  <property name="label">gtk-new</property>
-+		  <property name="use_stock">True</property>
-+		  <property name="relief">GTK_RELIEF_NORMAL</property>
-+		  <property name="focus_on_click">True</property>
-+		</widget>
-+		<packing>
-+		  <property name="padding">0</property>
-+		  <property name="expand">True</property>
-+		  <property name="fill">True</property>
-+		</packing>
-+	      </child>
-+
-+	      <child>
-+		<widget class="GtkButton" id="edit_custom_button">
-+		  <property name="visible">True</property>
-+		  <property name="can_focus">True</property>
-+		  <property name="relief">GTK_RELIEF_NORMAL</property>
-+		  <property name="focus_on_click">True</property>
-+
-+		  <child>
-+		    <widget class="GtkAlignment" id="alignment1">
-+		      <property name="visible">True</property>
-+		      <property name="xalign">0.5</property>
-+		      <property name="yalign">0.5</property>
-+		      <property name="xscale">0</property>
-+		      <property name="yscale">0</property>
-+		      <property name="top_padding">0</property>
-+		      <property name="bottom_padding">0</property>
-+		      <property name="left_padding">0</property>
-+		      <property name="right_padding">0</property>
-+
-+		      <child>
-+			<widget class="GtkHBox" id="hbox3">
-+			  <property name="visible">True</property>
-+			  <property name="homogeneous">False</property>
-+			  <property name="spacing">2</property>
-+
-+			  <child>
-+			    <widget class="GtkImage" id="image2">
-+			      <property name="visible">True</property>
-+			      <property name="stock">gtk-preferences</property>
-+			      <property name="icon_size">4</property>
-+			      <property name="xalign">0.5</property>
-+			      <property name="yalign">0.5</property>
-+			      <property name="xpad">0</property>
-+			      <property name="ypad">0</property>
-+			    </widget>
-+			    <packing>
-+			      <property name="padding">0</property>
-+			      <property name="expand">False</property>
-+			      <property name="fill">False</property>
-+			    </packing>
-+			  </child>
-+
-+			  <child>
-+			    <widget class="GtkLabel" id="label14">
-+			      <property name="visible">True</property>
-+			      <property name="label" translatable="yes">_Edit...</property>
-+			      <property name="use_underline">True</property>
-+			      <property name="use_markup">False</property>
-+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
-+			      <property name="wrap">False</property>
-+			      <property name="selectable">False</property>
-+			      <property name="xalign">0.5</property>
-+			      <property name="yalign">0.5</property>
-+			      <property name="xpad">0</property>
-+			      <property name="ypad">0</property>
-+			    </widget>
-+			    <packing>
-+			      <property name="padding">0</property>
-+			      <property name="expand">False</property>
-+			      <property name="fill">False</property>
-+			    </packing>
-+			  </child>
-+			</widget>
-+		      </child>
-+		    </widget>
-+		  </child>
-+		</widget>
-+		<packing>
-+		  <property name="padding">0</property>
-+		  <property name="expand">True</property>
-+		  <property name="fill">True</property>
-+		</packing>
-+	      </child>
-+
-+	      <child>
-+		<widget class="GtkButton" id="disable_custom_button">
-+		  <property name="visible">True</property>
-+		  <property name="can_focus">True</property>
-+		  <property name="label">gtk-delete</property>
-+		  <property name="use_stock">True</property>
-+		  <property name="relief">GTK_RELIEF_NORMAL</property>
-+		  <property name="focus_on_click">True</property>
-+		</widget>
-+		<packing>
-+		  <property name="padding">0</property>
-+		  <property name="expand">True</property>
-+		  <property name="fill">True</property>
-+		</packing>
-+	      </child>
-+	    </widget>
-+	    <packing>
-+	      <property name="padding">0</property>
-+	      <property name="expand">False</property>
-+	      <property name="fill">False</property>
-+	      <property name="pack_type">GTK_PACK_END</property>
-+	    </packing>
-+	  </child>
-+	</widget>
-+	<packing>
-+	  <property name="padding">0</property>
-+	  <property name="expand">True</property>
-+	  <property name="fill">True</property>
-+	</packing>
-+      </child>
-+    </widget>
-+  </child>
-+</widget>
-+
-+<widget class="GtkDialog" id="custom-binding-dialog">
-+  <property name="visible">True</property>
-+  <property name="title" translatable="yes">Custom Binding</property>
-+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
-+  <property name="window_position">GTK_WIN_POS_NONE</property>
-+  <property name="modal">False</property>
-+  <property name="resizable">True</property>
-+  <property name="destroy_with_parent">False</property>
-+  <property name="decorated">True</property>
-+  <property name="skip_taskbar_hint">False</property>
-+  <property name="skip_pager_hint">False</property>
-+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-+  <property name="has_separator">True</property>
-+  <accessibility>
-+    <atkproperty name="AtkObject::accessible_name" translatable="yes">Custom Binding</atkproperty>
-+  </accessibility>
-+
-+  <child internal-child="vbox">
-+    <widget class="GtkVBox" id="dialog-vbox1">
-+      <property name="visible">True</property>
-+      <property name="homogeneous">False</property>
-+      <property name="spacing">0</property>
-+
-+      <child internal-child="action_area">
-+	<widget class="GtkHButtonBox" id="dialog-action_area2">
-+	  <property name="visible">True</property>
-+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
-+
-+	  <child>
-+	    <widget class="GtkButton" id="helpbutton2">
-+	      <property name="visible">True</property>
-+	      <property name="can_default">True</property>
-+	      <property name="can_focus">True</property>
-+	      <property name="label">gtk-help</property>
-+	      <property name="use_stock">True</property>
-+	      <property name="relief">GTK_RELIEF_NORMAL</property>
-+	      <property name="focus_on_click">True</property>
-+	      <property name="response_id">-11</property>
-+	    </widget>
-+	  </child>
-+
-+	  <child>
-+	    <widget class="GtkButton" id="cancelbutton1">
-+	      <property name="visible">True</property>
-+	      <property name="can_default">True</property>
-+	      <property name="can_focus">True</property>
-+	      <property name="label">gtk-cancel</property>
-+	      <property name="use_stock">True</property>
-+	      <property name="relief">GTK_RELIEF_NORMAL</property>
-+	      <property name="focus_on_click">True</property>
-+	      <property name="response_id">-6</property>
-+	    </widget>
-+	  </child>
-+
-+	  <child>
-+	    <widget class="GtkButton" id="okbutton1">
-+	      <property name="visible">True</property>
-+	      <property name="can_default">True</property>
-+	      <property name="can_focus">True</property>
-+	      <property name="label">gtk-ok</property>
-+	      <property name="use_stock">True</property>
-+	      <property name="relief">GTK_RELIEF_NORMAL</property>
-+	      <property name="focus_on_click">True</property>
-+	      <property name="response_id">-5</property>
-+	    </widget>
-+	  </child>
-+	</widget>
-+	<packing>
-+	  <property name="padding">0</property>
-+	  <property name="expand">False</property>
-+	  <property name="fill">True</property>
-+	  <property name="pack_type">GTK_PACK_END</property>
-+	</packing>
-+      </child>
-+
-+      <child>
-+	<widget class="GtkHBox" id="hbox5">
-+	  <property name="visible">True</property>
-+	  <property name="homogeneous">False</property>
-+	  <property name="spacing">0</property>
-+
-+	  <child>
-+	    <widget class="GtkLabel" id="label15">
-+	      <property name="visible">True</property>
-+	      <property name="label" translatable="yes">_New Command: </property>
-+	      <property name="use_underline">True</property>
-+	      <property name="use_markup">False</property>
-+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
-+	      <property name="wrap">False</property>
-+	      <property name="selectable">False</property>
-+	      <property name="xalign">0.5</property>
-+	      <property name="yalign">0.5</property>
-+	      <property name="xpad">0</property>
-+	      <property name="ypad">0</property>
-+	    </widget>
-+	    <packing>
-+	      <property name="padding">0</property>
-+	      <property name="expand">False</property>
-+	      <property name="fill">False</property>
-+	    </packing>
-+	  </child>
-+
-+	  <child>
-+	    <widget class="GtkEntry" id="action_tf">
-+	      <property name="visible">True</property>
-+	      <property name="can_focus">True</property>
-+	      <property name="editable">True</property>
-+	      <property name="visibility">True</property>
-+	      <property name="max_length">0</property>
-+	      <property name="text" translatable="yes"></property>
-+	      <property name="has_frame">True</property>
-+	      <property name="invisible_char" translatable="yes">*</property>
-+	      <property name="activates_default">False</property>
-+	      <accessibility>
-+		<atkproperty name="AtkObject::accessible_name" translatable="yes">action_tf</atkproperty>
-+	      </accessibility>
-+	    </widget>
-+	    <packing>
-+	      <property name="padding">0</property>
-+	      <property name="expand">True</property>
-+	      <property name="fill">True</property>
-+	    </packing>
-+	  </child>
-+
-+	  <child>
-+	    <widget class="GtkButton" id="browse_button">
-+	      <property name="visible">True</property>
-+	      <property name="can_focus">True</property>
-+	      <property name="relief">GTK_RELIEF_NORMAL</property>
-+	      <property name="focus_on_click">True</property>
-+	      <accessibility>
-+		<atkproperty name="AtkObject::accessible_name" translatable="yes">Browse</atkproperty>
-+	      </accessibility>
-+
-+	      <child>
-+		<widget class="GtkAlignment" id="alignment2">
-+		  <property name="visible">True</property>
-+		  <property name="xalign">0.5</property>
-+		  <property name="yalign">0.5</property>
-+		  <property name="xscale">0</property>
-+		  <property name="yscale">0</property>
-+		  <property name="top_padding">0</property>
-+		  <property name="bottom_padding">0</property>
-+		  <property name="left_padding">0</property>
-+		  <property name="right_padding">0</property>
-+
-+		  <child>
-+		    <widget class="GtkHBox" id="hbox6">
-+		      <property name="visible">True</property>
-+		      <property name="homogeneous">False</property>
-+		      <property name="spacing">2</property>
-+
-+		      <child>
-+			<widget class="GtkImage" id="image3">
-+			  <property name="visible">True</property>
-+			  <property name="stock">gtk-open</property>
-+			  <property name="icon_size">4</property>
-+			  <property name="xalign">0.5</property>
-+			  <property name="yalign">0.5</property>
-+			  <property name="xpad">0</property>
-+			  <property name="ypad">0</property>
-+			</widget>
-+			<packing>
-+			  <property name="padding">0</property>
-+			  <property name="expand">False</property>
-+			  <property name="fill">False</property>
-+			</packing>
-+		      </child>
-+
-+		      <child>
-+			<widget class="GtkLabel" id="label16">
-+			  <property name="visible">True</property>
-+			  <property name="label" translatable="yes">_Browse</property>
-+			  <property name="use_underline">True</property>
-+			  <property name="use_markup">False</property>
-+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
-+			  <property name="wrap">False</property>
-+			  <property name="selectable">False</property>
-+			  <property name="xalign">0.5</property>
-+			  <property name="yalign">0.5</property>
-+			  <property name="xpad">0</property>
-+			  <property name="ypad">0</property>
-+			</widget>
-+			<packing>
-+			  <property name="padding">0</property>
-+			  <property name="expand">False</property>
-+			  <property name="fill">False</property>
-+			</packing>
-+		      </child>
-+		    </widget>
-+		  </child>
-+		</widget>
-+	      </child>
-+	    </widget>
-+	    <packing>
-+	      <property name="padding">0</property>
-+	      <property name="expand">False</property>
-+	      <property name="fill">False</property>
- 	    </packing>
- 	  </child>
- 	</widget>
---- control-center-2.10.1/capplets/keybindings/Makefile.am	Thu May 12 16:46:18 2005
-+++ control-center-2.10.1-new/capplets/keybindings/Makefile.am	Fri May 13 11:51:17 2005
-@@ -3,6 +3,8 @@ bin_PROGRAMS = gnome-keybinding-properti
- gnome_keybinding_properties_LDADD = $(GNOMECC_CAPPLETS_LIBS)
- gnome_keybinding_properties_SOURCES = 	\
- 	gnome-keybinding-properties.c	\
-+	custom-binding.c		\
-+	custom-binding.h		\
- 	eggcellrendererkeys.c		\
- 	eggcellrendererkeys.h		\
- 	eggaccelerators.c		\
---- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 11:47:36 2005
-+++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 12:00:15 2005
-@@ -16,6 +16,7 @@
- #include "capplet-util.h"
- #include "eggcellrendererkeys.h"
- #include "activate-settings-daemon.h"
-+#include "custom-binding.h"
- 
- #define LABEL_DATA "gnome-keybinding-properties-label"
- #define MAX_ELEMENTS_BEFORE_SCROLLING 10
-@@ -25,19 +25,6 @@
- #else
- #undef USE_FBLEVEL
- #endif
--
--typedef enum {
--  ALWAYS_VISIBLE,
--  N_WORKSPACES_GT
--} KeyListEntryVisibility;
--
--typedef struct
--{
--  const char *name;
--  KeyListEntryVisibility visibility;
--  gint data;
--} KeyListEntry;
--
- static const KeyListEntry desktop_key_list[] =
- {
-   { "/apps/gnome_settings_daemon/keybindings/help", ALWAYS_VISIBLE, 0 },
-@@ -134,13 +122,7 @@ const KeyListEntry metacity_key_list[] =
-   { NULL }
- };
- 
--enum
--{
--  DESCRIPTION_COLUMN,
--  KEYENTRY_COLUMN,
--  N_COLUMNS
--};
--
-+/*
- typedef struct
- {
-   char *gconf_key;
-@@ -152,9 +134,11 @@ typedef struct
-   guint gconf_cnxn;
-   char *description;
- } KeyEntry;
-+*/
-+
-+KeyListEntry *custom_binding_list = NULL;
-+GladeXML *main_dialog;
- 
--static void  reload_key_entries (gpointer                wm_name,
--                                 GladeXML               *dialog);
- static char* binding_name       (guint                   keyval,
- 				 guint			 keycode,
-                                  EggVirtualModifierType  mask,
-@@ -179,11 +163,8 @@ get_real_model (GtkTreeView *tree_view)
- static GladeXML *
- create_dialog (void)
- {
--  GladeXML *dialog;
--
--  dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keybinding-properties.glade", "gnome-keybinding-dialog", NULL);
--
--  return dialog;
-+   main_dialog = glade_xml_new (GNOMECC_DATA_DIR "/interfaces/gnome-keybinding-properties.glade", "gnome-keybinding-dialog", NULL);
-+   return main_dialog;
- }
- 
- static char*
-@@ -194,7 +175,7 @@ binding_name (guint                   ke
- {
-   if (keyval != 0 || keycode != 0)
-     return egg_virtual_accelerator_name (keyval, keycode, mask);
--  else
-+  else 
-     return translate ? g_strdup (_("Disabled")) : g_strdup ("disabled");
- }
- 
-@@ -259,7 +240,7 @@ accel_set_func (GtkTreeViewColumn *tree_
- 		  NULL);
- }
- 
--static gboolean
-+gboolean
- keybinding_key_changed_foreach (GtkTreeModel *model,
- 				GtkTreePath  *path,
- 				GtkTreeIter  *iter,
-@@ -275,6 +256,11 @@ keybinding_key_changed_foreach (GtkTreeM
- 
-   if (key_entry == tmp_key_entry)
-     {
-+      if (key_entry->custom_key)
-+        gtk_tree_store_set (GTK_TREE_STORE (key_entry->model), iter,
-+                            DESCRIPTION_COLUMN, key_entry->action,
-+                            -1);
-+
-       gtk_tree_model_row_changed (key_entry->model, path, iter);
-       return TRUE;
-     }
-@@ -289,7 +275,6 @@ keybinding_key_changed (GConfClient *cli
- {
-   KeyEntry *key_entry;
-   const gchar *key_value;
--
-   key_entry = (KeyEntry *)user_data;
-   key_value = gconf_value_get_string (entry->value);
- 
-@@ -362,10 +347,11 @@ clear_old_model (GladeXML  *dialog,
- {
-   GtkTreeModel *model;
-   GtkTreeModel *sort_model;
--  GtkTreeIter iter;
-+  GtkTreeIter iter, parent_iter;
-   KeyEntry *key_entry;
-   gboolean valid;
-   GConfClient *client;
-+  int children, i;
- 
-   client = gconf_client_get_default ();
-   model = get_real_model (GTK_TREE_VIEW (tree_view));
-@@ -374,21 +360,33 @@ clear_old_model (GladeXML  *dialog,
-     {
-       g_object_ref (model);
- 
--      for (valid = gtk_tree_model_get_iter_first (model, &iter);
--	   valid;
--	   valid = gtk_tree_model_iter_next (model, &iter))
-+	valid = gtk_tree_model_get_iter_first (model, &parent_iter);
-+	while  (valid)
- 	{
--	  gtk_tree_model_get (model, &iter,
--			      KEYENTRY_COLUMN, &key_entry,
--			      -1);
--	  if (key_entry != NULL)
--	    {
--	      gconf_client_notify_remove (client, key_entry->gconf_cnxn);
--	      g_free (key_entry->gconf_key);
--              g_free (key_entry->description);
--	      g_free (key_entry);
--            }
--	}
-+          children = gtk_tree_model_iter_n_children (model,&parent_iter);
-+
-+          for (i = 0; i < children ; i++)
-+             {
-+                if (gtk_tree_model_iter_nth_child (model, &iter, &parent_iter, i))
-+                  {
-+                        gtk_tree_model_get (model, &iter,
-+                                            KEYENTRY_COLUMN, &key_entry,
-+                                            -1);
-+	                if (key_entry != NULL)
-+	                  {
-+			      if (key_entry->custom_key == TRUE)
-+	                           gconf_client_notify_remove (client, key_entry->cmd_line_cnxn);
-+	                      gconf_client_notify_remove (client, key_entry->gconf_cnxn);
-+	                      g_free (key_entry->gconf_key);
-+                              g_free (key_entry->description);
-+	                      g_free (key_entry);
-+                          }
-+            
-+                  }
-+
-+	      }
-+            valid = gtk_tree_model_iter_next (model, &parent_iter);
-+         }
-       g_object_unref (model);
-     }
- 
-@@ -446,7 +444,8 @@ should_show_key (const KeyListEntry *ent
- static void
- append_keys_to_tree (GladeXML           *dialog,
- 		     const gchar        *title,
--		     const KeyListEntry *keys_list)
-+		     const KeyListEntry *keys_list,
-+		     gboolean            custom_binding)
- {
-   GConfClient *client;
-   GtkTreeIter parent_iter;
-@@ -466,57 +465,97 @@ append_keys_to_tree (GladeXML           
- 
-   for (j = 0; keys_list[j].name != NULL; j++)
-     {
--      GConfEntry *entry;
-+      GConfEntry *entry = NULL;
-       GConfSchema *schema = NULL;
--      KeyEntry *key_entry;
-+      KeyEntry *key_entry = NULL;
-       GError *error = NULL;
-       GtkTreeIter iter;
-       const gchar *key_string;
-       gchar *key_value;
- 
-       if (!should_show_key (&keys_list[j]))
--	continue;
--      
--      key_string = keys_list[j].name;
-+        continue;
- 
--      entry = gconf_client_get_entry (client,
--                                      key_string,
--				      NULL,
--				      TRUE,
--				      &error);
--      if (error || entry == NULL)
--	{
--	  /* We don't actually want to popup a dialog - just skip this one */
--	  if (error)
--	    g_error_free (error);
--	  continue;
--	}
-+      if (!custom_binding)
-+       {
-+          key_string = keys_list[j].name;
-+
-+	  entry = gconf_client_get_entry (client,
-+					  key_string,
-+					  NULL,
-+					  TRUE,
-+					  &error);
-+       }
-+      else if (error || entry == NULL)
-+       {
-+          key_entry = custom_key_new ((char *)keys_list[j].name);
-+          if (!key_entry)
-+            continue;
-+          key_string = key_entry->gconf_key;
-+       }
-+
-+
-+      if (!custom_binding)
-+       {
-+         if (error || entry == NULL)
-+           {
-+             /* We don't actually want to popup a dialog - just skip this one */
-+             if (error)
-+               g_error_free (error);
-+             continue;
-+           }
- 
--      if (gconf_entry_get_schema_name (entry))
--	schema = gconf_client_get_schema (client, gconf_entry_get_schema_name (entry), &error);
-+         if (gconf_entry_get_schema_name (entry))
-+           schema = gconf_client_get_schema (client, gconf_entry_get_schema_name (entry), &error);
-       
--      if (error || schema == NULL)
--	{
--	  /* We don't actually want to popup a dialog - just skip this one */
--	  if (error)
--	    g_error_free (error);
--	  continue;
-+         if (error || schema == NULL)
-+	   {
-+	     /* We don't actually want to popup a dialog - just skip this one */
-+	     if (error)
-+	       g_error_free (error);
-+		continue;
-+           }
- 	}
- 
--      key_value = gconf_client_get_string (client, key_string, &error);
-+      if (!custom_binding)
-+        {
- 
--      key_entry = g_new0 (KeyEntry, 1);
--      key_entry->gconf_key = g_strdup (key_string);
--      key_entry->editable = gconf_entry_get_is_writable (entry);
--      key_entry->model = model;
--      gconf_client_add_dir (client, key_string, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
--      key_entry->gconf_cnxn = gconf_client_notify_add (client,
--						       key_string,
--						       (GConfClientNotifyFunc) &keybinding_key_changed,
--						       key_entry, NULL, NULL);
--      binding_from_string (key_value, &key_entry->keyval, &key_entry->keycode, &key_entry->mask);
--      g_free (key_value);
--      key_entry->description = g_strdup (gconf_schema_get_short_desc (schema));
-+           key_entry = g_new0 (KeyEntry, 1);
-+           key_value = gconf_client_get_string (client, key_string, &error);
-+           key_entry->gconf_key = g_strdup (key_string);
-+           key_entry->editable = gconf_entry_get_is_writable (entry);
-+           key_entry->model = model;
-+           gconf_client_add_dir (client, key_string, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-+           key_entry->gconf_cnxn = gconf_client_notify_add (client,
-+						            key_string,
-+						            (GConfClientNotifyFunc) &keybinding_key_changed,
-+						            key_entry, NULL, NULL);
-+           binding_from_string (key_value, &key_entry->keyval, &key_entry->keycode, &key_entry->mask);
-+           g_free (key_value);
-+           key_entry->description = g_strdup (gconf_schema_get_short_desc (schema));
-+        }
-+      else 
-+        {
-+           char *key_binding = g_strdup_printf ("%s/binding", key_entry->gconf_key);
-+           char *cmd_binding = g_strdup_printf ("%s/action", key_entry->gconf_key);
-+           key_entry->editable = TRUE;
-+           key_entry->model = model;
-+           gconf_client_add_dir (client, key_entry->gconf_key, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-+
-+           key_entry->gconf_cnxn = gconf_client_notify_add (client,
-+                                                            key_binding,
-+                                                            (GConfClientNotifyFunc) &keybinding_key_changed,
-+                                                            key_entry, NULL, NULL);
-+           binding_from_string (key_entry->binding, &key_entry->keyval, &key_entry->keycode, &key_entry->mask);
-+
-+           key_entry->custom_key = TRUE;
-+           key_entry->cmd_line_cnxn = gconf_client_notify_add (client, cmd_binding,
-+                                                              (GConfClientNotifyFunc) &cmd_line_changed,
-+                                                              key_entry, NULL, NULL);
-+           key_entry->action = g_strdup (gconf_client_get_string (client, cmd_binding, &error));
-+           g_free (key_binding);
-+           g_free (cmd_binding);
-+        }
- 
-       if (i == MAX_ELEMENTS_BEFORE_SCROLLING)
- 	{
-@@ -529,20 +568,33 @@ append_keys_to_tree (GladeXML           
- 	}
-       i++;
-       gtk_tree_store_append (GTK_TREE_STORE (model), &iter, &parent_iter);
--      if (gconf_schema_get_short_desc (schema))
--	gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
--			    DESCRIPTION_COLUMN,
--                            key_entry->description,
--			    KEYENTRY_COLUMN, key_entry,
--			    -1);
--      else
--	gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
--			    DESCRIPTION_COLUMN, _("<Unknown Action>"),
--			    KEYENTRY_COLUMN, key_entry,
--			    -1);
-+      if (!custom_binding)
-+        {
-+          if (gconf_schema_get_short_desc (schema))
-+	    gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
-+			        DESCRIPTION_COLUMN,
-+                                key_entry->description,
-+			        KEYENTRY_COLUMN, key_entry,
-+			        -1);
-+          else
-+	    gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
-+			        DESCRIPTION_COLUMN, _("<Unknown Action>"),
-+			        KEYENTRY_COLUMN, key_entry,
-+			        -1);
-+        }
-+      else {
-+            gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
-+                                DESCRIPTION_COLUMN, key_entry->action,
-+                                KEYENTRY_COLUMN, key_entry,
-+                                -1);
-+      }
-+
-       gtk_tree_view_expand_all (GTK_TREE_VIEW (WID ("shortcut_treeview")));
--      gconf_entry_free (entry);
--      gconf_schema_free (schema);
-+
-+      if (entry)
-+        gconf_entry_free (entry);
-+      if (schema)
-+        gconf_schema_free (schema);
-     }
- 
-   if (i == 0)
-@@ -551,18 +603,20 @@ append_keys_to_tree (GladeXML           
-       gtk_widget_show (WID ("shortcuts_vbox"));
- }
- 
--static void
-+void
- reload_key_entries (gpointer wm_name, GladeXML *dialog)
- {
-   clear_old_model (dialog, WID ("shortcut_treeview"));
-   
--  append_keys_to_tree (dialog, _("Desktop"), desktop_key_list);
--  append_keys_to_tree (dialog, _("Sound"), sounds_key_list);
-+  append_keys_to_tree (dialog, _("Desktop"), desktop_key_list, FALSE);
-+  append_keys_to_tree (dialog, _("Sound"), sounds_key_list, FALSE);
-   
-   if (strcmp((char *) wm_name, WM_COMMON_METACITY) == 0)
-     {
--      append_keys_to_tree (dialog, _("Window Management"), metacity_key_list);
-+      append_keys_to_tree (dialog, _("Window Management"), metacity_key_list, FALSE);
-     }
-+ 
-+  append_keys_to_tree (dialog, _("Custom Shortcuts"), custom_binding_list, TRUE);
- }
- 
- static void
-@@ -630,7 +684,6 @@ accel_edited_callback (GtkCellRendererTe
-   /* sanity check */
-   if (key_entry == NULL)
-     return;
--
-   model = get_real_model (view);
-   tmp_key.model  = model;
-   tmp_key.keyval = keyval;
-@@ -675,10 +728,22 @@ accel_edited_callback (GtkCellRendererTe
-   str = binding_name (keyval, keycode, mask, FALSE);
- 
-   client = gconf_client_get_default();
--  gconf_client_set_string (client,
--                           key_entry->gconf_key,
--                           str,
--                           &err);
-+
-+  if (!key_entry->custom_key)
-+     gconf_client_set_string (gconf_client_get_default(),
-+                             key_entry->gconf_key,
-+                             str,
-+                             &err);
-+   else
-+     {
-+       char *key = g_strdup_printf ("%s/binding", key_entry->gconf_key);
-+       gconf_client_set_string (gconf_client_get_default(),
-+                               key,
-+                               str,
-+                               &err);
-+       g_free (key);
-+     }
-+
-   g_free (str);
-   g_object_unref (G_OBJECT (client));
- 
-@@ -726,6 +791,22 @@ accel_cleared_callback (GtkCellRendererT
- 
-   /* Unset the key */
-   client = gconf_client_get_default();
-+
-+  if (!key_entry->custom_key) {
-+      gconf_client_set_string (gconf_client_get_default(),
-+                             key_entry->gconf_key,
-+                             "disabled",
-+                             &err);
-+    } else {
-+      char *key = g_strdup_printf ("%s/binding", key_entry->gconf_key);
-+      gconf_client_set_string (gconf_client_get_default(),
-+                             key,
-+                             "disabled",
-+                             &err);
-+      g_free (key);
-+
-+    }
-+
-   gconf_client_set_string (client,
- 			   key_entry->gconf_key,
- 			   "disabled",
-@@ -793,6 +874,8 @@ start_editing_cb (GtkTreeView    *tree_v
- {
-   GtkTreePath *path;
- 
-+  my_verbose ("In start_editing_cb\n");
-+
-   if (event->window != gtk_tree_view_get_bin_window (tree_view))
-     return FALSE;
- 
-@@ -841,10 +924,7 @@ setup_dialog (GladeXML *dialog)
-   client = gconf_client_get_default ();
- 
-   g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
--		    "button_press_event",
--		    G_CALLBACK (start_editing_cb), dialog),
--	g_signal_connect (GTK_TREE_VIEW (WID ("shortcut_treeview")),
--	      "row-activated",
-+	            "row-activated",
- 		    G_CALLBACK (start_editing_kb_cb), dialog),
- 		    
-   column = gtk_tree_view_column_new_with_attributes (_("Action"),
-@@ -856,6 +936,7 @@ setup_dialog (GladeXML *dialog)
-   gtk_tree_view_append_column (GTK_TREE_VIEW (WID ("shortcut_treeview")), column);
-   gtk_tree_view_column_set_sort_column_id (column, DESCRIPTION_COLUMN);  
-   
-+
-   renderer = (GtkCellRenderer *) g_object_new (EGG_TYPE_CELL_RENDERER_KEYS,
- 					       "editable", TRUE,
- 					       "accel_mode", EGG_CELL_RENDERER_KEYS_MODE_X,
-@@ -881,12 +962,14 @@ setup_dialog (GladeXML *dialog)
-   
-   gconf_client_add_dir (client, "/apps/gnome_keybinding_properties", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-   gconf_client_add_dir (client, "/apps/metacity/general", GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-+  gconf_client_add_dir (client, GCONF_CUSTOM_BINDING_DIR, GCONF_CLIENT_PRELOAD_ONELEVEL, NULL);
-   gconf_client_notify_add (client,
- 			   "/apps/metacity/general/num_workspaces",
- 			   (GConfClientNotifyFunc) &key_entry_controlling_key_changed,
- 			   dialog, NULL, NULL);
-   g_object_unref (client);
- 
-+  create_custom_bindings_list ();
-   /* set up the dialog */
-   reload_key_entries (wm_common_get_current_window_manager(), dialog);
- 
-@@ -894,6 +977,18 @@ setup_dialog (GladeXML *dialog)
-   gtk_widget_show (widget);
- 
-   g_signal_connect (G_OBJECT (widget), "response", G_CALLBACK(cb_dialog_response), NULL);
-+
-+  /* set up custom bindings buttons and dialog*/
-+  widget = WID ("disable_custom_button");
-+  g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (disable_custom),
-+                    GTK_TREE_VIEW (WID ("shortcut_treeview")));
-+
-+  widget = WID ("add_custom_button");
-+  g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (add_custom), NULL);
-+
-+  widget = WID ("edit_custom_button");
-+  g_signal_connect (G_OBJECT (widget), "clicked", G_CALLBACK (edit_custom), NULL);
-+
- }
- 
- int
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-keybindings.c	Thu May 12 16:46:31 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-keybindings.c	Fri May 13 11:51:17 2005
-@@ -199,7 +199,7 @@ bindings_get_entry (char *subdir)
- 	  if (!action)
- 	    {
- 	      value = gconf_entry_get_value (entry);
--	      if (value->type != GCONF_VALUE_STRING)
-+	      if (value && value->type != GCONF_VALUE_STRING)
- 		return FALSE;
- 	      action = g_strdup (gconf_value_get_string (value));
- 	    }
-@@ -212,7 +212,7 @@ bindings_get_entry (char *subdir)
- 	  if (!key)
- 	    {
- 	      value = gconf_entry_get_value (entry);
--	      if (value->type != GCONF_VALUE_STRING)
-+	      if (value && value->type != GCONF_VALUE_STRING)
- 		return FALSE;
- 	      key = g_strdup (gconf_value_get_string (value));
- 	    }
-@@ -259,22 +259,6 @@ bindings_get_entry (char *subdir)
-   return TRUE;
- }
- 
--static gboolean 
--key_already_used (Binding *binding)
--{
--  GSList *li;
--  
--  for (li = binding_list; li != NULL; li = li->next)
--    {
--      Binding *tmp_binding =  (Binding*) li->data;
--
--      if (tmp_binding != binding &&  tmp_binding->key.keycode == binding->key.keycode &&
--	  tmp_binding->key.state == binding->key.state)
--	return TRUE;
--    }
--  return FALSE;
--}
--
- static void
- grab_key (GdkWindow *root, Key *key, int result, gboolean grab)
- {
-@@ -344,9 +328,6 @@ binding_register_keys (void)
-       if (binding->previous_key.keycode != binding->key.keycode || 
- 	  binding->previous_key.state != binding->key.state)
-         {
--          /* Ungrab key if it changed and not clashing with previously set binding */
--          if (!key_already_used (binding))
--            {
-               if (binding->previous_key.keycode)
- 		do_grab (FALSE, &binding->previous_key);
- 	      do_grab (TRUE, &binding->key);
-@@ -354,9 +335,6 @@ binding_register_keys (void)
- 	      binding->previous_key.keysym = binding->key.keysym;
- 	      binding->previous_key.state = binding->key.state;
- 	      binding->previous_key.keycode = binding->key.keycode;
--            }
--          else
--            g_warning (_("Key Binding (%s) is already in use\n"), binding->binding_str);
-         }
-     }
-   gdk_flush ();
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-08-keybinding-caps-lock.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,34 @@
+--- control-center-2.10.1/capplets/keybindings/eggcellrendererkeys.c	Thu May 12 16:46:18 2005
++++ control-center-2.10.1-new/capplets/keybindings/eggcellrendererkeys.c	Fri May 13 12:14:24 2005
+@@ -430,7 +430,8 @@ grab_key_callback (GtkWidget    *widget,
+ 			GDK_BUTTON2_MASK |
+ 			GDK_BUTTON3_MASK |
+ 			GDK_BUTTON4_MASK |
+-			GDK_BUTTON5_MASK;
++			GDK_BUTTON5_MASK |
++			GDK_LOCK_MASK;
+ 
+   /* filter consumed/ignored modifiers */
+ 
+--- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 12:12:07 2005
++++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 12:14:25 2005
+@@ -26,6 +26,9 @@
+ #else
+ #undef USE_FBLEVEL
+ #endif
++
++#define ignore_modifiers       ( GDK_LOCK_MASK )
++
+ static const KeyListEntry desktop_key_list[] =
+ {
+   { "/apps/gnome_settings_daemon/keybindings/help", ALWAYS_VISIBLE, 0 },
+@@ -641,6 +644,9 @@ cb_check_for_uniqueness (GtkTreeModel *m
+ 		      -1);
+ 
+   /* no conflict for : blanks, different modifiers, or ourselves */
++
++  new_key->mask = new_key->mask & ~(ignore_modifiers);
++
+   if (element == NULL || new_key->mask != element->mask ||
+       !strcmp (new_key->gconf_key, element->gconf_key))
+     return FALSE;
--- a/patches/control-center-09-keybinding-caps-lock.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
---- control-center-2.10.1/capplets/keybindings/eggcellrendererkeys.c	Thu May 12 16:46:18 2005
-+++ control-center-2.10.1-new/capplets/keybindings/eggcellrendererkeys.c	Fri May 13 12:14:24 2005
-@@ -430,7 +430,8 @@ grab_key_callback (GtkWidget    *widget,
- 			GDK_BUTTON2_MASK |
- 			GDK_BUTTON3_MASK |
- 			GDK_BUTTON4_MASK |
--			GDK_BUTTON5_MASK;
-+			GDK_BUTTON5_MASK |
-+			GDK_LOCK_MASK;
- 
-   /* filter consumed/ignored modifiers */
- 
---- control-center-2.10.1/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 12:12:07 2005
-+++ control-center-2.10.1-new/capplets/keybindings/gnome-keybinding-properties.c	Fri May 13 12:14:25 2005
-@@ -26,6 +26,9 @@
- #else
- #undef USE_FBLEVEL
- #endif
-+
-+#define ignore_modifiers       ( GDK_LOCK_MASK )
-+
- static const KeyListEntry desktop_key_list[] =
- {
-   { "/apps/gnome_settings_daemon/keybindings/help", ALWAYS_VISIBLE, 0 },
-@@ -641,6 +644,9 @@ cb_check_for_uniqueness (GtkTreeModel *m
- 		      -1);
- 
-   /* no conflict for : blanks, different modifiers, or ourselves */
-+
-+  new_key->mask = new_key->mask & ~(ignore_modifiers);
-+
-   if (element == NULL || new_key->mask != element->mask ||
-       !strcmp (new_key->gconf_key, element->gconf_key))
-     return FALSE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-09-volume-control.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,151 @@
+--- control-center-2.10.1/configure.in	Thu May 12 16:46:29 2005
++++ control-center-2.10.1-new/configure.in	Fri May 13 12:20:37 2005
+@@ -136,6 +136,17 @@ AC_CHECK_LIB(Xrandr, XRRUpdateConfigurat
+        -lXrandr -lXrender $x_libs)
+ AM_CONDITIONAL(HAVE_RANDR, [test $have_randr = yes])
+ 	
++dnl ===========
++dnl host checks
++dnl ===========
++AC_CANONICAL_HOST
++case "$host" in
++*solaris*)
++         AC_DEFINE(SOLARIS, 1, Define to 1 for Solaris)
++         ;;
++esac
++
++
+ PKG_CHECK_MODULES(DISPLAY_CAPPLET, $COMMON_MODULES)
+ 
+ DISPLAY_CAPPLET_LIBS="$DISPLAY_CAPPLET_LIBS $RANDR_LIBS"
+--- control-center-2.10.1/gnome-settings-daemon/actions/acme-volume-dummy.h	Thu May 12 16:46:32 2005
++++ control-center-2.10.1-new/gnome-settings-daemon/actions/acme-volume-dummy.h	Fri May 13 12:18:49 2005
+@@ -32,9 +32,15 @@
+ 
+ typedef struct AcmeVolumeDummy AcmeVolumeDummy;
+ typedef struct AcmeVolumeDummyClass AcmeVolumeDummyClass;
++#ifdef SOLARIS
++typedef struct AcmeVolumeDummyPrivate AcmeVolumeDummyPrivate;
++#endif
+ 
+ struct AcmeVolumeDummy {
+ 	AcmeVolume parent;
++#ifdef SOLARIS
++	AcmeVolumeDummyPrivate *_priv;
++#endif
+ };
+ 
+ struct AcmeVolumeDummyClass {
+--- control-center-2.10.1/gnome-settings-daemon/actions/acme-volume-dummy.c	Thu May 12 16:46:32 2005
++++ control-center-2.10.1-new/gnome-settings-daemon/actions/acme-volume-dummy.c	Fri May 13 12:18:49 2005
+@@ -23,6 +23,22 @@
+ #include "config.h"
+ #include "acme-volume-dummy.h"
+ 
++#ifdef SOLARIS
++#include <fcntl.h>
++#include <sys/ioctl.h>
++#include <sys/audioio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <stropts.h>
++
++#define VOL_MAX 255
++
++struct AcmeVolumeDummyPrivate
++{
++	audio_info_t ainfo;
++};
++static gint mixerfd = -1;
++#endif
+ static GObjectClass *parent_class = NULL;
+ 
+ static int acme_volume_dummy_get_volume (AcmeVolume *self);
+@@ -34,6 +53,10 @@
+ 	g_return_if_fail (object != NULL);
+ 	g_return_if_fail (ACME_IS_VOLUME_DUMMY (object));
+ 
++#ifdef SOLARIS
++	close (mixerfd);
++	mixerfd = -1;
++#endif
+ 	G_OBJECT_CLASS (parent_class)->finalize (object);
+ }
+ 
+@@ -44,28 +64,74 @@ acme_volume_dummy_finalize (GObject *obj
+ static void
+ acme_volume_dummy_set_mute (AcmeVolume *vol, gboolean val)
+ {
++#ifdef SOLARIS
++	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
++
++	self->_priv->ainfo.output_muted = val;
++	ioctl (mixerfd, AUDIO_SETINFO, &(self->_priv->ainfo));
++#endif
+ }
+ 
+ static gboolean
+ acme_volume_dummy_get_mute (AcmeVolume *vol)
+ {
+-	return FALSE;
++#ifdef SOLARIS
++	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
++
++	ioctl (mixerfd, AUDIO_GETINFO, &(self->_priv->ainfo));
++	return (self->_priv->ainfo.output_muted);
++#endif
+ }
+ 
+ static int
+ acme_volume_dummy_get_volume (AcmeVolume *vol)
+ {
+-	return 0;
++#ifdef SOLARIS
++	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
++	gint val;
++	
++	ioctl (mixerfd, AUDIO_GETINFO, &(self->_priv->ainfo));
++	/* scale down the volume from [0 - VOL_MAX255] to [0-100] */	
++	val = (self->_priv->ainfo.play.gain) * 100 / VOL_MAX ;
++	return (val);
++#endif
+ }
+ 
+ static void
+ acme_volume_dummy_set_volume (AcmeVolume *vol, int val)
+ {
++#ifdef SOLARIS
++	gint volume;
++	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
++
++	/* Scale volume from [0-100] to [0-VOL_MAX] */	
++	volume = val * VOL_MAX / 100;
++	if (volume > VOL_MAX)
++		volume = VOL_MAX;
++	else if (volume < 1)
++		volume = 0;
++
++	self->_priv->ainfo.play.gain = volume;
++	ioctl (mixerfd, AUDIO_SETINFO, &(self->_priv->ainfo));
++#endif
+ }
+ 
+ static void
+ acme_volume_dummy_init (AcmeVolume *vol)
+ {
++#ifdef SOLARIS
++	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
++	const gchar *device = NULL;
++	const gchar *ctl=NULL;
++
++	self->_priv = g_new0 (AcmeVolumeDummyPrivate, 1);
++	if (!(ctl = g_getenv("AUDIODEV")))
++		ctl = "/dev/audio";
++	device = g_strdup_printf("%sctl",ctl);
++	mixerfd = open(device, O_RDWR);
++
++	AUDIO_INITINFO (&(self->_priv->ainfo));
++#endif
+ }
+ 
+ static void
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-10-homefolder-keybindings.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,21 @@
+--- control-center-2.10.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Fri May 13 11:47:37 2005
++++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Fri May 13 15:35:40 2005
+@@ -795,6 +795,7 @@ do_sound_action (Acme *acme, int type)
+ do_action (Acme *acme, int type)
+ {
+ 	gchar *cmd;
++	gchar *path;
+ 
+ 	switch (type) {
+ 	case MUTE_KEY:
+@@ -805,7 +807,9 @@ do_action (Acme *acme, int type)
+ 		do_eject_action (acme);
+ 		break;
+ 	case HOME_KEY:
+-		execute ("nautilus", FALSE);
++		path = g_strconcat ("nautilus ", g_get_home_dir(), NULL);
++		execute (path, FALSE);
++		g_free (path);
+ 		break;
+ 	case SEARCH_KEY:
+ 		execute ("gnome-search-tool", FALSE);
--- a/patches/control-center-10-volume-control.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,151 +0,0 @@
---- control-center-2.10.1/configure.in	Thu May 12 16:46:29 2005
-+++ control-center-2.10.1-new/configure.in	Fri May 13 12:20:37 2005
-@@ -136,6 +136,17 @@ AC_CHECK_LIB(Xrandr, XRRUpdateConfigurat
-        -lXrandr -lXrender $x_libs)
- AM_CONDITIONAL(HAVE_RANDR, [test $have_randr = yes])
- 	
-+dnl ===========
-+dnl host checks
-+dnl ===========
-+AC_CANONICAL_HOST
-+case "$host" in
-+*solaris*)
-+         AC_DEFINE(SOLARIS, 1, Define to 1 for Solaris)
-+         ;;
-+esac
-+
-+
- PKG_CHECK_MODULES(DISPLAY_CAPPLET, $COMMON_MODULES)
- 
- DISPLAY_CAPPLET_LIBS="$DISPLAY_CAPPLET_LIBS $RANDR_LIBS"
---- control-center-2.10.1/gnome-settings-daemon/actions/acme-volume-dummy.h	Thu May 12 16:46:32 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/actions/acme-volume-dummy.h	Fri May 13 12:18:49 2005
-@@ -32,9 +32,15 @@
- 
- typedef struct AcmeVolumeDummy AcmeVolumeDummy;
- typedef struct AcmeVolumeDummyClass AcmeVolumeDummyClass;
-+#ifdef SOLARIS
-+typedef struct AcmeVolumeDummyPrivate AcmeVolumeDummyPrivate;
-+#endif
- 
- struct AcmeVolumeDummy {
- 	AcmeVolume parent;
-+#ifdef SOLARIS
-+	AcmeVolumeDummyPrivate *_priv;
-+#endif
- };
- 
- struct AcmeVolumeDummyClass {
---- control-center-2.10.1/gnome-settings-daemon/actions/acme-volume-dummy.c	Thu May 12 16:46:32 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/actions/acme-volume-dummy.c	Fri May 13 12:18:49 2005
-@@ -23,6 +23,22 @@
- #include "config.h"
- #include "acme-volume-dummy.h"
- 
-+#ifdef SOLARIS
-+#include <fcntl.h>
-+#include <sys/ioctl.h>
-+#include <sys/audioio.h>
-+#include <sys/types.h>
-+#include <sys/stat.h>
-+#include <stropts.h>
-+
-+#define VOL_MAX 255
-+
-+struct AcmeVolumeDummyPrivate
-+{
-+	audio_info_t ainfo;
-+};
-+static gint mixerfd = -1;
-+#endif
- static GObjectClass *parent_class = NULL;
- 
- static int acme_volume_dummy_get_volume (AcmeVolume *self);
-@@ -34,6 +53,10 @@
- 	g_return_if_fail (object != NULL);
- 	g_return_if_fail (ACME_IS_VOLUME_DUMMY (object));
- 
-+#ifdef SOLARIS
-+	close (mixerfd);
-+	mixerfd = -1;
-+#endif
- 	G_OBJECT_CLASS (parent_class)->finalize (object);
- }
- 
-@@ -44,28 +64,74 @@ acme_volume_dummy_finalize (GObject *obj
- static void
- acme_volume_dummy_set_mute (AcmeVolume *vol, gboolean val)
- {
-+#ifdef SOLARIS
-+	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
-+
-+	self->_priv->ainfo.output_muted = val;
-+	ioctl (mixerfd, AUDIO_SETINFO, &(self->_priv->ainfo));
-+#endif
- }
- 
- static gboolean
- acme_volume_dummy_get_mute (AcmeVolume *vol)
- {
--	return FALSE;
-+#ifdef SOLARIS
-+	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
-+
-+	ioctl (mixerfd, AUDIO_GETINFO, &(self->_priv->ainfo));
-+	return (self->_priv->ainfo.output_muted);
-+#endif
- }
- 
- static int
- acme_volume_dummy_get_volume (AcmeVolume *vol)
- {
--	return 0;
-+#ifdef SOLARIS
-+	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
-+	gint val;
-+	
-+	ioctl (mixerfd, AUDIO_GETINFO, &(self->_priv->ainfo));
-+	/* scale down the volume from [0 - VOL_MAX255] to [0-100] */	
-+	val = (self->_priv->ainfo.play.gain) * 100 / VOL_MAX ;
-+	return (val);
-+#endif
- }
- 
- static void
- acme_volume_dummy_set_volume (AcmeVolume *vol, int val)
- {
-+#ifdef SOLARIS
-+	gint volume;
-+	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
-+
-+	/* Scale volume from [0-100] to [0-VOL_MAX] */	
-+	volume = val * VOL_MAX / 100;
-+	if (volume > VOL_MAX)
-+		volume = VOL_MAX;
-+	else if (volume < 1)
-+		volume = 0;
-+
-+	self->_priv->ainfo.play.gain = volume;
-+	ioctl (mixerfd, AUDIO_SETINFO, &(self->_priv->ainfo));
-+#endif
- }
- 
- static void
- acme_volume_dummy_init (AcmeVolume *vol)
- {
-+#ifdef SOLARIS
-+	AcmeVolumeDummy *self= (AcmeVolumeDummy *) vol;
-+	const gchar *device = NULL;
-+	const gchar *ctl=NULL;
-+
-+	self->_priv = g_new0 (AcmeVolumeDummyPrivate, 1);
-+	if (!(ctl = g_getenv("AUDIODEV")))
-+		ctl = "/dev/audio";
-+	device = g_strdup_printf("%sctl",ctl);
-+	mixerfd = open(device, O_RDWR);
-+
-+	AUDIO_INITINFO (&(self->_priv->ainfo));
-+#endif
- }
- 
- static void
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-11-anykey-grab.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,18 @@
+--- control-center-2.10.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2005-07-22 23:25:37.723383800 +0530
++++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2005-07-22 23:51:40.687777096 +0530
+@@ -449,6 +449,15 @@ init_kbd (Acme *acme)
+ 			g_free (key);
+ 			continue;
+ 		}
++	/*avoid grabbing all the keyboard when KeyCode cannot be retrieved */
++		if (key->keycode == AnyKey)
++		  {
++		    g_warning ("The shortcut key \"%s\" cannot be found on the current system, ignoring the binding", tmp);
++		    g_free (tmp);
++		    g_free (key);
++		    continue;
++		  }
++
+ 		g_free (tmp);
+ 
+ 		keys[i].key = key;
--- a/patches/control-center-11-homefolder-keybindings.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Fri May 13 11:47:37 2005
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-multimedia-keys.c	Fri May 13 15:35:40 2005
-@@ -795,6 +795,7 @@ do_sound_action (Acme *acme, int type)
- do_action (Acme *acme, int type)
- {
- 	gchar *cmd;
-+	gchar *path;
- 
- 	switch (type) {
- 	case MUTE_KEY:
-@@ -805,7 +807,9 @@ do_action (Acme *acme, int type)
- 		do_eject_action (acme);
- 		break;
- 	case HOME_KEY:
--		execute ("nautilus", FALSE);
-+		path = g_strconcat ("nautilus ", g_get_home_dir(), NULL);
-+		execute (path, FALSE);
-+		g_free (path);
- 		break;
- 	case SEARCH_KEY:
- 		execute ("gnome-search-tool", FALSE);
--- a/patches/control-center-12-anykey-grab.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2005-07-22 23:25:37.723383800 +0530
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2005-07-22 23:51:40.687777096 +0530
-@@ -449,6 +449,15 @@ init_kbd (Acme *acme)
- 			g_free (key);
- 			continue;
- 		}
-+	/*avoid grabbing all the keyboard when KeyCode cannot be retrieved */
-+		if (key->keycode == AnyKey)
-+		  {
-+		    g_warning ("The shortcut key \"%s\" cannot be found on the current system, ignoring the binding", tmp);
-+		    g_free (tmp);
-+		    g_free (key);
-+		    continue;
-+		  }
-+
- 		g_free (tmp);
- 
- 		keys[i].key = key;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-12-wall.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,11 @@
+--- control-center-2.10.1/capplets/keyboard/Makefile.am-orig	2005-05-29 09:48:55.013889000 -0500
++++ control-center-2.10.1/capplets/keyboard/Makefile.am	2005-05-29 09:49:05.076187000 -0500
+@@ -11,7 +11,7 @@ gnome_keyboard_properties_LDADD =				\
+ 	../accessibility/keyboard/libaccessibility-keyboard.a 	\
+ 	$(GNOMECC_CAPPLETS_LIBS) $(LIBXKLAVIER_LIBS) \
+ 	../../libgswitchit/libgswitchit.a \
+-	../../libkbdraw/libkbdraw.a
++	../../libkbdraw/libkbdraw.a -lfontconfig
+ 
+ @INTLTOOL_DESKTOP_RULE@
+ 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-13-layout-deletion.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,13 @@
+--- control-center-2.10.1/capplets/keyboard/gnome-keyboard-properties-xkblt.c	2005-02-09 04:12:10.000000000 +0530
++++ control-center-2.10.1-new/capplets/keyboard/gnome-keyboard-properties-xkblt.c	2005-08-04 21:28:23.665368800 +0530
+@@ -195,7 +195,9 @@ xkb_layouts_enable_disable_buttons (Glad
+   gtk_widget_set_sensitive (addLayoutBtn,
+ 			    (nSelectedLayouts < maxSelectedLayouts ||
+ 				maxSelectedLayouts == 0));
+-  gtk_widget_set_sensitive (delLayoutBtn, nSelectedSelectedLayouts > 0);
++  gtk_widget_set_sensitive (delLayoutBtn,
++			    (nSelectedLayouts > 1)
++			    && (nSelectedSelectedLayouts > 0));
+ 
+   if (gtk_tree_selection_get_selected (sSelection, NULL, &iter))
+     {
--- a/patches/control-center-13-wall.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
---- control-center-2.10.1/capplets/keyboard/Makefile.am-orig	2005-05-29 09:48:55.013889000 -0500
-+++ control-center-2.10.1/capplets/keyboard/Makefile.am	2005-05-29 09:49:05.076187000 -0500
-@@ -11,7 +11,7 @@ gnome_keyboard_properties_LDADD =				\
- 	../accessibility/keyboard/libaccessibility-keyboard.a 	\
- 	$(GNOMECC_CAPPLETS_LIBS) $(LIBXKLAVIER_LIBS) \
- 	../../libgswitchit/libgswitchit.a \
--	../../libkbdraw/libkbdraw.a
-+	../../libkbdraw/libkbdraw.a -lfontconfig
- 
- @INTLTOOL_DESKTOP_RULE@
- 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-14-background-crash.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,26 @@
+--- control-center-2.6.1/capplets/background/gnome-wp-capplet.c	2005-05-26 10:15:18.000000000 +0530
++++ control-center-2.6.1-new/capplets/background/gnome-wp-capplet.c	2005-05-26 20:57:04.954778712 +0530
+@@ -552,6 +552,14 @@ void gnome_wp_main_quit (GnomeWPCapplet 
+     gtk_main_quit ();
+ }
+ 
++static gboolean wallpaper_properties_closed (GtkWidget * dialog,
++					     GdkEventAny *event,
++					     GnomeWPCapplet * capplet) {
++    gtk_widget_destroy (dialog);
++    gnome_wp_main_quit (capplet);
++    return FALSE;
++}
++
+ static void wallpaper_properties_clicked (GtkWidget * dialog,
+ 					  gint response_id,
+ 					  GnomeWPCapplet * capplet) {
+@@ -1520,6 +1528,8 @@ static void wallpaper_properties_init (v
+   g_signal_connect (G_OBJECT (capplet->window), "response",
+ 		    G_CALLBACK (wallpaper_properties_clicked), capplet);
+ 
++  g_signal_connect (G_OBJECT (capplet->window), "delete_event",
++		     G_CALLBACK (wallpaper_properties_closed), capplet);
+   gtk_widget_show (capplet->window);
+ 
+   cursor = gdk_cursor_new_for_display (gdk_display_get_default (),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-14-layout-deletion.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,13 @@
+--- control-center-2.10.1/capplets/keyboard/gnome-keyboard-properties-xkblt.c	2005-02-09 04:12:10.000000000 +0530
++++ control-center-2.10.1-new/capplets/keyboard/gnome-keyboard-properties-xkblt.c	2005-08-04 21:28:23.665368800 +0530
+@@ -195,7 +195,9 @@ xkb_layouts_enable_disable_buttons (Glad
+   gtk_widget_set_sensitive (addLayoutBtn,
+ 			    (nSelectedLayouts < maxSelectedLayouts ||
+ 				maxSelectedLayouts == 0));
+-  gtk_widget_set_sensitive (delLayoutBtn, nSelectedSelectedLayouts > 0);
++  gtk_widget_set_sensitive (delLayoutBtn,
++			    (nSelectedLayouts > 1)
++			    && (nSelectedSelectedLayouts > 0));
+ 
+   if (gtk_tree_selection_get_selected (sSelection, NULL, &iter))
+     {
--- a/patches/control-center-14-no-xkb-dialog.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-keyboard-xkb.c	2005-03-01 04:34:52.000000000 +0530
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-keyboard-xkb.c	2005-08-04 21:14:48.638271752 +0530
-@@ -169,7 +169,8 @@ apply_xkb_settings (void)
- 			}
- 		} else {
- 			g_warning ("Could not activate the XKB configuration");
--			activation_error ();
-+			initedOk = FALSE;
-+			return;
- 		}
- 	} else
- 		XklDebug (100, "Actual KBD configuration was not changed: redundant notification\n");
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-15-background-crash.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,26 @@
+--- control-center-2.6.1/capplets/background/gnome-wp-capplet.c	2005-05-26 10:15:18.000000000 +0530
++++ control-center-2.6.1-new/capplets/background/gnome-wp-capplet.c	2005-05-26 20:57:04.954778712 +0530
+@@ -552,6 +552,14 @@ void gnome_wp_main_quit (GnomeWPCapplet 
+     gtk_main_quit ();
+ }
+ 
++static gboolean wallpaper_properties_closed (GtkWidget * dialog,
++					     GdkEventAny *event,
++					     GnomeWPCapplet * capplet) {
++    gtk_widget_destroy (dialog);
++    gnome_wp_main_quit (capplet);
++    return FALSE;
++}
++
+ static void wallpaper_properties_clicked (GtkWidget * dialog,
+ 					  gint response_id,
+ 					  GnomeWPCapplet * capplet) {
+@@ -1520,6 +1528,8 @@ static void wallpaper_properties_init (v
+   g_signal_connect (G_OBJECT (capplet->window), "response",
+ 		    G_CALLBACK (wallpaper_properties_clicked), capplet);
+ 
++  g_signal_connect (G_OBJECT (capplet->window), "delete_event",
++		     G_CALLBACK (wallpaper_properties_closed), capplet);
+   gtk_widget_show (capplet->window);
+ 
+   cursor = gdk_cursor_new_for_display (gdk_display_get_default (),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-15-fix-keyboard-dialog.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,12 @@
+--- control-center-2.12.1.orig/capplets/keyboard/gnome-keyboard-properties-xkb.c	2005-10-14 15:22:53.158945000 -0400
++++ control-center-2.12.1/capplets/keyboard/gnome-keyboard-properties-xkb.c	2005-10-14 15:22:20.419499000 -0400
+@@ -69,6 +69,9 @@
+   if (model == NULL)
+     model = initialConfig.model;
+ 
++  if (model == NULL)
++    model = "";
++
+   g_snprintf (ci.name, sizeof (ci.name), "%s", model);
+ 
+   if (XklConfigFindModel (&ci))
--- a/patches/control-center-15-layout-deletion.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
---- control-center-2.10.1/capplets/keyboard/gnome-keyboard-properties-xkblt.c	2005-02-09 04:12:10.000000000 +0530
-+++ control-center-2.10.1-new/capplets/keyboard/gnome-keyboard-properties-xkblt.c	2005-08-04 21:28:23.665368800 +0530
-@@ -195,7 +195,9 @@ xkb_layouts_enable_disable_buttons (Glad
-   gtk_widget_set_sensitive (addLayoutBtn,
- 			    (nSelectedLayouts < maxSelectedLayouts ||
- 				maxSelectedLayouts == 0));
--  gtk_widget_set_sensitive (delLayoutBtn, nSelectedSelectedLayouts > 0);
-+  gtk_widget_set_sensitive (delLayoutBtn,
-+			    (nSelectedLayouts > 1)
-+			    && (nSelectedSelectedLayouts > 0));
- 
-   if (gtk_tree_selection_get_selected (sSelection, NULL, &iter))
-     {
--- a/patches/control-center-16-background-crash.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,26 +0,0 @@
---- control-center-2.6.1/capplets/background/gnome-wp-capplet.c	2005-05-26 10:15:18.000000000 +0530
-+++ control-center-2.6.1-new/capplets/background/gnome-wp-capplet.c	2005-05-26 20:57:04.954778712 +0530
-@@ -552,6 +552,14 @@ void gnome_wp_main_quit (GnomeWPCapplet 
-     gtk_main_quit ();
- }
- 
-+static gboolean wallpaper_properties_closed (GtkWidget * dialog,
-+					     GdkEventAny *event,
-+					     GnomeWPCapplet * capplet) {
-+    gtk_widget_destroy (dialog);
-+    gnome_wp_main_quit (capplet);
-+    return FALSE;
-+}
-+
- static void wallpaper_properties_clicked (GtkWidget * dialog,
- 					  gint response_id,
- 					  GnomeWPCapplet * capplet) {
-@@ -1520,6 +1528,8 @@ static void wallpaper_properties_init (v
-   g_signal_connect (G_OBJECT (capplet->window), "response",
- 		    G_CALLBACK (wallpaper_properties_clicked), capplet);
- 
-+  g_signal_connect (G_OBJECT (capplet->window), "delete_event",
-+		     G_CALLBACK (wallpaper_properties_closed), capplet);
-   gtk_widget_show (capplet->window);
- 
-   cursor = gdk_cursor_new_for_display (gdk_display_get_default (),
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-16-mouse-dialog.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,16 @@
+--- control-center-2.14.1/capplets/mouse/gnome-mouse-properties.c-orig	2006-06-09 11:10:52.922270000 +0100
++++ control-center-2.14.1/capplets/mouse/gnome-mouse-properties.c	2006-06-09 10:03:29.251483000 +0100
+@@ -532,6 +532,13 @@
+ 	model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT(smodel));
+ 
+ 	cursor_font = gconf_client_get_string (client, CURSOR_FONT_KEY, NULL);
++	
++	/* If there's no value set, then don't select anything, and return */
++	if ( cursor_font == NULL ) {
++		gtk_tree_selection_unselect_all(selection);
++		return;
++	}
++	
+ 	gtk_tree_model_get_iter_root (model, &iter);
+ 
+ 	do {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-17-disable-gnome-screensaver.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,31 @@
+diff -urNp control-center-2.12.1/gnome-settings-daemon/gnome-settings-screensaver.c control-center-2.12.1-hacked/gnome-settings-daemon/gnome-settings-screensaver.c
+--- control-center-2.12.1/gnome-settings-daemon/gnome-settings-screensaver.c	2005-07-25 23:55:59.000000000 +1200
++++ control-center-2.12.1-hacked/gnome-settings-daemon/gnome-settings-screensaver.c	2005-11-09 13:09:14.488848000 +1300
+@@ -74,24 +74,16 @@
+ really_start_screensaver (gpointer user_data)
+ {
+ 	GError *gerr = NULL;
+-	gboolean use_gscreensaver = FALSE;
+ 	gboolean show_error;
+ 	GtkWidget *dialog, *toggle;
+ 	gchar *ss_command;
+ 	GConfClient *client;
+ 
+-	if ((ss_command = g_find_program_in_path ("gnome-screensaver")))
+-		use_gscreensaver = TRUE;
+-	else {
+-		if (!(ss_command = g_find_program_in_path ("xscreensaver")))
+-			return FALSE;
+-	}
++	if (!(ss_command = g_find_program_in_path ("xscreensaver")))
++		return FALSE;
+ 
+ 	g_free (ss_command);
+-	if (use_gscreensaver)
+-		ss_command = GSCREENSAVER_COMMAND;
+-	else
+-		ss_command = XSCREENSAVER_COMMAND;
++	ss_command = XSCREENSAVER_COMMAND;
+ 
+ 	if (g_spawn_command_line_async (ss_command, &gerr))
+ 		return FALSE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-17-fix-keyboard-dialog.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,12 @@
+--- control-center-2.12.1.orig/capplets/keyboard/gnome-keyboard-properties-xkb.c	2005-10-14 15:22:53.158945000 -0400
++++ control-center-2.12.1/capplets/keyboard/gnome-keyboard-properties-xkb.c	2005-10-14 15:22:20.419499000 -0400
+@@ -69,6 +69,9 @@
+   if (model == NULL)
+     model = initialConfig.model;
+ 
++  if (model == NULL)
++    model = "";
++
+   g_snprintf (ci.name, sizeof (ci.name), "%s", model);
+ 
+   if (XklConfigFindModel (&ci))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-17-mouse-dialog.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,16 @@
+--- control-center-2.14.1/capplets/mouse/gnome-mouse-properties.c-orig	2006-06-09 11:10:52.922270000 +0100
++++ control-center-2.14.1/capplets/mouse/gnome-mouse-properties.c	2006-06-09 10:03:29.251483000 +0100
+@@ -532,6 +532,13 @@
+ 	model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT(smodel));
+ 
+ 	cursor_font = gconf_client_get_string (client, CURSOR_FONT_KEY, NULL);
++	
++	/* If there's no value set, then don't select anything, and return */
++	if ( cursor_font == NULL ) {
++		gtk_tree_selection_unselect_all(selection);
++		return;
++	}
++	
+ 	gtk_tree_model_get_iter_root (model, &iter);
+ 
+ 	do {
--- a/patches/control-center-17-xkb-check-remote-login.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,69 +0,0 @@
---- control-center-2.10.1/gnome-settings-daemon/gnome-settings-daemon.c	2005-08-04 21:11:38.050245536 +0530
-+++ control-center-2.10.1-new/gnome-settings-daemon/gnome-settings-daemon.c	2005-08-04 22:03:37.678989880 +0530
-@@ -217,6 +217,22 @@ gnome_settings_daemon_init (GnomeSetting
- BONOBO_TYPE_FUNC_FULL(GnomeSettingsDaemon, GNOME_SettingsDaemon,
- 		      BONOBO_TYPE_OBJECT, gnome_settings_daemon)
- 
-+static gboolean
-+is_xserver_local (void)
-+{
-+  const char *dt_xserver_loc;
-+  const char *gdm_xserver_loc;
-+
-+  dt_xserver_loc = g_getenv ("DTXSERVERLOCATION");
-+  gdm_xserver_loc = g_getenv ("GDM_XSERVER_LOCATION");
-+
-+  if ((dt_xserver_loc && strcmp (dt_xserver_loc, "remote") == 0) ||
-+      (gdm_xserver_loc && strcmp (gdm_xserver_loc, "xdmcp") == 0))
-+        return FALSE;
-+
-+  return TRUE;
-+}
-+
- GObject *
- gnome_settings_daemon_new (void)
- {
-@@ -287,7 +303,7 @@ gnome_settings_daemon_new (void)
- * disables the XKB layout support for Gnome when running Xsun
- * with +xkb enabled */
- 
-- if (!xserver_is_sun) {
-+ if (!xserver_is_sun && is_xserver_local ()) {
-     gnome_settings_keyboard_xkb_set_post_activation_callback ((PostActivationCallback)gnome_settings_load_modmap_files, NULL);
-     gnome_settings_keyboard_xkb_init (client);
-   }
---- control-center-2.10.1/capplets/keyboard/gnome-keyboard-properties.c	2005-08-04 21:11:38.031248424 +0530
-+++ control-center-2.10.1-new/capplets/keyboard/gnome-keyboard-properties.c	2005-08-04 22:06:58.939393648 +0530
-@@ -99,6 +99,23 @@ CheckXKB (void)
- 	return FALSE;
- }
- 
-+static gboolean
-+is_xserver_local (void)
-+{
-+	const char *dt_xserver_loc;
-+	const char *gdm_xserver_loc;
-+
-+	dt_xserver_loc = g_getenv ("DTXSERVERLOCATION");
-+	gdm_xserver_loc = g_getenv ("GDM_XSERVER_LOCATION");
-+
-+	if ((dt_xserver_loc && strcmp (dt_xserver_loc, "remote") == 0) ||
-+	    (gdm_xserver_loc && strcmp (gdm_xserver_loc, "xdmcp") == 0)) {
-+		return FALSE;
-+	}
-+
-+	return TRUE;
-+}
-+
- static GladeXML *
- create_dialog (void)
- {
-@@ -309,7 +326,7 @@ main (int argc, char **argv) 
- 		get_legacy_settings ();
- 	} else {
- 		changeset = NULL;
--		check_xkb_support = CheckXKB ();
-+		check_xkb_support = is_xserver_local () && CheckXKB ();
- 		dialog = create_dialog ();
- 		setup_dialog (dialog, changeset);
- 		if (switch_to_typing_break_page) {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-18-disable-gnome-screensaver.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,31 @@
+diff -urNp control-center-2.12.1/gnome-settings-daemon/gnome-settings-screensaver.c control-center-2.12.1-hacked/gnome-settings-daemon/gnome-settings-screensaver.c
+--- control-center-2.12.1/gnome-settings-daemon/gnome-settings-screensaver.c	2005-07-25 23:55:59.000000000 +1200
++++ control-center-2.12.1-hacked/gnome-settings-daemon/gnome-settings-screensaver.c	2005-11-09 13:09:14.488848000 +1300
+@@ -74,24 +74,16 @@
+ really_start_screensaver (gpointer user_data)
+ {
+ 	GError *gerr = NULL;
+-	gboolean use_gscreensaver = FALSE;
+ 	gboolean show_error;
+ 	GtkWidget *dialog, *toggle;
+ 	gchar *ss_command;
+ 	GConfClient *client;
+ 
+-	if ((ss_command = g_find_program_in_path ("gnome-screensaver")))
+-		use_gscreensaver = TRUE;
+-	else {
+-		if (!(ss_command = g_find_program_in_path ("xscreensaver")))
+-			return FALSE;
+-	}
++	if (!(ss_command = g_find_program_in_path ("xscreensaver")))
++		return FALSE;
+ 
+ 	g_free (ss_command);
+-	if (use_gscreensaver)
+-		ss_command = GSCREENSAVER_COMMAND;
+-	else
+-		ss_command = XSCREENSAVER_COMMAND;
++	ss_command = XSCREENSAVER_COMMAND;
+ 
+ 	if (g_spawn_command_line_async (ss_command, &gerr))
+ 		return FALSE;
--- a/patches/control-center-18-fix-keyboard-dialog.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
---- control-center-2.12.1.orig/capplets/keyboard/gnome-keyboard-properties-xkb.c	2005-10-14 15:22:53.158945000 -0400
-+++ control-center-2.12.1/capplets/keyboard/gnome-keyboard-properties-xkb.c	2005-10-14 15:22:20.419499000 -0400
-@@ -69,6 +69,9 @@
-   if (model == NULL)
-     model = initialConfig.model;
- 
-+  if (model == NULL)
-+    model = "";
-+
-   g_snprintf (ci.name, sizeof (ci.name), "%s", model);
- 
-   if (XklConfigFindModel (&ci))
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-18-menu-entry.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,33 @@
+diff -urN control-center-2.14.1/capplets/about-me/gnome-about-me.desktop.in.in control-center-2.14.1-hacked/capplets/about-me/gnome-about-me.desktop.in.in
+--- control-center-2.14.1/capplets/about-me/gnome-about-me.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/about-me/gnome-about-me.desktop.in.in	2006-05-05 15:52:42.321339000 +1200
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-_Name=About Me
++_Name=Personal Information
+ _Comment=Set your personal information
+ Exec=gnome-about-me
+ Icon=user-info
+diff -urN control-center-2.14.1/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in control-center-2.14.1-hacked/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in
+--- control-center-2.14.1/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in	2006-05-05 15:53:45.220966000 +1200
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-_Name=Keyboard
++_Name=Keyboard Accessibility
+ _Comment=Set your keyboard accessibility preferences
+ Exec=gnome-accessibility-keyboard-properties
+ Icon=gnome-settings-accessibility-keyboard
+diff -urN control-center-2.14.1/capplets/windows/window-properties.desktop.in.in control-center-2.14.1-hacked/capplets/windows/window-properties.desktop.in.in
+--- control-center-2.14.1/capplets/windows/window-properties.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/windows/window-properties.desktop.in.in	2006-05-05 16:01:50.370014000 +1200
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-_Name=Windows
++_Name=Window Behavior
+ _Comment=Set your window properties
+ Exec=gnome-window-properties
+ Icon=gnome-window-manager
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-19-menu-entry.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,33 @@
+diff -urN control-center-2.14.1/capplets/about-me/gnome-about-me.desktop.in.in control-center-2.14.1-hacked/capplets/about-me/gnome-about-me.desktop.in.in
+--- control-center-2.14.1/capplets/about-me/gnome-about-me.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/about-me/gnome-about-me.desktop.in.in	2006-05-05 15:52:42.321339000 +1200
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-_Name=About Me
++_Name=Personal Information
+ _Comment=Set your personal information
+ Exec=gnome-about-me
+ Icon=user-info
+diff -urN control-center-2.14.1/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in control-center-2.14.1-hacked/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in
+--- control-center-2.14.1/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in	2006-05-05 15:53:45.220966000 +1200
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-_Name=Keyboard
++_Name=Keyboard Accessibility
+ _Comment=Set your keyboard accessibility preferences
+ Exec=gnome-accessibility-keyboard-properties
+ Icon=gnome-settings-accessibility-keyboard
+diff -urN control-center-2.14.1/capplets/windows/window-properties.desktop.in.in control-center-2.14.1-hacked/capplets/windows/window-properties.desktop.in.in
+--- control-center-2.14.1/capplets/windows/window-properties.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
++++ control-center-2.14.1-hacked/capplets/windows/window-properties.desktop.in.in	2006-05-05 16:01:50.370014000 +1200
+@@ -1,6 +1,6 @@
+ [Desktop Entry]
+ Encoding=UTF-8
+-_Name=Windows
++_Name=Window Behavior
+ _Comment=Set your window properties
+ Exec=gnome-window-properties
+ Icon=gnome-window-manager
--- a/patches/control-center-19-mouse-dialog.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
---- control-center-2.14.1/capplets/mouse/gnome-mouse-properties.c-orig	2006-06-09 11:10:52.922270000 +0100
-+++ control-center-2.14.1/capplets/mouse/gnome-mouse-properties.c	2006-06-09 10:03:29.251483000 +0100
-@@ -532,6 +532,13 @@
- 	model = gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT(smodel));
- 
- 	cursor_font = gconf_client_get_string (client, CURSOR_FONT_KEY, NULL);
-+	
-+	/* If there's no value set, then don't select anything, and return */
-+	if ( cursor_font == NULL ) {
-+		gtk_tree_selection_unselect_all(selection);
-+		return;
-+	}
-+	
- 	gtk_tree_model_get_iter_root (model, &iter);
- 
- 	do {
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-19-negative-refresh-rates.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,36 @@
+--- control-center-2.14.1/capplets/display/main.c	2005-11-14 23:21:07.000000000 +0800
++++ control-center-2.14.1-new/capplets/display/main.c	2006-06-12 16:56:05.436629000 +0800
+@@ -1,3 +1,4 @@
++
+ #include <config.h>
+ 
+ #include <string.h>
+@@ -184,7 +185,7 @@
+ 					      gdk_x11_drawable_get_xid (GDK_DRAWABLE (root_window)),
+ 					      new_res,
+ 					      screen_info->current_rotation,
+-					      new_rate,
++					      new_rate > 0 ? new_rate : 0,
+ 					      GDK_CURRENT_TIME);
+ 	}
+     }
+@@ -232,7 +233,7 @@
+ 					  gdk_x11_drawable_get_xid (GDK_DRAWABLE (root_window)),
+ 					  screen_info->old_size,
+ 					  screen_info->old_rotation,
+-					  screen_info->old_rate,
++					  screen_info->old_rate > 0 ? screen_info->old_rate : 0,
+ 					  GDK_CURRENT_TIME);
+       
+     }
+@@ -352,6 +353,10 @@
+       menuitem = gtk_menu_item_new_with_label (str);
+ 
+       g_object_set_data (G_OBJECT (menuitem), "rate", GINT_TO_POINTER ((int)rates[i]));
++     if (rates[i] < 0) 
++       { /* Don't allow selection of negative refresh rates */
++         gtk_widget_set_sensitive (menuitem, FALSE);
++       }
+ 	  
+       g_free (str);
+       gtk_widget_show (menuitem);
--- a/patches/control-center-20-disable-gnome-screensaver.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-diff -urNp control-center-2.12.1/gnome-settings-daemon/gnome-settings-screensaver.c control-center-2.12.1-hacked/gnome-settings-daemon/gnome-settings-screensaver.c
---- control-center-2.12.1/gnome-settings-daemon/gnome-settings-screensaver.c	2005-07-25 23:55:59.000000000 +1200
-+++ control-center-2.12.1-hacked/gnome-settings-daemon/gnome-settings-screensaver.c	2005-11-09 13:09:14.488848000 +1300
-@@ -74,24 +74,16 @@
- really_start_screensaver (gpointer user_data)
- {
- 	GError *gerr = NULL;
--	gboolean use_gscreensaver = FALSE;
- 	gboolean show_error;
- 	GtkWidget *dialog, *toggle;
- 	gchar *ss_command;
- 	GConfClient *client;
- 
--	if ((ss_command = g_find_program_in_path ("gnome-screensaver")))
--		use_gscreensaver = TRUE;
--	else {
--		if (!(ss_command = g_find_program_in_path ("xscreensaver")))
--			return FALSE;
--	}
-+	if (!(ss_command = g_find_program_in_path ("xscreensaver")))
-+		return FALSE;
- 
- 	g_free (ss_command);
--	if (use_gscreensaver)
--		ss_command = GSCREENSAVER_COMMAND;
--	else
--		ss_command = XSCREENSAVER_COMMAND;
-+	ss_command = XSCREENSAVER_COMMAND;
- 
- 	if (g_spawn_command_line_async (ss_command, &gerr))
- 		return FALSE;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-20-negative-refresh-rates.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,36 @@
+--- control-center-2.14.1/capplets/display/main.c	2005-11-14 23:21:07.000000000 +0800
++++ control-center-2.14.1-new/capplets/display/main.c	2006-06-12 16:56:05.436629000 +0800
+@@ -1,3 +1,4 @@
++
+ #include <config.h>
+ 
+ #include <string.h>
+@@ -184,7 +185,7 @@
+ 					      gdk_x11_drawable_get_xid (GDK_DRAWABLE (root_window)),
+ 					      new_res,
+ 					      screen_info->current_rotation,
+-					      new_rate,
++					      new_rate > 0 ? new_rate : 0,
+ 					      GDK_CURRENT_TIME);
+ 	}
+     }
+@@ -232,7 +233,7 @@
+ 					  gdk_x11_drawable_get_xid (GDK_DRAWABLE (root_window)),
+ 					  screen_info->old_size,
+ 					  screen_info->old_rotation,
+-					  screen_info->old_rate,
++					  screen_info->old_rate > 0 ? screen_info->old_rate : 0,
+ 					  GDK_CURRENT_TIME);
+       
+     }
+@@ -352,6 +353,10 @@
+       menuitem = gtk_menu_item_new_with_label (str);
+ 
+       g_object_set_data (G_OBJECT (menuitem), "rate", GINT_TO_POINTER ((int)rates[i]));
++     if (rates[i] < 0) 
++       { /* Don't allow selection of negative refresh rates */
++         gtk_widget_set_sensitive (menuitem, FALSE);
++       }
+ 	  
+       g_free (str);
+       gtk_widget_show (menuitem);
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-20-trusted-extensions.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,90 @@
+diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c
+--- control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c	2006-06-12 12:33:36.567877000 +0100
++++ ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c	2006-06-12 12:48:38.094184000 +0100
+@@ -19,7 +19,10 @@
+  * for these set */
+ #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
+ 
+-#define GCONF_BINDING_DIR "/desktop/gnome/keybindings"
++#define GCONF_BINDING_DIR "/desktop/gnome/keybindings" 
++
++extern gboolean gnome_desktop_tsol_is_multi_label_session (void);
++extern void gnome_desktop_tsol_proxy_app_launch (gchar *);
+ 
+ typedef struct {
+   guint keysym;
+@@ -366,6 +369,7 @@
+   XEvent *xevent = (XEvent *)gdk_xevent;
+   guint keycode, state;
+   GSList *li;
++  int i = (int)data;
+ 
+   if(xevent->type != KeyPress)
+           return GDK_FILTER_CONTINUE;
+@@ -384,6 +388,7 @@
+ 	  gboolean retval;
+ 	  gchar **argv = NULL;
+ 	  gchar **envp = NULL;
++	  char      *tsolcmd;
+ 
+ 	  g_return_val_if_fail (binding->action != NULL, GDK_FILTER_CONTINUE);
+ 
+@@ -394,6 +399,12 @@
+ 
+ 	  envp = get_exec_environment (xevent);
+ 
++          if (gnome_desktop_tsol_is_multi_label_session ()) {
++                tsolcmd = g_strdup_printf ("%d:%s", i, argv[0]);
++                gnome_desktop_tsol_proxy_app_launch (tsolcmd);
++                g_free (tsolcmd);
++  		return GDK_FILTER_CONTINUE;
++        }
+ 	  
+ 	  retval = g_spawn_async (NULL,
+ 				  argv,
+@@ -437,12 +448,12 @@
+   
+   gdk_window_add_filter (gdk_get_default_root_window (),
+ 			 keybindings_filter,
+-			 NULL);
++			 0);
+   for (i = 0; i < screen_num; i++)
+     {
+       screen = gdk_display_get_screen (dpy, i);
+       gdk_window_add_filter (gdk_screen_get_root_window (screen),
+-			     keybindings_filter, NULL);
++			     keybindings_filter, i);
+     }
+ }
+ 
+diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c
+--- control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2006-06-12 12:33:36.585316000 +0100
++++ ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2006-06-12 12:48:57.372499000 +0100
+@@ -57,6 +57,9 @@
+  * for these set */
+ #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
+ 
++extern gboolean gnome_desktop_tsol_is_multi_label_session (void);
++extern void gnome_desktop_tsol_proxy_app_launch (gchar *);
++
+ typedef struct {
+ 	AcmeVolume *volobj;
+ #ifdef USE_FBLEVEL
+@@ -104,7 +107,16 @@
+ 	gboolean retval;
+ 	gchar **argv;
+ 	gint argc;
+-	
++
++	if (gnome_desktop_tsol_is_multi_label_session ()) {
++		char      *tsolcmd;
++		/* FIXME: assume the screen 0 since ACME does not support multi-head */
++		tsolcmd = g_strdup_printf ("0:%s", cmd);
++		gnome_desktop_tsol_proxy_app_launch (tsolcmd);
++		g_free (tsolcmd);
++		return;
++	}
++
+ 	retval = FALSE;
+ 
+ 	if (g_shell_parse_argv (cmd, &argc, &argv, NULL)) {
--- a/patches/control-center-21-menu-entry.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-diff -urN control-center-2.14.1/capplets/about-me/gnome-about-me.desktop.in.in control-center-2.14.1-hacked/capplets/about-me/gnome-about-me.desktop.in.in
---- control-center-2.14.1/capplets/about-me/gnome-about-me.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
-+++ control-center-2.14.1-hacked/capplets/about-me/gnome-about-me.desktop.in.in	2006-05-05 15:52:42.321339000 +1200
-@@ -1,6 +1,6 @@
- [Desktop Entry]
- Encoding=UTF-8
--_Name=About Me
-+_Name=Personal Information
- _Comment=Set your personal information
- Exec=gnome-about-me
- Icon=user-info
-diff -urN control-center-2.14.1/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in control-center-2.14.1-hacked/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in
---- control-center-2.14.1/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
-+++ control-center-2.14.1-hacked/capplets/accessibility/keyboard/accessibility-keyboard.desktop.in.in	2006-05-05 15:53:45.220966000 +1200
-@@ -1,6 +1,6 @@
- [Desktop Entry]
- Encoding=UTF-8
--_Name=Keyboard
-+_Name=Keyboard Accessibility
- _Comment=Set your keyboard accessibility preferences
- Exec=gnome-accessibility-keyboard-properties
- Icon=gnome-settings-accessibility-keyboard
-diff -urN control-center-2.14.1/capplets/windows/window-properties.desktop.in.in control-center-2.14.1-hacked/capplets/windows/window-properties.desktop.in.in
---- control-center-2.14.1/capplets/windows/window-properties.desktop.in.in	2006-01-24 00:36:20.000000000 +1300
-+++ control-center-2.14.1-hacked/capplets/windows/window-properties.desktop.in.in	2006-05-05 16:01:50.370014000 +1200
-@@ -1,6 +1,6 @@
- [Desktop Entry]
- Encoding=UTF-8
--_Name=Windows
-+_Name=Window Behavior
- _Comment=Set your window properties
- Exec=gnome-window-properties
- Icon=gnome-window-manager
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/patches/control-center-21-trusted-extensions.diff	Fri Jul 14 19:35:57 2006 +0000
@@ -0,0 +1,90 @@
+diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c
+--- control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c	2006-06-12 12:33:36.567877000 +0100
++++ ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c	2006-06-12 12:48:38.094184000 +0100
+@@ -19,7 +19,10 @@
+  * for these set */
+ #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
+ 
+-#define GCONF_BINDING_DIR "/desktop/gnome/keybindings"
++#define GCONF_BINDING_DIR "/desktop/gnome/keybindings" 
++
++extern gboolean gnome_desktop_tsol_is_multi_label_session (void);
++extern void gnome_desktop_tsol_proxy_app_launch (gchar *);
+ 
+ typedef struct {
+   guint keysym;
+@@ -366,6 +369,7 @@
+   XEvent *xevent = (XEvent *)gdk_xevent;
+   guint keycode, state;
+   GSList *li;
++  int i = (int)data;
+ 
+   if(xevent->type != KeyPress)
+           return GDK_FILTER_CONTINUE;
+@@ -384,6 +388,7 @@
+ 	  gboolean retval;
+ 	  gchar **argv = NULL;
+ 	  gchar **envp = NULL;
++	  char      *tsolcmd;
+ 
+ 	  g_return_val_if_fail (binding->action != NULL, GDK_FILTER_CONTINUE);
+ 
+@@ -394,6 +399,12 @@
+ 
+ 	  envp = get_exec_environment (xevent);
+ 
++          if (gnome_desktop_tsol_is_multi_label_session ()) {
++                tsolcmd = g_strdup_printf ("%d:%s", i, argv[0]);
++                gnome_desktop_tsol_proxy_app_launch (tsolcmd);
++                g_free (tsolcmd);
++  		return GDK_FILTER_CONTINUE;
++        }
+ 	  
+ 	  retval = g_spawn_async (NULL,
+ 				  argv,
+@@ -437,12 +448,12 @@
+   
+   gdk_window_add_filter (gdk_get_default_root_window (),
+ 			 keybindings_filter,
+-			 NULL);
++			 0);
+   for (i = 0; i < screen_num; i++)
+     {
+       screen = gdk_display_get_screen (dpy, i);
+       gdk_window_add_filter (gdk_screen_get_root_window (screen),
+-			     keybindings_filter, NULL);
++			     keybindings_filter, i);
+     }
+ }
+ 
+diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c
+--- control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2006-06-12 12:33:36.585316000 +0100
++++ ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2006-06-12 12:48:57.372499000 +0100
+@@ -57,6 +57,9 @@
+  * for these set */
+ #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
+ 
++extern gboolean gnome_desktop_tsol_is_multi_label_session (void);
++extern void gnome_desktop_tsol_proxy_app_launch (gchar *);
++
+ typedef struct {
+ 	AcmeVolume *volobj;
+ #ifdef USE_FBLEVEL
+@@ -104,7 +107,16 @@
+ 	gboolean retval;
+ 	gchar **argv;
+ 	gint argc;
+-	
++
++	if (gnome_desktop_tsol_is_multi_label_session ()) {
++		char      *tsolcmd;
++		/* FIXME: assume the screen 0 since ACME does not support multi-head */
++		tsolcmd = g_strdup_printf ("0:%s", cmd);
++		gnome_desktop_tsol_proxy_app_launch (tsolcmd);
++		g_free (tsolcmd);
++		return;
++	}
++
+ 	retval = FALSE;
+ 
+ 	if (g_shell_parse_argv (cmd, &argc, &argv, NULL)) {
--- a/patches/control-center-22-negative-refresh-rates.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
---- control-center-2.14.1/capplets/display/main.c	2005-11-14 23:21:07.000000000 +0800
-+++ control-center-2.14.1-new/capplets/display/main.c	2006-06-12 16:56:05.436629000 +0800
-@@ -1,3 +1,4 @@
-+
- #include <config.h>
- 
- #include <string.h>
-@@ -184,7 +185,7 @@
- 					      gdk_x11_drawable_get_xid (GDK_DRAWABLE (root_window)),
- 					      new_res,
- 					      screen_info->current_rotation,
--					      new_rate,
-+					      new_rate > 0 ? new_rate : 0,
- 					      GDK_CURRENT_TIME);
- 	}
-     }
-@@ -232,7 +233,7 @@
- 					  gdk_x11_drawable_get_xid (GDK_DRAWABLE (root_window)),
- 					  screen_info->old_size,
- 					  screen_info->old_rotation,
--					  screen_info->old_rate,
-+					  screen_info->old_rate > 0 ? screen_info->old_rate : 0,
- 					  GDK_CURRENT_TIME);
-       
-     }
-@@ -352,6 +353,10 @@
-       menuitem = gtk_menu_item_new_with_label (str);
- 
-       g_object_set_data (G_OBJECT (menuitem), "rate", GINT_TO_POINTER ((int)rates[i]));
-+     if (rates[i] < 0) 
-+       { /* Don't allow selection of negative refresh rates */
-+         gtk_widget_set_sensitive (menuitem, FALSE);
-+       }
- 	  
-       g_free (str);
-       gtk_widget_show (menuitem);
--- a/patches/control-center-23-trusted-extensions.diff	Fri Jul 14 17:27:04 2006 +0000
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c
---- control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c	2006-06-12 12:33:36.567877000 +0100
-+++ ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-keybindings.c	2006-06-12 12:48:38.094184000 +0100
-@@ -19,7 +19,10 @@
-  * for these set */
- #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
- 
--#define GCONF_BINDING_DIR "/desktop/gnome/keybindings"
-+#define GCONF_BINDING_DIR "/desktop/gnome/keybindings" 
-+
-+extern gboolean gnome_desktop_tsol_is_multi_label_session (void);
-+extern void gnome_desktop_tsol_proxy_app_launch (gchar *);
- 
- typedef struct {
-   guint keysym;
-@@ -366,6 +369,7 @@
-   XEvent *xevent = (XEvent *)gdk_xevent;
-   guint keycode, state;
-   GSList *li;
-+  int i = (int)data;
- 
-   if(xevent->type != KeyPress)
-           return GDK_FILTER_CONTINUE;
-@@ -384,6 +388,7 @@
- 	  gboolean retval;
- 	  gchar **argv = NULL;
- 	  gchar **envp = NULL;
-+	  char      *tsolcmd;
- 
- 	  g_return_val_if_fail (binding->action != NULL, GDK_FILTER_CONTINUE);
- 
-@@ -394,6 +399,12 @@
- 
- 	  envp = get_exec_environment (xevent);
- 
-+          if (gnome_desktop_tsol_is_multi_label_session ()) {
-+                tsolcmd = g_strdup_printf ("%d:%s", i, argv[0]);
-+                gnome_desktop_tsol_proxy_app_launch (tsolcmd);
-+                g_free (tsolcmd);
-+  		return GDK_FILTER_CONTINUE;
-+        }
- 	  
- 	  retval = g_spawn_async (NULL,
- 				  argv,
-@@ -437,12 +448,12 @@
-   
-   gdk_window_add_filter (gdk_get_default_root_window (),
- 			 keybindings_filter,
--			 NULL);
-+			 0);
-   for (i = 0; i < screen_num; i++)
-     {
-       screen = gdk_display_get_screen (dpy, i);
-       gdk_window_add_filter (gdk_screen_get_root_window (screen),
--			     keybindings_filter, NULL);
-+			     keybindings_filter, i);
-     }
- }
- 
-diff -urN control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c
---- control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2006-06-12 12:33:36.585316000 +0100
-+++ ../SUNWgnome-desktop-prefs-2.14.1.hacked/control-center-2.14.1/gnome-settings-daemon/gnome-settings-multimedia-keys.c	2006-06-12 12:48:57.372499000 +0100
-@@ -57,6 +57,9 @@
-  * for these set */
- #define USED_MODS (GDK_SHIFT_MASK | GDK_CONTROL_MASK | GDK_MOD1_MASK)
- 
-+extern gboolean gnome_desktop_tsol_is_multi_label_session (void);
-+extern void gnome_desktop_tsol_proxy_app_launch (gchar *);
-+
- typedef struct {
- 	AcmeVolume *volobj;
- #ifdef USE_FBLEVEL
-@@ -104,7 +107,16 @@
- 	gboolean retval;
- 	gchar **argv;
- 	gint argc;
--	
-+
-+	if (gnome_desktop_tsol_is_multi_label_session ()) {
-+		char      *tsolcmd;
-+		/* FIXME: assume the screen 0 since ACME does not support multi-head */
-+		tsolcmd = g_strdup_printf ("0:%s", cmd);
-+		gnome_desktop_tsol_proxy_app_launch (tsolcmd);
-+		g_free (tsolcmd);
-+		return;
-+	}
-+
- 	retval = FALSE;
- 
- 	if (g_shell_parse_argv (cmd, &argc, &argv, NULL)) {