]> git.sesse.net Git - vlc/blobdiff - modules/gui/qt4/main_interface.cpp
Qt: get Bookmark events from the core and update in Bookmark dialog.
[vlc] / modules / gui / qt4 / main_interface.cpp
index 9915cdf8b0ff3987be07a8f7365d50a27051cd8f..5d9609094888e9cfff84cbca8ba2ca8f220122a3 100644 (file)
 #endif
 
 #include "qt4.hpp"
+
 #include "main_interface.hpp"
 #include "input_manager.hpp"
-#include "util/qvlcframe.hpp"
-#include "util/qvlcapp.hpp"
+
 #include "util/customwidgets.hpp"
-#include "dialogs_provider.hpp"
+#include "util/qt_dirs.hpp"
+
 #include "components/interface_widgets.hpp"
 #include "components/controller.hpp"
 #include "components/playlist/playlist.hpp"
-#include "dialogs/extended.hpp"
-#include "dialogs/playlist.hpp"
+
 #include "menus.hpp"
 #include "recents.hpp"
 
-#include <QMenuBar>
 #include <QCloseEvent>
-#include <QPushButton>
-#include <QStatusBar>
 #include <QKeyEvent>
+
 #include <QUrl>
-#include <QSystemTrayIcon>
 #include <QSize>
+#include <QDate>
+
 #include <QMenu>
+#include <QMenuBar>
+#include <QStatusBar>
 #include <QLabel>
-#include <QSlider>
-#include <QWidgetAction>
-#include <QToolBar>
 #include <QGroupBox>
-#include <QDate>
+#include <QPushButton>
 
 #include <assert.h>
-#include <vlc_keys.h>
+
+#include <vlc_keys.h> /* Wheel event */
 #include <vlc_vout.h>
 
 /* Callback prototypes */
@@ -138,10 +137,6 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     /* StatusBar Creation */
     createStatusBar();
 
-    /* Recents menu updates */
-    CONNECT( RecentsMRL::getInstance( p_intf ), updated(),
-             this, updateRecentsMenu() );
-
     /********************
      * Input Manager    *
      ********************/
@@ -152,18 +147,14 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
      **************************/
     /* Connect the input manager to the GUI elements it manages */
 
-    /* It is also connected to the control->slider, see the ControlsWidget */
-    /* Change the SpeedRate in the Status */
-    CONNECT( THEMIM->getIM(), rateChanged( int ), this, setRate( int ) );
-
     /**
      * Connects on nameChanged()
      * Those connects are not merged because different options can trigger
      * them down.
      */
     /* Naming in the controller statusbar */
-    CONNECT( THEMIM->getIM(), nameChanged( QString ), this,
-             setName( QString ) );
+    CONNECT( THEMIM->getIM(), nameChanged( QString ),
+             this, setName( QString ) );
     /* and in the systray */
     if( sysTray )
     {
@@ -180,13 +171,11 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
     /**
      * CONNECTS on PLAY_STATUS
      **/
-    /* Status on the main controller */
-    CONNECT( THEMIM->getIM(), statusChanged( int ), this, setStatus( int ) );
-    /* and in the systray */
+    /* Status on the systray */
     if( sysTray )
     {
-        CONNECT( THEMIM->getIM(), statusChanged( int ), this,
-                 updateSystrayTooltipStatus( int ) );
+        CONNECT( THEMIM->getIM(), statusChanged( int ),
+                 this, updateSystrayTooltipStatus( int ) );
     }
 
     /* END CONNECTS ON IM */
@@ -206,8 +195,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf )
 
 
     /* VideoWidget connects to avoid different threads speaking to each other */
-    CONNECT( this, askReleaseVideo( void ),
-             this, releaseVideoSlot( void ) );
+    CONNECT( this, askReleaseVideo( void ),
+             this, releaseVideoSlot( void ) );
     if( videoWidget )
         CONNECT( this, askVideoToResize( unsigned int, unsigned int ),
                  videoWidget, SetSizing( unsigned int, unsigned int ) );
@@ -293,14 +282,11 @@ inline void MainInterface::createStatusBar()
      *  Status Bar  *
      ****************/
     /* Widgets Creation*/
-    timeLabel = new TimeLabel( p_intf );
+    TimeLabel *timeLabel = new TimeLabel( p_intf );
     nameLabel = new QLabel;
     nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse
                                       | Qt::TextSelectableByKeyboard );
-    speedLabel = new SpeedLabel( p_intf, "1.00x" );
-    speedLabel->setToolTip(
-            qtr( "Current playback speed.\nRight click to adjust" ) );
-    speedLabel->setContextMenuPolicy ( Qt::CustomContextMenu );
+    SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x" );
 
     /* Styling those labels */
     timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel );
@@ -317,11 +303,6 @@ inline void MainInterface::createStatusBar()
        - right-clicking and clicking just toggle between remaining and
          elapsed time.*/
     CONNECT( timeLabel, timeLabelDoubleClicked(), THEDP, gotoTimeDialog() );
-
-    /* Speed Label behaviour:
-       - right click gives the vertical speed slider */
-    CONNECT( speedLabel, customContextMenuRequested( QPoint ),
-             this, showSpeedMenu( QPoint ) );
 }
 
 inline void MainInterface::initSystray()
@@ -376,20 +357,14 @@ void MainInterface::handleMainUi( QSettings *settings )
 
     /* Create the CONTROLS Widget */
     controls = new ControlsWidget( p_intf,
-                   settings->value( "adv-controls", false ).toBool() );
+                   settings->value( "adv-controls", false ).toBool(), this );
     CONNECT( controls, advancedControlsToggled( bool ),
              this, doComponentsUpdate() );
+    inputC = new InputControlsWidget( p_intf, this );
 
     /* Add the controls Widget to the main Widget */
     mainLayout->insertWidget( 0, controls, 0, Qt::AlignBottom );
-
-    /* Create the Speed Control Widget */
-    speedControl = new SpeedControlWidget( p_intf );
-    speedControlMenu = new QMenu( this );
-
-    QWidgetAction *widgetAction = new QWidgetAction( speedControl );
-    widgetAction->setDefaultWidget( speedControl );
-    speedControlMenu->addAction( widgetAction );
+    mainLayout->insertWidget( 0, inputC, 0, Qt::AlignBottom );
 
     /* Visualisation */
     /* Disabled for now, they SUCK */
@@ -589,15 +564,6 @@ void MainInterface::debug()
 #endif
 }
 
-/****************************************************************************
- * Small right-click menu for rate control
- ****************************************************************************/
-void MainInterface::showSpeedMenu( QPoint pos )
-{
-    speedControlMenu->exec( QCursor::pos() - pos
-                          + QPoint( 0, speedLabel->height() ) );
-}
-
 /****************************************************************************
  * Video Handling
  ****************************************************************************/
@@ -650,17 +616,16 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x,
 }
 
 /* Call from the WindowClose function */
-void MainInterface::releaseVideo( void *p_win )
+void MainInterface::releaseVideo( void )
 {
     if( fullscreenControls ) fullscreenControls->detachVout();
-    if( p_win )
-        emit askReleaseVideo( p_win );
+    emit askReleaseVideo( );
 }
 
 /* Function that is CONNECTED to the previous emit */
-void MainInterface::releaseVideoSlot( void *p_win )
+void MainInterface::releaseVideoSlot( void )
 {
-    videoWidget->release( p_win );
+    videoWidget->release( );
 
     if( bgWasVisible )
     {
@@ -774,7 +739,7 @@ void MainInterface::toggleMinimalView()
     if( i_visualmode != QT_ALWAYS_VIDEO_MODE &&
         i_visualmode != QT_MINIMAL_MODE )
     { /* NORMAL MODE then */
-        if( videoWidget->isHidden() ) emit askBgWidgetToToggle();
+        if( !videoWidget || videoWidget->isHidden() ) emit askBgWidgetToToggle();
         else
         {
             /* If video is visible, then toggle the status of bgWidget */
@@ -785,6 +750,7 @@ void MainInterface::toggleMinimalView()
     TOGGLEV( menuBar() );
     TOGGLEV( controls );
     TOGGLEV( statusBar() );
+    TOGGLEV( inputC );
     doComponentsUpdate();
 }
 
@@ -856,27 +822,6 @@ void MainInterface::setName( QString name )
     nameLabel->setToolTip( " " + name +" " );
 }
 
-void MainInterface::setStatus( int status )
-{
-    msg_Dbg( p_intf, "Updating the stream status: %i", status );
-
-    speedControl->setEnable( THEMIM->getIM()->hasInput() );
-
-    /* And in the systray for the menu */
-    if( sysTray )
-        QVLCMenu::updateSystrayMenu( this, p_intf );
-}
-
-void MainInterface::setRate( int rate )
-{
-    QString str;
-    str.setNum( ( 1000 / (double)rate ), 'f', 2 );
-    str.append( "x" );
-    speedLabel->setText( str );
-    speedLabel->setToolTip( str );
-    speedControl->updateControls( rate );
-}
-
 /*****************************************************************************
  * Systray Icon and Systray Menu
  *****************************************************************************/
@@ -927,12 +872,15 @@ void MainInterface::toggleUpdateSystrayMenu()
         /* Visible */
 #ifdef WIN32
         /* check if any visible window is above vlc in the z-order,
-         * but ignore the ones always on top */
+         * but ignore the ones always on top
+         * and the ones which can't be activated */
         WINDOWINFO wi;
         HWND hwnd;
         wi.cbSize = sizeof( WINDOWINFO );
         for( hwnd = GetNextWindow( internalWinId(), GW_HWNDPREV );
-                hwnd && !IsWindowVisible( hwnd );
+                hwnd && ( !IsWindowVisible( hwnd ) ||
+                    ( GetWindowInfo( hwnd, &wi ) &&
+                      (wi.dwExStyle&WS_EX_NOACTIVATE) ) );
                 hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) );
         if( !hwnd || !GetWindowInfo( hwnd, &wi ) ||
                 (wi.dwExStyle&WS_EX_TOPMOST) )
@@ -985,6 +933,8 @@ void MainInterface::updateSystrayTooltipName( QString name )
                     QSystemTrayIcon::NoIcon, 3000 );
         }
     }
+
+    QVLCMenu::updateSystrayMenu( this, p_intf );
 }
 
 /**
@@ -1032,7 +982,7 @@ void MainInterface::dropEventPlay( QDropEvent *event, bool b_play )
      {
         if( THEMIM->getIM()->hasInput() )
         {
-            if( input_AddSubtitles( THEMIM->getInput(),
+            if( !input_AddSubtitle( THEMIM->getInput(),
                                     qtu( toNativeSeparators(
                                          mimeData->urls()[0].toLocalFile() ) ),
                                     true ) )
@@ -1186,11 +1136,3 @@ static int IntfShowCB( vlc_object_t *p_this, const char *psz_variable,
      return VLC_SUCCESS;
 }
 
-/*****************************************************************************
- * updateRecentsMenu: event called by RecentsMRL
- *****************************************************************************/
-
-void MainInterface::updateRecentsMenu()
-{
-    QVLCMenu::updateRecents( p_intf );
-}