windowManager: Always check dimming when an attached modal opens/closes

We skip window animations while the overview is shown (and the window
group is hidden) to avoid unnecessary work. However when an attached
modal dialog is opened or closed, this involves checking whether the
parent window should be dimmed - skipping that test means that we can
simply fail to dim or undim a window altogether, so do that check
unconditionally.

https://bugzilla.gnome.org/show_bug.cgi?id=762475
This commit is contained in:
Florian Müllner 2016-02-22 17:59:05 +01:00
parent ede0bf2d88
commit 4c29604e1e

View File

@ -1403,6 +1403,9 @@ const WindowManager = new Lang.Class({
actor._windowType = type; actor._windowType = type;
})); }));
if (actor.meta_window.is_attached_dialog())
this._checkDimming(actor.get_meta_window().get_transient_for());
let types = [Meta.WindowType.NORMAL, let types = [Meta.WindowType.NORMAL,
Meta.WindowType.DIALOG, Meta.WindowType.DIALOG,
Meta.WindowType.MODAL_DIALOG]; Meta.WindowType.MODAL_DIALOG];
@ -1411,9 +1414,6 @@ const WindowManager = new Lang.Class({
return; return;
} }
if (actor.meta_window.is_attached_dialog())
this._checkDimming(actor.get_meta_window().get_transient_for());
switch (actor._windowType) { switch (actor._windowType) {
case Meta.WindowType.NORMAL: case Meta.WindowType.NORMAL:
actor.set_pivot_point(0.5, 1.0); actor.set_pivot_point(0.5, 1.0);
@ -1496,6 +1496,9 @@ const WindowManager = new Lang.Class({
}); });
} }
if (window.is_attached_dialog())
this._checkDimming(window.get_transient_for(), window);
let types = [Meta.WindowType.NORMAL, let types = [Meta.WindowType.NORMAL,
Meta.WindowType.DIALOG, Meta.WindowType.DIALOG,
Meta.WindowType.MODAL_DIALOG]; Meta.WindowType.MODAL_DIALOG];
@ -1530,7 +1533,6 @@ const WindowManager = new Lang.Class({
if (window.is_attached_dialog()) { if (window.is_attached_dialog()) {
let parent = window.get_transient_for(); let parent = window.get_transient_for();
this._checkDimming(parent, window);
actor._parentDestroyId = parent.connect('unmanaged', Lang.bind(this, function () { actor._parentDestroyId = parent.connect('unmanaged', Lang.bind(this, function () {
Tweener.removeTweens(actor); Tweener.removeTweens(actor);
this._destroyWindowDone(shellwm, actor); this._destroyWindowDone(shellwm, actor);