Restart: fix maximized windows flickering to the wrong struts
When we restart, we need to update the struts for the screen before we enter the main loop, or maximized windows will get resized to the size of the screen without struts, then resized back. A workaround is needed for a Clutter bug that occurs when we get the size of an actor before the first paint of the stage. https://bugzilla.gnome.org/show_bug.cgi?id=761566
This commit is contained in:
parent
c4584c20dc
commit
61fb62f969
@ -591,7 +591,10 @@ const LayoutManager = new Lang.Class({
|
|||||||
this.addChrome(this._coverPane);
|
this.addChrome(this._coverPane);
|
||||||
|
|
||||||
if (Meta.is_restart()) {
|
if (Meta.is_restart()) {
|
||||||
// On restart, we don't do an animation
|
// On restart, we don't do an animation. Force an update of the
|
||||||
|
// regions immediately so that maximized windows restore to the
|
||||||
|
// right size taking struts into account.
|
||||||
|
this._updateRegions();
|
||||||
} else if (Main.sessionMode.isGreeter) {
|
} else if (Main.sessionMode.isGreeter) {
|
||||||
this.panelBox.translation_y = -this.panelBox.height;
|
this.panelBox.translation_y = -this.panelBox.height;
|
||||||
} else {
|
} else {
|
||||||
@ -938,6 +941,11 @@ const LayoutManager = new Lang.Class({
|
|||||||
if (Main.modalCount > 0)
|
if (Main.modalCount > 0)
|
||||||
return GLib.SOURCE_REMOVE;
|
return GLib.SOURCE_REMOVE;
|
||||||
|
|
||||||
|
// Bug workaround - get_transformed_position()/get_transformed_size() don't work after
|
||||||
|
// a change in stage size until the first pick or paint.
|
||||||
|
// https://bugzilla.gnome.org/show_bug.cgi?id=761565
|
||||||
|
global.stage.get_actor_at_pos(Clutter.PickMode.ALL, 0, 0);
|
||||||
|
|
||||||
let rects = [], struts = [], i;
|
let rects = [], struts = [], i;
|
||||||
let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow);
|
let isPopupMenuVisible = global.top_window_group.get_children().some(isPopupMetaWindow);
|
||||||
let wantsInputRegion = !isPopupMenuVisible;
|
let wantsInputRegion = !isPopupMenuVisible;
|
||||||
|
Loading…
Reference in New Issue
Block a user