Warning, /plasma/latte-dock/plasmoid/package/contents/ui/task/animations/ShowWindowAnimation.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2016 Smith AR <audoban@openmailbox.org>
0003     SPDX-FileCopyrightText: 2016 Michail Vourlakos <mvourlakos@gmail.com>
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 import QtQuick 2.0
0008 
0009 import org.kde.plasma.plasmoid 2.0
0010 
0011 import org.kde.latte.core 0.2 as LatteCore
0012 
0013 ///item's added Animation
0014 SequentialAnimation{
0015     id:showWindowAnimation
0016     property int speed: root.newWindowSlidingEnabled ? (1.2 * taskItem.abilities.animations.speedFactor.normal * taskItem.abilities.animations.duration.large) : 0
0017     property bool animationSent: false
0018 
0019     readonly property string needLengthEvent: showWindowAnimation + "_showwindow"
0020 
0021     //Ghost animation that acts as a delayer, in order to fix #342
0022     PropertyAnimation {
0023         target: taskItem.parabolicItem
0024         property: "opacity"
0025         to: 0
0026         //it is not depend to durationTime when animations are active
0027         duration: root.newWindowSlidingEnabled ? 750 : 0
0028         easing.type: Easing.InQuad
0029     }
0030     //end of ghost animation
0031 
0032     ScriptAction{
0033         script:{
0034             if (!showWindowAnimation.animationSent) {
0035                 showWindowAnimation.animationSent = true;
0036                 taskItem.abilities.animations.needLength.addEvent(needLengthEvent);
0037             }
0038         }
0039     }
0040 
0041     PropertyAnimation {
0042         target: taskItem.parabolicItem
0043         property: "zoomLength"
0044         to: 1
0045         duration: showWindowAnimation.speed
0046         easing.type: Easing.OutQuad
0047     }
0048 
0049     ParallelAnimation{
0050 
0051         PropertyAnimation {
0052             target: taskItem.parabolicItem
0053             property: "zoomThickness"
0054             to: 1
0055             duration: showWindowAnimation.speed
0056             easing.type: Easing.OutQuad
0057         }
0058 
0059 
0060         PropertyAnimation {
0061             target: taskItem.parabolicItem
0062             property: "opacity"
0063             from: 0
0064             to: 1
0065             duration: showWindowAnimation.speed
0066             easing.type: Easing.OutQuad
0067         }
0068 
0069         PropertyAnimation {
0070             target: taskItem
0071             property: taskItem.isVertical ? "iconAnimatedOffsetX" : "iconAnimatedOffsetY"
0072             from: -taskItem.abilities.metrics.iconSize
0073             to: 0
0074             duration: showWindowAnimation.speed
0075             easing.type: Easing.OutQuad
0076         }
0077     }
0078 
0079     onStopped: {
0080         taskItem.inAddRemoveAnimation = false;
0081 
0082         if (tasksExtendedManager.toBeAddedLauncherExists(taskItem.launcherUrl)) {
0083             tasksExtendedManager.removeToBeAddedLauncher(taskItem.launcherUrl);
0084         }
0085 
0086         if(taskItem.isWindow || taskItem.isStartup){
0087             publishGeometryTimer.start();
0088             if (taskItem.isDemandingAttention){
0089                 taskItem.taskGroupedWindowAdded();
0090             }
0091         }
0092         taskItem.inAnimation = false;
0093 
0094         if (showWindowAnimation.animationSent) {
0095             taskItem.abilities.animations.needLength.removeEvent(needLengthEvent);
0096             showWindowAnimation.animationSent = false;
0097         }
0098     }
0099 
0100     function execute(){
0101         //trying to fix the ListView nasty behavior
0102         //during the removal the anchoring for ListView children changes a lot
0103         if (isWindow){
0104             var previousTask = icList.childAtIndex(index-1);
0105             var nextTask = icList.childAtIndex(index+1);
0106             if (previousTask !== undefined && nextTask !== undefined && nextTask.inBouncingAnimation){
0107                 if (root.vertical) {
0108                     taskItem.anchors.top = previousTask.bottom;
0109                 } else {
0110                     taskItem.anchors.left = previousTask.right;
0111                 }
0112             }
0113         }
0114 
0115         var hasShownLauncher = ((tasksModel.launcherPosition(taskItem.launcherUrl) !== -1)
0116                                     || (tasksModel.launcherPosition(taskItem.launcherUrlWithIcon) !== -1) );
0117 
0118         var launcherIsAlreadyShown = hasShownLauncher && isLauncher && !root.inActivityChange && !tasksExtendedManager.toBeAddedLauncherExists(taskItem.launcherUrl) ;
0119 
0120         //Animation Add/Remove (2) - when is window with no launcher, animations enabled
0121         //Animation Add/Remove (3) - when is launcher with no window, animations enabled
0122         var animation2 = ((!hasShownLauncher || !taskItem.abilities.launchers.inCurrentActivity(taskItem.launcherUrl))
0123                           && taskItem.isWindow
0124                           && LatteCore.WindowSystem.compositingActive);
0125 
0126         var animation3 = (!tasksExtendedManager.immediateLauncherExists(taskItem.launcherUrl)
0127                           && taskItem.isLauncher
0128                           && LatteCore.WindowSystem.compositingActive);
0129 
0130         var activities = tasksModel.launcherActivities(taskItem.launcherUrl);
0131         var animation6 = (root.inActivityChange && taskItem.isWindow
0132                           && activities.indexOf(activityInfo.currentActivity)>=0
0133                           && activities.indexOf(activityInfo.previousActivity) === -1
0134                           && LatteCore.WindowSystem.compositingActive);
0135 
0136 
0137         //startup without launcher, animation should be blocked
0138         var launcherExists = !(!hasShownLauncher || !taskItem.abilities.launchers.inCurrentActivity(taskItem.launcherUrl));
0139 
0140         //var hideStartup =  launcherExists && taskItem.isStartup; //! fix #976
0141         var hideWindow =  (root.showWindowsOnlyFromLaunchers || root.disableAllWindowsFunctionality) && !launcherExists && taskItem.isWindow;
0142 
0143         if (tasksExtendedManager.immediateLauncherExists(taskItem.launcherUrl) && taskItem.isLauncher) {
0144             tasksExtendedManager.removeImmediateLauncher(taskItem.launcherUrl);
0145         }
0146 
0147         //if (hideStartup || hideWindow) { //fix #976
0148         if (hideWindow) {
0149             isForcedHidden = true;
0150             taskItem.visible = false;
0151             taskItem.parabolicItem.zoomLength = 0.0;
0152             taskItem.parabolicItem.zoomThickness = 0.0;
0153             taskItem.parabolicItem.opacity = 0;
0154             taskItem.inAnimation = false;
0155         } else if (!LatteCore.WindowSystem.compositingActive || root.inDraggingPhase
0156                    || taskItem.isSeparator) {
0157             isForcedHidden = false;
0158             taskItem.visible = true;
0159             taskItem.parabolicItem.zoomLength = 1.0;
0160             taskItem.parabolicItem.zoomThickness = 1.0;
0161             taskItem.parabolicItem.zoom = 1;
0162             taskItem.parabolicItem.opacity = 1;
0163             taskItem.inAnimation = false;
0164         } else if (( animation2 || animation3 || animation6 || isForcedHidden)
0165                    && (taskItem.abilities.animations.speedFactor.current !== 0) && !launcherIsAlreadyShown){
0166             isForcedHidden = false;
0167             taskItem.visible = true;
0168             taskItem.parabolicItem.zoomLength = 0.0;
0169             taskItem.parabolicItem.zoomThickness = 0.0;
0170             start();
0171         } else {
0172             isForcedHidden = false;
0173             var frozenTask = tasksExtendedManager.getFrozenTask(taskItem.launcherUrl);
0174 
0175             if (frozenTask && frozenTask.zoom>1) {
0176                 taskItem.parabolicItem.zoom = frozenTask.zoom;
0177                 tasksExtendedManager.removeFrozenTask(taskItem.launcherUrl);
0178             } else {
0179                 taskItem.parabolicItem.zoomLength = 1.0;
0180                 taskItem.parabolicItem.zoomThickness = 1.0;
0181             }
0182 
0183             //! by enabling it we break the bouncing animation and the indicators launchers animations
0184             //taskItem.visible = true;
0185             taskItem.parabolicItem.opacity = 1;
0186             taskItem.inAnimation = false;
0187         }
0188     }
0189 
0190     function showWindow(){
0191         execute();
0192     }
0193 
0194     Component.onDestruction: {
0195         if (animationSent){
0196             //console.log("SAFETY REMOVAL 2: animation removing ended");
0197             animationSent = false;
0198             taskItem.abilities.animations.needLength.removeEvent(needLengthEvent);
0199         }
0200     }
0201 }