1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-01-24 21:42:51 -05:00

keybinds: fix cheatsheet on non niri

- separate read only logic from writeread
This commit is contained in:
bbedward
2025-12-09 00:03:39 -05:00
parent ba5be6b516
commit 0be9ac4097
2 changed files with 56 additions and 10 deletions

View File

@@ -17,7 +17,11 @@ DankModal {
modalWidth: _maxW
modalHeight: _maxH
onBackgroundClicked: close()
onOpened: () => Qt.callLater(() => modalFocusScope.forceActiveFocus())
onOpened: {
Qt.callLater(() => modalFocusScope.forceActiveFocus());
if (KeybindsService.cheatsheetAvailable)
KeybindsService.loadCheatsheet();
}
HyprlandFocusGrab {
windows: [root.contentWindow]
@@ -66,7 +70,7 @@ DankModal {
spacing: Theme.spacingL
StyledText {
text: KeybindsService.keybinds.title || "Keybinds"
text: KeybindsService.cheatsheet.title || "Keybinds"
font.pixelSize: Theme.fontSizeLarge
font.weight: Font.Bold
color: Theme.primary
@@ -82,7 +86,7 @@ DankModal {
Component.onCompleted: root.activeFlickable = mainFlickable
property var rawBinds: KeybindsService.keybinds.binds || {}
property var rawBinds: KeybindsService.cheatsheet.binds || {}
property var categories: {
const processed = {};
for (const cat in rawBinds) {

View File

@@ -22,6 +22,18 @@ Singleton {
property bool available: CompositorService.isNiri && shortcutInhibitorAvailable
property string currentProvider: "niri"
readonly property string cheatsheetProvider: {
if (CompositorService.isNiri)
return "niri";
if (CompositorService.isHyprland)
return "hyprland";
return "";
}
property bool cheatsheetAvailable: cheatsheetProvider !== ""
property bool cheatsheetLoading: false
property var cheatsheet: ({})
property bool loading: false
property bool saving: false
property bool fixing: false
@@ -58,16 +70,13 @@ Singleton {
signal bindSaveCompleted(bool success)
signal bindRemoved(string key)
signal dmsBindsFixed
Component.onCompleted: {
if (available)
Qt.callLater(loadBinds);
}
signal cheatsheetLoaded
Connections {
target: CompositorService
function onCompositorChanged() {
if (CompositorService.isNiri)
if (!CompositorService.isNiri)
return;
Qt.callLater(root.loadBinds);
}
}
@@ -80,6 +89,31 @@ Singleton {
}
}
Process {
id: cheatsheetProcess
running: false
stdout: StdioCollector {
onStreamFinished: {
try {
root.cheatsheet = JSON.parse(text);
} catch (e) {
console.error("[KeybindsService] Failed to parse cheatsheet:", e);
root.cheatsheet = {};
}
root.cheatsheetLoading = false;
root.cheatsheetLoaded();
}
}
onExited: exitCode => {
if (exitCode === 0)
return;
console.warn("[KeybindsService] Cheatsheet load failed with code:", exitCode);
root.cheatsheetLoading = false;
}
}
Process {
id: loadProcess
running: false
@@ -199,6 +233,14 @@ Singleton {
loadBinds(true);
}
function loadCheatsheet() {
if (cheatsheetProcess.running || !cheatsheetAvailable)
return;
cheatsheetLoading = true;
cheatsheetProcess.command = ["dms", "keybinds", "show", cheatsheetProvider];
cheatsheetProcess.running = true;
}
function loadBinds(showLoading) {
if (loadProcess.running || !available)
return;