diff options
Diffstat (limited to 'src/dolphincontroller.cpp')
| -rw-r--r-- | src/dolphincontroller.cpp | 29 |
1 files changed, 27 insertions, 2 deletions
diff --git a/src/dolphincontroller.cpp b/src/dolphincontroller.cpp index a0aa1d895..7dd6133f0 100644 --- a/src/dolphincontroller.cpp +++ b/src/dolphincontroller.cpp @@ -21,11 +21,13 @@ #include <kdirmodel.h> #include <QAbstractProxyModel> +#include <QApplication> DolphinController::DolphinController(DolphinView* dolphinView) : QObject(dolphinView), m_zoomInPossible(false), m_zoomOutPossible(false), + m_openTab(false), m_url(), m_dolphinView(dolphinView), m_itemView(0) @@ -46,7 +48,16 @@ void DolphinController::setUrl(const KUrl& url) void DolphinController::setItemView(QAbstractItemView* view) { + if (m_itemView != 0) { + disconnect(m_itemView, SIGNAL(pressed(const QModelIndex&)), + this, SLOT(updateOpenTabState())); + } + m_itemView = view; + + // TODO: this is a workaround until Qt-issue 176832 has been fixed + connect(m_itemView, SIGNAL(pressed(const QModelIndex&)), + this, SLOT(updateOpenTabState())); } void DolphinController::triggerUrlChangeRequest(const KUrl& url) @@ -134,12 +145,21 @@ KFileItem DolphinController::itemForIndex(const QModelIndex& index) const void DolphinController::triggerItem(const QModelIndex& index) { + const bool openTab = m_openTab; + m_openTab = false; + const KFileItem item = itemForIndex(index); if (index.isValid() && (index.column() == KDirModel::Name)) { - emit itemTriggered(item); + if (openTab && item.isDir()) { + emit tabRequested(item.url()); + } else { + emit itemTriggered(item); + } } else { m_itemView->clearSelection(); - emit itemEntered(item); + if (!openTab) { + emit itemEntered(item); + } } } @@ -156,4 +176,9 @@ void DolphinController::emitViewportEntered() emit viewportEntered(); } +void DolphinController::updateOpenTabState() +{ + m_openTab = QApplication::mouseButtons() & Qt::MidButton; +} + #include "dolphincontroller.moc" |
