Use normal QtQuick.Shortcut

This commit is contained in:
miruka
2019-12-08 12:42:40 -04:00
parent 793db51a60
commit c2f5a5bcbc
6 changed files with 41 additions and 120 deletions

View File

@@ -41,7 +41,5 @@ ScrollView {
event.modifiers & Qt.AltModifier ||
event.modifiers & Qt.MetaModifier
) event.accepted = true
Keys.forwardTo: mainUI.shortcuts
}
}

View File

@@ -1,10 +1,5 @@
import QtQuick 2.12
QtObject {
signal pressed(var event)
signal held(var event)
signal released(var event)
property bool enabled: true
property var sequences: "" // shortcut string array of shortcut strings
Shortcut {
context: Qt.ApplicationShortcut
}

View File

@@ -1,65 +0,0 @@
import QtQuick 2.12
Item {
id: shortcutHandler
Keys.onPressed: {
let shortcut = match(event)
if (! shortcut) return
event.accepted = true
event.isAutoRepeat ? shortcut.held(event) : shortcut.pressed(event)
}
Keys.onReleased: {
if (event.isAutoRepeat) return
let shortcut = match(event)
if (! shortcut) return
event.accepted = true
if (shortcut && ! event.isAutoRepeat) shortcut.released(event)
}
readonly property var modifierDict: ({
Ctrl: Qt.ControlModifier,
Shift: Qt.ShiftModifier,
Alt: Qt.AltModifier,
Meta: Qt.MetaModifier,
})
function match(event) {
for (let i = 0; i < shortcutHandler.resources.length; i++) {
let shortcut = shortcutHandler.resources[i]
if (! shortcut.enabled) continue
if (typeof(shortcut.sequences) == "string") {
shortcut.sequences = [shortcut.sequences]
}
for (let i = 0; i < shortcut.sequences.length; i++) {
if (sequenceMatches(event, shortcut.sequences[i])) {
return shortcut
}
}
}
return null
}
function sequenceMatches(event, sequence) {
let [key, ...mods] = sequence.split("+").reverse()
key = key.charAt(0).toUpperCase() + key.slice(1)
if (event.key !== Qt["Key_" + key]) return false
for (let [name, code] of Object.entries(modifierDict)) {
if (mods.includes(name) && ! (event.modifiers & code)) return false
if (! mods.includes(name) && event.modifiers & code) return false
}
return true
}
}

View File

@@ -49,6 +49,4 @@ TextField {
event.modifiers & Qt.AltModifier ||
event.modifiers & Qt.MetaModifier
) event.accepted = true
Keys.forwardTo: mainUI.shortcuts
}