From 7b0930f79813ac93b4020fb28bf6c4bc564e1043 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Thu, 19 Jun 2014 21:15:14 +0200 Subject: [PATCH] frame: Only select for ButtonPress/Release/Motion/Crossing Touch events are largely ignored on GdkEvent emulation, so only make frames receive pointer events, only the pointer emulating touch will be reported, and any other further touches will be ignored, which is about the behavior we want. This makes window dragging possible again on touch. --- src/core/frame.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/core/frame.c b/src/core/frame.c index 08952411d..f80148fc2 100644 --- a/src/core/frame.c +++ b/src/core/frame.c @@ -109,6 +109,19 @@ meta_window_ensure_frame (MetaWindow *window) XChangeWindowAttributes (window->display->xdisplay, frame->xwindow, CWEventMask, &attrs); + { + unsigned char mask_bits[XIMaskLen (XI_LASTEVENT)] = { 0 }; + XIEventMask mask = { XIAllMasterDevices, sizeof (mask_bits), mask_bits }; + + XISetMask (mask.mask, XI_ButtonPress); + XISetMask (mask.mask, XI_ButtonRelease); + XISetMask (mask.mask, XI_Motion); + XISetMask (mask.mask, XI_Enter); + XISetMask (mask.mask, XI_Leave); + + XISelectEvents (window->display->xdisplay, frame->xwindow, &mask, 1); + } + meta_display_register_x_window (window->display, &frame->xwindow, window); meta_error_trap_push (window->display);