altTab: Skip unminimize effect when cycling to a window

Similar to windows on another workspace, selecting a minimized window
doesn't look quite right - the selected window disappears, then animates
back in. Fix this by adding support for skipping the next effect to the
wm and use it to bypass the unminimize animation.

https://bugzilla.gnome.org/show_bug.cgi?id=771536
This commit is contained in:
Florian Müllner 2016-09-15 17:41:52 +02:00
parent a029a35050
commit becd29c50a
2 changed files with 14 additions and 0 deletions

View File

@ -448,6 +448,11 @@ const CyclerPopup = new Lang.Class({
let ws = window.get_workspace(); let ws = window.get_workspace();
let activeWs = global.screen.get_active_workspace(); let activeWs = global.screen.get_active_workspace();
if (window.minimized) {
Main.wm.skipNextEffect(window.get_compositor_private());
window.unminimize();
}
if (activeWs == ws) { if (activeWs == ws) {
Main.activateWindow(window); Main.activateWindow(window);
} else { } else {

View File

@ -683,6 +683,8 @@ const WindowManager = new Lang.Class({
this._dimmedWindows = []; this._dimmedWindows = [];
this._skippedActors = [];
this._allowedKeybindings = {}; this._allowedKeybindings = {};
this._isWorkspacePrepended = false; this._isWorkspacePrepended = false;
@ -1035,6 +1037,10 @@ const WindowManager = new Lang.Class({
this._workspaceTracker.keepWorkspaceAlive(workspace, duration); this._workspaceTracker.keepWorkspaceAlive(workspace, duration);
}, },
skipNextEffect: function(actor) {
this._skippedActors.push(actor);
},
setCustomKeybindingHandler: function(name, modes, handler) { setCustomKeybindingHandler: function(name, modes, handler) {
if (Meta.keybindings_set_custom_handler(name, handler)) if (Meta.keybindings_set_custom_handler(name, handler))
this.allowKeybinding(name, modes); this.allowKeybinding(name, modes);
@ -1061,6 +1067,9 @@ const WindowManager = new Lang.Class({
}, },
_shouldAnimateActor: function(actor, types) { _shouldAnimateActor: function(actor, types) {
if (this._removeEffect(this._skippedActors, actor))
return false;
if (!this._shouldAnimate()) if (!this._shouldAnimate())
return false; return false;