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

Reply via email to