Files
PaperWM/modifierTracker.js
2018-07-01 17:12:51 +02:00

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);
}