diff --git a/quickshell/Common/SettingsData.qml b/quickshell/Common/SettingsData.qml index 5619f7543..49cc29ca5 100644 --- a/quickshell/Common/SettingsData.qml +++ b/quickshell/Common/SettingsData.qml @@ -997,6 +997,7 @@ Singleton { "scrollEnabled": true, "scrollXBehavior": "column", "scrollYBehavior": "workspace", + "middleClickAction": "none", "shadowIntensity": 0, "shadowOpacity": 60, "shadowColorMode": "default", diff --git a/quickshell/Common/settings/SettingsSpec.js b/quickshell/Common/settings/SettingsSpec.js index 97570e2fc..65732fad5 100644 --- a/quickshell/Common/settings/SettingsSpec.js +++ b/quickshell/Common/settings/SettingsSpec.js @@ -565,6 +565,7 @@ var SPEC = { scrollEnabled: true, scrollXBehavior: "column", scrollYBehavior: "workspace", + middleClickAction: "none", shadowIntensity: 0, shadowOpacity: 60, shadowColorMode: "default", diff --git a/quickshell/Modules/DankBar/DankBarWindow.qml b/quickshell/Modules/DankBar/DankBarWindow.qml index 4d1366669..3931abb89 100644 --- a/quickshell/Modules/DankBar/DankBarWindow.qml +++ b/quickshell/Modules/DankBar/DankBarWindow.qml @@ -979,7 +979,26 @@ PanelWindow { anchors.fill: parent z: -2 acceptedButtons: Qt.LeftButton | Qt.RightButton | Qt.MiddleButton - onClicked: { + onClicked: mouse => { + if (mouse.button === Qt.MiddleButton) { + const action = barConfig?.middleClickAction ?? "none" + switch (action) { + case "control-center": + barWindow.triggerControlCenter(); + return; + case "spotlight": + Quickshell.execDetached(["dms", "ipc", "call", "spotlight", "toggle"]); + return; + case "close-window": + const active = ToplevelManager.activeToplevel; + if (active && typeof active.close === "function") + active.close(); + return; + case "settings": + Quickshell.execDetached(["dms", "ipc", "call", "settings", "toggle"]); + return; + } + } const screenName = barWindow.screen?.name; if (!screenName) return; diff --git a/quickshell/Modules/Settings/DankBarTab.qml b/quickshell/Modules/Settings/DankBarTab.qml index 807c10b0c..679c3ba65 100644 --- a/quickshell/Modules/Settings/DankBarTab.qml +++ b/quickshell/Modules/Settings/DankBarTab.qml @@ -171,6 +171,7 @@ Item { scrollEnabled: defaultBar.scrollEnabled ?? true, scrollXBehavior: defaultBar.scrollXBehavior ?? "column", scrollYBehavior: defaultBar.scrollYBehavior ?? "workspace", + middleClickAction: defaultBar.middleClickAction ?? "none", hoverPopouts: defaultBar.hoverPopouts ?? false, hoverPopoutDelay: defaultBar.hoverPopoutDelay ?? 150, shadowIntensity: defaultBar.shadowIntensity ?? 0, @@ -1936,6 +1937,52 @@ Item { } } } + + SettingsCard { + iconName: "mouse" + title: I18n.tr("Mouse Click Action") + settingKey: "barMouseClickAction" + visible: !dankBarTab.appearanceOnly && selectedBarConfig?.enabled + + SettingsDropdownRow { + text: I18n.tr("Middle Click") + description: I18n.tr("Choose what middle-clicking empty bar space does") + settingKey: "barMiddleClickAction" + options: [ + I18n.tr("None", "bar middle click action"), + I18n.tr("Toggle Control Center", "bar middle click action"), + I18n.tr("Toggle Launcher", "bar middle click action"), + I18n.tr("Close Active Window", "bar middle click action"), + I18n.tr("Toggle Settings", "bar middle click action") + ] + currentValue: { + switch (selectedBarConfig?.middleClickAction ?? "none") { + case "control-center": + return I18n.tr("Toggle Control Center", "bar middle click action"); + case "spotlight": + return I18n.tr("Toggle Launcher", "bar middle click action"); + case "close-window": + return I18n.tr("Close Active Window", "bar middle click action"); + case "settings": + return I18n.tr("Toggle Settings", "bar middle click action"); + default: + return I18n.tr("None", "bar middle click action"); + } + } + onValueChanged: value => { + if (value === I18n.tr("Toggle Control Center", "bar middle click action")) + SettingsData.updateBarConfig(selectedBarId, { middleClickAction: "control-center" }); + else if (value === I18n.tr("Toggle Launcher", "bar middle click action")) + SettingsData.updateBarConfig(selectedBarId, { middleClickAction: "spotlight" }); + else if (value === I18n.tr("Close Active Window", "bar middle click action")) + SettingsData.updateBarConfig(selectedBarId, { middleClickAction: "close-window" }); + else if (value === I18n.tr("Toggle Settings", "bar middle click action")) + SettingsData.updateBarConfig(selectedBarId, { middleClickAction: "settings" }); + else + SettingsData.updateBarConfig(selectedBarId, { middleClickAction: "none" }); + } + } + } } } }