diff options
| -rw-r--r-- | src/core/display.c | 14 | ||||
| -rw-r--r-- | src/core/keybindings.c | 8 | 
2 files changed, 22 insertions, 0 deletions
| diff --git a/src/core/display.c b/src/core/display.c index 7b3ec502..e247ed33 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -1779,6 +1779,20 @@ static gboolean event_callback(XEvent* event, gpointer data)        meta_display_process_key_event (display, window, event);        break;      case ButtonPress: +      /* Use window under pointer when processing synthetic events from another client */ +      if (window == NULL && event->xbutton.send_event) +        { +          int x, y, root_x, root_y; +          Window root, child; +          guint mask; +          XQueryPointer (display->xdisplay, +                         event->xany.window, +                         &root, &child, +                         &root_x, &root_y, +                         &x, &y, +                         &mask); +          window = meta_display_lookup_x_window (display, child); +        }        if ((window &&             grab_op_is_mouse (display->grab_op) &&             display->grab_button != (int) event->xbutton.button && diff --git a/src/core/keybindings.c b/src/core/keybindings.c index fe5f0f00..f4eb01b1 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -1310,6 +1310,14 @@ meta_display_process_key_event (MetaDisplay *display,        meta_ui_window_is_widget (screen->ui, event->xany.window))      return; +  /* Use focused window when processing synthetic events from another client */ +  if (window == NULL && event->xkey.send_event) { +    Window focus = None; +    int ret_to = RevertToPointerRoot; +    XGetInputFocus (display->xdisplay, &focus, &ret_to); +    window = meta_display_lookup_x_window (display, focus); +  } +    /* window may be NULL */  #ifdef HAVE_XKB | 
