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,56 +10,90 @@
|
|||
|
||||
'use strict';
|
||||
|
||||
const { GLib, Clutter, Graphene, Meta, Shell, St } = imports.gi;
|
||||
const Clutter = imports.gi.Clutter;
|
||||
const Gio = imports.gi.Gio;
|
||||
const GLib = imports.gi.GLib;
|
||||
const Meta = imports.gi.Meta;
|
||||
const Shell = imports.gi.Shell;
|
||||
const St = imports.gi.St;
|
||||
|
||||
const AppDisplay = imports.ui.appDisplay;
|
||||
const Background = imports.ui.background;
|
||||
const DND = imports.ui.dnd;
|
||||
const Main = imports.ui.main;
|
||||
const Background = imports.ui.background;
|
||||
const OverviewControls = imports.ui.overviewControls;
|
||||
const WorkspaceThumbnail = imports.ui.workspaceThumbnail;
|
||||
|
||||
let Me;
|
||||
let opt;
|
||||
|
||||
const ThumbnailState = WorkspaceThumbnail.ThumbnailState;
|
||||
|
||||
const ControlsState = imports.ui.overviewControls.ControlsState;
|
||||
|
||||
const ExtensionUtils = imports.misc.extensionUtils;
|
||||
const Me = ExtensionUtils.getCurrentExtension();
|
||||
|
||||
// gettext
|
||||
const _ = Me.imports.lib.settings._;
|
||||
|
||||
const _Util = Me.imports.lib.util;
|
||||
const shellVersion = _Util.shellVersion;
|
||||
|
||||
let _overrides;
|
||||
const ControlsState = OverviewControls.ControlsState;
|
||||
|
||||
const WORKSPACE_CUT_SIZE = 10;
|
||||
const _originalMaxThumbnailScale = WorkspaceThumbnail.MAX_THUMBNAIL_SCALE;
|
||||
|
||||
let opt = null;
|
||||
var WorkspaceThumbnailModule = class {
|
||||
constructor(me) {
|
||||
Me = me;
|
||||
opt = Me.opt;
|
||||
|
||||
function update(reset = false) {
|
||||
if (_overrides)
|
||||
_overrides.removeAll();
|
||||
|
||||
|
||||
if (reset) {
|
||||
if (_originalMaxThumbnailScale)
|
||||
WorkspaceThumbnail.MAX_THUMBNAIL_SCALE = _originalMaxThumbnailScale;
|
||||
_overrides = null;
|
||||
opt = null;
|
||||
return;
|
||||
this._firstActivation = true;
|
||||
this.moduleEnabled = false;
|
||||
this._overrides = null;
|
||||
}
|
||||
|
||||
opt = Me.imports.lib.settings.opt;
|
||||
_overrides = new _Util.Overrides();
|
||||
cleanGlobals() {
|
||||
Me = null;
|
||||
opt = null;
|
||||
}
|
||||
|
||||
// don't limit max thumbnail scale for other clients than overview, for example AATWS.
|
||||
WorkspaceThumbnail.MAX_THUMBNAIL_SCALE = 1;
|
||||
update(reset) {
|
||||
this.moduleEnabled = true;
|
||||
const conflict = false;
|
||||
|
||||
_overrides.addOverride('WorkspaceThumbnail', WorkspaceThumbnail.WorkspaceThumbnail.prototype, WorkspaceThumbnailCommon);
|
||||
_overrides.addOverride('ThumbnailsBoxCommon', WorkspaceThumbnail.ThumbnailsBox.prototype, ThumbnailsBoxCommon);
|
||||
reset = reset || !this.moduleEnabled || conflict;
|
||||
|
||||
// replacing opt.ORIENTATION local constant with boxOrientation internal variable allows external customers such as the AATWS extension to control the box orientation.
|
||||
Main.overview._overview.controls._thumbnailsBox._boxOrientation = opt.ORIENTATION;
|
||||
}
|
||||
// don't touch the 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(' WorkspaceThumbnailModule - Keeping untouched');
|
||||
}
|
||||
|
||||
_activateModule() {
|
||||
if (!this._overrides)
|
||||
this._overrides = new Me.Util.Overrides();
|
||||
|
||||
if (!this._originalMaxThumbnailScale)
|
||||
this._originalMaxThumbnailScale = WorkspaceThumbnail.MAX_THUMBNAIL_SCALE;
|
||||
|
||||
// don't limit max thumbnail scale for other clients than overview, specifically AATWS.
|
||||
WorkspaceThumbnail.MAX_THUMBNAIL_SCALE = 1;
|
||||
// WorkspaceThumbnail.ThumbnailsBox._MAX_THUMBNAIL_SCALE = 1;
|
||||
|
||||
this._overrides.addOverride('WorkspaceThumbnail', WorkspaceThumbnail.WorkspaceThumbnail.prototype, WorkspaceThumbnailCommon);
|
||||
this._overrides.addOverride('ThumbnailsBoxCommon', WorkspaceThumbnail.ThumbnailsBox.prototype, ThumbnailsBoxCommon);
|
||||
|
||||
// replacing opt.ORIENTATION local constant with boxOrientation internal variable allows external customers such as the AATWS extension to control the box orientation.
|
||||
Main.overview._overview.controls._thumbnailsBox._boxOrientation = opt.ORIENTATION;
|
||||
|
||||
console.debug(' WorkspaceThumbnailModule - Activated');
|
||||
}
|
||||
|
||||
_disableModule() {
|
||||
if (this._overrides)
|
||||
this._overrides.removeAll();
|
||||
this._overrides = null;
|
||||
|
||||
WorkspaceThumbnail.MAX_THUMBNAIL_SCALE = this._originalMaxThumbnailScale;
|
||||
|
||||
console.debug(' WorkspaceThumbnailModule - Disabled');
|
||||
}
|
||||
};
|
||||
|
||||
const WorkspaceThumbnailCommon = {
|
||||
// injection to _init()
|
||||
|
@ -70,6 +104,8 @@ const WorkspaceThumbnailCommon = {
|
|||
// unless border is removed
|
||||
if (opt.SHOW_WS_TMB_BG)
|
||||
this.add_style_class_name('ws-tmb-labeled');
|
||||
else
|
||||
this.add_style_class_name('ws-tmb-transparent');
|
||||
|
||||
// add workspace thumbnails labels if enabled
|
||||
if (opt.SHOW_WST_LABELS) { // 0 - disable
|
||||
|
@ -77,7 +113,7 @@ const WorkspaceThumbnailCommon = {
|
|||
const wsIndex = this.metaWorkspace.index();
|
||||
let label = `${wsIndex + 1}`;
|
||||
if (opt.SHOW_WST_LABELS === 2) { // 2 - index + workspace name
|
||||
const settings = ExtensionUtils.getSettings('org.gnome.desktop.wm.preferences');
|
||||
const settings = new Gio.Settings({ schema_id: 'org.gnome.desktop.wm.preferences' });
|
||||
const wsLabels = settings.get_strv('workspace-names');
|
||||
if (wsLabels.length > wsIndex && wsLabels[wsIndex])
|
||||
label += `: ${wsLabels[wsIndex]}`;
|
||||
|
@ -129,7 +165,9 @@ const WorkspaceThumbnailCommon = {
|
|||
}
|
||||
});
|
||||
this._nWindowsConId = this.metaWorkspace.connect('notify::n-windows', () => {
|
||||
// wait for new information
|
||||
if (this._updateLabelTimeout)
|
||||
return;
|
||||
// wait for new data
|
||||
this._updateLabelTimeout = GLib.timeout_add(GLib.PRIORITY_DEFAULT, 250, () => {
|
||||
const newLabel = getLabel();
|
||||
this._wsLabel.text = newLabel;
|
||||
|
@ -168,7 +206,7 @@ const WorkspaceThumbnailCommon = {
|
|||
closeButton.opacity = 255;
|
||||
if (!Meta.prefs_get_dynamic_workspaces() || (Meta.prefs_get_dynamic_workspaces() && global.workspace_manager.get_n_workspaces() - 1 !== this.metaWorkspace.index())) {
|
||||
// color the button red if ready to react on clicks
|
||||
if (opt.CLOSE_WS_BUTTON_MODE < 3 || (opt.CLOSE_WS_BUTTON_MODE === 3 && _Util.isCtrlPressed()))
|
||||
if (opt.CLOSE_WS_BUTTON_MODE < 3 || (opt.CLOSE_WS_BUTTON_MODE === 3 && Me.Util.isCtrlPressed()))
|
||||
closeButton.add_style_class_name('workspace-close-button-hover');
|
||||
}
|
||||
});
|
||||
|
@ -220,12 +258,6 @@ const WorkspaceThumbnailCommon = {
|
|||
|
||||
this._viewport.set_child_below_sibling(this._bgManager.backgroundActor, null);
|
||||
|
||||
this.connect('destroy', () => {
|
||||
if (this._bgManager)
|
||||
this._bgManager.destroy();
|
||||
this._bgManager = null;
|
||||
});
|
||||
|
||||
// full brightness of the thumbnail bg draws unnecessary attention
|
||||
// there is a grey bg under the wallpaper
|
||||
this._bgManager.backgroundActor.opacity = 220;
|
||||
|
@ -256,7 +288,7 @@ const WorkspaceThumbnailCommon = {
|
|||
this._lastCloseClickTime = Date.now();
|
||||
return;
|
||||
}
|
||||
} else if (opt.CLOSE_WS_BUTTON_MODE === 3 && !_Util.isCtrlPressed()) {
|
||||
} else if (opt.CLOSE_WS_BUTTON_MODE === 3 && !Me.Util.isCtrlPressed()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -335,7 +367,7 @@ const WorkspaceThumbnailCommon = {
|
|||
if (!source.app && source.shellWorkspaceLaunch)
|
||||
return DND.DragMotionResult.COPY_DROP;
|
||||
|
||||
if (source instanceof imports.ui.appDisplay.FolderIcon)
|
||||
if (source instanceof AppDisplay.FolderIcon)
|
||||
return DND.DragMotionResult.COPY_DROP;
|
||||
|
||||
|
||||
|
@ -369,8 +401,8 @@ const WorkspaceThumbnailCommon = {
|
|||
timestamp: time,
|
||||
});
|
||||
return true;
|
||||
} else if (source instanceof imports.ui.appDisplay.FolderIcon) {
|
||||
if (shellVersion >= 44) {
|
||||
} else if (source instanceof AppDisplay.FolderIcon) {
|
||||
if (Me.shellVersion >= 44) {
|
||||
for (let app of source.view._apps) {
|
||||
// const app = Shell.AppSystem.get_default().lookup_app(id);
|
||||
app.open_new_window(this.metaWorkspace.index());
|
||||
|
@ -419,7 +451,7 @@ const ThumbnailsBoxCommon = {
|
|||
if (!source.metaWindow &&
|
||||
(!source.app || !source.app.can_open_new_window()) &&
|
||||
(source.app || !source.shellWorkspaceLaunch) &&
|
||||
!(source instanceof imports.ui.appDisplay.FolderIcon))
|
||||
!(source instanceof AppDisplay.FolderIcon))
|
||||
return false;
|
||||
|
||||
|
||||
|
@ -448,8 +480,8 @@ const ThumbnailsBoxCommon = {
|
|||
workspace: newWorkspaceIndex,
|
||||
timestamp: time,
|
||||
});
|
||||
} else if (source instanceof imports.ui.appDisplay.FolderIcon) {
|
||||
if (shellVersion >= 44) {
|
||||
} else if (source instanceof AppDisplay.FolderIcon) {
|
||||
if (Me.shellVersion >= 44) {
|
||||
for (let app of source.view._apps) {
|
||||
// const app = Shell.AppSystem.get_default().lookup_app(id);
|
||||
app.open_new_window(newWorkspaceIndex);
|
||||
|
@ -495,7 +527,7 @@ const ThumbnailsBoxCommon = {
|
|||
if (!source.metaWindow &&
|
||||
(!source.app || !source.app.can_open_new_window()) &&
|
||||
(source.app || !source.shellWorkspaceLaunch) &&
|
||||
source !== Main.xdndHandler && !(source instanceof imports.ui.appDisplay.FolderIcon))
|
||||
source !== Main.xdndHandler && !(source instanceof AppDisplay.FolderIcon))
|
||||
return DND.DragMotionResult.CONTINUE;
|
||||
|
||||
const rtl = Clutter.get_default_text_direction() === Clutter.TextDirection.RTL;
|
||||
|
@ -551,18 +583,18 @@ const ThumbnailsBoxCommon = {
|
|||
return ThumbnailsBoxHorizontal._withinWorkspace.bind(this)(...args);
|
||||
},
|
||||
|
||||
get_preferred_custom_width(...args) {
|
||||
vfunc_get_preferred_width(...args) {
|
||||
if (this._boxOrientation)
|
||||
return ThumbnailsBoxVertical.get_preferred_custom_width.bind(this)(...args);
|
||||
return ThumbnailsBoxVertical.vfunc_get_preferred_width.bind(this)(...args);
|
||||
else
|
||||
return ThumbnailsBoxHorizontal.get_preferred_custom_width.bind(this)(...args);
|
||||
return ThumbnailsBoxHorizontal.vfunc_get_preferred_width.bind(this)(...args);
|
||||
},
|
||||
|
||||
get_preferred_custom_height(...args) {
|
||||
vfunc_get_preferred_height(...args) {
|
||||
if (this._boxOrientation)
|
||||
return ThumbnailsBoxVertical.get_preferred_custom_height.bind(this)(...args);
|
||||
return ThumbnailsBoxVertical.vfunc_get_preferred_height.bind(this)(...args);
|
||||
else
|
||||
return ThumbnailsBoxHorizontal.get_preferred_custom_height.bind(this)(...args);
|
||||
return ThumbnailsBoxHorizontal.vfunc_get_preferred_height.bind(this)(...args);
|
||||
},
|
||||
|
||||
vfunc_allocate(...args) {
|
||||
|
@ -632,14 +664,9 @@ const ThumbnailsBoxVertical = {
|
|||
return y > workspaceY1 && y <= workspaceY2;
|
||||
},
|
||||
|
||||
// vfunc_get_preferred_width: function(forHeight) {
|
||||
// override of this vfunc doesn't work for some reason (tested on Ubuntu and Fedora), it's not reachable
|
||||
get_preferred_custom_width(forHeight) {
|
||||
if (!this.visible)
|
||||
return [0, 0];
|
||||
|
||||
if (forHeight === -1)
|
||||
return this.get_preferred_custom_height(forHeight);
|
||||
vfunc_get_preferred_width(forHeight) {
|
||||
if (forHeight < 10)
|
||||
return [this._porthole.width, this._porthole.width];
|
||||
|
||||
let themeNode = this.get_theme_node();
|
||||
|
||||
|
@ -652,19 +679,14 @@ const ThumbnailsBoxVertical = {
|
|||
const avail = forHeight - totalSpacing;
|
||||
|
||||
let scale = (avail / nWorkspaces) / this._porthole.height;
|
||||
// scale = Math.min(scale, opt.MAX_THUMBNAIL_SCALE);
|
||||
|
||||
const width = Math.round(this._porthole.width * scale);
|
||||
return themeNode.adjust_preferred_height(width, width);
|
||||
},
|
||||
|
||||
get_preferred_custom_height(_forWidth) {
|
||||
if (!this.visible)
|
||||
return [0, 0];
|
||||
|
||||
// Note that for getPreferredHeight/Width we cheat a bit and skip propagating
|
||||
// the size request to our children because we know how big they are and know
|
||||
// that the actors aren't depending on the virtual functions being called.
|
||||
vfunc_get_preferred_height(forWidth) {
|
||||
if (forWidth < 10)
|
||||
return [0, this._porthole.height];
|
||||
let themeNode = this.get_theme_node();
|
||||
|
||||
let spacing = themeNode.get_length('spacing');
|
||||
|
@ -674,15 +696,14 @@ const ThumbnailsBoxVertical = {
|
|||
let totalSpacing = (nWorkspaces - 3) * spacing;
|
||||
|
||||
const ratio = this._porthole.width / this._porthole.height;
|
||||
const tmbHeight = themeNode.adjust_for_width(_forWidth) / ratio;
|
||||
const tmbHeight = themeNode.adjust_for_width(forWidth) / ratio;
|
||||
|
||||
const naturalheight = this._thumbnails.reduce((accumulator, thumbnail/* , index*/) => {
|
||||
const progress = 1 - thumbnail.collapse_fraction;
|
||||
const height = tmbHeight * progress;
|
||||
return accumulator + height;
|
||||
}, 0);
|
||||
|
||||
return themeNode.adjust_preferred_width(totalSpacing, naturalheight);
|
||||
return themeNode.adjust_preferred_width(totalSpacing, Math.round(naturalheight));
|
||||
},
|
||||
|
||||
// removes extra space (extraWidth in the original function), we need the box as accurate as possible
|
||||
|
@ -759,16 +780,11 @@ const ThumbnailsBoxVertical = {
|
|||
this._dropPlaceholder.allocate_preferred_size(
|
||||
...this._dropPlaceholder.get_position());
|
||||
|
||||
if (shellVersion >= 44) {
|
||||
const laters = global.compositor.get_laters();
|
||||
laters.add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.hide();
|
||||
});
|
||||
} else {
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.hide();
|
||||
});
|
||||
}
|
||||
const laterFunc = () => this._dropPlaceholder.hide();
|
||||
if (Meta.later_add)
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
else
|
||||
global.compositor.get_laters().add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
}
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
@ -796,16 +812,11 @@ const ThumbnailsBoxVertical = {
|
|||
|
||||
this._dropPlaceholder.allocate(childBox);
|
||||
|
||||
if (shellVersion >= 44) {
|
||||
const laters = global.compositor.get_laters();
|
||||
laters.add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.show();
|
||||
});
|
||||
} else {
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.show();
|
||||
});
|
||||
}
|
||||
const laterFunc = () => this._dropPlaceholder.show();
|
||||
if (Meta.later_add)
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
else
|
||||
global.compositor.get_laters().add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
y += placeholderHeight + spacing;
|
||||
}
|
||||
|
||||
|
@ -925,7 +936,10 @@ const ThumbnailsBoxHorizontal = {
|
|||
return x > workspaceX1 && x <= workspaceX2;
|
||||
},
|
||||
|
||||
get_preferred_custom_height(forWidth) {
|
||||
vfunc_get_preferred_height(forWidth) {
|
||||
if (forWidth < 10)
|
||||
return [this._porthole.height, this._porthole.height];
|
||||
|
||||
let themeNode = this.get_theme_node();
|
||||
|
||||
forWidth = themeNode.adjust_for_width(forWidth);
|
||||
|
@ -937,18 +951,15 @@ const ThumbnailsBoxHorizontal = {
|
|||
const avail = forWidth - totalSpacing;
|
||||
|
||||
let scale = (avail / nWorkspaces) / this._porthole.width;
|
||||
// scale = Math.min(scale, opt.MAX_THUMBNAIL_SCALE);
|
||||
|
||||
const height = Math.round(this._porthole.height * scale);
|
||||
|
||||
return themeNode.adjust_preferred_height(height, height);
|
||||
},
|
||||
|
||||
get_preferred_custom_width(_forHeight) {
|
||||
// Note that for getPreferredHeight/Width we cheat a bit and skip propagating
|
||||
// the size request to our children because we know how big they are and know
|
||||
// that the actors aren't depending on the virtual functions being called.
|
||||
if (!this.visible)
|
||||
return [0, 0];
|
||||
vfunc_get_preferred_width(forHeight) {
|
||||
if (forHeight < 10)
|
||||
return [0, this._porthole.width];
|
||||
|
||||
let themeNode = this.get_theme_node();
|
||||
|
||||
|
@ -959,13 +970,14 @@ const ThumbnailsBoxHorizontal = {
|
|||
|
||||
const ratio = this._porthole.height / this._porthole.width;
|
||||
|
||||
const tmbWidth = themeNode.adjust_for_height(_forHeight) / ratio;
|
||||
const tmbWidth = themeNode.adjust_for_height(forHeight) / ratio;
|
||||
|
||||
const naturalWidth = this._thumbnails.reduce((accumulator, thumbnail) => {
|
||||
const progress = 1 - thumbnail.collapse_fraction;
|
||||
const width = tmbWidth * progress;
|
||||
return accumulator + width;
|
||||
}, 0);
|
||||
|
||||
return themeNode.adjust_preferred_width(totalSpacing, naturalWidth);
|
||||
},
|
||||
|
||||
|
@ -1041,16 +1053,11 @@ const ThumbnailsBoxHorizontal = {
|
|||
this._dropPlaceholder.allocate_preferred_size(
|
||||
...this._dropPlaceholder.get_position());
|
||||
|
||||
if (shellVersion >= 44) {
|
||||
const laters = global.compositor.get_laters();
|
||||
laters.add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.hide();
|
||||
});
|
||||
} else {
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.hide();
|
||||
});
|
||||
}
|
||||
const laterFunc = () => this._dropPlaceholder.hide();
|
||||
if (Meta.later_add)
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
else
|
||||
global.compositor.get_laters().add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
}
|
||||
|
||||
let childBox = new Clutter.ActorBox();
|
||||
|
@ -1078,16 +1085,11 @@ const ThumbnailsBoxHorizontal = {
|
|||
|
||||
this._dropPlaceholder.allocate(childBox);
|
||||
|
||||
if (shellVersion >= 44) {
|
||||
const laters = global.compositor.get_laters();
|
||||
laters.add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.show();
|
||||
});
|
||||
} else {
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, () => {
|
||||
this._dropPlaceholder.show();
|
||||
});
|
||||
}
|
||||
const laterFunc = () => this._dropPlaceholder.show();
|
||||
if (Meta.later_add)
|
||||
Meta.later_add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
else
|
||||
global.compositor.get_laters().add(Meta.LaterType.BEFORE_REDRAW, laterFunc);
|
||||
x += placeholderWidth + spacing;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue