┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/panels/places
diff options
context:
space:
mode:
authorAlessio Bonfiglio <[email protected]>2021-12-17 14:11:46 +0000
committerMéven Car <[email protected]>2021-12-17 14:11:46 +0000
commit65b18bf935faad814b9ab3b318fdbfb4772d2051 (patch)
tree19307e31947fa01789a33e18cc50c3c0a582143e /src/panels/places
parent3c5bf0c96c1e419938d73e88d82366585e3e6f65 (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.cpp74
-rw-r--r--src/panels/places/placespanel.h10
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;