feat(clock): clock: per-widget click action w/overview as optional

Fixes 3993
Port 2.0

(cherry picked from commit d367e7e71b)
This commit is contained in:
purian23 authored and dux-ci[bot] committed 2026-10-30 04:12:34 +00:00
1 parent e7707fb5e4
commit 0299652efb
4 files changed
+62 -4

No files matched your search

@@ -132,7 +132,9 @@ var DEFAULTS = {
clock: {
clockCompactMode: false,
clockDateOrder: "timeFirst",
clockNotificationBadge: false
clockNotificationBadge: false,
clockClickAction: "dash",
clockClickCommand: ""
},
music: {
mediaStyle: "controls",
@@ -39,6 +39,27 @@ Column {
onToggled: checked => root.page.set("clockNotificationBadge", checked)
}
SettingsDropdownRow {
readonly property var actions: ["dash", "settings", "command", "none"]
resetStore: root.page
resetKeys: ["clockClickAction"]
text: I18n.tr("Click action", "clock widget option: what clicking the clock opens")
options: [I18n.tr("Dashboard"), I18n.tr("Time & weather"), I18n.tr("Custom command"), I18n.tr("None", "bar click action")]
currentValue: options[actions.indexOf(root.page.value("clockClickAction"))] ?? options[0]
onValueChanged: value => root.page.set("clockClickAction", actions[options.indexOf(value)] ?? "dash")
}
SettingsTextFieldRow {
resetStore: root.page
resetKeys: ["clockClickCommand"]
text: I18n.tr("Custom command")
visible: root.page.value("clockClickAction") === "command"
placeholderText: "gnome-clocks"
value: root.page.value("clockClickCommand")
onEditingFinished: value => root.page.set("clockClickCommand", value.trim())
}
SettingsNavRow {
iconName: "schedule"
title: I18n.tr("Time & weather")
@@ -1,9 +1,11 @@
pragma ComponentBehavior: Bound
import QtQuick
import Quickshell
import Quickshell.Services.SystemTray
import qs.Common
import qs.Services
import qs.Modules.DBar.Widgets
import qs.Modules.DDash
import "../DBar/WidgetModel.js" as WidgetModel
Item {
@@ -393,15 +395,32 @@ Item {
}
onClockClicked: {
const action = SettingsData.widgetOption("clock", clockWidget.widgetData, "clockClickAction");
if (action === "none")
return;
if (action === "settings") {
PopoutService.focusOrToggleSettingsWithTab("time_weather");
return;
}
if (action === "command") {
const command = SettingsData.widgetOption("clock", clockWidget.widgetData, "clockClickCommand");
if (command)
Quickshell.execDetached(["sh", "-c", command]);
return;
}
// requestTab would still show a disabled Overview as a detail page.
const tabId = DashRegistry.isSelectable(DashRegistry.overviewId) ? DashRegistry.overviewId : DashRegistry.defaultTabId;
if (!tabId)
return;
const section = root.getWidgetSection(parent) || "center";
root.openWidgetPopout({
loader: PopoutService.dankDashPopoutLoader,
widgetItem: clockWidget,
section,
useCenterSection: true,
triggerSource: root._dashTriggerSource(section, "overview"),
triggerSource: root._dashTriggerSource(section, tabId),
islandActivity: "home",
prepare: popout => popout.requestTab("overview"),
prepare: popout => popout.requestTab(tabId),
mode: "click",
setTriggerScreen: true
});
@@ -10148,6 +10148,14 @@
"runtimeType": "barWidgetOption",
"optionFile": "IslandOptions.qml"
},
{
"section": "barWidgetOption:ClockOptions.qml:4",
"label": "Click action",
"tabIndex": 22,
"keywords": [],
"runtimeType": "barWidgetOption",
"optionFile": "ClockOptions.qml"
},
{
"section": "barWidgetOption:IslandOptions.qml:12",
"label": "Clipboard",
@@ -10324,6 +10332,14 @@
"runtimeType": "barWidgetOption",
"optionFile": "AppsDockOptions.qml"
},
{
"section": "barWidgetOption:ClockOptions.qml:5",
"label": "Custom command",
"tabIndex": 22,
"keywords": [],
"runtimeType": "barWidgetOption",
"optionFile": "ClockOptions.qml"
},
{
"section": "barWidgetOption:IslandOptions.qml:14",
"label": "Dashboard",
@@ -11061,7 +11077,7 @@
"optionFile": "IslandOptions.qml"
},
{
"section": "barWidgetOption:ClockOptions.qml:4",
"section": "barWidgetOption:ClockOptions.qml:6",
"label": "Time & weather",
"tabIndex": 22,
"keywords": [],