X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fmain_interface.cpp;h=b3945e9551cbc154bddcf0ea30342ddc131c520f;hb=b1a76ac6b6186cfc7a71ce6b49dbfa219005daa2;hp=379887faf5b60f1dc2f5a9088972307c624d9ffd;hpb=ec79b5c8d0014ecc0f27fd25436eb6639ef556dd;p=vlc diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index 379887faf5..b3945e9551 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -6,6 +6,7 @@ * * Authors: Clément Stenac * Jean-Baptiste Kempf + * Ilkka Ollakka * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -29,6 +30,8 @@ #include "util/customwidgets.hpp" #include "dialogs_provider.hpp" #include "components/interface_widgets.hpp" +#include "components/playlist/playlist.hpp" +#include "dialogs/extended.hpp" #include "dialogs/playlist.hpp" #include "menus.hpp" @@ -46,19 +49,12 @@ #include #include #include +#include #include #include #include -#ifdef WIN32 - #define PREF_W 410 - #define PREF_H 151 -#else - #define PREF_W 400 - #define PREF_H 140 -#endif - #define SET_WIDTH(i,j) i->widgetSize.setWidth(j) #define SET_HEIGHT(i,j) i->widgetSize.setHeight(j) #define SET_WH( i,j,k) i->widgetSize.setWidth(j); i->widgetSize.setHeight(k); @@ -90,11 +86,14 @@ static int DoControl( intf_thread_t *p_intf, void *p_win, int i_q, va_list a ) MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) { /* Variables initialisation */ - need_components_update = false; + // need_components_update = false; bgWidget = NULL; videoWidget = NULL; playlistWidget = NULL; - embeddedPlaylistWasActive = videoIsActive = false; + videoIsActive = false; input_name = ""; + /* Ask for privacy */ + privacy(); + /** * Configuration and settings **/ @@ -103,23 +102,25 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* Main settings */ setFocusPolicy( Qt::StrongFocus ); - setAcceptDrops(true); + setAcceptDrops( true ); setWindowIcon( QApplication::windowIcon() ); setWindowOpacity( config_GetFloat( p_intf, "qt-opacity" ) ); /* Set The Video In emebedded Mode or not */ videoEmbeddedFlag = false; - if( config_GetInt( p_intf, "embedded-video" ) ) - videoEmbeddedFlag = true; + if( config_GetInt( p_intf, "embedded-video" ) ) videoEmbeddedFlag = true; + /* Are we in the enhanced always-video mode or not ? */ alwaysVideoFlag = false; if( videoEmbeddedFlag && config_GetInt( p_intf, "qt-always-video" ) ) alwaysVideoFlag = true; /* Set the other interface settings */ + //TODO: I don't like that code visualSelectorEnabled = settings->value( "visual-selector", false ).toBool(); notificationEnabled = config_GetInt( p_intf, "qt-notification" ) ? true : false; + /************************** * UI and Widgets design **************************/ @@ -127,19 +128,23 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) handleMainUi( settings ); /* Create a Dock to get the playlist */ - dockPL = new QDockWidget( qtr("Playlist"), this ); + dockPL = new QDockWidget( qtr( "Playlist" ), this ); + dockPL->setSizePolicy( QSizePolicy::Preferred, + QSizePolicy::Expanding ); + dockPL->setFeatures( QDockWidget::AllDockWidgetFeatures ); dockPL->setAllowedAreas( Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea | Qt::BottomDockWidgetArea ); - dockPL->setFeatures( QDockWidget::AllDockWidgetFeatures ); + dockPL->hide(); - /* Menu Bar */ + /************ + * Menu Bar + ************/ QVLCMenu::createMenuBar( this, p_intf, visualSelectorEnabled ); /**************** * Status Bar * ****************/ - /* Widgets Creation*/ b_remainingTime = false; timeLabel = new TimeLabel; @@ -160,7 +165,7 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) statusBar()->addPermanentWidget( timeLabel, 2 ); /* timeLabel behaviour: - - double clicking opens the goto time dialog + - double clicking opens the goto time dialog - right-clicking and clicking just toggle between remaining and elapsed time.*/ CONNECT( timeLabel, timeLabelClicked(), this, toggleTimeDisplay() ); @@ -196,25 +201,26 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) if( config_GetInt( p_intf, "qt-minimal-view" ) ) toggleMinimalView(); - /* Init input manager */ + /******************** + * Input Manager * + ********************/ MainInputManager::getInstance( p_intf ); - ON_TIMEOUT( updateOnTimer() ); -// ON_TIMEOUT( debug() ); - - + /******************** * Various CONNECTs * ********************/ - /* Connect the input manager to the GUI elements it manages */ + /* It is also connected to the control->slider, see the ControlsWidget */ CONNECT( THEMIM->getIM(), positionUpdated( float, int, int ), this, setDisplayPosition( float, int, int ) ); - + /* 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, @@ -232,7 +238,9 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) setVLCWindowsTitle( QString ) ); } - /** CONNECTS on PLAY_STATUS **/ + /** + * CONNECTS on PLAY_STATUS + **/ /* Status on the main controller */ CONNECT( THEMIM->getIM(), statusChanged( int ), this, setStatus( int ) ); /* and in the systray */ @@ -242,6 +250,11 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) updateSystrayTooltipStatus( int ) ); } + /** OnTimeOut **/ + // TODO + ON_TIMEOUT( updateOnTimer() ); + //ON_TIMEOUT( debug() ); + /** * Callbacks **/ @@ -259,14 +272,37 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) vlc_object_release( p_playlist ); } + /* VideoWidget connect mess to avoid different threads speaking to each other */ CONNECT( this, askReleaseVideo( void * ), this, releaseVideoSlot( void * ) ); + CONNECT( this, askVideoToResize( unsigned int, unsigned int ), + videoWidget, SetSizing( unsigned int, unsigned int ) ); + CONNECT( this, askUpdate(), this, doComponentsUpdate() ); - // DEBUG FIXME - hide(); + CONNECT( dockPL, topLevelChanged( bool ), this, doComponentsUpdate() ); + CONNECT( controls, advancedControlsToggled( bool ), + this, doComponentsUpdate() ); + + resize( settings->value( "size", QSize( 350, 60 ) ).toSize() ); + updateGeometry(); + settings->endGroup(); } MainInterface::~MainInterface() { + if( playlistWidget ) playlistWidget->savingSettings( settings ); + if( ExtendedDialog::exists() ) + ExtendedDialog::getInstance( p_intf )->savingSettings(); + + settings->beginGroup( "MainWindow" ); + settings->setValue( "playlist-floats", dockPL->isFloating() ); + settings->setValue( "adv-controls", + getControlsVisibilityStatus() & CONTROLS_ADVANCED ); + settings->setValue( "pos", pos() ); + settings->setValue( "size", size() ); + + settings->endGroup(); + delete settings; + /* Unregister callback for the intf-popupmenu variable */ playlist_t *p_playlist = (playlist_t *)vlc_object_find( p_intf, VLC_OBJECT_PLAYLIST, FIND_ANYWHERE ); @@ -277,11 +313,6 @@ MainInterface::~MainInterface() vlc_object_release( p_playlist ); } - settings->setValue( "playlist-embedded", !dockPL->isFloating() ); - settings->setValue( "adv-controls", getControlsVisibilityStatus() & CONTROLS_ADVANCED ); - settings->setValue( "pos", pos() ); - settings->endGroup(); - delete settings; p_intf->b_interaction = VLC_FALSE; var_DelCallback( p_intf, "interaction", InteractCallback, this ); @@ -310,53 +341,49 @@ void MainInterface::setVLCWindowsTitle( QString aTitle ) } } - void MainInterface::handleMainUi( QSettings *settings ) { /* Create the main Widget and the mainLayout */ - QWidget *main = new QWidget( this ); - mainLayout = new QVBoxLayout( main ); + QWidget *main = new QWidget; setCentralWidget( main ); + mainLayout = new QVBoxLayout( main ); /* Margins, spacing */ main->setContentsMargins( 0, 0, 0, 0 ); + // main->setSizePolicy( QSizePolicy::Preferred, QSizePolicy::Maximum ); mainLayout->setMargin( 0 ); /* Create the CONTROLS Widget */ - bool b_shiny = config_GetInt( p_intf, "qt-blingbling" ); - controls = new ControlsWidget( p_intf, + /* bool b_shiny = config_GetInt( p_intf, "qt-blingbling" ); */ + controls = new ControlsWidget( p_intf, this, settings->value( "adv-controls", false ).toBool(), - b_shiny ); - - /* Configure the Controls, the playlist button doesn't trigger THEDP - but the toggle from this MainInterface */ - BUTTONACT( controls->playlistButton, togglePlaylist() ); + config_GetInt( p_intf, "qt-blingbling" ) ); /* Add the controls Widget to the main Widget */ - mainLayout->addWidget( controls ); + mainLayout->insertWidget( 0, controls ); /* Create the Speed Control Widget */ speedControl = new SpeedControlWidget( p_intf ); speedControlMenu = new QMenu( this ); - QWidgetAction *widgetAction = new QWidgetAction( this ); + + QWidgetAction *widgetAction = new QWidgetAction( speedControl ); widgetAction->setDefaultWidget( speedControl ); speedControlMenu->addAction( widgetAction ); - /* Set initial size */ - resize( PREF_W, PREF_H ); - addSize = QSize( mainLayout->margin() * 2, PREF_H ); - /* Visualisation */ + /* Disabled for now, they SUCK */ + #if 0 visualSelector = new VisualSelector( p_intf ); mainLayout->insertWidget( 0, visualSelector ); visualSelector->hide(); + #endif /* And video Outputs */ if( alwaysVideoFlag ) { bgWidget = new BackgroundWidget( p_intf ); bgWidget->widgetSize = settings->value( "backgroundSize", - QSize( 300, 300 ) ).toSize(); + QSize( 300, 200 ) ).toSize(); bgWidget->resize( bgWidget->widgetSize ); bgWidget->updateGeometry(); mainLayout->insertWidget( 0, bgWidget ); @@ -366,7 +393,8 @@ void MainInterface::handleMainUi( QSettings *settings ) if( videoEmbeddedFlag ) { videoWidget = new VideoWidget( p_intf ); - videoWidget->widgetSize = QSize( 1, 1 ); + //videoWidget->widgetSize = QSize( 16, 16 ); + //videoWidget->hide(); //videoWidget->resize( videoWidget->widgetSize ); mainLayout->insertWidget( 0, videoWidget ); @@ -376,45 +404,147 @@ void MainInterface::handleMainUi( QSettings *settings ) } /* Finish the sizing */ - setMinimumSize( PREF_W, addSize.height() ); + updateGeometry(); } +inline void MainInterface::privacy() +{ + /** + * Ask for the network policy on FIRST STARTUP + **/ + if( config_GetInt( p_intf, "privacy-ask") ) + { + QList controls; + if( privacyDialog( controls ) == QDialog::Accepted ) + { + QList::Iterator i; + for( i = controls.begin() ; i != controls.end() ; i++ ) + { + ConfigControl *c = qobject_cast(*i); + c->doApply( p_intf ); + } + + config_PutInt( p_intf, "privacy-ask" , 0 ); + config_SaveConfigFile( p_intf, NULL ); + } + } +} + +int MainInterface::privacyDialog( QList controls ) +{ + QDialog *privacy = new QDialog( this ); + + privacy->setWindowTitle( qtr( "Privacy and Network policies" ) ); + + QGridLayout *gLayout = new QGridLayout( privacy ); + + QGroupBox *blabla = new QGroupBox( qtr( "Privacy and Network Warning" ) ); + QGridLayout *blablaLayout = new QGridLayout( blabla ); + QLabel *text = new QLabel( qtr( + "

The VideoLAN Team doesn't like when an application goes " + "online without authorisation.

\n " + "

VLC media player can request limited information on " + "Internet, espically to get CD Covers and songs metadata or to know " + "if updates are available.

\n" + "

VLC media player DOES NOT send or collect ANY " + "information, even anonymously about your " + "usage.

\n" + "

Therefore please check the following options, the default being " + "almost no access on the web.

\n") ); + text->setWordWrap( true ); + text->setTextFormat( Qt::RichText ); + + blablaLayout->addWidget( text, 0, 0 ) ; + + QGroupBox *options = new QGroupBox; + QGridLayout *optionsLayout = new QGridLayout( options ); + + gLayout->addWidget( blabla, 0, 0, 1, 3 ); + gLayout->addWidget( options, 1, 0, 1, 3 ); + module_config_t *p_config; + ConfigControl *control; + int line = 0; + +#define CONFIG_GENERIC( option, type ) \ + p_config = config_FindConfig( VLC_OBJECT(p_intf), option ); \ + if( p_config ) \ + { \ + control = new type ## ConfigControl( VLC_OBJECT(p_intf), \ + p_config, options, false, optionsLayout, line ); \ + controls.append( control ); \ + } + +#define CONFIG_GENERIC_NOBOOL( option, type ) \ + p_config = config_FindConfig( VLC_OBJECT(p_intf), option ); \ + if( p_config ) \ + { \ + control = new type ## ConfigControl( VLC_OBJECT(p_intf), \ + p_config, options, optionsLayout, line ); \ + controls.append( control ); \ + } + + CONFIG_GENERIC( "album-art", IntegerList ); line++; + CONFIG_GENERIC_NOBOOL( "fetch-meta", Bool ); line++; + CONFIG_GENERIC_NOBOOL( "qt-updates-notif", Bool ); + + QPushButton *ok = new QPushButton( qtr( "Ok" ) ); + + gLayout->addWidget( ok, 2, 2 ); + + CONNECT( ok, clicked(), privacy, accept() ); + return privacy->exec(); +} + +//FIXME remove me at the end... void MainInterface::debug() { msg_Dbg( p_intf, "size: %i - %i", controls->size().height(), controls->size().width() ); msg_Dbg( p_intf, "sizeHint: %i - %i", controls->sizeHint().height(), controls->sizeHint().width() ); } + /********************************************************************** * Handling of sizing of the components **********************************************************************/ -void MainInterface::calculateInterfaceSize() + +/* This function is probably wrong, but we don't have many many choices... + Since we can't know from the playlist Widget if we are inside a dock or not, + because the playlist Widget can be called by THEDP, as a separate windows for + the skins. + Maybe the other solution is to redefine the sizeHint() of the playlist and + ask _parent->isFloating()... + If you think this would be better, please FIXME it... +*/ +QSize MainInterface::sizeHint() const { - int width = 0, height = 0; + int nwidth = controls->sizeHint().width(); + int nheight = controls->sizeHint().height(); + + menuBar()->size().height() + + statusBar()->size().height(); + + msg_Dbg( p_intf, "1 %i %i", nheight, nwidth ); if( VISIBLE( bgWidget ) ) { - width = bgWidget->widgetSize.width(); - height = bgWidget->widgetSize.height(); + nheight += bgWidget->size().height(); + nwidth = bgWidget->size().width(); } else if( videoIsActive ) { - width = videoWidget->widgetSize.width() ; - height = videoWidget->widgetSize.height(); - } - else - { - width = PREF_W - addSize.width(); - height = PREF_H - addSize.height(); + nheight += videoWidget->size().height(); + nwidth = videoWidget->size().width(); + msg_Dbg( p_intf, "2 %i %i", nheight, nwidth ); } if( !dockPL->isFloating() && dockPL->widget() ) { - width += dockPL->widget()->width(); - height += dockPL->widget()->height(); + nheight += dockPL->size().height(); + nwidth = MAX( nwidth, dockPL->size().width() ); + msg_Dbg( p_intf, "3 %i %i", nheight, nwidth ); } - if( VISIBLE( visualSelector ) ) - height += visualSelector->height(); - mainSize = QSize( width + addSize.width(), height + addSize.height() ); + msg_Dbg( p_intf, "4 %i %i", nheight, nwidth ); + return QSize( nwidth, nheight ); } +#if 0 +/* FIXME This is dead code and need to be removed AT THE END */ void MainInterface::resizeEvent( QResizeEvent *e ) { if( videoWidget ) @@ -427,12 +557,12 @@ void MainInterface::resizeEvent( QResizeEvent *e ) } if( VISIBLE( playlistWidget ) ) { - //FIXME // SET_WH( playlistWidget , e->size().width() - addSize.width(), // e->size().height() - addSize.height() ); playlistWidget->updateGeometry(); } } +#endif /**************************************************************************** * Small right-click menu for rate control @@ -440,7 +570,7 @@ void MainInterface::resizeEvent( QResizeEvent *e ) void MainInterface::showSpeedMenu( QPoint pos ) { speedControlMenu->exec( QCursor::pos() - pos - + QPoint( 0, speedLabel->height() ) ); + + QPoint( 0, speedLabel->height() ) ); } /**************************************************************************** @@ -451,8 +581,7 @@ class SetVideoOnTopQtEvent : public QEvent public: SetVideoOnTopQtEvent( bool _onTop ) : QEvent( (QEvent::Type)SetVideoOnTopEvent_Type ), onTop( _onTop) - { - } + {} bool OnTop() const { @@ -463,36 +592,41 @@ private: bool onTop; }; - +/* function called from ::DoRequest in order to show a nice VideoWidget + at the good size */ void *MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x, int *pi_y, unsigned int *pi_width, unsigned int *pi_height ) { + bool bgWasVisible = false; + + /* Request the videoWidget */ void *ret = videoWidget->request( p_nvout,pi_x, pi_y, pi_width, pi_height ); - if( ret ) + if( ret ) /* The videoWidget is available */ { - videoIsActive = true; - - bool bgWasVisible = false; + /* Did we have a bg ? Hide it! */ if( VISIBLE( bgWidget) ) { bgWasVisible = true; emit askBgWidgetToToggle(); } - if( THEMIM->getIM()->hasVideo() || !bgWasVisible ) + /*if( THEMIM->getIM()->hasVideo() || !bgWasVisible ) { videoWidget->widgetSize = QSize( *pi_width, *pi_height ); } else /* Background widget available, use its size */ - { + /*{ /* Ok, our visualizations are bad, so don't do this for the moment * use the requested size anyway */ // videoWidget->widgetSize = bgWidget->widgeTSize; - videoWidget->widgetSize = QSize( *pi_width, *pi_height ); - } - videoWidget->updateGeometry(); // Needed for deinterlace - need_components_update = true; + /* videoWidget->widgetSize = QSize( *pi_width, *pi_height ); + }*/ + + videoIsActive = true; + + emit askVideoToResize( *pi_width, *pi_height ); + emit askUpdate(); } return ret; } @@ -507,11 +641,11 @@ void MainInterface::releaseVideoSlot( void *p_win ) videoWidget->release( p_win ); videoWidget->hide(); - if( bgWidget ) + if( bgWidget )// WORONG bgWidget->show(); videoIsActive = false; - need_components_update = true; + emit askUpdate(); } int MainInterface::controlVideo( void *p_window, int i_query, va_list args ) @@ -532,9 +666,9 @@ int MainInterface::controlVideo( void *p_window, int i_query, va_list args ) { unsigned int i_width = va_arg( args, unsigned int ); unsigned int i_height = va_arg( args, unsigned int ); - videoWidget->widgetSize = QSize( i_width, i_height ); - videoWidget->updateGeometry(); - need_components_update = true; + emit askVideoToResize( i_width, i_height ); + emit askUpdate(); + updateGeometry(); i_ret = VLC_SUCCESS; break; } @@ -560,68 +694,44 @@ int MainInterface::controlVideo( void *p_window, int i_query, va_list args ) **/ void MainInterface::togglePlaylist() { - /* If no playlist exist, then create one and attach it to the DockPL*/ + /* CREATION + If no playlist exist, then create one and attach it to the DockPL*/ if( !playlistWidget ) { msg_Dbg( p_intf, "Creating a new playlist" ); - playlistWidget = new PlaylistWidget( p_intf ); - if( bgWidget ) - CONNECT( playlistWidget, artSet( QString ), bgWidget, setArt(QString) ); + playlistWidget = new PlaylistWidget( p_intf, settings ); - //FIXME -/* playlistWidget->widgetSize = settings->value( "playlistSize", - QSize( 650, 310 ) ).toSize();*/ /* Add it to the parent DockWidget */ dockPL->setWidget( playlistWidget ); /* Add the dock to the main Interface */ addDockWidget( Qt::BottomDockWidgetArea, dockPL ); - msg_Dbg( p_intf, "Creating a new playlist" ); - /* Make the playlist floating is requested. Default is not. */ - if( !(settings->value( "playlist-embedded", true )).toBool() ); + if( settings->value( "playlist-floats", false ).toBool() ); { msg_Dbg( p_intf, "we don't want it inside"); - //dockPL->setFloating( true ); + dockPL->setFloating( true ); } - } else { - /* toggle the display */ + /* toggle the visibility of the playlist */ TOGGLEV( dockPL ); + //resize(sizeHint()); } +#if 0 doComponentsUpdate(); +#endif + updateGeometry(); } +/* Function called from the menu to undock the playlist */ void MainInterface::undockPlaylist() { dockPL->setFloating( true ); - doComponentsUpdate(); -} - -#if 0 -void MainInterface::visual() -{ - if( !VISIBLE( visualSelector) ) - { - visualSelector->show(); - if( !THEMIM->getIM()->hasVideo() ) - { - /* Show the background widget */ - } - visualSelectorEnabled = true; - } - else - { - /* Stop any currently running visualization */ - visualSelector->hide(); - visualSelectorEnabled = false; - } - doComponentsUpdate(); + updateGeometry(); } -#endif void MainInterface::toggleMinimalView() { @@ -635,21 +745,46 @@ void MainInterface::toggleMinimalView() /* Well, could it, actually ? Probably dangerous ... */ void MainInterface::doComponentsUpdate() { - calculateInterfaceSize(); - resize( mainSize ); + msg_Dbg( p_intf, "coi " ); + updateGeometry(); + resize( sizeHint() ); } +/* toggling advanced controls buttons */ void MainInterface::toggleAdvanced() { controls->toggleAdvanced(); } +/* Get the visibility status of the controls (hidden or not, advanced or not) */ int MainInterface::getControlsVisibilityStatus() { return( (controls->isVisible() ? CONTROLS_VISIBLE : CONTROLS_HIDDEN ) + CONTROLS_ADVANCED * controls->b_advancedVisible ); } +#if 0 +void MainInterface::visual() +{ + if( !VISIBLE( visualSelector) ) + { + visualSelector->show(); + if( !THEMIM->getIM()->hasVideo() ) + { + /* Show the background widget */ + } + visualSelectorEnabled = true; + } + else + { + /* Stop any currently running visualization */ + visualSelector->hide(); + visualSelectorEnabled = false; + } + doComponentsUpdate(); +} +#endif + /************************************************************************ * Other stuff ************************************************************************/ @@ -671,7 +806,7 @@ void MainInterface::setDisplayPosition( float pos, int time, int length ) void MainInterface::toggleTimeDisplay() { - b_remainingTime = ( b_remainingTime ? false : true ); + b_remainingTime = !b_remainingTime; } void MainInterface::setName( QString name ) @@ -695,7 +830,7 @@ void MainInterface::setStatus( int status ) void MainInterface::setRate( int rate ) { QString str; - str.setNum( ( 1000 / (double)rate), 'f', 2 ); + str.setNum( ( 1000 / (double)rate ), 'f', 2 ); str.append( "x" ); speedLabel->setText( str ); speedControl->updateControls( rate ); @@ -703,7 +838,7 @@ void MainInterface::setRate( int rate ) void MainInterface::updateOnTimer() { - /* \todo Make this event-driven */ +#if 0 if( intf_ShouldDie( p_intf ) ) { QApplication::closeAllWindows(); @@ -714,6 +849,7 @@ void MainInterface::updateOnTimer() doComponentsUpdate(); need_components_update = false; } +#endif controls->updateOnTimer(); } @@ -747,6 +883,7 @@ void MainInterface::createSystray() */ void MainInterface::toggleUpdateSystrayMenu() { + /* If hidden, show it */ if( isHidden() ) { show(); @@ -754,11 +891,13 @@ void MainInterface::toggleUpdateSystrayMenu() } else if( isMinimized() ) { + /* Minimized */ showNormal(); activateWindow(); } else { + /* Visible */ #ifdef WIN32 /* check if any visible window is above vlc in the z-order, * but ignore the ones always on top */ @@ -795,7 +934,7 @@ void MainInterface::handleSystrayClick( case QSystemTrayIcon::MiddleClick: sysTray->showMessage( qtr( "VLC media player" ), qtr( "Control menu for the player" ), - QSystemTrayIcon::Information, 4000 ); + QSystemTrayIcon::Information, 3000 ); break; } } @@ -816,7 +955,7 @@ void MainInterface::updateSystrayTooltipName( QString name ) if( notificationEnabled && ( isHidden() || isMinimized() ) ) { sysTray->showMessage( qtr( "VLC media player" ), name, - QSystemTrayIcon::NoIcon, 4000 ); + QSystemTrayIcon::NoIcon, 3000 ); } } } @@ -830,6 +969,7 @@ void MainInterface::updateSystrayTooltipStatus( int i_status ) switch( i_status ) { case 0: + case END_S: { sysTray->setToolTip( qtr( "VLC media player" ) ); break; @@ -951,6 +1091,8 @@ void MainInterface::closeEvent( QCloseEvent *e ) { hide(); vlc_object_kill( p_intf ); + QApplication::closeAllWindows(); + QApplication::quit(); } /*****************************************************************************