vlc | branch: master | Steve Lhomme <rob...@videolabs.io> | Wed Aug  9 14:42:28 
2017 +0200| [71b960edce1961aa6f9742886dc5970ebe1f78fb] | committer: 
Jean-Baptiste Kempf

vout:win32: hide the mouse if it has been inactive for too long

Use a timer tied to the HWND.

Fix #17819

Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org>

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

 modules/video_output/win32/events.c | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/modules/video_output/win32/events.c 
b/modules/video_output/win32/events.c
index d298d4b49d..30fe3f7b49 100644
--- a/modules/video_output/win32/events.c
+++ b/modules/video_output/win32/events.c
@@ -72,6 +72,8 @@ struct event_thread_t
     HCURSOR cursor_arrow;
     HCURSOR cursor_empty;
     unsigned button_pressed;
+    mtime_t hide_timeout;
+    mtime_t last_moved;
 
     /* Gestures */
     win32_gesture_sys_t *p_gesture;
@@ -119,6 +121,20 @@ static HCURSOR EmptyCursor( HINSTANCE instance );
 static void MouseReleased( event_thread_t *p_event, unsigned button );
 static void MousePressed( event_thread_t *p_event, HWND hwnd, unsigned button 
);
 
+static void CALLBACK HideMouse(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD 
dwTime)
+{
+    VLC_UNUSED(hwnd); VLC_UNUSED(uMsg); VLC_UNUSED(dwTime);
+    event_thread_t *p_event = (event_thread_t *)idEvent;
+    UpdateCursor( p_event, false );
+}
+
+static void UpdateCursorMoved( event_thread_t *p_event )
+{
+    UpdateCursor( p_event, true );
+    p_event->last_moved = mdate();
+    SetTimer( p_event->hwnd, (UINT_PTR)p_event, p_event->hide_timeout, 
HideMouse );
+}
+
 /* Local helpers */
 static inline bool isMouseEvent( WPARAM type )
 {
@@ -211,12 +227,12 @@ static void *EventThread( void *p_this )
                 (abs(mouse_pos.y - old_mouse_pos.y)) > 2 ) )
             {
                 old_mouse_pos = mouse_pos;
-                UpdateCursor( p_event, true );
+                UpdateCursorMoved( p_event );
             }
         }
         else if( isMouseEvent( msg.message ) )
         {
-            UpdateCursor( p_event, true );
+            UpdateCursorMoved( p_event );
         }
         else if( msg.message == WM_VLC_HIDE_MOUSE )
         {
@@ -709,6 +725,8 @@ static int Win32VoutCreateWindow( event_thread_t *p_event )
     {
         p_event->vlc_icon = ExtractIcon( hInstance, vlc_path, 0 );
     }
+    p_event->hide_timeout = var_InheritInteger( p_event->vd, 
"mouse-hide-timeout" );
+    UpdateCursorMoved( p_event );
 
     /* Fill in the window class structure */
     wc.style         = CS_OWNDC|CS_DBLCLKS;          /* style: dbl click */

_______________________________________________
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to