72 lines
2.4 KiB
JavaScript
72 lines
2.4 KiB
JavaScript
// gpl v3
|
|
// Based on:
|
|
// https://github.com/maoschanz/Move-OSD-Windows-GNOME-Extension/issues/2 --> Thank you @maoschanz
|
|
// https://discourse.gnome.org/t/how-can-i-move-the-workspace-switcher-popup-to-the-right/6940 --> Thank you @GdH
|
|
|
|
const Main = imports.ui.main;
|
|
const WorkspaceSwitcherPopup = imports.ui.workspaceSwitcherPopup;
|
|
|
|
const ExtensionUtils = imports.misc.extensionUtils;
|
|
const Me = ExtensionUtils.getCurrentExtension();
|
|
const Convenience = Me.imports.convenience;
|
|
|
|
let initWSP;
|
|
|
|
function init() {
|
|
Convenience.initTranslations();
|
|
initWSP = WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype._show;
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function injectToFunction(parent, name, func) {
|
|
let origin = parent[name];
|
|
parent[name] = function() {
|
|
let ret;
|
|
ret = origin.apply(this, arguments);
|
|
if (ret === undefined)
|
|
ret = func.apply(this, arguments);
|
|
return ret;
|
|
}
|
|
return origin;
|
|
}
|
|
|
|
function removeInjection(object, injection, name) {
|
|
if (injection[name] === undefined)
|
|
delete object[name];
|
|
else
|
|
object[name] = injection[name];
|
|
}
|
|
|
|
let injections=[];
|
|
|
|
//------------------------------------------------------------------------------
|
|
|
|
function enable() {
|
|
let settings = Convenience.getSettings('org.gnome.shell.extensions.move-workspaceSwitcherPopup');
|
|
|
|
injections['_redisplay'] = injectToFunction(
|
|
WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype, '_redisplay', function() {
|
|
|
|
if(settings.get_boolean('hide')) {
|
|
WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype._show = function() { return false };
|
|
} else {
|
|
WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype._show = initWSP;
|
|
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
|
let [, containerNatHeight] = this._container.get_preferred_height(global.screen_width);
|
|
let [, containerNatWidth] = this._container.get_preferred_width(containerNatHeight);
|
|
let h_percent = settings.get_int('horizontal');
|
|
let v_percent = settings.get_int('vertical');
|
|
|
|
this._container.x = workArea.x + Math.floor((workArea.width - containerNatWidth) * (h_percent/100));
|
|
this._container.y = workArea.y + Math.floor((workArea.height - containerNatHeight) * (v_percent/100));
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
function disable() {
|
|
WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype._show = initWSP;
|
|
removeInjection(WorkspaceSwitcherPopup.WorkspaceSwitcherPopup.prototype, injections, '_redisplay');
|
|
}
|