-
Notifications
You must be signed in to change notification settings - Fork 0
/
extension.js
86 lines (64 loc) · 1.8 KB
/
extension.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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
'use strict';
// http://mathematicalcoffee.blogspot.no/2012/09/developing-gnome-shell-extensions.html
const St = imports.gi.St;
const Main = imports.ui.main;
const Tweener = imports.ui.tweener;
const Lang = imports.lang;
let windowTagger;
const WindowMap = new Lang.Class ({
Name: 'WindowMap',
_init: function() {
this.windowToKeyMap = {};
this.keyToWindowMap = {};
},
rv: Object.freeze({
Success: 1,
ErrWindowExists: 2,
ErrKeyExists: 3
}),
add: function(window, key) {
if (this.windowToKeyMap[window] !== undefined) {
return this.rv.ErrWindowExists;
}
if (this.keyToWindowMap[key] !== undefined) {
return this.rv.ErrKeyExists;
}
this.windowToKeyMap[window] = key;
this.keyToWindowMap[key] = window;
return this.rv.Success;
},
window: function(key) {
return this.keyToWindowMap[key] || null;
},
key: function(window) {
return this.windowToKeyMap[window] || null;
},
remove_window: function(window) {
let key = this.windowToKeyMap[window];
delete this.windowToKeyMap[window];
delete this.keyToWindowMap[key];
},
remove_key: function(key) {
let window = this.keyToWindowMap[key];
delete this.keyToWindowMap[key];
delete this.windowToKeyMap[window];
}
});
const WindowTagger = new Lang.Class({
Name: 'WindowTagger',
_init: function() {
this.windowMap = new WindowMap();
},
focus: function(key) {
let window = this.windowMap.window(key);
Main.activateWindow(window);
},
destroy: function() { }
});
function init() { }
function enable() {
windowTagger = new WindowTagger();
}
function disable() {
windowTagger.destroy();
}