diff options
author | Sergey Udaltsov <svu@gnome.org> | 2009-04-24 22:10:19 +0000 |
---|---|---|
committer | Sergey Udaltsov <svu@gnome.org> | 2009-04-24 22:10:19 +0000 |
commit | 8bdf755fc41292b4988a0eacd1ad816eb5aa17a4 (patch) | |
tree | 22b3d1436ed060735a6d9447c95cccd192e226e2 /libxklavier | |
parent | 1fafd406c9c5574acc61d6d57c70bf1ba482978d (diff) | |
download | libxklavier-8bdf755fc41292b4988a0eacd1ad816eb5aa17a4.tar.gz |
crash BadWindow fixed, thanks to Federico, b.fd.o#21365
Diffstat (limited to 'libxklavier')
-rw-r--r-- | libxklavier/xklavier.c | 3 | ||||
-rw-r--r-- | libxklavier/xklavier_evt.c | 5 | ||||
-rw-r--r-- | libxklavier/xklavier_private.h | 2 | ||||
-rw-r--r-- | libxklavier/xklavier_xkb.c | 6 |
4 files changed, 8 insertions, 8 deletions
diff --git a/libxklavier/xklavier.c b/libxklavier/xklavier.c index 412b0b1..f7026f1 100644 --- a/libxklavier/xklavier.c +++ b/libxklavier/xklavier.c @@ -631,7 +631,7 @@ xkl_engine_constructor(GType type, xkl_engine_priv(engine, display) = display; xkl_engine_priv(engine, default_error_handler) = - XSetErrorHandler((XErrorHandler) xkl_process_error); + XSetErrorHandler(xkl_process_error); scr = DefaultScreen(display); xkl_engine_priv(engine, root_window) = RootWindow(display, scr); @@ -671,6 +671,7 @@ xkl_engine_constructor(GType type, xkl_engine_get_backend_name(engine)); } else { xkl_debug(0, "All backends failed, last result: %d\n", rv); + XSetErrorHandler(xkl_engine_priv(engine, default_error_handler)); xkl_engine_priv(engine, display) = NULL; g_object_unref(G_OBJECT(engine)); return NULL; diff --git a/libxklavier/xklavier_evt.c b/libxklavier/xklavier_evt.c index fbe98c9..918a5f8 100644 --- a/libxklavier/xklavier_evt.c +++ b/libxklavier/xklavier_evt.c @@ -465,7 +465,7 @@ xkl_engine_process_create_window_evt(XklEngine * engine, * This handler can be called in the middle of the engine initialization - * so it is not fair to assume that the engine is available */ -void +int xkl_process_error(Display * dpy, XErrorEvent * evt) { char buf[128] = ""; @@ -504,6 +504,9 @@ xkl_process_error(Display * dpy, XErrorEvent * evt) (engine, default_error_handler)) (dpy, evt); } + + /* X ignores this return value anyway */ + return 0; } /* diff --git a/libxklavier/xklavier_private.h b/libxklavier/xklavier_private.h index 228412c..7e1b4a8 100644 --- a/libxklavier/xklavier_private.h +++ b/libxklavier/xklavier_private.h @@ -261,7 +261,7 @@ extern void xkl_engine_process_property_evt(XklEngine * engine, extern void xkl_engine_process_create_window_evt(XklEngine * engine, XCreateWindowEvent * cev); -extern void xkl_process_error(Display * dpy, XErrorEvent * evt); +extern int xkl_process_error(Display * dpy, XErrorEvent * evt); extern void xkl_engine_process_state_modification(XklEngine * engine, XklEngineStateChange diff --git a/libxklavier/xklavier_xkb.c b/libxklavier/xklavier_xkb.c index 9a1d5ba..e445797 100644 --- a/libxklavier/xklavier_xkb.c +++ b/libxklavier/xklavier_xkb.c @@ -590,12 +590,8 @@ xkl_xkb_init(XklEngine * engine) XklXkb, error_code), NULL, NULL); - if (!xkl_xkb_ext_present) { - XSetErrorHandler((XErrorHandler) - xkl_engine_priv(engine, - default_error_handler)); + if (!xkl_xkb_ext_present) return -1; - } xkl_debug(160, "xkbEvenType: %X, xkbError: %X, display: %p, root: " |