[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