vlc | branch: master | Jakub Wieczorek <fa...@fawek.net> | Sat Dec 25 23:08:23 2010 +0100| [588c2528c476cd2a249a549c592467cfbae990a2] | committer: Jean-Baptiste Kempf
Add an option to pause the playback on minimizing the window. http://trac.videolan.org/vlc/ticket/2234 Signed-off-by: Jean-Baptiste Kempf <j...@videolan.org> > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=588c2528c476cd2a249a549c592467cfbae990a2 --- modules/gui/qt4/input_manager.cpp | 17 +++++++++++++++++ modules/gui/qt4/input_manager.hpp | 1 + modules/gui/qt4/main_interface.cpp | 35 +++++++++++++++++++++++++++++++++++ modules/gui/qt4/main_interface.hpp | 2 ++ modules/gui/qt4/qt4.cpp | 8 ++++++++ 5 files changed, 63 insertions(+), 0 deletions(-) diff --git a/modules/gui/qt4/input_manager.cpp b/modules/gui/qt4/input_manager.cpp index 539279c..749ec5a 100644 --- a/modules/gui/qt4/input_manager.cpp +++ b/modules/gui/qt4/input_manager.cpp @@ -514,6 +514,23 @@ bool InputManager::hasAudio() return false; } +bool InputManager::hasVisualisation() +{ + if( !p_input ) + return false; + + aout_instance_t *aout = input_GetAout( p_input ); + if( !aout ) + return false; + + char *visual = var_InheritString( aout, "visual" ); + if( !visual ) + return false; + + free( visual ); + return true; +} + void InputManager::UpdateTeletext() { if( hasInput() ) diff --git a/modules/gui/qt4/input_manager.hpp b/modules/gui/qt4/input_manager.hpp index e56eca5..fde6ae0 100644 --- a/modules/gui/qt4/input_manager.hpp +++ b/modules/gui/qt4/input_manager.hpp @@ -133,6 +133,7 @@ public: int playingStatus(); bool hasAudio(); bool hasVideo() { return hasInput() && b_video; } + bool hasVisualisation(); void requestArtUpdate(); QString getName() { return oldName; } diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index 4444ad1..139ce17 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -259,6 +259,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* Switch to minimal view if needed, must be called after the show() */ if( b_minimalView ) toggleMinimalView( true ); + + b_hasPausedWhenMinimized = false; } MainInterface::~MainInterface() @@ -1090,6 +1092,39 @@ void MainInterface::updateSystrayTooltipStatus( int i_status ) } #endif +void MainInterface::changeEvent(QEvent *event) +{ + if( event->type() == QEvent::WindowStateChange ) + { + QWindowStateChangeEvent *windowStateChangeEvent = static_cast<QWindowStateChangeEvent*>(event); + Qt::WindowStates newState = windowState(); + Qt::WindowStates oldState = windowStateChangeEvent->oldState(); + + if( newState & Qt::WindowMinimized ) + { + b_hasPausedWhenMinimized = false; + + if( THEMIM->getIM()->playingStatus() == PLAYING_S && + THEMIM->getIM()->hasVideo() && + !THEMIM->getIM()->hasVisualisation() && + var_InheritBool( p_intf, "qt-pause-minimized" ) ) + { + b_hasPausedWhenMinimized = true; + THEMIM->pause(); + } + } + else if( oldState & Qt::WindowMinimized && !( newState & Qt::WindowMinimized ) ) + { + if( b_hasPausedWhenMinimized ) + { + THEMIM->play(); + } + } + } + + QWidget::changeEvent(event); +} + /************************************************************************ * D&D Events ************************************************************************/ diff --git a/modules/gui/qt4/main_interface.hpp b/modules/gui/qt4/main_interface.hpp index 4f7304e..11afb39 100644 --- a/modules/gui/qt4/main_interface.hpp +++ b/modules/gui/qt4/main_interface.hpp @@ -93,6 +93,7 @@ protected: #ifdef WIN32 virtual bool winEvent( MSG *, long * ); #endif + virtual void changeEvent( QEvent * ); virtual void dropEvent( QDropEvent *); virtual void dragEnterEvent( QDragEnterEvent * ); virtual void dragMoveEvent( QDragMoveEvent * ); @@ -168,6 +169,7 @@ private: // bool b_visualSelectorEnabled; bool b_plDocked; ///< Is the playlist docked ? + bool b_hasPausedWhenMinimized; #ifdef WIN32 HIMAGELIST himl; diff --git a/modules/gui/qt4/qt4.cpp b/modules/gui/qt4/qt4.cpp index 64cc348..ecfb769 100644 --- a/modules/gui/qt4/qt4.cpp +++ b/modules/gui/qt4/qt4.cpp @@ -178,6 +178,11 @@ static void ShowDialog ( intf_thread_t *, int, int, intf_dialog_args_t * ); "keyboard will always change your system volume. With this option unchecked, the " \ "volume buttons will change VLC's volume when VLC is selected and change the " \ "system volume when VLC is not selected." ) + +#define QT_PAUSE_MINIMIZED_TEXT N_( "Pause the video playback when minimized" ) +#define QT_PAUSE_MINIMIZED_LONGTEXT N_( \ + "With this option enabled, the playback will be automatically paused when minimizing the window." ) + /**********************************************************************/ vlc_module_begin () set_shortname( "Qt" ) @@ -263,6 +268,9 @@ vlc_module_begin () false /* advanced mode only */) #endif + add_bool( "qt-pause-minimized", true, QT_PAUSE_MINIMIZED_TEXT, + QT_PAUSE_MINIMIZED_LONGTEXT, false ) + add_obsolete_bool( "qt-blingbling" ) /* Suppressed since 1.0.0 */ add_obsolete_integer( "qt-display-mode" ) /* Suppressed since 1.1.0 */ _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org http://mailman.videolan.org/listinfo/vlc-commits