diff --git a/autotests/integration/effects/slidingpopups_test.cpp b/autotests/integration/effects/slidingpopups_test.cpp --- a/autotests/integration/effects/slidingpopups_test.cpp +++ b/autotests/integration/effects/slidingpopups_test.cpp @@ -120,8 +120,8 @@ { QTest::addColumn("effectsToLoad"); - QTest::newRow("scale, slide") << QStringList{QStringLiteral("kwin4_effect_scalein"), QStringLiteral("slidingpopups")}; - QTest::newRow("slide, scale") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_scalein")}; + QTest::newRow("scalein, slide") << QStringList{QStringLiteral("kwin4_effect_scalein"), QStringLiteral("slidingpopups")}; + QTest::newRow("slide, scalein") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_scalein")}; QTest::newRow("fade, slide") << QStringList{QStringLiteral("kwin4_effect_fade"), QStringLiteral("slidingpopups")}; QTest::newRow("slide, fade") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_fade")}; @@ -257,8 +257,8 @@ { QTest::addColumn("effectsToLoad"); - QTest::newRow("scale, slide") << QStringList{QStringLiteral("kwin4_effect_scalein"), QStringLiteral("slidingpopups")}; - QTest::newRow("slide, scale") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_scalein")}; + QTest::newRow("scalein, slide") << QStringList{QStringLiteral("kwin4_effect_scalein"), QStringLiteral("slidingpopups")}; + QTest::newRow("slide, scalein") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_scalein")}; QTest::newRow("fade, slide") << QStringList{QStringLiteral("kwin4_effect_fade"), QStringLiteral("slidingpopups")}; QTest::newRow("slide, fade") << QStringList{QStringLiteral("slidingpopups"), QStringLiteral("kwin4_effect_fade")}; diff --git a/effects/scalein/package/contents/code/main.js b/effects/scalein/package/contents/code/main.js --- a/effects/scalein/package/contents/code/main.js +++ b/effects/scalein/package/contents/code/main.js @@ -3,6 +3,7 @@ This file is part of the KDE project. Copyright (C) 2013 Kai Uwe Broulik + Copyright (C) 2018 Vlad Zagorodniy 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 @@ -17,61 +18,78 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . *********************************************************************/ -/*global effect, effects, animate, animationTime, Effect, QEasingCurve */ + +var blacklist = [ + "ksmserver ksmserver", + "ksplashx ksplashx", + "ksplashsimple ksplashsimple", + "ksplashqml ksplashqml" +]; + var scaleInEffect = { - duration: animationTime(150), + duration: animationTime(160), loadConfig: function () { "use strict"; - scaleInEffect.duration = animationTime(150); + scaleInEffect.duration = animationTime(160); }, isScaleWindow: function (window) { "use strict"; - if (window.popupMenu || window.specialWindow || window.utility || window.minimized || - effect.isGrabbed(window, Effect.WindowAddedGrabRole)) { + if (effect.isGrabbed(window, Effect.WindowAddedGrabRole)) { + return false; + } + if (blacklist.indexOf(window.windowClass) != -1) { return false; } - return true; + return !window.minimized + && !window.popupMenu + && !window.specialWindow + && !window.utility; }, - scaleIn: function (window) { + startAnimation: function (window) { "use strict"; + if (!scaleInEffect.isScaleWindow(window)) { + return; + } + effect.grab(window, Effect.WindowAddedGrabRole); window.scaleInWindowTypeAnimation = animate({ window: window, duration: scaleInEffect.duration, curve: QEasingCurve.InOutQuad, animations: [{ type: Effect.Opacity, - from: 0.0, + from: 0.3, to: 1.0 }, { type: Effect.Scale, - from: 0.75, + from: 0.96, to: 1.0 }] }); }, - added: function (window) { + cancelAnimation: function (window) { "use strict"; - if (!scaleInEffect.isScaleWindow(window)) { - return; + if (window.scaleInWindowTypeAnimation !== undefined) { + cancel(window.scaleInWindowTypeAnimation); + window.scaleInWindowTypeAnimation = undefined; } - scaleInEffect.scaleIn(window); }, - dataChanged: function (window, role) { + windowDataChanged: function (window, role) { "use strict"; - if (role == Effect.WindowAddedGrabRole) { - if (effect.isGrabbed(window, Effect.WindowAddedGrabRole)) { - if (window.scaleInWindowTypeAnimation !== undefined) { - cancel(window.scaleInWindowTypeAnimation); - window.scaleInWindowTypeAnimation = undefined; - } - } + if (role != Effect.WindowAddedGrabRole) { + return; } + if (!effect.isGrabbed(window, Effect.WindowAddedGrabRole)) { + return; + } + scaleInEffect.cancelAnimation(window); }, init: function () { "use strict"; effect.configChanged.connect(scaleInEffect.loadConfig); - effects.windowAdded.connect(scaleInEffect.added); - effects.windowDataChanged.connect(scaleInEffect.dataChanged); + effects.windowAdded.connect(scaleInEffect.startAnimation); + effects.windowClosed.connect(scaleInEffect.cancelAnimation); + effects.windowDataChanged.connect(scaleInEffect.windowDataChanged); } }; + scaleInEffect.init();