summaryrefslogtreecommitdiff
path: root/libxklavier
diff options
context:
space:
mode:
authorSergey Udaltsov <svu@gnome.org>2009-04-24 22:10:19 +0000
committerSergey Udaltsov <svu@gnome.org>2009-04-24 22:10:19 +0000
commit8bdf755fc41292b4988a0eacd1ad816eb5aa17a4 (patch)
tree22b3d1436ed060735a6d9447c95cccd192e226e2 /libxklavier
parent1fafd406c9c5574acc61d6d57c70bf1ba482978d (diff)
downloadlibxklavier-8bdf755fc41292b4988a0eacd1ad816eb5aa17a4.tar.gz
crash BadWindow fixed, thanks to Federico, b.fd.o#21365
Diffstat (limited to 'libxklavier')
-rw-r--r--libxklavier/xklavier.c3
-rw-r--r--libxklavier/xklavier_evt.c5
-rw-r--r--libxklavier/xklavier_private.h2
-rw-r--r--libxklavier/xklavier_xkb.c6
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: "