Updating 44/vertical-workspaces to version 37+20231208 [0d82192].
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
975b88c6bb
commit
07381ac119
37 changed files with 9559 additions and 4338 deletions
|
@ -10,16 +10,27 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Gi = imports._gi;
|
||||
const { Shell, Meta, Clutter } = imports.gi;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Shell = imports.gi.Shell;
|
||||
|
||||
const Config = imports.misc.config;
|
||||
const Main = imports.ui.main;
|
||||
const Main = imports.ui.main;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
let Me;
|
||||
|
||||
var shellVersion = parseFloat(Config.PACKAGE_VERSION);
|
||||
let _installedExtensions;
|
||||
|
||||
function init(me) {
|
||||
Me = me;
|
||||
}
|
||||
|
||||
function cleanGlobals() {
|
||||
Me = null;
|
||||
_installedExtensions = null;
|
||||
}
|
||||
|
||||
var Overrides = class {
|
||||
constructor() {
|
||||
|
@ -27,8 +38,13 @@ var Overrides = class {
|
|||
}
|
||||
|
||||
addOverride(name, prototype, overrideList) {
|
||||
const backup = this.overrideProto(prototype, overrideList, name);
|
||||
// don't update originals when override's just refreshing, keep initial content
|
||||
let originals = this._overrides[name]?.originals;
|
||||
if (!originals)
|
||||
originals = backup;
|
||||
this._overrides[name] = {
|
||||
originals: this.overrideProto(prototype, overrideList),
|
||||
originals,
|
||||
prototype,
|
||||
};
|
||||
}
|
||||
|
@ -38,15 +54,15 @@ var Overrides = class {
|
|||
if (!override)
|
||||
return false;
|
||||
|
||||
this.overrideProto(override.prototype, override.originals);
|
||||
this._overrides[name] = undefined;
|
||||
this.overrideProto(override.prototype, override.originals, name);
|
||||
delete this._overrides[name];
|
||||
return true;
|
||||
}
|
||||
|
||||
removeAll() {
|
||||
for (let name in this._overrides) {
|
||||
this.removeOverride(name);
|
||||
this._overrides[name] = undefined;
|
||||
delete this._overrides[name];
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -54,13 +70,17 @@ var Overrides = class {
|
|||
proto[Gi.hook_up_vfunc_symbol](symbol, func);
|
||||
}
|
||||
|
||||
overrideProto(proto, overrides) {
|
||||
overrideProto(proto, overrides, name) {
|
||||
const backup = {};
|
||||
|
||||
const originals = this._overrides[name]?.originals;
|
||||
for (let symbol in overrides) {
|
||||
if (symbol.startsWith('after_')) {
|
||||
const actualSymbol = symbol.slice('after_'.length);
|
||||
const fn = proto[actualSymbol];
|
||||
let fn;
|
||||
if (originals && originals[actualSymbol])
|
||||
fn = originals[actualSymbol];
|
||||
else
|
||||
fn = proto[actualSymbol];
|
||||
const afterFn = overrides[symbol];
|
||||
proto[actualSymbol] = function (...args) {
|
||||
args = Array.prototype.slice.call(args);
|
||||
|
@ -72,11 +92,11 @@ var Overrides = class {
|
|||
} else {
|
||||
backup[symbol] = proto[symbol];
|
||||
if (symbol.startsWith('vfunc')) {
|
||||
if (shellVersion < 42)
|
||||
if (Me.shellVersion < 42)
|
||||
this.hookVfunc(proto, symbol.slice(6), overrides[symbol]);
|
||||
else
|
||||
this.hookVfunc(proto[Gi.gobject_prototype_symbol], symbol.slice(6), overrides[symbol]);
|
||||
} else {
|
||||
} else if (overrides[symbol] !== null) {
|
||||
proto[symbol] = overrides[symbol];
|
||||
}
|
||||
}
|
||||
|
@ -85,87 +105,21 @@ var Overrides = class {
|
|||
}
|
||||
};
|
||||
|
||||
function getOverviewTranslations(opt, dash, tmbBox, searchEntryBin) {
|
||||
// const tmbBox = Main.overview._overview._controls._thumbnailsBox;
|
||||
let searchTranslationY = 0;
|
||||
if (searchEntryBin.visible) {
|
||||
const offset = (dash.visible && (!opt.DASH_VERTICAL ? dash.height + 12 : 0)) +
|
||||
(opt.WS_TMB_TOP ? tmbBox.height + 12 : 0);
|
||||
searchTranslationY = -searchEntryBin.height - offset - 30;
|
||||
}
|
||||
|
||||
let tmbTranslationX = 0;
|
||||
let tmbTranslationY = 0;
|
||||
let offset;
|
||||
if (tmbBox.visible) {
|
||||
switch (opt.WS_TMB_POSITION) {
|
||||
case 3: // left
|
||||
offset = 10 + (dash?.visible && opt.DASH_LEFT ? dash.width : 0);
|
||||
tmbTranslationX = -tmbBox.width - offset;
|
||||
tmbTranslationY = 0;
|
||||
break;
|
||||
case 1: // right
|
||||
offset = 10 + (dash?.visible && opt.DASH_RIGHT ? dash.width : 0);
|
||||
tmbTranslationX = tmbBox.width + offset;
|
||||
tmbTranslationY = 0;
|
||||
break;
|
||||
case 0: // top
|
||||
offset = 10 + (dash?.visible && opt.DASH_TOP ? dash.height : 0) + Main.panel.height;
|
||||
tmbTranslationX = 0;
|
||||
tmbTranslationY = -tmbBox.height - offset;
|
||||
break;
|
||||
case 2: // bottom
|
||||
offset = 10 + (dash?.visible && opt.DASH_BOTTOM ? dash.height : 0) + Main.panel.height; // just for case the panel is at bottom
|
||||
tmbTranslationX = 0;
|
||||
tmbTranslationY = tmbBox.height + offset;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
let dashTranslationX = 0;
|
||||
let dashTranslationY = 0;
|
||||
let position = opt.DASH_POSITION;
|
||||
// if DtD replaced the original Dash, read its position
|
||||
if (dashIsDashToDock())
|
||||
position = dash._position;
|
||||
|
||||
if (dash?.visible) {
|
||||
switch (position) {
|
||||
case 0: // top
|
||||
dashTranslationX = 0;
|
||||
dashTranslationY = -dash.height - dash.margin_bottom - Main.panel.height;
|
||||
break;
|
||||
case 1: // right
|
||||
dashTranslationX = dash.width;
|
||||
dashTranslationY = 0;
|
||||
break;
|
||||
case 2: // bottom
|
||||
dashTranslationX = 0;
|
||||
dashTranslationY = dash.height + dash.margin_bottom + Main.panel.height;
|
||||
break;
|
||||
case 3: // left
|
||||
dashTranslationX = -dash.width;
|
||||
dashTranslationY = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return [tmbTranslationX, tmbTranslationY, dashTranslationX, dashTranslationY, searchTranslationY];
|
||||
}
|
||||
|
||||
function openPreferences() {
|
||||
function openPreferences(metadata) {
|
||||
if (!metadata)
|
||||
metadata = Me.metadata;
|
||||
const windows = global.display.get_tab_list(Meta.TabList.NORMAL_ALL, null);
|
||||
let tracker = Shell.WindowTracker.get_default();
|
||||
let metaWin, isVW = null;
|
||||
|
||||
for (let win of windows) {
|
||||
const app = tracker.get_window_app(win);
|
||||
if (win.get_title().includes(Me.metadata.name) && app.get_name() === 'Extensions') {
|
||||
if (win.get_title()?.includes(metadata.name) && app.get_name() === 'Extensions') {
|
||||
// this is our existing window
|
||||
metaWin = win;
|
||||
isVW = true;
|
||||
break;
|
||||
} else if (win.wm_class.includes('org.gnome.Shell.Extensions')) {
|
||||
} else if (win.wm_class?.includes('org.gnome.Shell.Extensions')) {
|
||||
// this is prefs window of another extension
|
||||
metaWin = win;
|
||||
isVW = false;
|
||||
|
@ -182,17 +136,20 @@ function openPreferences() {
|
|||
}
|
||||
|
||||
if (!metaWin || (metaWin && !isVW)) {
|
||||
try {
|
||||
Main.extensionManager.openExtensionPrefs(Me.metadata.uuid, '', {});
|
||||
} catch (e) {
|
||||
log(e);
|
||||
}
|
||||
GLib.idle_add(GLib.PRIORITY_LOW, () => {
|
||||
try {
|
||||
Main.extensionManager.openExtensionPrefs(metadata.uuid, '', {});
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function activateSearchProvider(prefix = '') {
|
||||
const searchEntry = Main.overview.searchEntry;
|
||||
if (!searchEntry.get_text() || !searchEntry.get_text().startsWith(prefix)) {
|
||||
const searchEntryText = searchEntry.get_text();
|
||||
if (!searchEntryText || (searchEntryText && !searchEntry.get_text().startsWith(prefix))) {
|
||||
prefix = `${prefix} `;
|
||||
const position = prefix.length;
|
||||
searchEntry.set_text(prefix);
|
||||
|
@ -220,9 +177,16 @@ function reorderWorkspace(direction = 0) {
|
|||
global.workspace_manager.reorder_workspace(activeWs, targetIdx);
|
||||
}
|
||||
|
||||
function activateKeyboardForWorkspaceView() {
|
||||
Main.ctrlAltTabManager._items.forEach(i => {
|
||||
if (i.sortGroup === 1 && i.name === 'Windows')
|
||||
Main.ctrlAltTabManager.focusGroup(i);
|
||||
});
|
||||
}
|
||||
|
||||
function exposeWindows(adjustment, activateKeyboard) {
|
||||
// expose windows for static overview modes
|
||||
if (!adjustment.value && !Main.overview._animationInProgress) {
|
||||
if (!adjustment.value/* && !Main.overview._animationInProgress*/) {
|
||||
if (adjustment.value === 0) {
|
||||
adjustment.value = 0;
|
||||
adjustment.ease(1, {
|
||||
|
@ -330,13 +294,48 @@ function isMoreRelevant(stringA, stringB, pattern) {
|
|||
return !aAny && bAny;
|
||||
}
|
||||
|
||||
function getEnabledExtensions(uuid = '') {
|
||||
let extensions = [];
|
||||
Main.extensionManager._extensions.forEach(e => {
|
||||
if (e.state === 1 && e.uuid.includes(uuid))
|
||||
extensions.push(e);
|
||||
});
|
||||
return extensions;
|
||||
function getEnabledExtensions(pattern = '') {
|
||||
let result = [];
|
||||
// extensionManager is unreliable at startup (if not all extensions were loaded)
|
||||
// but gsettings key can contain removed extensions...
|
||||
// therefore we have to look into filesystem, what's really installed
|
||||
if (!_installedExtensions) {
|
||||
const extensionFiles = [...collectFromDatadirs('extensions', true)];
|
||||
_installedExtensions = extensionFiles.map(({ info }) => {
|
||||
let fileType = info.get_file_type();
|
||||
if (fileType !== Gio.FileType.DIRECTORY)
|
||||
return null;
|
||||
const uuid = info.get_name();
|
||||
return uuid;
|
||||
});
|
||||
}
|
||||
const enabled = Main.extensionManager._enabledExtensions;
|
||||
result = _installedExtensions.filter(ext => enabled.includes(ext));
|
||||
return result.filter(uuid => uuid !== null && uuid.includes(pattern));
|
||||
}
|
||||
|
||||
function* collectFromDatadirs(subdir, includeUserDir) {
|
||||
let dataDirs = GLib.get_system_data_dirs();
|
||||
if (includeUserDir)
|
||||
dataDirs.unshift(GLib.get_user_data_dir());
|
||||
|
||||
for (let i = 0; i < dataDirs.length; i++) {
|
||||
let path = GLib.build_filenamev([dataDirs[i], 'gnome-shell', subdir]);
|
||||
let dir = Gio.File.new_for_path(path);
|
||||
|
||||
let fileEnum;
|
||||
try {
|
||||
fileEnum = dir.enumerate_children('standard::name,standard::type',
|
||||
Gio.FileQueryInfoFlags.NONE, null);
|
||||
} catch (e) {
|
||||
fileEnum = null;
|
||||
}
|
||||
if (fileEnum !== null) {
|
||||
let info;
|
||||
while ((info = fileEnum.next_file(null)))
|
||||
yield { dir: fileEnum.get_child(info), info };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function getScrollDirection(event) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue