|
|
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;
|