From 510269dda901ca427909e09abfba1c5a50369a91 Mon Sep 17 00:00:00 2001 From: purian23 Date: Wed, 3 Jun 2026 00:35:19 -0400 Subject: [PATCH] fix(keybinds): show percentage amount in titles & performance improvements --- quickshell/Common/KeybindActions.js | 24 ++++++++++++++++++++++ quickshell/Widgets/KeybindItem.qml | 32 ++++++++++++++++++++++++----- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/quickshell/Common/KeybindActions.js b/quickshell/Common/KeybindActions.js index 18ac906e..401ee4e4 100644 --- a/quickshell/Common/KeybindActions.js +++ b/quickshell/Common/KeybindActions.js @@ -770,6 +770,26 @@ const DMS_ACTION_ARGS = { } }; +const DMS_AMOUNT_LABELS = { + "audio increment": "Volume Up", + "audio decrement": "Volume Down", + "mpris increment": "Player Volume Up", + "mpris decrement": "Player Volume Down", + "brightness increment": "Brightness Up", + "brightness decrement": "Brightness Down" +}; + +function getDmsAmountLabel(action) { + var parsed = parseDmsActionArgs(action); + var label = DMS_AMOUNT_LABELS[parsed.base]; + if (!label) + return null; + var amount = parsed.args?.amount; + if (amount === undefined || amount === null || amount === "") + return label; + return label + " (" + amount + "%)"; +} + function getActionTypes() { return ACTION_TYPES; } @@ -844,6 +864,10 @@ function getActionLabel(action, compositor) { if (!action) return ""; + var amountLabel = getDmsAmountLabel(action); + if (amountLabel) + return amountLabel; + var dmsAct = findDmsAction(action); if (dmsAct) return dmsAct.label; diff --git a/quickshell/Widgets/KeybindItem.qml b/quickshell/Widgets/KeybindItem.qml index ddd65faf..1cd44d75 100644 --- a/quickshell/Widgets/KeybindItem.qml +++ b/quickshell/Widgets/KeybindItem.qml @@ -71,15 +71,32 @@ Item { signal resetBind(string key) signal cancelEdit + clip: true + + property bool _userToggledExpand: false + implicitHeight: contentColumn.implicitHeight height: implicitHeight + Behavior on implicitHeight { + enabled: root._userToggledExpand + NumberAnimation { + duration: Theme.shortDuration + easing.type: Theme.standardEasing + onRunningChanged: { + if (!running) + root._userToggledExpand = false; + } + } + } + Component.onCompleted: { if (isNew && isExpanded) resetEdits(); } onIsExpandedChanged: { + _userToggledExpand = true; if (!isExpanded) return; if (restoreKey) { @@ -431,7 +448,7 @@ Item { width: parent.width active: root.isExpanded visible: status === Loader.Ready - asynchronous: true + asynchronous: false sourceComponent: expandedComponent } } @@ -957,7 +974,7 @@ Item { if (act.label === value) { root.updateEdit({ "action": act.id, - "desc": act.label + "desc": KeybindsService.getActionLabel(act.id) }); return; } @@ -1012,11 +1029,16 @@ Item { onEditingFinished: { if (!dmsArgsRow.parsedArgs) return; + const oldAction = root.editAction; const newArgs = Object.assign({}, dmsArgsRow.parsedArgs.args); newArgs.amount = text || "5"; - root.updateEdit({ - "action": Actions.buildDmsAction(dmsArgsRow.parsedArgs.base, newArgs) - }); + const newAction = Actions.buildDmsAction(dmsArgsRow.parsedArgs.base, newArgs); + const changes = { + "action": newAction + }; + if (root.editDesc === "" || root.editDesc === KeybindsService.getActionLabel(oldAction)) + changes.desc = KeybindsService.getActionLabel(newAction); + root.updateEdit(changes); } }