--- 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"><b>Repeat Keys</b></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"><small><i>Short</i></small></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"><small><i>Slow</i></small></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"><small><i>Long</i></small></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"><small><i>Fast</i></small></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"><b>Cursor Blinking</b></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"><small><i>Slow</i></small></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"><small><i>Fast</i></small></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"><b>_Lock screen to enforce typing break</b></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)) {