c04f7919c1
stupid clients think it's relevant to withdraw other states when going fullscreen, this means we trigger an nmaximization animation and when that's done, the window is fullscreen... Unfortunately one of the stupid clients is QWidget and also the window could get other, *legit*, resizes during the animation, so we cancel it on occasion BUG: 336467 FIXED-IN: 5.5 REVIEW: 125989
98 lines
3.7 KiB
JavaScript
98 lines
3.7 KiB
JavaScript
/********************************************************************
|
|
This file is part of the KDE project.
|
|
|
|
Copyright (C) 2012 Martin Gräßlin <mgraesslin@kde.org>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*********************************************************************/
|
|
/*global effect, effects, animate, animationTime, Effect*/
|
|
var maximizeEffect = {
|
|
duration: animationTime(250),
|
|
loadConfig: function () {
|
|
"use strict";
|
|
maximizeEffect.duration = animationTime(250);
|
|
},
|
|
maximizeChanged: function (window) {
|
|
"use strict";
|
|
if (!window.oldGeometry) {
|
|
return;
|
|
}
|
|
var oldGeometry, newGeometry;
|
|
oldGeometry = window.oldGeometry;
|
|
newGeometry = window.geometry;
|
|
if (oldGeometry.width == newGeometry.width && oldGeometry.height == newGeometry.height)
|
|
oldGeometry = window.olderGeometry;
|
|
window.olderGeometry = window.oldGeometry;
|
|
window.oldGeometry = newGeometry;
|
|
window.maximizeAnimation1 = animate({
|
|
window: window,
|
|
duration: maximizeEffect.duration,
|
|
animations: [{
|
|
type: Effect.Size,
|
|
to: {
|
|
value1: newGeometry.width,
|
|
value2: newGeometry.height
|
|
},
|
|
from: {
|
|
value1: oldGeometry.width,
|
|
value2: oldGeometry.height
|
|
}
|
|
}, {
|
|
type: Effect.Translation,
|
|
to: {
|
|
value1: 0,
|
|
value2: 0
|
|
},
|
|
from: {
|
|
value1: oldGeometry.x - newGeometry.x - (newGeometry.width / 2 - oldGeometry.width / 2),
|
|
value2: oldGeometry.y - newGeometry.y - (newGeometry.height / 2 - oldGeometry.height / 2)
|
|
}
|
|
}]
|
|
});
|
|
if (!window.resize) {
|
|
window.maximizeAnimation2 =animate({
|
|
window: window,
|
|
duration: maximizeEffect.duration,
|
|
animations: [{
|
|
type: Effect.CrossFadePrevious,
|
|
to: 1.0,
|
|
from: 0.0
|
|
}]
|
|
});
|
|
}
|
|
},
|
|
geometryChange: function (window, oldGeometry) {
|
|
"use strict";
|
|
if (window.maximizeAnimation1) {
|
|
if (window.geometry.width != window.oldGeometry.width ||
|
|
window.geometry.height != window.oldGeometry.height) {
|
|
cancel(window.maximizeAnimation1);
|
|
delete window.maximizeAnimation1;
|
|
if (window.maximizeAnimation2) {
|
|
cancel(window.maximizeAnimation2);
|
|
delete window.maximizeAnimation2;
|
|
}
|
|
}
|
|
}
|
|
window.oldGeometry = window.geometry;
|
|
window.olderGeometry = oldGeometry;
|
|
},
|
|
init: function () {
|
|
"use strict";
|
|
effect.configChanged.connect(maximizeEffect.loadConfig);
|
|
effects.windowGeometryShapeChanged.connect(maximizeEffect.geometryChange);
|
|
effects.windowMaximizedStateChanged.connect(maximizeEffect.maximizeChanged);
|
|
}
|
|
};
|
|
maximizeEffect.init();
|