[vlc-commits] skins2(x11): report mouse events to vlc core

Erwan Tulou git at videolan.org
Thu Jan 11 19:01:41 CET 2018


vlc | branch: master | Erwan Tulou <erwan10 at videolan.org> | Thu Jan 11 04:14:45 2018 +0100| [0dd0534c363d7ba07cb77c705ac9147d37c92bfb] | committer: Erwan Tulou

skins2(x11): report mouse events to vlc core

This fixes mouse on video widget not functioning with skins on Linux.

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

 modules/gui/skins2/src/vout_window.cpp | 28 ++++++++++++++++++++++++++++
 modules/gui/skins2/src/vout_window.hpp |  2 ++
 modules/gui/skins2/x11/x11_window.cpp  | 11 +----------
 3 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/modules/gui/skins2/src/vout_window.cpp b/modules/gui/skins2/src/vout_window.cpp
index e50683f410..d683e6a974 100644
--- a/modules/gui/skins2/src/vout_window.cpp
+++ b/modules/gui/skins2/src/vout_window.cpp
@@ -29,6 +29,8 @@
 #include "os_graphics.hpp"
 #include "os_window.hpp"
 #include "../events/evt_key.hpp"
+#include "../events/evt_motion.hpp"
+#include "../events/evt_mouse.hpp"
 
 #include <vlc_actions.h>
 
@@ -115,3 +117,29 @@ void VoutWindow::processEvent( EvtKey &rEvtKey )
         getIntf()->p_sys->p_dialogs->sendKey( rEvtKey.getModKey() );
 }
 
+
+void VoutWindow::processEvent( EvtMotion &rEvtMotion )
+{
+    int x = rEvtMotion.getXPos() - m_pParentWindow->getLeft() - getLeft();
+    int y = rEvtMotion.getYPos() - m_pParentWindow->getTop() - getTop();
+    vout_window_ReportMouseMoved( m_pWnd, x, y );
+}
+
+
+void VoutWindow::processEvent( EvtMouse &rEvtMouse )
+{
+    int button = -1;
+    if( rEvtMouse.getButton() == EvtMouse::kLeft )
+        button = 0;
+    else if( rEvtMouse.getButton() == EvtMouse::kMiddle )
+        button = 1;
+    else if( rEvtMouse.getButton() == EvtMouse::kRight )
+        button = 2;
+
+    if( rEvtMouse.getAction() == EvtMouse::kDown )
+        vout_window_ReportMousePressed( m_pWnd, button );
+    else if( rEvtMouse.getAction() == EvtMouse::kUp )
+        vout_window_ReportMouseReleased( m_pWnd, button );
+    else if( rEvtMouse.getAction() == EvtMouse::kDblClick )
+        vout_window_ReportMouseDoubleClick( m_pWnd, button );
+}
diff --git a/modules/gui/skins2/src/vout_window.hpp b/modules/gui/skins2/src/vout_window.hpp
index ada0447338..ef971ae7d5 100644
--- a/modules/gui/skins2/src/vout_window.hpp
+++ b/modules/gui/skins2/src/vout_window.hpp
@@ -56,6 +56,8 @@ public:
 
     /// hotkeys processing
     virtual void processEvent( EvtKey &rEvtKey );
+    virtual void processEvent( EvtMotion &rEvtMotion );
+    virtual void processEvent( EvtMouse &rEvtMouse );
 
     /// set and get Video Control for VoutWindow
     virtual void setCtrlVideo( CtrlVideo* pCtrlVideo );
diff --git a/modules/gui/skins2/x11/x11_window.cpp b/modules/gui/skins2/x11/x11_window.cpp
index c38202fde1..57850299c4 100644
--- a/modules/gui/skins2/x11/x11_window.cpp
+++ b/modules/gui/skins2/x11/x11_window.cpp
@@ -115,18 +115,9 @@ X11Window::X11Window( intf_thread_t *pIntf, GenericWindow &rWindow,
     }
 
     // Select events received by the window
-    long event_mask;
-    if( type == GenericWindow::VoutWindow )
-    {
-        event_mask =  ExposureMask|KeyPressMask|
-                      LeaveWindowMask|FocusChangeMask;
-    }
-    else
-    {
-        event_mask =  ExposureMask|KeyPressMask|
+    long event_mask = ExposureMask|KeyPressMask|
                       PointerMotionMask|ButtonPressMask|ButtonReleaseMask|
                       LeaveWindowMask|FocusChangeMask;
-    }
     XSelectInput( XDISPLAY, m_wnd, event_mask );
 
     // Store a pointer on the generic window in a map



More information about the vlc-commits mailing list