Commit 4e55554c authored by Rémi Denis-Courmont's avatar 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.
parent adb79e33
...@@ -3734,6 +3734,16 @@ AS_IF([test "${enable_qt}" != "no"], [ ...@@ -3734,6 +3734,16 @@ AS_IF([test "${enable_qt}" != "no"], [
PKG_CHECK_MODULES([QTX11], [Qt5X11Extras], [ PKG_CHECK_MODULES([QTX11], [Qt5X11Extras], [
VLC_ADD_LIBS([qt4],[${QTX11_LIBS}]) VLC_ADD_LIBS([qt4],[${QTX11_LIBS}])
VLC_ADD_CXXFLAGS([qt4],[${QTX11_CFLAGS} -DQT5_HAS_X11]) 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.]) AC_MSG_WARN([Not building Qt Interface with X11 helpers.])
]) ])
......
...@@ -56,6 +56,9 @@ ...@@ -56,6 +56,9 @@
#ifdef Q_WS_X11 #ifdef Q_WS_X11
# include <X11/Xlib.h> # include <X11/Xlib.h>
# ifdef HAVE_XI
# include <X11/extensions/XInput2.h>
# endif
# include <qx11info_x11.h> # include <qx11info_x11.h>
#endif #endif
...@@ -150,7 +153,25 @@ WId VideoWidget::request( struct vout_window_t *p_wnd, unsigned int *pi_width, ...@@ -150,7 +153,25 @@ WId VideoWidget::request( struct vout_window_t *p_wnd, unsigned int *pi_width,
XGetWindowAttributes( dpy, w, &attr ); XGetWindowAttributes( dpy, w, &attr );
attr.your_event_mask &= ~(ButtonPressMask|ButtonReleaseMask); attr.your_event_mask &= ~(ButtonPressMask|ButtonReleaseMask);
attr.your_event_mask &= ~PointerMotionMask;
XSelectInput( dpy, w, attr.your_event_mask ); 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 #endif
sync(); sync();
p_window = p_wnd; p_window = p_wnd;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment