mirror of
https://github.com/gosticks/PaperWM.git
synced 2026-10-05 11:46:57 +00:00
60 lines
1.8 KiB
JavaScript
60 lines
1.8 KiB
JavaScript
var Extension = imports.misc.extensionUtils.extensions['paperwm@hedning:matrix.org'];
|
|
var Utils = Extension.imports.utils;
|
|
var Me = Extension.imports.modifierTracker;
|
|
var Gdk = imports.gi.Gdk;
|
|
var Signals = imports.signals;
|
|
var Meta = imports.gi.Meta;
|
|
|
|
|
|
var trackedModifiers = [
|
|
["Super", Gdk.ModifierType.MOD4_MASK]
|
|
];
|
|
|
|
var keymap;
|
|
var prevState = 0;
|
|
|
|
function stateChangedHandler() {
|
|
let curState = keymap.get_modifier_state()
|
|
/// A maze of different kind of mask, can't find the right conversion.. :(
|
|
// Meta.VirtualModifier
|
|
// Gdk.ModifierType
|
|
// const mask = keymap.get_modifier_mask(Gdk.ModifierIntent.DEFAULT_MOD_MASK)
|
|
// let [suc, rawMask] = keymap.map_virtual_modifiers(curState)
|
|
// curState = rawMask;
|
|
// const withVirtual = keymap.add_virtual_modifiers(mask)
|
|
// curState = withVirtual;
|
|
const removed = prevState & ~curState
|
|
const added = curState & ~prevState
|
|
// log("Added/removed", added, removed)
|
|
trackedModifiers.forEach(([name, mask]) => {
|
|
if (removed & mask) {
|
|
// log(`Me.emit('modifier-up', ${name});`)
|
|
Me.emit('modifier-up', mask, name, added);
|
|
}
|
|
if (added & mask) {
|
|
// log(`Me.emit('modifier-down', ${name});`)
|
|
Me.emit('modifier-down', mask, name, removed);
|
|
}
|
|
});
|
|
prevState = curState;
|
|
}
|
|
|
|
var stateChangedId;
|
|
|
|
function enable() {
|
|
Signals.addSignalMethods(Me)
|
|
keymap = Gdk.Keymap.get_default();
|
|
stateChangedId = keymap.connect(
|
|
'state-changed',
|
|
Utils.dynamic_function_ref(stateChangedHandler.name, Me)
|
|
)
|
|
|
|
// Me.connect('modifier-down', log.bind(log, "modifier-down"))
|
|
// Me.connect('modifier-up', log.bind(log, "modifier-up"))
|
|
}
|
|
|
|
function disable() {
|
|
keymap.disconnect(stateChangedId);
|
|
}
|
|
|