blob: cf3d4c12612ee2ad399ed5aa33ac6aad7427edab (
plain)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
/**
* V-Shell (Vertical Workspaces)
* workspacesSwitcherPopup.js
*
* @author GdH <G-dH@github.com>
* @copyright 2022 - 2024
* @license GPL-3.0
*
*/
'use strict';
import * as Main from 'resource:///org/gnome/shell/ui/main.js';
import * as WorkspaceSwitcherPopup from 'resource:///org/gnome/shell/ui/workspaceSwitcherPopup.js';
let Me;
let opt;
export const WorkspaceSwitcherPopupModule = class {
constructor(me) {
Me = me;
opt = Me.opt;
this._firstActivation = true;
this.moduleEnabled = false;
this._overrides = null;
}
cleanGlobals() {
Me = null;
opt = null;
}
update(reset) {
this.moduleEnabled = opt.get('workspaceSwitcherPopupModule');
const conflict = Me.Util.getEnabledExtensions('workspace-switcher-manager').length ||
Me.Util.getEnabledExtensions('WsSwitcherPopupManager').length;
if (conflict && !reset)
console.warn(`[${Me.metadata.name}] Warning: "WorkspaceSwitcherPopup" module disabled due to potential conflict with another extension`);
reset = reset || !this.moduleEnabled || conflict;
// don't touch original code if module disabled
if (reset && !this._firstActivation) {
this._disableModule();
} else if (!reset) {
this._firstActivation = false;
this._activateModule();
}
if (reset && this._firstActivation)
console.debug(' WorkspaceSwitcherPopupModule - Keeping untouched');
}
_activateModule() {
if (!this._overrides)
this._overrides = new Me.Util.Overrides();
this._overrides.addOverride('WorkspaceSwitcherPopup', WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype, WorkspaceSwitcherPopupCommon);
console.debug(' WorkspaceSwitcherPopupModule - Activated');
}
_disableModule() {
if (this._overrides)
this._overrides.removeAll();
this._overrides = null;
console.debug(' WorkspaceSwitcherPopupModule - Disabled');
}
};
const WorkspaceSwitcherPopupCommon = {
// injection to _init()
after__init() {
if (opt.ORIENTATION) { // 1-VERTICAL, 0-HORIZONTAL
this._list.vertical = true;
this._list.add_style_class_name('ws-switcher-vertical');
}
this._list.set_style('margin: 0;');
if (this.get_constraints()[0])
this.remove_constraint(this.get_constraints()[0]);
},
// injection to display()
after_display() {
if (opt.WS_SW_POPUP_MODE)
this._setPopupPosition();
else
this.opacity = 0;
},
_setPopupPosition() {
let workArea;
if (opt.WS_SW_POPUP_MODE === 1)
workArea = global.display.get_monitor_geometry(Main.layoutManager.primaryIndex);
else
workArea = global.display.get_monitor_geometry(global.display.get_current_monitor());
let [, natHeight] = this.get_preferred_height(global.screen_width);
let [, natWidth] = this.get_preferred_width(natHeight);
let h = opt.WS_SW_POPUP_H_POSITION;
let v = opt.WS_SW_POPUP_V_POSITION;
this.x = workArea.x + Math.floor((workArea.width - natWidth) * h);
this.y = workArea.y + Math.floor((workArea.height - natHeight) * v);
this.set_position(this.x, this.y);
},
};
|