]> code.delx.au - sometimes-steal-my-focus/blob - extension.js
Initial commit
[sometimes-steal-my-focus] / extension.js
1 const {
2 windowAttentionHandler: defaultWindowAttentionHandler,
3 activateWindow
4 } = imports.ui.main;
5
6 const WHITELIST = [
7 "Emacs",
8 "Firefox"
9 ];
10
11 const customWindowAttentionHandler = {
12 _onWindowDemandsAttention(display, window) {
13 if (WHITELIST.includes(window.wm_class)) {
14 activateWindow(window);
15 } else {
16 defaultWindowAttentionHandler._onWindowDemandsAttention(display, window);
17 }
18 }
19 };
20
21 function connect(obj) {
22 const handler = obj._onWindowDemandsAttention.bind(obj);
23 obj._windowDemandsAttentionId = global.display.connect('window-demands-attention', handler);
24 obj._windowMarkedUrgentId = global.display.connect('window-marked-urgent', handler);
25 }
26
27 function disconnect(obj) {
28 global.display.disconnect(obj._windowDemandsAttentionId);
29 global.display.disconnect(obj._windowMarkedUrgentId);
30 }
31
32 function init() {
33 }
34
35 function enable() {
36 log('Disconnecting default handler');
37 disconnect(defaultWindowAttentionHandler);
38
39 log('Connecting custom handler');
40 connect(customWindowAttentionHandler);
41
42 log('Enabled!');
43 }
44
45 function disable() {
46 log('Disconnecting custom handler');
47 disconnect(customWindowAttentionHandler);
48
49 log('Reconnecting default handler');
50 connect(defaultWindowAttentionHandler);
51
52 log('Disabled!');
53 }