diff --git a/src/core/display.c b/src/core/display.c index 5ce306c36..12263d215 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1731,6 +1731,7 @@ event_callback (XEvent *event, Time evtime = meta_input_event_get_time (display, event); guint n_button, state, mode, detail; gdouble ev_root_x, ev_root_y; + MetaDevice *device; if (window && !window->override_redirect && ((evtype == KeyPress) || (evtype == ButtonPress))) @@ -1752,6 +1753,8 @@ event_callback (XEvent *event, } } + device = meta_input_event_get_device (display, event); + switch (evtype) { case KeyPress: @@ -1950,8 +1953,7 @@ event_callback (XEvent *event, mode == AsyncPointer ? "AsyncPointer" : "ReplayPointer", (unsigned int) evtime); - XAllowEvents (display->xdisplay, - mode, evtime); + meta_device_allow_events (device, mode, evtime); } if (begin_move && window->has_move_func) @@ -3879,7 +3881,7 @@ meta_change_button_grab (MetaDisplay *display, if (meta_is_debugging ()) meta_error_trap_push_with_return (display); - /* GrabModeSync means freeze until XAllowEvents */ + /* GrabModeSync means freeze until X(I)AllowEvents */ if (grab) XGrabButton (display->xdisplay, button, modmask | ignored_mask, diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 98d33ff48..c9639377f 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -1419,6 +1419,7 @@ meta_display_process_key_event (MetaDisplay *display, const char *str; MetaScreen *screen; guint evtype, keycode, state; + MetaDevice *keyboard; Window xwindow; Time evtime; @@ -1428,9 +1429,11 @@ meta_display_process_key_event (MetaDisplay *display, return FALSE; evtime = meta_input_event_get_time (display, event); - XAllowEvents (display->xdisplay, - all_bindings_disabled ? ReplayKeyboard : AsyncKeyboard, - evtime); + keyboard = meta_input_event_get_device (display, event); + + meta_device_allow_events (keyboard, + all_bindings_disabled ? ReplayKeyboard : AsyncKeyboard, + evtime); if (all_bindings_disabled) return FALSE;