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

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


vlc | branch: master | Rémi Denis-Courmont <remi at remlab.net> | Fri Oct 23 22:46:26 2015 +0300| [4e55554c37e7c55586c41a5e9fc50f393167ac0b] | committer: Rémi Denis-Courmont

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.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=4e55554c37e7c55586c41a5e9fc50f393167ac0b
---

 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 2438472..2776a8c 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3734,6 +3734,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 00eca38..bd99fcf 100644
--- a/modules/gui/qt4/components/interface_widgets.cpp
+++ b/modules/gui/qt4/components/interface_widgets.cpp
@@ -56,6 +56,9 @@
 
 #ifdef Q_WS_X11
 #   include <X11/Xlib.h>
+#   ifdef HAVE_XI
+#       include <X11/extensions/XInput2.h>
+#   endif
 #   include <qx11info_x11.h>
 #endif
 
@@ -150,7 +153,25 @@ WId VideoWidget::request( struct vout_window_t *p_wnd, unsigned int *pi_width,
 
     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();
     p_window = p_wnd;



More information about the vlc-commits mailing list