X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fmain_interface.cpp;h=59460806499f41c311d6e727d4e9034454e5aa12;hb=32b29b9e09887f54ed205ccd22764f3e72d416a1;hp=8ec4dae2ccb78e38964dbf9a9892df53b3273e4c;hpb=c7fb55ac5ee1dac3335dc58d237a7acd8cedb00a;p=vlc diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index 8ec4dae2cc..5946080649 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -31,6 +31,7 @@ #include "main_interface.hpp" #include "input_manager.hpp" +#include "actions_manager.hpp" #include "util/customwidgets.hpp" #include "util/qt_dirs.hpp" @@ -98,6 +99,9 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* Set The Video In emebedded Mode or not */ videoEmbeddedFlag = config_GetInt( p_intf, "embedded-video" ); + /* Do we confine videos within a persistent resizeable window */ + b_keep_size = config_GetInt( p_intf, "qt-keep-size" ); + /* Are we in the enhanced always-video mode or not ? */ i_visualmode = config_GetInt( p_intf, "qt-display-mode" ); @@ -105,6 +109,15 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) settings = getSettings(); settings->beginGroup( "MainWindow" ); + /** + * Retrieve saved sizes for main window + * mainBasedSize = based window size for normal mode + * (no video, no background) + * mainVideoSize = window size with video (all modes) + **/ + mainBasedSize = settings->value( "mainBasedSize", QSize( 350, 120 ) ).toSize(); + mainVideoSize = settings->value( "mainVideoSize", QSize( 400, 300 ) ).toSize(); + /* Visualisation, not really used yet */ visualSelectorEnabled = settings->value( "visual-selector", false).toBool(); @@ -137,10 +150,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 * ********************/ @@ -178,8 +187,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* 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 */ @@ -190,7 +199,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) ************/ var_Create( p_intf, "interaction", VLC_VAR_ADDRESS ); var_AddCallback( p_intf, "interaction", InteractCallback, this ); - p_intf->b_interaction = true; + interaction_Register( p_intf ); var_AddCallback( p_intf->p_libvlc, "intf-show", IntfShowCB, p_intf ); @@ -199,8 +208,9 @@ 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, SIGNAL(askReleaseVideo( void )), + this, SLOT(releaseVideoSlot( void )), Qt::BlockingQueuedConnection ); + if( videoWidget ) CONNECT( this, askVideoToResize( unsigned int, unsigned int ), videoWidget, SetSizing( unsigned int, unsigned int ) ); @@ -211,6 +221,20 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) settings->beginGroup( "MainWindow" ); QVLCTools::restoreWidgetPosition( settings, this, QSize(380, 60) ); + /* resize to previously saved main window size if appicable */ + if( b_keep_size ) + { + if( i_visualmode == QT_ALWAYS_VIDEO_MODE || + i_visualmode == QT_MINIMAL_MODE ) + { + resize( mainVideoSize ); + } + else + { + resize( mainBasedSize ); + } + } + bool b_visible = settings->value( "playlist-visible", 0 ).toInt(); settings->endGroup(); @@ -252,6 +276,8 @@ MainInterface::~MainInterface() delete playlistWidget; } + ActionsManager::killInstance(); + settings->beginGroup( "MainWindow" ); settings->setValue( "pl-dock-status", (int)i_pl_dock ); @@ -259,6 +285,9 @@ MainInterface::~MainInterface() settings->setValue( "adv-controls", getControlsVisibilityStatus() & CONTROLS_ADVANCED ); + settings->setValue( "mainBasedSize", mainBasedSize ); + settings->setValue( "mainVideoSize", mainVideoSize ); + if( bgWidget ) settings->setValue( "backgroundSize", bgWidget->size() ); @@ -270,7 +299,7 @@ MainInterface::~MainInterface() /* Unregister callback for the intf-popupmenu variable */ var_DelCallback( p_intf->p_libvlc, "intf-popupmenu", PopupMenuCB, p_intf ); - p_intf->b_interaction = false; + interaction_Unregister( p_intf ); var_DelCallback( p_intf, "interaction", InteractCallback, this ); p_intf->p_sys->p_mi = NULL; @@ -311,22 +340,21 @@ inline void MainInterface::createStatusBar() inline void MainInterface::initSystray() { - bool b_createSystray = false; bool b_systrayAvailable = QSystemTrayIcon::isSystemTrayAvailable(); - if( config_GetInt( p_intf, "qt-start-minimized") ) + bool b_systrayWanted = config_GetInt( p_intf, "qt-system-tray" ); + + if( config_GetInt( p_intf, "qt-start-minimized") > 0 ) { if( b_systrayAvailable ) { - b_createSystray = true; + b_systrayWanted = true; hide(); } - else msg_Err( p_intf, "You can't minimize if you haven't a system " - "tray bar" ); + else + msg_Err( p_intf, "cannot start minimized without system tray bar" ); } - if( config_GetInt( p_intf, "qt-system-tray") ) - b_createSystray = true; - if( b_systrayAvailable && b_createSystray ) + if( b_systrayAvailable && b_systrayWanted ) createSystray(); } @@ -366,11 +394,7 @@ void MainInterface::handleMainUi( QSettings *settings ) this, doComponentsUpdate() ); inputC = new InputControlsWidget( p_intf, this ); - /* Add the controls Widget to the main Widget */ - mainLayout->insertWidget( 0, controls, 0, Qt::AlignBottom ); - mainLayout->insertWidget( 0, inputC, 0, Qt::AlignBottom ); - - /* Visualisation */ + /* Visualisation */ /* Disabled for now, they SUCK */ #if 0 visualSelector = new VisualSelector( p_intf ); @@ -383,7 +407,6 @@ void MainInterface::handleMainUi( QSettings *settings ) bgWidget->resize( settings->value( "backgroundSize", QSize( 300, 200 ) ).toSize() ); bgWidget->updateGeometry(); - mainLayout->insertWidget( 0, bgWidget ); CONNECT( this, askBgWidgetToToggle(), bgWidget, toggle() ); if( i_visualmode != QT_ALWAYS_VIDEO_MODE && @@ -394,10 +417,14 @@ void MainInterface::handleMainUi( QSettings *settings ) /* And video Outputs */ if( videoEmbeddedFlag ) - { videoWidget = new VideoWidget( p_intf ); - mainLayout->insertWidget( 0, videoWidget, 10 ); - } + + /* Add the controls Widget to the main Widget */ + mainLayout->insertWidget( 0, bgWidget ); + if( videoWidget ) mainLayout->insertWidget( 0, videoWidget, 10 ); + mainLayout->insertWidget( 2, inputC, 0, Qt::AlignBottom ); + mainLayout->insertWidget( settings->value( "ToolbarPos", 0 ).toInt() ? 0: 3, + controls, 0, Qt::AlignBottom ); /* Finish the sizing */ main->updateGeometry(); @@ -519,6 +546,24 @@ int MainInterface::privacyDialog( QList *controls ) QSize MainInterface::sizeHint() const { + if( b_keep_size ) + { + if( i_visualmode == QT_ALWAYS_VIDEO_MODE || + i_visualmode == QT_MINIMAL_MODE ) + { + return mainVideoSize; + } + else + { + if( VISIBLE( bgWidget) || + ( videoIsActive && videoWidget->isVisible() ) + ) + return mainVideoSize; + else + return mainBasedSize; + } + } + int nwidth = controls->sizeHint().width(); int nheight = controls->isVisible() ? controls->size().height() @@ -597,7 +642,8 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x, unsigned int *pi_height ) { /* Request the videoWidget */ - void *ret = videoWidget->request( p_nvout,pi_x, pi_y, pi_width, pi_height ); + void *ret = videoWidget->request( p_nvout,pi_x, pi_y, + pi_width, pi_height, b_keep_size ); if( ret ) /* The videoWidget is available */ { /* Did we have a bg ? Hide it! */ @@ -613,8 +659,6 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x, videoIsActive = true; emit askUpdate(); - - if( fullscreenControls ) fullscreenControls->attachVout( p_nvout ); } return ret; } @@ -622,7 +666,6 @@ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x, /* Call from the WindowClose function */ void MainInterface::releaseVideo( void ) { - if( fullscreenControls ) fullscreenControls->detachVout(); emit askReleaseVideo( ); } @@ -647,6 +690,7 @@ void MainInterface::releaseVideoSlot( void ) /* Call from WindowControl function */ int MainInterface::controlVideo( void *p_window, int i_query, va_list args ) { + VLC_UNUSED( p_window ); //FIXME remove this param int i_ret = VLC_SUCCESS; switch( i_query ) { @@ -873,7 +917,7 @@ void MainInterface::toggleUpdateSystrayMenu() } else { - /* Visible */ + /* Visible (possibly under other windows) */ #ifdef WIN32 /* check if any visible window is above vlc in the z-order, * but ignore the ones always on top @@ -886,18 +930,18 @@ void MainInterface::toggleUpdateSystrayMenu() ( GetWindowInfo( hwnd, &wi ) && (wi.dwExStyle&WS_EX_NOACTIVATE) ) ); hwnd = GetNextWindow( hwnd, GW_HWNDPREV ) ); - if( !hwnd || !GetWindowInfo( hwnd, &wi ) || + if( !hwnd || !GetWindowInfo( hwnd, &wi ) || (wi.dwExStyle&WS_EX_TOPMOST) ) + { + hide(); + } + else + { + activateWindow(); + } #else - if( isActiveWindow() ) + hide(); #endif - { - hide(); - } - else - { - activateWindow(); - } } QVLCMenu::updateSystrayMenu( this, p_intf ); } @@ -908,13 +952,17 @@ void MainInterface::handleSystrayClick( switch( reason ) { case QSystemTrayIcon::Trigger: + case QSystemTrayIcon::DoubleClick: toggleUpdateSystrayMenu(); break; case QSystemTrayIcon::MiddleClick: + case QSystemTrayIcon::Context: sysTray->showMessage( qtr( "VLC media player" ), qtr( "Control menu for the player" ), QSystemTrayIcon::Information, 3000 ); break; + default: + break; } } @@ -997,7 +1045,7 @@ void MainInterface::dropEventPlay( QDropEvent *event, bool b_play ) } } bool first = b_play; - foreach( QUrl url, mimeData->urls() ) + foreach( const QUrl &url, mimeData->urls() ) { QString s = toNativeSeparators( url.toLocalFile() ); @@ -1070,6 +1118,27 @@ void MainInterface::keyPressEvent( QKeyEvent *e ) e->ignore(); } +void MainInterface::resizeEvent( QResizeEvent * event ) +{ + if( b_keep_size ) + { + if( i_visualmode == QT_ALWAYS_VIDEO_MODE || + i_visualmode == QT_MINIMAL_MODE ) + { + mainVideoSize = size(); + } + else + { + if( VISIBLE( bgWidget) || + ( videoIsActive && videoWidget->isVisible() ) + ) + mainVideoSize = size(); + else + mainBasedSize = size(); + } + } +} + void MainInterface::wheelEvent( QWheelEvent *e ) { int i_vlckey = qtWheelEventToVLCKey( e ); @@ -1079,6 +1148,7 @@ void MainInterface::wheelEvent( QWheelEvent *e ) void MainInterface::closeEvent( QCloseEvent *e ) { + e->accept(); hide(); THEDP->quit(); } @@ -1121,7 +1191,7 @@ static int PopupMenuCB( vlc_object_t *p_this, const char *psz_variable, if( p_intf->pf_show_dialog ) { p_intf->pf_show_dialog( p_intf, INTF_DIALOG_POPUPMENU, - new_val.b_bool, 0 ); + new_val.b_bool, NULL ); } return VLC_SUCCESS; @@ -1140,11 +1210,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 ); -}