From a9d4f91c0575012478a3895b0eb06a46191eca55 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Fri, 3 Jan 2020 21:14:07 +0200 Subject: [PATCH] add inSlideAnimation flag for ViewPart::Positioner --it can be used in order to enable/disable some codepaths --- app/view/positioner.cpp | 17 ++++- app/view/positioner.h | 6 ++ .../package/contents/ui/VisibilityManager.qml | 67 +++++++++++++++++++ containment/package/contents/ui/main.qml | 2 +- 4 files changed, 90 insertions(+), 2 deletions(-) diff --git a/app/view/positioner.cpp b/app/view/positioner.cpp index 6f5836510..deafb6562 100644 --- a/app/view/positioner.cpp +++ b/app/view/positioner.cpp @@ -343,7 +343,7 @@ void Positioner::screenChanged(QScreen *scr) void Positioner::syncGeometry() { - if (!(m_view->screen() && m_view->containment()) || m_inDelete || m_slideOffset!=0) { + if (!(m_view->screen() && m_view->containment()) || m_inDelete || m_slideOffset!=0 || inSlideAnimation()) { return; } @@ -718,6 +718,21 @@ bool Positioner::inLocationAnimation() return ((m_goToLocation != Plasma::Types::Floating) || (m_moveToLayout != "") || m_goToScreen); } +bool Positioner::inSlideAnimation() const +{ + return m_inSlideAnimation; +} + +void Positioner::setInSlideAnimation(bool active) +{ + if (m_inSlideAnimation == active) { + return; + } + + m_inSlideAnimation = active; + emit inSlideAnimationChanged(); +} + void Positioner::updateInLocationAnimation() { bool inLocationAnimation = ((m_goToLocation != Plasma::Types::Floating) || (m_moveToLayout != "") || m_goToScreen); diff --git a/app/view/positioner.h b/app/view/positioner.h index 158896ced..ce96e0501 100644 --- a/app/view/positioner.h +++ b/app/view/positioner.h @@ -49,6 +49,7 @@ class Positioner: public QObject Q_OBJECT Q_PROPERTY(bool inLocationAnimation READ inLocationAnimation NOTIFY inLocationAnimationChanged) + Q_PROPERTY(bool inSlideAnimation READ inSlideAnimation WRITE setInSlideAnimation NOTIFY inSlideAnimationChanged) Q_PROPERTY(int currentScreenId READ currentScreenId NOTIFY currentScreenChanged) //! animating window slide @@ -67,6 +68,9 @@ public: bool inLocationAnimation(); + bool inSlideAnimation() const; + void setInSlideAnimation(bool active); + void setScreenToFollow(QScreen *scr, bool updateScreenId = true); void reconsiderScreen(); @@ -103,6 +107,7 @@ signals: void onHideWindowsForSlidingOut(); void inLocationAnimationChanged(); + void inSlideAnimationChanged(); private slots: void screenChanged(QScreen *screen); @@ -122,6 +127,7 @@ private: private: bool m_inDelete{false}; bool m_inLocationAnimation{false}; + bool m_inSlideAnimation{false}; int m_slideOffset{0}; diff --git a/containment/package/contents/ui/VisibilityManager.qml b/containment/package/contents/ui/VisibilityManager.qml index 7d616e986..81b579bb7 100644 --- a/containment/package/contents/ui/VisibilityManager.qml +++ b/containment/package/contents/ui/VisibilityManager.qml @@ -819,4 +819,71 @@ Item{ start(); } } + + //! Slides Animations for FLOATING+BEHAVEASPLASMAPANEL +/* DISABLED because they dont create a smooth transition + + SequentialAnimation{ + id: slidingInRealFloating + + ScriptAction{ + script: { + latteView.positioner.inSlideAnimation = true; + } + } + + PropertyAnimation { + target: latteView.positioner + property: "slideOffset" + to: 0 + duration: manager.animationSpeed + easing.type: Easing.OutQuad + } + + ScriptAction{ + script: { + latteView.positioner.inSlideAnimation = false; + } + } + } + + SequentialAnimation{ + id: slidingOutRealFloating + + ScriptAction{ + script: { + latteView.positioner.inSlideAnimation = true; + } + } + + PropertyAnimation { + target: latteView.positioner + property: "slideOffset" + to: plasmoid.configuration.screenEdgeMargin + duration: manager.animationSpeed + easing.type: Easing.OutQuad + } + + ScriptAction{ + script: { + latteView.positioner.inSlideAnimation = false; + } + } + } + + Connections { + target: root + onHideThickScreenGapChanged: { + if (root.behaveAsPlasmaPanel && !latteView.visibility.isHidden) { + if (hideThickScreenGap) { + slidingInRealFloating.stop(); + slidingOutRealFloating.start(); + } else { + slidingOutRealFloating.stop(); + slidingInRealFloating.start(); + } + } + } + }*/ + } diff --git a/containment/package/contents/ui/main.qml b/containment/package/contents/ui/main.qml index 55ccda371..f379381c4 100644 --- a/containment/package/contents/ui/main.qml +++ b/containment/package/contents/ui/main.qml @@ -86,7 +86,7 @@ Item { return (visibilityManager.panelIsBiggerFromIconSize && (maxZoomFactor === 1.0) - /*&& (plasmoid.configuration.panelPosition === Latte.Types.Justify)*/ + && (plasmoid.configuration.panelPosition === Latte.Types.Justify) && !root.editMode && !visibilityManager.inLocationAnimation); }