screenshot: Don't abuse StButton

It's an StBin, so can only have one child, yet we are adding multiple —
something we get away with by overriding allocate

Instead of doing that, move the content to it's own actor

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3010>
This commit is contained in:
Zander Brown 2023-11-08 10:50:02 +00:00 committed by Marge Bot
parent 42fc986e91
commit 35cb2b5385

View File

@ -771,8 +771,8 @@ class UIWindowSelectorLayout extends Workspace.WorkspaceLayout {
}
});
const UIWindowSelectorWindow = GObject.registerClass(
class UIWindowSelectorWindow extends St.Button {
const UIWindowSelectorWindowContent = GObject.registerClass(
class UIWindowSelectorWindowContent extends Clutter.Actor {
_init(actor, params) {
super._init(params);
@ -785,20 +785,21 @@ class UIWindowSelectorWindow extends St.Button {
});
this.add_child(this._actor);
this._border = new St.Bin({style_class: 'screenshot-ui-window-selector-window-border'});
this._border = new St.Bin({
style_class: 'screenshot-ui-window-selector-window-border',
child: new St.Icon({
icon_name: 'object-select-symbolic',
style_class: 'screenshot-ui-window-selector-check',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
}),
});
this._border.connect('style-changed', () => {
this._borderSize =
this._border.get_theme_node().get_border_width(St.Side.TOP);
});
this.add_child(this._border);
this._border.child = new St.Icon({
icon_name: 'object-select-symbolic',
style_class: 'screenshot-ui-window-selector-check',
x_align: Clutter.ActorAlign.CENTER,
y_align: Clutter.ActorAlign.CENTER,
});
this._cursor = null;
this._cursorPoint = {x: 0, y: 0};
this._shouldShowCursor = window.has_pointer && window.has_pointer();
@ -810,26 +811,6 @@ class UIWindowSelectorWindow extends St.Button {
return this._boundingBox;
}
get windowCenter() {
const boundingBox = this.boundingBox;
return {
x: boundingBox.x + boundingBox.width / 2,
y: boundingBox.y + boundingBox.height / 2,
};
}
chromeHeights() {
return [0, 0];
}
chromeWidths() {
return [0, 0];
}
overlapHeights() {
return [0, 0];
}
get cursorPoint() {
return {
x: this._cursorPoint.x + this._boundingBox.x - this._bufferRect.x,
@ -943,6 +924,64 @@ class UIWindowSelectorWindow extends St.Button {
}
});
const UIWindowSelectorWindow = GObject.registerClass(
class UIWindowSelectorWindow extends St.Button {
_init(actor, params) {
super._init({
child: new UIWindowSelectorWindowContent(actor),
...params,
});
}
get boundingBox() {
return this.child.boundingBox;
}
get windowCenter() {
const boundingBox = this.boundingBox;
return {
x: boundingBox.x + boundingBox.width / 2,
y: boundingBox.y + boundingBox.height / 2,
};
}
chromeHeights() {
return [0, 0];
}
chromeWidths() {
return [0, 0];
}
overlapHeights() {
return [0, 0];
}
get cursorPoint() {
return this.child.cursorPoint;
}
get bufferScale() {
return this.child.bufferScale;
}
get windowContent() {
return this.child.windowContent;
}
addCursorTexture(content, point, scale) {
this.child.addCursorTexture(content, point, scale);
}
getCursorTexture() {
return this.child.getCursorTexture();
}
setCursorVisible(visible) {
this.child.setCursorVisible(visible);
}
});
const UIWindowSelector = GObject.registerClass(
class UIWindowSelector extends St.Widget {
_init(monitorIndex, params) {