forked from emasab/shelltile
-
Notifications
You must be signed in to change notification settings - Fork 0
/
keymanager.js
56 lines (46 loc) · 1.85 KB
/
keymanager.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
const Lang = imports.lang;
const Meta = imports.gi.Meta;
const Shell = imports.gi.Shell;
const Main = imports.ui.main;
const Extension = imports.misc.extensionUtils.getCurrentExtension();
const Compatibility = Extension.imports.util.Compatibility;
var KeyManager = new Lang.Class({
Name: 'MyKeyManager',
_init: function(){
this.grabbers = new Map()
Compatibility.get_display().connect(
'accelerator-activated',
Lang.bind(this, function(display, action, deviceId, timestamp){
//log('Accelerator Activated: [display={}, action={}, deviceId={}, timestamp={}]',
// display, action, deviceId, timestamp)
this._onAccelerator(action)
}))
},
listenFor: function(accelerator, callback){
//log('Trying to listen for hot key [accelerator={}]', accelerator)
let action = Compatibility.get_display().grab_accelerator(accelerator)
if(action == Meta.KeyBindingAction.NONE){
//log('Unable to grab accelerator [binding={}]', accelerator)
} else {
//log('Grabbed accelerator [action={}]', action)
let name = Meta.external_binding_name_for_action(action)
//log('Received binding name for action [name={}, action={}]',
// name, action)
//log('Requesting WM to allow binding [name={}]', name)
Main.wm.allowKeybinding(name, Shell.ActionMode.ALL)
this.grabbers.set(action, {
name: name,
accelerator: accelerator,
callback: callback
})
}
},
_onAccelerator: function(action){
let grabber = this.grabbers.get(action)
if(grabber){
this.grabbers.get(action).callback()
} else {
//log('No listeners [action={}]', action)
}
}
});