dotfiles/.local/share/gnome-shell/extensions/move-workspaceSwitcherPopup.../extension.js

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');
}