diff options
| author | Alessio Bonfiglio <[email protected]> | 2021-12-17 14:11:46 +0000 |
|---|---|---|
| committer | Méven Car <[email protected]> | 2021-12-17 14:11:46 +0000 |
| commit | 65b18bf935faad814b9ab3b318fdbfb4772d2051 (patch) | |
| tree | 19307e31947fa01789a33e18cc50c3c0a582143e /src/panels/places | |
| parent | 3c5bf0c96c1e419938d73e88d82366585e3e6f65 (diff) | |
Enable Ctrl/Shift-Click to open folder in a new tab/window
and more
Diffstat (limited to 'src/panels/places')
| -rw-r--r-- | src/panels/places/placespanel.cpp | 74 | ||||
| -rw-r--r-- | src/panels/places/placespanel.h | 10 |
2 files changed, 56 insertions, 28 deletions
diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index 83e014a82..b9fc4a897 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -36,6 +36,7 @@ #include <KPropertiesDialog> #include <QActionGroup> +#include <QApplication> #include <QGraphicsSceneDragDropEvent> #include <QIcon> #include <QMenu> @@ -44,16 +45,16 @@ #include <QToolTip> PlacesPanel::PlacesPanel(QWidget* parent) : - Panel(parent), - m_controller(nullptr), - m_model(nullptr), - m_view(nullptr), - m_storageSetupFailedUrl(), - m_triggerStorageSetupButton(), - m_itemDropEventIndex(-1), - m_itemDropEventMimeData(nullptr), - m_itemDropEvent(nullptr), - m_tooltipTimer() + Panel(parent), + m_controller(nullptr), + m_model(nullptr), + m_view(nullptr), + m_storageSetupFailedUrl(), + m_triggerStorageSetupModifier(), + m_itemDropEventIndex(-1), + m_itemDropEventMimeData(nullptr), + m_itemDropEvent(nullptr), + m_tooltipTimer() { m_tooltipTimer.setInterval(500); m_tooltipTimer.setSingleShot(true); @@ -163,12 +164,28 @@ bool PlacesPanel::eventFilter(QObject * /* obj */, QEvent *event) void PlacesPanel::slotItemActivated(int index) { - triggerItem(index, Qt::LeftButton); + const auto modifiers = QGuiApplication::keyboardModifiers(); + // keep in sync with KUrlNavigator::slotNavigatorButtonClicked + if (modifiers & Qt::ControlModifier && modifiers & Qt::ShiftModifier) { + triggerItem(index, TriggerItemModifier::ToNewActiveTab); + } else if (modifiers & Qt::ControlModifier) { + triggerItem(index, TriggerItemModifier::ToNewTab); + } else if (modifiers & Qt::ShiftModifier) { + triggerItem(index, TriggerItemModifier::ToNewWindow); + } else { + triggerItem(index, TriggerItemModifier::None); + } } void PlacesPanel::slotItemMiddleClicked(int index) { - triggerItem(index, Qt::MiddleButton); + const auto modifiers = QGuiApplication::keyboardModifiers(); + // keep in sync with KUrlNavigator::slotNavigatorButtonClicked + if (modifiers & Qt::ShiftModifier) { + triggerItem(index, TriggerItemModifier::ToNewActiveTab); + } else { + triggerItem(index, TriggerItemModifier::ToNewTab); + } } void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) @@ -287,9 +304,7 @@ void PlacesPanel::slotItemContextMenuRequested(int index, const QPointF& pos) } else if (action == openInNewWindowAction) { Dolphin::openNewWindow({KFilePlacesModel::convertedUrl(m_model->data(index).value("url").toUrl())}, this); } else if (action == openInNewTabAction) { - // TriggerItem does set up the storage first and then it will - // emit the slotItemMiddleClicked signal, because of Qt::MiddleButton. - triggerItem(index, Qt::MiddleButton); + triggerItem(index, TriggerItemModifier::ToNewTab); } else if (action == mountAction) { m_model->requestStorageSetup(index); } else if (action == teardownAction) { @@ -480,14 +495,14 @@ void PlacesPanel::slotStorageSetupDone(int index, bool success) disconnect(m_model, &PlacesItemModel::storageSetupDone, this, &PlacesPanel::slotStorageSetupDone); - if (m_triggerStorageSetupButton == Qt::NoButton) { + if (m_triggerStorageSetupModifier == TriggerItemModifier::None) { return; } if (success) { Q_ASSERT(!m_model->storageSetupNeeded(index)); - triggerItem(index, m_triggerStorageSetupButton); - m_triggerStorageSetupButton = Qt::NoButton; + triggerItem(index, m_triggerStorageSetupModifier); + m_triggerStorageSetupModifier = TriggerItemModifier::None; } else { setUrl(m_storageSetupFailedUrl); m_storageSetupFailedUrl = QUrl(); @@ -553,7 +568,7 @@ void PlacesPanel::selectItem() } } -void PlacesPanel::triggerItem(int index, Qt::MouseButton button) +void PlacesPanel::triggerItem(int index, TriggerItemModifier modifier) { const PlacesItem* item = m_model->placesItem(index); if (!item) { @@ -561,7 +576,7 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button) } if (m_model->storageSetupNeeded(index)) { - m_triggerStorageSetupButton = button; + m_triggerStorageSetupModifier = modifier; m_storageSetupFailedUrl = url(); connect(m_model, &PlacesItemModel::storageSetupDone, @@ -569,14 +584,23 @@ void PlacesPanel::triggerItem(int index, Qt::MouseButton button) m_model->requestStorageSetup(index); } else { - m_triggerStorageSetupButton = Qt::NoButton; + m_triggerStorageSetupModifier = TriggerItemModifier::None; const QUrl url = m_model->data(index).value("url").toUrl(); if (!url.isEmpty()) { - if (button == Qt::MiddleButton) { - Q_EMIT placeMiddleClicked(KFilePlacesModel::convertedUrl(url)); - } else { - Q_EMIT placeActivated(KFilePlacesModel::convertedUrl(url)); + switch (modifier) { + case TriggerItemModifier::ToNewTab: + Q_EMIT placeActivatedInNewTab(KFilePlacesModel::convertedUrl(url)); + break; + case TriggerItemModifier::ToNewActiveTab: + Q_EMIT placeActivatedInNewActiveTab(KFilePlacesModel::convertedUrl(url)); + break; + case TriggerItemModifier::ToNewWindow: + Dolphin::openNewWindow({KFilePlacesModel::convertedUrl(url)}, this); + break; + case TriggerItemModifier::None: + Q_EMIT placeActivated(KFilePlacesModel::convertedUrl(url)); + break; } } } diff --git a/src/panels/places/placespanel.h b/src/panels/places/placespanel.h index 39f8da365..ce28c8c08 100644 --- a/src/panels/places/placespanel.h +++ b/src/panels/places/placespanel.h @@ -35,7 +35,8 @@ public: Q_SIGNALS: void placeActivated(const QUrl& url); - void placeMiddleClicked(const QUrl& url); + void placeActivatedInNewTab(const QUrl &url); + void placeActivatedInNewActiveTab(const QUrl &url); void errorMessage(const QString& error); void storageTearDownRequested(const QString& mountPath); void storageTearDownExternallyRequested(const QString& mountPath); @@ -64,6 +65,9 @@ private Q_SLOTS: void slotShowTooltip(); private: + enum class TriggerItemModifier { None, ToNewTab, ToNewActiveTab, ToNewWindow }; + +private: void addEntry(); void editEntry(int index); @@ -73,7 +77,7 @@ private: */ void selectItem(); - void triggerItem(int index, Qt::MouseButton button); + void triggerItem(int index, TriggerItemModifier modifier); QAction* buildGroupContextMenu(QMenu* menu, int index); @@ -83,7 +87,7 @@ private: PlacesView* m_view; QUrl m_storageSetupFailedUrl; - Qt::MouseButton m_triggerStorageSetupButton; + TriggerItemModifier m_triggerStorageSetupModifier; int m_itemDropEventIndex; QMimeData* m_itemDropEventMimeData; |
