From 75a45cca5f0a6765a76430e810cf999dfb127937 Mon Sep 17 00:00:00 2001 From: Tobias Doerffel Date: Tue, 23 Jun 2009 00:13:40 +0200 Subject: [PATCH] ResourceBrowser: stop preview when drag operation starts Make sure preview is stopped as soon as a drag operation starts. This is done by overloading QAbstractItemView::startDrag() and emit a signal from there which is connected to an according slot in ResourceBrowser. Signed-off-by: Tobias Doerffel --- include/ResourceBrowser.h | 1 + include/ResourceTreeView.h | 11 ++++++++++- src/gui/ResourceBrowser.cpp | 15 ++++++++++++++- src/gui/ResourceTreeView.cpp | 9 +++++++++ 4 files changed, 34 insertions(+), 2 deletions(-) diff --git a/include/ResourceBrowser.h b/include/ResourceBrowser.h index 03bc5cb5c..8791421a5 100644 --- a/include/ResourceBrowser.h +++ b/include/ResourceBrowser.h @@ -63,6 +63,7 @@ private slots: void updateFilterStatus(); void startItemPreview( const QModelIndex & _idx ); void stopItemPreview( const QModelIndex & _idx ); + void stopPreview(); void triggerDefaultAction( const QModelIndex & _idx ); diff --git a/include/ResourceTreeView.h b/include/ResourceTreeView.h index 39beff9d9..d3be09f34 100644 --- a/include/ResourceTreeView.h +++ b/include/ResourceTreeView.h @@ -1,7 +1,7 @@ /* * ResourceTreeView.h - view for ResourceTreeModel * - * Copyright (c) 2008 Tobias Doerffel + * Copyright (c) 2008-2009 Tobias Doerffel * * This file is part of Linux MultiMedia Studio - http://lmms.sourceforge.net * @@ -41,11 +41,20 @@ public slots: void setFilter( const QString & _s ); void updateFilter( void ); + +protected: + virtual void startDrag( Qt::DropActions supportedActions ); + + private: ResourceTreeModel * m_tm; QString m_lastFilter; + +signals: + void dragStarted(); + } ; diff --git a/src/gui/ResourceBrowser.cpp b/src/gui/ResourceBrowser.cpp index 45758cbda..705d21b28 100644 --- a/src/gui/ResourceBrowser.cpp +++ b/src/gui/ResourceBrowser.cpp @@ -110,6 +110,11 @@ ResourceBrowser::ResourceBrowser( QWidget * _parent ) : connect( m_treeView, SIGNAL( clicked( const QModelIndex & ) ), this, SLOT( stopItemPreview( const QModelIndex & ) ) ); + // setup a direct connection so preview is instantly stopped when + // drag operation begins + connect( m_treeView, + SIGNAL( dragStarted() ), + this, SLOT( stopPreview() ), Qt::DirectConnection ); connect( m_treeView, SIGNAL( doubleClicked( const QModelIndex & ) ), this, @@ -240,7 +245,15 @@ void ResourceBrowser::startItemPreview( const QModelIndex & _idx ) -void ResourceBrowser::stopItemPreview( const QModelIndex & _idx ) +void ResourceBrowser::stopItemPreview( const QModelIndex & ) +{ + stopPreview(); +} + + + + +void ResourceBrowser::stopPreview() { m_previewer.stopPreview(); } diff --git a/src/gui/ResourceTreeView.cpp b/src/gui/ResourceTreeView.cpp index 3086eb31d..789ccfd6f 100644 --- a/src/gui/ResourceTreeView.cpp +++ b/src/gui/ResourceTreeView.cpp @@ -72,4 +72,13 @@ void ResourceTreeView::updateFilter( void ) +void ResourceTreeView::startDrag( Qt::DropActions supportedActions ) +{ + emit dragStarted(); + + QTreeView::startDrag( supportedActions ); +} + + + #include "moc_ResourceTreeView.cxx"