Commit 5bea8b37 authored by Jean-Baptiste Kempf's avatar Jean-Baptiste Kempf

Qt4: Fix windows FSC issue.

PFff :D
(cherry picked from commit 65c2a9bf053f82e4a84192f530f042209a449cca)
(cherry picked from commit 834bd87073e19b49dca9d1ea608541e5885fb3cf)
(cherry picked from commit 6a02accb4ca190a3e2b2690f2130ac6a09d78a32)
Signed-off-by: default avatarJean-Baptiste Kempf <jb@videolan.org>
parent d326548f
...@@ -1008,6 +1008,9 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i, ...@@ -1008,6 +1008,9 @@ FullscreenControllerWidget::FullscreenControllerWidget( intf_thread_t *_p_i,
b_slow_hide_begin(false), i_slow_hide_timeout(1), b_slow_hide_begin(false), i_slow_hide_timeout(1),
b_fullscreen( false ), i_hide_timeout( 1 ), p_vout(NULL) 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 ); setWindowFlags( Qt::ToolTip );
setFrameShape( QFrame::StyledPanel ); setFrameShape( QFrame::StyledPanel );
...@@ -1080,7 +1083,6 @@ void FullscreenControllerWidget::showFSC() ...@@ -1080,7 +1083,6 @@ void FullscreenControllerWidget::showFSC()
{ {
adjustSize(); adjustSize();
#ifdef WIN32TRICK #ifdef WIN32TRICK
msg_Dbg( p_intf, "showFSC() was called" );
// after quiting and going to fs, we need to call show() // after quiting and going to fs, we need to call show()
if( isHidden() ) if( isHidden() )
show(); show();
...@@ -1107,7 +1109,6 @@ void FullscreenControllerWidget::showFSC() ...@@ -1107,7 +1109,6 @@ void FullscreenControllerWidget::showFSC()
void FullscreenControllerWidget::hideFSC() void FullscreenControllerWidget::hideFSC()
{ {
#ifdef WIN32TRICK #ifdef WIN32TRICK
msg_Dbg( p_intf, "hideFSC() was called" );
b_fscHidden = true; b_fscHidden = true;
setWindowOpacity( 0.0 ); // simulate hidding setWindowOpacity( 0.0 ); // simulate hidding
#else #else
...@@ -1153,7 +1154,6 @@ void FullscreenControllerWidget::slowHideFSC() ...@@ -1153,7 +1154,6 @@ void FullscreenControllerWidget::slowHideFSC()
else else
{ {
#ifdef WIN32TRICK #ifdef WIN32TRICK
msg_Dbg( p_intf, "slowHideFSC() was called" );
if ( windowOpacity() > 0.0 && !b_fscHidden ) if ( windowOpacity() > 0.0 && !b_fscHidden )
#else #else
if ( windowOpacity() > 0.0 ) if ( windowOpacity() > 0.0 )
...@@ -1178,10 +1178,6 @@ void FullscreenControllerWidget::customEvent( QEvent *event ) ...@@ -1178,10 +1178,6 @@ void FullscreenControllerWidget::customEvent( QEvent *event )
{ {
bool b_fs; bool b_fs;
#ifndef NDEBUG
msg_Dbg( p_intf, "New FSC event: %i", event->type() );
#endif
switch( event->type() ) switch( event->type() )
{ {
case FullscreenControlToggle_Type: case FullscreenControlToggle_Type:
...@@ -1206,7 +1202,11 @@ void FullscreenControllerWidget::customEvent( QEvent *event ) ...@@ -1206,7 +1202,11 @@ void FullscreenControllerWidget::customEvent( QEvent *event )
b_fs = b_fullscreen; b_fs = b_fullscreen;
vlc_mutex_unlock( &lock ); 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(); showFSC();
break; break;
case FullscreenControlHide_Type: case FullscreenControlHide_Type:
...@@ -1288,14 +1288,16 @@ void FullscreenControllerWidget::keyPressEvent( QKeyEvent *event ) ...@@ -1288,14 +1288,16 @@ void FullscreenControllerWidget::keyPressEvent( QKeyEvent *event )
} }
/* */ /* */
static int FullscreenControllerWidgetFullscreenChanged( vlc_object_t *vlc_object, const char *variable, static int FullscreenControllerWidgetFullscreenChanged( vlc_object_t *vlc_object,
vlc_value_t old_val, vlc_value_t new_val, const char *variable, vlc_value_t old_val,
void *data ) vlc_value_t new_val, void *data )
{ {
vout_thread_t *p_vout = (vout_thread_t *) vlc_object; vout_thread_t *p_vout = (vout_thread_t *) vlc_object;
msg_Dbg( p_vout, "Qt4: Fullscreen state changed" );
FullscreenControllerWidget *p_fs = (FullscreenControllerWidget *)data; 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; return VLC_SUCCESS;
} }
...@@ -1306,6 +1308,35 @@ static int FullscreenControllerWidgetMouseMoved( vlc_object_t *vlc_object, const ...@@ -1306,6 +1308,35 @@ static int FullscreenControllerWidgetMouseMoved( vlc_object_t *vlc_object, const
{ {
FullscreenControllerWidget *p_fs = (FullscreenControllerWidget *)data; FullscreenControllerWidget *p_fs = (FullscreenControllerWidget *)data;
int i_mousex, i_mousey;
bool b_toShow = false;
/* 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 */ /* Show event */
IMEvent *eShow = new IMEvent( FullscreenControlShow_Type, 0 ); IMEvent *eShow = new IMEvent( FullscreenControlShow_Type, 0 );
QApplication::postEvent( p_fs, static_cast<QEvent *>(eShow) ); QApplication::postEvent( p_fs, static_cast<QEvent *>(eShow) );
...@@ -1313,6 +1344,7 @@ static int FullscreenControllerWidgetMouseMoved( vlc_object_t *vlc_object, const ...@@ -1313,6 +1344,7 @@ static int FullscreenControllerWidgetMouseMoved( vlc_object_t *vlc_object, const
/* Plan hide event */ /* Plan hide event */
IMEvent *eHide = new IMEvent( FullscreenControlPlanHide_Type, 0 ); IMEvent *eHide = new IMEvent( FullscreenControlPlanHide_Type, 0 );
QApplication::postEvent( p_fs, static_cast<QEvent *>(eHide) ); QApplication::postEvent( p_fs, static_cast<QEvent *>(eHide) );
}
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -1327,9 +1359,14 @@ void FullscreenControllerWidget::attachVout( vout_thread_t *p_nvout ) ...@@ -1327,9 +1359,14 @@ void FullscreenControllerWidget::attachVout( vout_thread_t *p_nvout )
p_vout = p_nvout; p_vout = p_nvout;
msg_Dbg( p_vout, "Qt FS: Attaching Vout" );
vlc_mutex_lock( &lock ); 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 ); vlc_mutex_unlock( &lock );
} }
/** /**
...@@ -1339,7 +1376,9 @@ void FullscreenControllerWidget::detachVout() ...@@ -1339,7 +1376,9 @@ void FullscreenControllerWidget::detachVout()
{ {
if( p_vout ) 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 ); vlc_mutex_lock( &lock );
fullscreenChanged( p_vout, false, 0 ); fullscreenChanged( p_vout, false, 0 );
vlc_mutex_unlock( &lock ); vlc_mutex_unlock( &lock );
...@@ -1350,20 +1389,27 @@ void FullscreenControllerWidget::detachVout() ...@@ -1350,20 +1389,27 @@ void FullscreenControllerWidget::detachVout()
/** /**
* Register and unregister callback for mouse moving * 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 ); vlc_mutex_lock( &lock );
/* Entering fullscreen, register callback */
if( b_fs && !b_fullscreen ) if( b_fs && !b_fullscreen )
{ {
b_fullscreen = true; b_fullscreen = true;
i_hide_timeout = i_timeout; 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 ) else if( !b_fs && b_fullscreen )
{ {
b_fullscreen = false; b_fullscreen = false;
i_hide_timeout = i_timeout; i_hide_timeout = i_timeout;
var_DelCallback( p_vout, "mouse-moved", FullscreenControllerWidgetMouseMoved, this ); var_DelCallback( p_vout, "mouse-moved",
FullscreenControllerWidgetMouseMoved, this );
/* Force fs hidding */ /* Force fs hidding */
IMEvent *eHide = new IMEvent( FullscreenControlHide_Type, 0 ); IMEvent *eHide = new IMEvent( FullscreenControlHide_Type, 0 );
......
...@@ -252,6 +252,10 @@ public: ...@@ -252,6 +252,10 @@ public:
void attachVout( vout_thread_t *p_vout ); void attachVout( vout_thread_t *p_vout );
void detachVout(); void detachVout();
void fullscreenChanged( vout_thread_t *, bool b_fs, int i_timeout ); 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: protected:
friend class MainInterface; friend class MainInterface;
...@@ -291,7 +295,6 @@ private: ...@@ -291,7 +295,6 @@ private:
virtual void customEvent( QEvent *event ); virtual void customEvent( QEvent *event );
vout_thread_t *p_vout;
/* Shared variable between FSC and VLC (protected by a lock) */ /* Shared variable between FSC and VLC (protected by a lock) */
vlc_mutex_t lock; vlc_mutex_t lock;
......
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