X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=modules%2Fgui%2Fqt4%2Fmain_interface.cpp;h=715d2fe0674893c9a049eef9e3df7bb0c0cbb75f;hb=7c6ef80c3e80d00e7c2000733b1feee0b537267e;hp=d31d5e596af06d3c7c63932dca446bbb9e29430a;hpb=9deb4cb1db8780fad4a6dc032723f3b021feed74;p=vlc diff --git a/modules/gui/qt4/main_interface.cpp b/modules/gui/qt4/main_interface.cpp index d31d5e596a..715d2fe067 100644 --- a/modules/gui/qt4/main_interface.cpp +++ b/modules/gui/qt4/main_interface.cpp @@ -1,7 +1,7 @@ /***************************************************************************** * main_interface.cpp : Main interface **************************************************************************** - * Copyright (C) 2006-2008 the VideoLAN team + * Copyright (C) 2006-2009 the VideoLAN team * $Id$ * * Authors: Clément Stenac @@ -61,6 +61,7 @@ #include #include /* Wheel event */ +#include #include /* Callback prototypes */ @@ -81,9 +82,13 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) playlistVisible = false; input_name = ""; fullscreenControls = NULL; -#if 0 cryptedLabel = NULL; -#endif + controls = NULL; + inputC = NULL; + b_shouldHide = false; + + bgWasVisible = false; + i_bg_height = 0; /* Ask for privacy */ askForPrivacy(); @@ -132,12 +137,14 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) * UI and Widgets design **************************/ setVLCWindowsTitle(); - handleMainUi( settings ); + createMainWidget( settings ); /************ * Menu Bar * ************/ QVLCMenu::createMenuBar( this, p_intf ); + CONNECT( THEMIM->getIM(), voutListChanged( vout_thread_t **, int ), + this, destroyPopupMenu() ); #if 0 /* Create a Dock to get the playlist */ @@ -156,6 +163,11 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) ********************/ MainInputManager::getInstance( p_intf ); + /********************************* + * Create the Systray Management * + *********************************/ + initSystray(); + /************************** * Various CONNECTs on IM * **************************/ @@ -167,19 +179,19 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) * them down. */ /* Naming in the controller statusbar */ - CONNECT( THEMIM->getIM(), nameChanged( QString ), - this, setName( QString ) ); + CONNECT( THEMIM->getIM(), nameChanged( const QString& ), + this, setName( const QString& ) ); /* and in the systray */ if( sysTray ) { - CONNECT( THEMIM->getIM(), nameChanged( QString ), this, - updateSystrayTooltipName( QString ) ); + CONNECT( THEMIM->getIM(), nameChanged( const QString& ), this, + updateSystrayTooltipName( const QString& ) ); } /* and in the title of the controller */ if( config_GetInt( p_intf, "qt-name-in-title" ) ) { - CONNECT( THEMIM->getIM(), nameChanged( QString ), this, - setVLCWindowsTitle( QString ) ); + CONNECT( THEMIM->getIM(), nameChanged( const QString& ), this, + setVLCWindowsTitle( const QString& ) ); } /** @@ -192,9 +204,8 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) this, updateSystrayTooltipStatus( int ) ); } - /* END CONNECTS ON IM */ - dialogHandler = new DialogHandler (p_intf); + /* END CONNECTS ON IM */ /************ * Callbacks @@ -205,21 +216,22 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) var_AddCallback( p_intf->p_libvlc, "intf-popupmenu", PopupMenuCB, p_intf ); - /* VideoWidget connects to avoid different threads speaking to each other */ + /* VideoWidget connects for asynchronous calls */ + connect( this, SIGNAL(askGetVideo(WId*,int*,int*,unsigned*,unsigned *)), + this, SLOT(getVideoSlot(WId*,int*,int*,unsigned*,unsigned*)), + Qt::BlockingQueuedConnection ); connect( this, SIGNAL(askReleaseVideo( void )), - this, SLOT(releaseVideoSlot( void )), Qt::BlockingQueuedConnection ); + this, SLOT(releaseVideoSlot( void )), + Qt::BlockingQueuedConnection ); if( videoWidget ) { CONNECT( this, askVideoToResize( unsigned int, unsigned int ), videoWidget, SetSizing( unsigned int, unsigned int ) ); - - connect( this, SIGNAL(askVideoToShow( unsigned int, unsigned int)), - videoWidget, SLOT(SetSizing(unsigned int, unsigned int )), - Qt::BlockingQueuedConnection ); } CONNECT( this, askUpdate(), this, doComponentsUpdate() ); + CONNECT( THEDP, toolBarConfUpdated(), this, recreateToolbars() ); /* Size and placement of interface */ settings->beginGroup( "MainWindow" ); @@ -248,12 +260,12 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) /* Enable the popup menu in the MI */ setContextMenuPolicy( Qt::CustomContextMenu ); CONNECT( this, customContextMenuRequested( const QPoint& ), - this, popupMenu() ); + this, popupMenu( const QPoint& ) ); /* Final sizing and showing */ setMinimumWidth( __MAX( controls->sizeHint().width(), menuBar()->sizeHint().width() ) ); - show(); + setVisible( !b_shouldHide ); /* And switch to minimal view if needed Must be called after the show() */ @@ -265,18 +277,12 @@ MainInterface::MainInterface( intf_thread_t *_p_intf ) : QVLCMW( _p_intf ) updateGeometry(); resize( sizeHint() ); - /***************************************************** - * End everything by creating the Systray Management * - *****************************************************/ - initSystray(); } MainInterface::~MainInterface() { msg_Dbg( p_intf, "Destroying the main interface" ); - delete dialogHandler; - /* Unsure we hide the videoWidget before destroying it */ if( videoIsActive ) videoWidget->hide(); @@ -293,7 +299,7 @@ MainInterface::~MainInterface() ActionsManager::killInstance(); /* Delete the FSC controller */ - if( fullscreenControls ) delete fullscreenControls; + delete fullscreenControls; /* Save states */ settings->beginGroup( "MainWindow" ); @@ -323,92 +329,25 @@ MainInterface::~MainInterface() /***************************** * Main UI handling * *****************************/ - -inline void MainInterface::createStatusBar() -{ - /**************** - * Status Bar * - ****************/ - /* Widgets Creation*/ - QStatusBar *statusBarr = statusBar(); - - TimeLabel *timeLabel = new TimeLabel( p_intf ); - nameLabel = new QLabel( this ); - nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse - | Qt::TextSelectableByKeyboard ); - SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x", this ); - - /* Styling those labels */ - timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel ); - speedLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel ); - nameLabel->setFrameStyle( QFrame::Sunken | QFrame::StyledPanel); - - /* and adding those */ - statusBarr->addWidget( nameLabel, 8 ); - statusBarr->addPermanentWidget( speedLabel, 0 ); - statusBarr->addPermanentWidget( timeLabel, 0 ); - - /* timeLabel behaviour: - - double clicking opens the goto time dialog - - right-clicking and clicking just toggle between remaining and - elapsed time.*/ - CONNECT( timeLabel, timeLabelDoubleClicked(), THEDP, gotoTimeDialog() ); -#if 0 - CONNECT( THEMIM->getIM(), encryptionChanged( bool ) , this, showCryptedLabel( bool ) ); -#endif -} - -#if 0 -void MainInterface::showCryptedLabel( bool ) +void MainInterface::recreateToolbars() { - if( cryptedLabel == NULL ) - { - cryptedLabel = new QLabel; - cryptedLabel->setPixmap( QPixmap( ":/lock" ) ); - statusBar()->addWidget( cryptedLabel ); - } - - cryptedLabel->show(); -} -#endif - -inline void MainInterface::initSystray() -{ - bool b_systrayAvailable = QSystemTrayIcon::isSystemTrayAvailable(); - bool b_systrayWanted = config_GetInt( p_intf, "qt-system-tray" ); - - if( config_GetInt( p_intf, "qt-start-minimized") > 0 ) - { - if( b_systrayAvailable ) - { - b_systrayWanted = true; - hide(); - } - else - msg_Err( p_intf, "cannot start minimized without system tray bar" ); - } - - if( b_systrayAvailable && b_systrayWanted ) - createSystray(); -} + settings->beginGroup( "MainWindow" ); + delete controls; + delete inputC; + controls = new ControlsWidget( p_intf, false, this ); /* FIXME */ + CONNECT( controls, advancedControlsToggled( bool ), + this, doComponentsUpdate() ); + CONNECT( controls, sizeChanged(), + this, doComponentsUpdate() ); + inputC = new InputControlsWidget( p_intf, this ); -/** - * Give the decorations of the Main Window a correct Name. - * If nothing is given, set it to VLC... - **/ -void MainInterface::setVLCWindowsTitle( QString aTitle ) -{ - if( aTitle.isEmpty() ) - { - setWindowTitle( qtr( "VLC media player" ) ); - } - else - { - setWindowTitle( aTitle + " - " + qtr( "VLC media player" ) ); - } + mainLayout->insertWidget( 2, inputC, 0, Qt::AlignBottom ); + mainLayout->insertWidget( settings->value( "ToolbarPos", 0 ).toInt() ? 0: 3, + controls, 0, Qt::AlignBottom ); + settings->endGroup(); } -void MainInterface::handleMainUi( QSettings *settings ) +void MainInterface::createMainWidget( QSettings *settings ) { /* Create the main Widget and the mainLayout */ QWidget *main = new QWidget; @@ -421,16 +360,7 @@ void MainInterface::handleMainUi( QSettings *settings ) mainLayout->setSpacing( 0 ); mainLayout->setMargin( 0 ); - /* Create the CONTROLS Widget */ - controls = new ControlsWidget( p_intf, - settings->value( "adv-controls", false ).toBool(), this ); - CONNECT( controls, advancedControlsToggled( bool ), - this, doComponentsUpdate() ); - CONNECT( controls, sizeChanged(), - this, doComponentsUpdate() ); - inputC = new InputControlsWidget( p_intf, this ); - - /* Visualisation */ + /* Visualisation */ /* Disabled for now, they SUCK */ #if 0 visualSelector = new VisualSelector( p_intf ); @@ -443,7 +373,6 @@ void MainInterface::handleMainUi( QSettings *settings ) bgWidget->resize( settings->value( "backgroundSize", QSize( 300, 200 ) ).toSize() ); bgWidget->updateGeometry(); - CONNECT( this, askBgWidgetToToggle(), bgWidget, toggle() ); if( i_visualmode != QT_ALWAYS_VIDEO_MODE && i_visualmode != QT_MINIMAL_MODE ) @@ -455,6 +384,16 @@ void MainInterface::handleMainUi( QSettings *settings ) if( videoEmbeddedFlag ) videoWidget = new VideoWidget( p_intf ); + /* Create the CONTROLS Widget */ + controls = new ControlsWidget( p_intf, + settings->value( "adv-controls", false ).toBool(), this ); + CONNECT( controls, advancedControlsToggled( bool ), + this, doComponentsUpdate() ); + CONNECT( controls, sizeChanged(), + this, doComponentsUpdate() ); + inputC = new InputControlsWidget( p_intf, this ); + + /* Add the controls Widget to the main Widget */ mainLayout->insertWidget( 0, bgWidget ); if( videoWidget ) mainLayout->insertWidget( 0, videoWidget, 10 ); @@ -472,10 +411,64 @@ void MainInterface::handleMainUi( QSettings *settings ) /* Create the FULLSCREEN CONTROLS Widget */ if( config_GetInt( p_intf, "qt-fs-controller" ) ) { - fullscreenControls = new FullscreenControllerWidget( p_intf ); + fullscreenControls = new FullscreenControllerWidget( p_intf, this ); } } +inline void MainInterface::createStatusBar() +{ + /**************** + * Status Bar * + ****************/ + /* Widgets Creation*/ + QStatusBar *statusBarr = statusBar(); + + TimeLabel *timeLabel = new TimeLabel( p_intf ); + nameLabel = new QLabel( this ); + nameLabel->setTextInteractionFlags( Qt::TextSelectableByMouse + | Qt::TextSelectableByKeyboard ); + SpeedLabel *speedLabel = new SpeedLabel( p_intf, "1.00x", this ); + + /* Styling those labels */ + timeLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel ); + speedLabel->setFrameStyle( QFrame::Sunken | QFrame::Panel ); + nameLabel->setFrameStyle( QFrame::Sunken | QFrame::StyledPanel); + + /* and adding those */ + statusBarr->addWidget( nameLabel, 8 ); + statusBarr->addPermanentWidget( speedLabel, 0 ); + statusBarr->addPermanentWidget( timeLabel, 0 ); + + /* timeLabel behaviour: + - double clicking opens the goto time dialog + - right-clicking and clicking just toggle between remaining and + elapsed time.*/ + CONNECT( timeLabel, timeLabelDoubleClicked(), THEDP, gotoTimeDialog() ); + + CONNECT( THEMIM->getIM(), encryptionChanged( bool ), + this, showCryptedLabel( bool ) ); +} + +inline void MainInterface::initSystray() +{ + bool b_systrayAvailable = QSystemTrayIcon::isSystemTrayAvailable(); + bool b_systrayWanted = config_GetInt( p_intf, "qt-system-tray" ); + + if( config_GetInt( p_intf, "qt-start-minimized") > 0 ) + { + if( b_systrayAvailable ) + { + b_systrayWanted = true; + b_shouldHide = true; + } + else + msg_Err( p_intf, "cannot start minimized without system tray bar" ); + } + + if( b_systrayAvailable && b_systrayWanted ) + createSystray(); +} + inline void MainInterface::askForPrivacy() { /** @@ -609,13 +602,16 @@ QSize MainInterface::sizeHint() const if( VISIBLE( bgWidget ) ) { - nheight += bgWidget->size().height(); - nwidth = bgWidget->size().width(); + if( i_bg_height ) + nheight += i_bg_height; + else + nheight += bgWidget->size().height(); + nwidth = __MAX( nwidth, bgWidget->size().width() ); } else if( videoIsActive && videoWidget->isVisible() ) { nheight += videoWidget->sizeHint().height(); - nwidth = videoWidget->sizeHint().width(); + nwidth = __MAX( nwidth, videoWidget->sizeHint().width() ); } #if 0 if( !dockPL->isFloating() && dockPL->isVisible() && dockPL->widget() ) @@ -628,17 +624,26 @@ QSize MainInterface::sizeHint() const return QSize( nwidth, nheight ); } -void MainInterface::toggleFSC() -{ - if( !fullscreenControls ) return; - - IMEvent *eShow = new IMEvent( FullscreenControlToggle_Type, 0 ); - QApplication::postEvent( fullscreenControls, eShow ); -} +/* Video widget cannot do this synchronously as it runs in another thread */ +/* Well, could it, actually ? Probably dangerous ... */ -void MainInterface::popupMenu() +/* This function is called: + - toggling of minimal View + - through askUpdate() by Vout thread request video and resize video (zoom) + - Advanced buttons toggled + */ +void MainInterface::doComponentsUpdate() { - QVLCMenu::PopupMenu( p_intf, true ); + if( isFullScreen() || isMaximized() ) return; + + msg_Dbg( p_intf, "Updating the geometry" ); + /* Here we resize to sizeHint() and not adjustsize because we want + the videoWidget to be exactly the correctSize */ + resize( sizeHint() ); + // adjustSize() ; +#ifndef NDEBUG + debug(); +#endif } void MainInterface::debug() @@ -654,6 +659,29 @@ void MainInterface::debug() #endif } +void MainInterface::destroyPopupMenu() +{ + QVLCMenu::PopupMenu(p_intf, false ); +} + + +void MainInterface::toggleFSC() +{ + if( !fullscreenControls ) return; + + IMEvent *eShow = new IMEvent( FullscreenControlToggle_Type, 0 ); + QApplication::postEvent( fullscreenControls, eShow ); +} + +void MainInterface::popupMenu( const QPoint &p ) +{ + /* Ow, that's ugly: don't show the popup menu if cursor over + * the main menu bar or the status bar */ + if( !childAt( p ) || ( ( childAt( p ) != menuBar() ) + && ( childAt( p )->parentWidget() != statusBar() ) ) ) + QVLCMenu::PopupMenu( p_intf, true ); +} + /**************************************************************************** * Video Handling ****************************************************************************/ @@ -674,40 +702,54 @@ private: }; /** - * README - * Thou shall not call/resize/hide widgets from on another thread. - * This is wrong, and this is THE reason to emit signals on those Video Functions - **/ -WId MainInterface::requestVideo( vout_thread_t *p_nvout, int *pi_x, - int *pi_y, unsigned int *pi_width, - unsigned int *pi_height ) + * NOTE: + * You must note change the state of this object or other Qt4 UI objects, + * from the video output thread - only from the Qt4 UI main loop thread. + * All window provider queries must be handled through signals or events. + * That's why we have all those emit statements... + */ +WId MainInterface::getVideo( int *pi_x, int *pi_y, + unsigned int *pi_width, unsigned int *pi_height ) +{ + if( !videoWidget ) + return 0; + + /* This is a blocking call signal. Results are returned through pointers. + * Beware of deadlocks! */ + WId id; + emit askGetVideo( &id, pi_x, pi_y, pi_width, pi_height ); + return id; +} + +void MainInterface::getVideoSlot( WId *p_id, int *pi_x, int *pi_y, + unsigned *pi_width, unsigned *pi_height ) { /* Request the videoWidget */ - WId ret = videoWidget->request( p_nvout,pi_x, pi_y, + WId ret = videoWidget->request( pi_x, pi_y, pi_width, pi_height, b_keep_size ); + *p_id = ret; if( ret ) /* The videoWidget is available */ { /* Did we have a bg ? Hide it! */ if( VISIBLE( bgWidget) ) { bgWasVisible = true; - emit askBgWidgetToToggle(); + bgWidget->toggle(); } else bgWasVisible = false; /* ask videoWidget to show */ - emit askVideoToShow( *pi_width, *pi_height ); + videoWidget->SetSizing( *pi_width, *pi_height ); /* Consider the video active now */ videoIsActive = true; emit askUpdate(); } - return ret; } -/* Call from the WindowClose function */ +/* Asynchronous call from the WindowClose function */ void MainInterface::releaseVideo( void ) { emit askReleaseVideo( ); @@ -728,35 +770,32 @@ void MainInterface::releaseVideoSlot( void ) videoIsActive = false; /* Try to resize, except when you are in Fullscreen mode */ - if( !isFullScreen() ) doComponentsUpdate(); + doComponentsUpdate(); } -/* Call from WindowControl function */ +/* Asynchronous call from WindowControl function */ int MainInterface::controlVideo( int i_query, va_list args ) { - int i_ret = VLC_SUCCESS; switch( i_query ) { - case VOUT_SET_SIZE: - { - unsigned int i_width = va_arg( args, unsigned int ); - unsigned int i_height = va_arg( args, unsigned int ); - emit askVideoToResize( i_width, i_height ); - emit askUpdate(); - break; - } - case VOUT_SET_STAY_ON_TOP: - { - int i_arg = va_arg( args, int ); - QApplication::postEvent( this, new SetVideoOnTopQtEvent( i_arg ) ); - break; - } - default: - i_ret = VLC_EGENERIC; - msg_Warn( p_intf, "unsupported control query" ); - break; + case VOUT_WINDOW_SET_SIZE: + { + unsigned int i_width = va_arg( args, unsigned int ); + unsigned int i_height = va_arg( args, unsigned int ); + emit askVideoToResize( i_width, i_height ); + emit askUpdate(); + return VLC_SUCCESS; + } + case VOUT_WINDOW_SET_ON_TOP: + { + int i_arg = va_arg( args, int ); + QApplication::postEvent( this, new SetVideoOnTopQtEvent( i_arg ) ); + return VLC_SUCCESS; + } + default: + msg_Warn( p_intf, "unsupported control query" ); + return VLC_EGENERIC; } - return i_ret; } /***************************************************************************** @@ -819,7 +858,10 @@ void MainInterface::toggleMinimalView( bool b_switch ) if( i_visualmode != QT_ALWAYS_VIDEO_MODE && i_visualmode != QT_MINIMAL_MODE ) { /* NORMAL MODE then */ - if( !videoWidget || videoWidget->isHidden() ) emit askBgWidgetToToggle(); + if( !videoWidget || videoWidget->isHidden() ) + { + bgWidget->toggle(); + } else { /* If video is visible, then toggle the status of bgWidget */ @@ -827,35 +869,18 @@ void MainInterface::toggleMinimalView( bool b_switch ) } } + i_bg_height = bgWidget->height(); + menuBar()->setVisible( !b_switch ); controls->setVisible( !b_switch ); statusBar()->setVisible( !b_switch ); inputC->setVisible( !b_switch ); + doComponentsUpdate(); emit minimalViewToggled( b_switch ); } -/* Video widget cannot do this synchronously as it runs in another thread */ -/* Well, could it, actually ? Probably dangerous ... */ - -/* This function is called: - - toggling of minimal View - - through askUpdate() by Vout thread request video and resize video (zoom) - - Advanced buttons toggled - */ -void MainInterface::doComponentsUpdate() -{ - msg_Dbg( p_intf, "Updating the geometry" ); - /* Here we resize to sizeHint() and not adjustsize because we want - the videoWidget to be exactly the correctSize */ - resize( sizeHint() ); - // adjustSize() ; -#ifndef NDEBUG - debug(); -#endif -} - /* toggling advanced controls buttons */ void MainInterface::toggleAdvanced() { @@ -895,7 +920,7 @@ void MainInterface::visual() /************************************************************************ * Other stuff ************************************************************************/ -void MainInterface::setName( QString name ) +void MainInterface::setName( const QString& name ) { input_name = name; /* store it for the QSystray use */ /* Display it in the status bar, but also as a Tooltip in case it doesn't @@ -904,6 +929,36 @@ void MainInterface::setName( QString name ) nameLabel->setToolTip( " " + name +" " ); } +/** + * Give the decorations of the Main Window a correct Name. + * If nothing is given, set it to VLC... + **/ +void MainInterface::setVLCWindowsTitle( const QString& aTitle ) +{ + if( aTitle.isEmpty() ) + { + setWindowTitle( qtr( "VLC media player" ) ); + } + else + { + setWindowTitle( aTitle + " - " + qtr( "VLC media player" ) ); + } +} + +void MainInterface::showCryptedLabel( bool b_show ) +{ + if( cryptedLabel == NULL ) + { + cryptedLabel = new QLabel; + // The lock icon is not the right one for DRM protection/scrambled. + //cryptedLabel->setPixmap( QPixmap( ":/lock" ) ); + cryptedLabel->setText( "DRM" ); + statusBar()->addWidget( cryptedLabel ); + } + + cryptedLabel->setVisible( b_show ); +} + /***************************************************************************** * Systray Icon and Systray Menu *****************************************************************************/ @@ -916,9 +971,9 @@ void MainInterface::createSystray() { QIcon iconVLC; if( QDate::currentDate().dayOfYear() >= 354 ) - iconVLC = QIcon( QPixmap( ":/vlc128-christmas.png" ) ); + iconVLC = QIcon( QPixmap( ":/logo/vlc128-christmas.png" ) ); else - iconVLC = QIcon( QPixmap( ":/vlc128.png" ) ); + iconVLC = QIcon( QPixmap( ":/logo/vlc128.png" ) ); sysTray = new QSystemTrayIcon( iconVLC, this ); sysTray->setToolTip( qtr( "VLC media player" )); @@ -1003,7 +1058,7 @@ void MainInterface::handleSystrayClick( * Updates the name of the systray Icon tooltip. * Doesn't check if the systray exists, check before you call it. **/ -void MainInterface::updateSystrayTooltipName( QString name ) +void MainInterface::updateSystrayTooltipName( const QString& name ) { if( name.isEmpty() ) { @@ -1048,6 +1103,7 @@ void MainInterface::updateSystrayTooltipStatus( int i_status ) break; } } + QVLCMenu::updateSystrayMenu( this, p_intf ); } /************************************************************************ @@ -1060,6 +1116,10 @@ void MainInterface::dropEvent(QDropEvent *event) void MainInterface::dropEventPlay( QDropEvent *event, bool b_play ) { + event->setDropAction( Qt::CopyAction ); + if( !event->possibleActions() & Qt::CopyAction ) + return; + const QMimeData *mimeData = event->mimeData(); /* D&D of a subtitles file, add it on the fly */ @@ -1072,7 +1132,7 @@ void MainInterface::dropEventPlay( QDropEvent *event, bool b_play ) mimeData->urls()[0].toLocalFile() ) ), true ) ) { - event->acceptProposedAction(); + event->accept(); return; } } @@ -1084,13 +1144,13 @@ void MainInterface::dropEventPlay( QDropEvent *event, bool b_play ) if( s.length() > 0 ) { playlist_Add( THEPL, qtu(s), NULL, - PLAYLIST_APPEND | (first ? PLAYLIST_GO: 0), - PLAYLIST_END, true, false ); + PLAYLIST_APPEND | (first ? PLAYLIST_GO: PLAYLIST_PREPARSE), + PLAYLIST_END, true, pl_Unlocked ); first = false; RecentsMRL::getInstance( p_intf )->addRecent( s ); } } - event->acceptProposedAction(); + event->accept(); } void MainInterface::dragEnterEvent(QDragEnterEvent *event) { @@ -1125,10 +1185,10 @@ void MainInterface::customEvent( QEvent *event ) { SetVideoOnTopQtEvent* p_event = (SetVideoOnTopQtEvent*)event; if( p_event->OnTop() ) - setWindowFlags(windowFlags() | Qt::WindowStaysOnTopHint); + setWindowFlags( windowFlags() | Qt::WindowStaysOnTopHint ); else - setWindowFlags(windowFlags() & ~Qt::WindowStaysOnTopHint); - show(); /* necessary to apply window flags?? */ + setWindowFlags( windowFlags() & ~Qt::WindowStaysOnTopHint ); + show(); /* necessary to apply window flags */ } }