workspaceSwitcherPopup: Stop using Shell.GenericContainer
Removing Shell.GenericContainer here was slightly trickier because it required factoring out a new JavaScript class. It's nevertheless a straightforward removal. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/153
This commit is contained in:
parent
ac314cfb05
commit
b058e89166
@ -15,59 +15,33 @@ const Tweener = imports.ui.tweener;
|
|||||||
var ANIMATION_TIME = 0.1;
|
var ANIMATION_TIME = 0.1;
|
||||||
var DISPLAY_TIMEOUT = 600;
|
var DISPLAY_TIMEOUT = 600;
|
||||||
|
|
||||||
var WorkspaceSwitcherPopup = new Lang.Class({
|
var WorkspaceSwitcherPopupList = new Lang.Class({
|
||||||
Name: 'WorkspaceSwitcherPopup',
|
Name: 'WorkspaceSwitcherPopupList',
|
||||||
|
Extends: St.Widget,
|
||||||
|
|
||||||
_init() {
|
_init() {
|
||||||
this.actor = new St.Widget({ x: 0,
|
this.parent({ style_class: 'workspace-switcher' });
|
||||||
y: 0,
|
|
||||||
width: global.screen_width,
|
|
||||||
height: global.screen_height,
|
|
||||||
style_class: 'workspace-switcher-group' });
|
|
||||||
Main.uiGroup.add_actor(this.actor);
|
|
||||||
|
|
||||||
this._container = new St.BoxLayout({ style_class: 'workspace-switcher-container' });
|
|
||||||
this._list = new Shell.GenericContainer({ style_class: 'workspace-switcher' });
|
|
||||||
this._itemSpacing = 0;
|
this._itemSpacing = 0;
|
||||||
this._childHeight = 0;
|
this._childHeight = 0;
|
||||||
this._childWidth = 0;
|
this._childWidth = 0;
|
||||||
this._timeoutId = 0;
|
|
||||||
this._list.connect('style-changed', () => {
|
this.connect('style-changed', () => {
|
||||||
this._itemSpacing = this._list.get_theme_node().get_length('spacing');
|
this._itemSpacing = this.get_theme_node().get_length('spacing');
|
||||||
});
|
});
|
||||||
|
|
||||||
this._list.connect('get-preferred-width', this._getPreferredWidth.bind(this));
|
|
||||||
this._list.connect('get-preferred-height', this._getPreferredHeight.bind(this));
|
|
||||||
this._list.connect('allocate', this._allocate.bind(this));
|
|
||||||
this._container.add(this._list);
|
|
||||||
|
|
||||||
this.actor.add_actor(this._container);
|
|
||||||
|
|
||||||
this._redisplay();
|
|
||||||
|
|
||||||
this.actor.hide();
|
|
||||||
|
|
||||||
let workspaceManager = global.workspace_manager;
|
|
||||||
this._workspaceManagerSignals = [];
|
|
||||||
this._workspaceManagerSignals.push(workspaceManager.connect('workspace-added',
|
|
||||||
this._redisplay.bind(this)));
|
|
||||||
this._workspaceManagerSignals.push(workspaceManager.connect('workspace-removed',
|
|
||||||
this._redisplay.bind(this)));
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredHeight(actor, forWidth, alloc) {
|
vfunc_get_preferred_height(forWidth) {
|
||||||
let children = this._list.get_children();
|
|
||||||
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
||||||
|
let themeNode = this.get_theme_node();
|
||||||
|
|
||||||
let availHeight = workArea.height;
|
let availHeight = workArea.height;
|
||||||
availHeight -= this.actor.get_theme_node().get_vertical_padding();
|
availHeight -= themeNode.get_vertical_padding();
|
||||||
availHeight -= this._container.get_theme_node().get_vertical_padding();
|
|
||||||
availHeight -= this._list.get_theme_node().get_vertical_padding();
|
|
||||||
|
|
||||||
let height = 0;
|
let height = 0;
|
||||||
for (let i = 0; i < children.length; i++) {
|
for (let child of this.get_children()) {
|
||||||
let [childMinHeight, childNaturalHeight] = children[i].get_preferred_height(-1);
|
let [childMinHeight, childNaturalHeight] = child.get_preferred_height(-1);
|
||||||
let [childMinWidth, childNaturalWidth] = children[i].get_preferred_width(childNaturalHeight);
|
let [childMinWidth, childNaturalWidth] = child.get_preferred_width(childNaturalHeight);
|
||||||
height += childNaturalHeight * workArea.width / workArea.height;
|
height += childNaturalHeight * workArea.width / workArea.height;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,34 +52,74 @@ var WorkspaceSwitcherPopup = new Lang.Class({
|
|||||||
|
|
||||||
this._childHeight = (height - spacing) / workspaceManager.n_workspaces;
|
this._childHeight = (height - spacing) / workspaceManager.n_workspaces;
|
||||||
|
|
||||||
alloc.min_size = height;
|
return themeNode.adjust_preferred_height(height, height);
|
||||||
alloc.natural_size = height;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_getPreferredWidth(actor, forHeight, alloc) {
|
vfunc_get_preferred_width(forHeight) {
|
||||||
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
let workArea = Main.layoutManager.getWorkAreaForMonitor(Main.layoutManager.primaryIndex);
|
||||||
this._childWidth = Math.round(this._childHeight * workArea.width / workArea.height);
|
this._childWidth = Math.round(this._childHeight * workArea.width / workArea.height);
|
||||||
|
|
||||||
alloc.min_size = this._childWidth;
|
return [this._childWidth, this._childWidth];
|
||||||
alloc.natural_size = this._childWidth;
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_allocate(actor, box, flags) {
|
vfunc_allocate(box, flags) {
|
||||||
let children = this._list.get_children();
|
this.set_allocation(box, flags);
|
||||||
|
|
||||||
|
let themeNode = this.get_theme_node();
|
||||||
|
box = themeNode.get_content_box(box);
|
||||||
|
|
||||||
let childBox = new Clutter.ActorBox();
|
let childBox = new Clutter.ActorBox();
|
||||||
|
|
||||||
let y = box.y1;
|
let y = box.y1;
|
||||||
let prevChildBoxY2 = box.y1 - this._itemSpacing;
|
let prevChildBoxY2 = box.y1 - this._itemSpacing;
|
||||||
for (let i = 0; i < children.length; i++) {
|
for (let child of this.get_children()) {
|
||||||
childBox.x1 = box.x1;
|
childBox.x1 = box.x1;
|
||||||
childBox.x2 = box.x1 + this._childWidth;
|
childBox.x2 = box.x1 + this._childWidth;
|
||||||
childBox.y1 = prevChildBoxY2 + this._itemSpacing;
|
childBox.y1 = prevChildBoxY2 + this._itemSpacing;
|
||||||
childBox.y2 = Math.round(y + this._childHeight);
|
childBox.y2 = Math.round(y + this._childHeight);
|
||||||
y += this._childHeight + this._itemSpacing;
|
y += this._childHeight + this._itemSpacing;
|
||||||
prevChildBoxY2 = childBox.y2;
|
prevChildBoxY2 = childBox.y2;
|
||||||
children[i].allocate(childBox, flags);
|
child.allocate(childBox, flags);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
var WorkspaceSwitcherPopup = new Lang.Class({
|
||||||
|
Name: 'WorkspaceSwitcherPopup',
|
||||||
|
Extends: St.Widget,
|
||||||
|
|
||||||
|
_init() {
|
||||||
|
this.parent({ x: 0,
|
||||||
|
y: 0,
|
||||||
|
width: global.screen_width,
|
||||||
|
height: global.screen_height,
|
||||||
|
style_class: 'workspace-switcher-group' });
|
||||||
|
|
||||||
|
this.actor = this;
|
||||||
|
|
||||||
|
Main.uiGroup.add_actor(this);
|
||||||
|
|
||||||
|
this._timeoutId = 0;
|
||||||
|
|
||||||
|
this._container = new St.BoxLayout({ style_class: 'workspace-switcher-container' });
|
||||||
|
this.add_child(this._container);
|
||||||
|
|
||||||
|
this._list = new WorkspaceSwitcherPopupList();
|
||||||
|
this._container.add_child(this._list);
|
||||||
|
|
||||||
|
this._redisplay();
|
||||||
|
|
||||||
|
this.hide();
|
||||||
|
|
||||||
|
let workspaceManager = global.workspace_manager;
|
||||||
|
this._workspaceManagerSignals = [];
|
||||||
|
this._workspaceManagerSignals.push(workspaceManager.connect('workspace-added',
|
||||||
|
this._redisplay.bind(this)));
|
||||||
|
this._workspaceManagerSignals.push(workspaceManager.connect('workspace-removed',
|
||||||
|
this._redisplay.bind(this)));
|
||||||
|
|
||||||
|
this.connect('destroy', this._onDestroy.bind(this));
|
||||||
|
},
|
||||||
|
|
||||||
_redisplay() {
|
_redisplay() {
|
||||||
let workspaceManager = global.workspace_manager;
|
let workspaceManager = global.workspace_manager;
|
||||||
@ -165,7 +179,7 @@ var WorkspaceSwitcherPopup = new Lang.Class({
|
|||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
},
|
},
|
||||||
|
|
||||||
destroy() {
|
_onDestroy() {
|
||||||
if (this._timeoutId)
|
if (this._timeoutId)
|
||||||
Mainloop.source_remove(this._timeoutId);
|
Mainloop.source_remove(this._timeoutId);
|
||||||
this._timeoutId = 0;
|
this._timeoutId = 0;
|
||||||
@ -174,9 +188,6 @@ var WorkspaceSwitcherPopup = new Lang.Class({
|
|||||||
for (let i = 0; i < this._workspaceManagerSignals.length; i++)
|
for (let i = 0; i < this._workspaceManagerSignals.length; i++)
|
||||||
workspaceManager.disconnect(this._workspaceManagerSignals[i]);
|
workspaceManager.disconnect(this._workspaceManagerSignals[i]);
|
||||||
|
|
||||||
this.actor.destroy();
|
this._workspaceManagerSignals = [];
|
||||||
|
|
||||||
this.emit('destroy');
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
Signals.addSignalMethods(WorkspaceSwitcherPopup.prototype);
|
|
||||||
|
Loading…
Reference in New Issue
Block a user