1
0
mirror of https://github.com/AvengeMedia/DankMaterialShell.git synced 2026-08-06 05:28:29 -04:00

fix(keybinds): respect niri mod-key when capturing binds

Hardens #2224
This commit is contained in:
purian23
2026-07-04 00:50:58 -04:00
parent c554d973ef
commit b34941e3b8
8 changed files with 85 additions and 10 deletions
+26 -7
View File
@@ -192,23 +192,42 @@ function formatToken(mods, key) {
return (mods.length ? mods.join("+") + "+" : "") + key;
}
function normalizeKeyCombo(keyCombo) {
if (!keyCombo)
return "";
return keyCombo.toLowerCase().replace(/\bmod\b/g, "super").replace(/\bsuper\b/g, "super");
function canonicalModifier(modifier) {
var normalized = (modifier || "").toLowerCase();
if (normalized === "control")
return "ctrl";
if (normalized === "win")
return "super";
return normalized;
}
function getConflictingBinds(keyCombo, currentAction, allBinds) {
function withSymbolicMod(mods, modKey) {
var configuredMod = canonicalModifier(modKey);
if (!configuredMod)
return mods;
return mods.map(function (modifier) {
return canonicalModifier(modifier) === configuredMod ? "Mod" : modifier;
});
}
function normalizeKeyCombo(keyCombo, modKey) {
if (!keyCombo)
return "";
var configuredMod = canonicalModifier(modKey) || "super";
return keyCombo.toLowerCase().replace(/\bmod\b/g, configuredMod).replace(/\bcontrol\b/g, "ctrl").replace(/\bwin\b/g, "super");
}
function getConflictingBinds(keyCombo, currentAction, allBinds, modKey) {
if (!keyCombo)
return [];
var conflicts = [];
var normalizedKey = normalizeKeyCombo(keyCombo);
var normalizedKey = normalizeKeyCombo(keyCombo, modKey);
for (var i = 0; i < allBinds.length; i++) {
var bind = allBinds[i];
if (bind.action === currentAction)
continue;
for (var k = 0; k < bind.keys.length; k++) {
if (normalizeKeyCombo(bind.keys[k].key) === normalizedKey) {
if (normalizeKeyCombo(bind.keys[k].key, modKey) === normalizedKey) {
conflicts.push({
action: bind.action,
desc: bind.desc || bind.action