Qt4: Fix windows FSC issue.
authorJean-Baptiste Kempf <jb@videolan.org>
Sat, 20 Sep 2008 21:53:44 +0000 (14:53 -0700)
committerJean-Baptiste Kempf <jb@videolan.org>
Sun, 21 Sep 2008 02:04:26 +0000 (19:04 -0700)
PFff :D
(cherry picked from commit 65c2a9bf053f82e4a84192f530f042209a449cca)
(cherry picked from commit 834bd87073e19b49dca9d1ea608541e5885fb3cf)
(cherry picked from commit 6a02accb4ca190a3e2b2690f2130ac6a09d78a32)

Signed-off-by: Jean-Baptiste Kempf <jb@videolan.org>
modules/gui/qt4/components/interface_widgets.cpp
modules/gui/qt4/components/interface_widgets.hpp

index c1de421..1b01687 100644 (file)
@@ -1008,6 +1008,9 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i,
           b_slow_hide_begin(false), i_slow_hide_timeout(1),
           b_fullscreen( false ), i_hide_timeout( 1 ), p_vout(NULL)
 {
+    i_mouse_last_move_x = -1;
+    i_mouse_last_move_y = -1;
+
     setWindowFlags( Qt::ToolTip );
 
     setFrameShape( QFrame::StyledPanel );
@@ -1080,7 +1083,6 @@ void FullscreenControllerWidget::showFSC()
 {
     adjustSize();
 #ifdef WIN32TRICK
-    msg_Dbg( p_intf, "showFSC() was called" );
     // after quiting and going to fs, we need to call show()
     if( isHidden() )
         show();
@@ -1107,7 +1109,6 @@ void FullscreenControllerWidget::showFSC()
 void FullscreenControllerWidget::hideFSC()
 {
 #ifdef WIN32TRICK
-    msg_Dbg( p_intf, "hideFSC() was called" );
     b_fscHidden = true;
     setWindowOpacity( 0.0 );    // simulate hidding
 #else
@@ -1153,7 +1154,6 @@ void FullscreenControllerWidget::slowHideFSC()
     else
     {
 #ifdef WIN32TRICK
-        msg_Dbg( p_intf, "slowHideFSC() was called" );
          if ( windowOpacity() > 0.0 && !b_fscHidden )
 #else
          if ( windowOpacity() > 0.0 )
@@ -1178,10 +1178,6 @@ void FullscreenControllerWidget::customEvent( QEvent *event )
 {
     bool b_fs;
 
-#ifndef NDEBUG
-    msg_Dbg( p_intf, "New FSC event: %i", event->type() );
-#endif
-
     switch( event->type() )
     {
         case FullscreenControlToggle_Type:
@@ -1206,7 +1202,11 @@ void FullscreenControllerWidget::customEvent( QEvent *event )
             b_fs = b_fullscreen;
             vlc_mutex_unlock( &lock );
 
-            if( b_fs )  // FIXME I am not sure about that one
+#ifdef WIN32TRICK
+            if( b_fs && b_fscHidden )  // FIXME I am not sure about that one
+#else
+            if( b_fs && !isVisible() )  // FIXME I am not sure about that one
+#endif
                 showFSC();
             break;
         case FullscreenControlHide_Type:
@@ -1288,14 +1288,16 @@ void FullscreenControllerWidget::keyPressEvent( QKeyEvent *event )
 }
 
 /* */
-static int FullscreenControllerWidgetFullscreenChanged( vlc_object_t *vlc_object, const char *variable,
-                                                        vlc_value_t old_val, vlc_value_t new_val,
-                                                        void *data )
+static int FullscreenControllerWidgetFullscreenChanged( vlc_object_t *vlc_object,
+                const char *variable, vlc_value_t old_val,
+                vlc_value_t new_val,  void *data )
 {
     vout_thread_t *p_vout = (vout_thread_t *) vlc_object;
+    msg_Dbg( p_vout, "Qt4: Fullscreen state changed" );
     FullscreenControllerWidget *p_fs = (FullscreenControllerWidget *)data;
 
-    p_fs->fullscreenChanged( p_vout, new_val.b_bool, var_GetInteger( p_vout, "mouse-hide-timeout" ) );
+    p_fs->fullscreenChanged( p_vout, new_val.b_bool,
+            var_GetInteger( p_vout, "mouse-hide-timeout" ) );
 
     return VLC_SUCCESS;
 }
@@ -1306,13 +1308,43 @@ static int FullscreenControllerWidgetMouseMoved( vlc_object_t *vlc_object, const
 {
     FullscreenControllerWidget *p_fs = (FullscreenControllerWidget *)data;
 
-    /* Show event */
-    IMEvent *eShow = new IMEvent( FullscreenControlShow_Type, 0 );
-    QApplication::postEvent( p_fs, static_cast<QEvent *>(eShow) );
+    int i_mousex, i_mousey;
+    bool b_toShow = false;
 
-    /* Plan hide event */
-    IMEvent *eHide = new IMEvent( FullscreenControlPlanHide_Type, 0 );
-    QApplication::postEvent( p_fs, static_cast<QEvent *>(eHide) );
+    /* Get the value from the Vout - Trust the vout more than Qt */
+    i_mousex = var_GetInteger( p_fs->p_vout, "mouse-x" );
+    i_mousey = var_GetInteger( p_fs->p_vout, "mouse-y" );
+
+    /* First time */
+    if( p_fs->i_mouse_last_move_x == -1 || p_fs->i_mouse_last_move_y == -1 )
+    {
+        p_fs->i_mouse_last_move_x = i_mousex;
+        p_fs->i_mouse_last_move_y = i_mousey;
+        b_toShow = true;
+    }
+    /* All other times */
+    else
+    {
+        /* Trigger only if move > 3 px dans une direction */
+        if( abs( p_fs->i_mouse_last_move_x - i_mousex ) > 2 ||
+            abs( p_fs->i_mouse_last_move_y - i_mousey ) > 2 )
+        {
+            b_toShow = true;
+            p_fs->i_mouse_last_move_x = i_mousex;
+            p_fs->i_mouse_last_move_y = i_mousey;
+        }
+    }
+
+    if( b_toShow )
+    {
+        /* Show event */
+        IMEvent *eShow = new IMEvent( FullscreenControlShow_Type, 0 );
+        QApplication::postEvent( p_fs, static_cast<QEvent *>(eShow) );
+
+        /* Plan hide event */
+        IMEvent *eHide = new IMEvent( FullscreenControlPlanHide_Type, 0 );
+        QApplication::postEvent( p_fs, static_cast<QEvent *>(eHide) );
+    }
 
     return VLC_SUCCESS;
 }
@@ -1327,9 +1359,14 @@ void FullscreenControllerWidget::attachVout( vout_thread_t *p_nvout )
 
     p_vout = p_nvout;
 
+    msg_Dbg( p_vout, "Qt FS: Attaching Vout" );
     vlc_mutex_lock( &lock );
-    var_AddCallback( p_vout, "fullscreen", FullscreenControllerWidgetFullscreenChanged, this ); /* I miss a add and fire */
-    fullscreenChanged( p_vout, var_GetBool( p_vout, "fullscreen" ), var_GetInteger( p_vout, "mouse-hide-timeout" ) );
+
+    var_AddCallback( p_vout, "fullscreen",
+            FullscreenControllerWidgetFullscreenChanged, this );
+            /* I miss a add and fire */
+    fullscreenChanged( p_vout, var_GetBool( p_vout, "fullscreen" ),
+                       var_GetInteger( p_vout, "mouse-hide-timeout" ) );
     vlc_mutex_unlock( &lock );
 }
 /**
@@ -1339,7 +1376,9 @@ void FullscreenControllerWidget::detachVout()
 {
     if( p_vout )
     {
-        var_DelCallback( p_vout, "fullscreen", FullscreenControllerWidgetFullscreenChanged, this );
+        msg_Dbg( p_vout, "Qt FS: Detaching Vout" );
+        var_DelCallback( p_vout, "fullscreen",
+                FullscreenControllerWidgetFullscreenChanged, this );
         vlc_mutex_lock( &lock );
         fullscreenChanged( p_vout, false, 0 );
         vlc_mutex_unlock( &lock );
@@ -1350,20 +1389,27 @@ void FullscreenControllerWidget::detachVout()
 /**
  * Register and unregister callback for mouse moving
  */
-void FullscreenControllerWidget::fullscreenChanged( vout_thread_t *p_vout, bool b_fs, int i_timeout )
+void FullscreenControllerWidget::fullscreenChanged( vout_thread_t *p_vout,
+        bool b_fs, int i_timeout )
 {
+    msg_Dbg( p_vout, "Qt: Entering Fullscreen" );
+
     vlc_mutex_lock( &lock );
+    /* Entering fullscreen, register callback */
     if( b_fs && !b_fullscreen )
     {
         b_fullscreen = true;
         i_hide_timeout = i_timeout;
-        var_AddCallback( p_vout, "mouse-moved", FullscreenControllerWidgetMouseMoved, this );
+        var_AddCallback( p_vout, "mouse-moved",
+                FullscreenControllerWidgetMouseMoved, this );
     }
+    /* Quitting fullscreen, unregistering callback */
     else if( !b_fs && b_fullscreen )
     {
         b_fullscreen = false;
         i_hide_timeout = i_timeout;
-        var_DelCallback( p_vout, "mouse-moved", FullscreenControllerWidgetMouseMoved, this );
+        var_DelCallback( p_vout, "mouse-moved",
+                FullscreenControllerWidgetMouseMoved, this );
 
         /* Force fs hidding */
         IMEvent *eHide = new IMEvent( FullscreenControlHide_Type, 0 );
index b4fd1f7..1415e4d 100644 (file)
@@ -252,6 +252,10 @@ public:
     void attachVout( vout_thread_t *p_vout );
     void detachVout();
     void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout );
+    vout_thread_t *p_vout;
+
+    int i_mouse_last_move_x;
+    int i_mouse_last_move_y;
 
 protected:
     friend class MainInterface;
@@ -291,7 +295,6 @@ private:
 
     virtual void customEvent( QEvent *event );
 
-    vout_thread_t *p_vout;
 
     /* Shared variable between FSC and VLC (protected by a lock) */
     vlc_mutex_t lock;