Use normal QtQuick.Shortcut
This commit is contained in:
@@ -41,7 +41,5 @@ ScrollView {
|
||||
event.modifiers & Qt.AltModifier ||
|
||||
event.modifiers & Qt.MetaModifier
|
||||
) event.accepted = true
|
||||
|
||||
Keys.forwardTo: mainUI.shortcuts
|
||||
}
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
@@ -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
|
||||
}
|
||||
|
||||
}
|
@@ -49,6 +49,4 @@ TextField {
|
||||
event.modifiers & Qt.AltModifier ||
|
||||
event.modifiers & Qt.MetaModifier
|
||||
) event.accepted = true
|
||||
|
||||
Keys.forwardTo: mainUI.shortcuts
|
||||
}
|
||||
|
Reference in New Issue
Block a user