f83aeaa
--- libxklavier-2.1.0.2006.02.23/libxklavier/xklavier_config_xkb.c.trap-x-error	2006-03-09 15:10:56.000000000 -0500
f83aeaa
+++ libxklavier-2.1.0.2006.02.23/libxklavier/xklavier_config_xkb.c	2006-03-09 15:35:13.000000000 -0500
f83aeaa
@@ -158,6 +158,20 @@ void _XklXkbConfigCleanupNative( XkbComp
f83aeaa
   free(componentNamesPtr->symbols);
f83aeaa
   free(componentNamesPtr->geometry);
f83aeaa
 }
f83aeaa
+static int (* _XklTrapBeforeXkbWriteToServer) (Display *, XErrorEvent *);
f83aeaa
+
f83aeaa
+static int _XklXkbWriteToServerTrap (Display     *dpy, 
f83aeaa
+                                     XErrorEvent *error_event)
f83aeaa
+{
f83aeaa
+  if (error_event->error_code != 0 &&
f83aeaa
+      error_event->error_code != BadValue &&
f83aeaa
+      _XklTrapBeforeXkbWriteToServer != NULL)
f83aeaa
+    {
f83aeaa
+      return _XklTrapBeforeXkbWriteToServer (dpy, error_event);
f83aeaa
+    }
f83aeaa
+
f83aeaa
+  return 0;
f83aeaa
+}
f83aeaa
 
f83aeaa
 static XkbDescPtr _XklConfigGetKeyboard( XkbComponentNamesPtr componentNamesPtr, Bool activate )
f83aeaa
 {
f83aeaa
@@ -243,8 +257,17 @@ static XkbDescPtr _XklConfigGetKeyboard(
f83aeaa
                 XklDebug( 150, "Loaded legal keymap\n" );
f83aeaa
                 if( activate )
f83aeaa
                 {
f83aeaa
+                  Bool config_was_written = False;
f83aeaa
+
f83aeaa
                   XklDebug( 150, "Activating it...\n" );
f83aeaa
-                  if( XkbWriteToServer(&result) )
f83aeaa
+
f83aeaa
+                  _XklTrapBeforeXkbWriteToServer = XSetErrorHandler (_XklXkbWriteToServerTrap);
f83aeaa
+
f83aeaa
+                  config_was_written = XkbWriteToServer (&result);
f83aeaa
+
f83aeaa
+                  XSetErrorHandler (_XklTrapBeforeXkbWriteToServer);
f83aeaa
+
f83aeaa
+                  if (config_was_written)
f83aeaa
                   {
f83aeaa
                      XklDebug( 150, "Updating the keyboard...\n" );
f83aeaa
                      xkb = result.xkb;