[vlc-commits] qt5: unsubscribe disable motion and XI2 mouse events

Rémi Denis-Courmont git at videolan.org
Sun Oct 25 18:35:03 CET 2015


vlc/vlc-2.2 | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Oct 23 22:46:26 2015 +0300| [729d28e766f37e166000c0c9d15c19138281b754] | committer: Jean-Baptiste Kempf

qt5: unsubscribe disable motion and XI2 mouse events

╔═══════════════════════════╗
║ PARENTAL ADVISORY:   R-24 ║
║ EXPLICIT CONTENT          ║
║ INAPPROPRIATE KLUDGY HACK ║
╚═══════════════════════════╝

This extends the existing kludge to catch mouse clicks in the video
output instead of the Qt framework. From version 5.5, Qt uses XI2 to
catch mouse events.

May or may not interfere with touch devices.
May or may not interfere with cursor changes.
May or may not be forward compatible.

(cherry picked from commit 4e55554c37e7c55586c41a5e9fc50f393167ac0b)
Signed-off-by: Jean-Baptiste Kempf <jb at videolan.org>

> http://git.videolan.org/gitweb.cgi/vlc/vlc-2.2.git/?a=commit;h=729d28e766f37e166000c0c9d15c19138281b754
---

 configure.ac                                     |   10 ++++++++++
 modules/gui/qt4/components/interface_widgets.cpp |   21 +++++++++++++++++++++
 2 files changed, 31 insertions(+)

diff --git a/configure.ac b/configure.ac
index bed99d9..63a0577 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3722,6 +3722,16 @@ AS_IF([test "${enable_qt}" != "no"], [
       PKG_CHECK_MODULES([QTX11], [Qt5X11Extras], [
           VLC_ADD_LIBS([qt4],[${QTX11_LIBS}])
           VLC_ADD_CXXFLAGS([qt4],[${QTX11_CFLAGS} -DQT5_HAS_X11])
+          PKG_CHECK_MODULES([XI], [xi], [
+            VLC_ADD_LIBS([qt4], [${XI_LIBS}])
+            VLC_ADD_CXXFLAGS([qt4], [${XI_CFLAGS} -DHAVE_XI])
+          ], [
+            PKG_CHECK_EXISTS([Qt5Gui >= 5.5], [
+              AC_MSG_ERROR([${XI_PKG_ERRORS}.])
+            ], [
+              AC_MSG_WARN([${XI_PKG_ERRORS}.])
+            ])
+          ])
       ],[
           AC_MSG_WARN([Not building Qt Interface with X11 helpers.])
       ])
diff --git a/modules/gui/qt4/components/interface_widgets.cpp b/modules/gui/qt4/components/interface_widgets.cpp
index 8c30ac0..f433446 100644
--- a/modules/gui/qt4/components/interface_widgets.cpp
+++ b/modules/gui/qt4/components/interface_widgets.cpp
@@ -58,6 +58,9 @@
 
 #ifdef Q_WS_X11
 #   include <X11/Xlib.h>
+#   ifdef HAVE_XI
+#       include <X11/extensions/XInput2.h>
+#   endif
 #   include <qx11info_x11.h>
 #endif
 
@@ -148,7 +151,25 @@ WId VideoWidget::request( int *pi_x, int *pi_y,
 
     XGetWindowAttributes( dpy, w, &attr );
     attr.your_event_mask &= ~(ButtonPressMask|ButtonReleaseMask);
+    attr.your_event_mask &= ~PointerMotionMask;
     XSelectInput( dpy, w, attr.your_event_mask );
+# ifdef HAVE_XI
+    int n;
+    XIEventMask *xi_masks = XIGetSelectedEvents( dpy, w, &n );
+    if( xi_masks != NULL )
+    {
+        for( int i = 0; i < n; i++ )
+            if( xi_masks[i].mask_len >= 1 )
+            {
+                xi_masks[i].mask[0] &= ~XI_ButtonPressMask;
+                xi_masks[i].mask[0] &= ~XI_ButtonReleaseMask;
+                xi_masks[i].mask[0] &= ~XI_MotionMask;
+            }
+
+        XISelectEvents( dpy, w, xi_masks, n );
+        XFree( xi_masks );
+    }
+# endif
 #endif
     sync();
     return stable->winId();



More information about the vlc-commits mailing list