From 53cb0f25222521109535109aea55c1abcdb310f2 Mon Sep 17 00:00:00 2001 From: audoban Date: Mon, 2 Jan 2017 03:06:47 -0500 Subject: [PATCH] added blockHiding property on visibilitymanager --- app/visibilitymanager.cpp | 78 +++++++++++++++++++++++++++++---------- app/visibilitymanager.h | 5 +++ app/visibilitymanager_p.h | 3 ++ 3 files changed, 66 insertions(+), 20 deletions(-) diff --git a/app/visibilitymanager.cpp b/app/visibilitymanager.cpp index 6e98464e0..813ce972c 100644 --- a/app/visibilitymanager.cpp +++ b/app/visibilitymanager.cpp @@ -32,7 +32,7 @@ VisibilityManagerPrivate::VisibilityManagerPrivate(PlasmaQuick::ContainmentView } }); connect(&timerHide, &QTimer::timeout, this, [this]() { - if (!isHidden) { + if (!blockHiding && !isHidden) { qDebug() << "must be hide"; emit this->q->mustBeHide(); } @@ -146,10 +146,34 @@ inline void VisibilityManagerPrivate::setIsHidden(bool isHidden) if (this->isHidden == isHidden) return; + if (blockHiding) { + qWarning() << "isHidden property is blocked, ignoring update"; + return; + } + this->isHidden = isHidden; emit q->isHiddenChanged(); } +void VisibilityManagerPrivate::setBlockHiding(bool blockHiding) +{ + if (this->blockHiding == blockHiding) + return; + + this->blockHiding = blockHiding; + + if (this->blockHiding) { + timerHide.stop(); + + if (isHidden) + isHidden = false; + } else { + updateHiddenState(); + } + + emit q->blockHidingChanged(); +} + inline void VisibilityManagerPrivate::setTimerShow(int msec) { timerShow.setInterval(msec); @@ -172,7 +196,7 @@ inline void VisibilityManagerPrivate::raiseDock(bool raise) if (!timerShow.isActive()) { timerShow.start(); } - } else { + } else if (!blockHiding) { timerShow.stop(); if (!timerHide.isActive()) @@ -180,6 +204,27 @@ inline void VisibilityManagerPrivate::raiseDock(bool raise) } } +void VisibilityManagerPrivate::updateHiddenState() +{ + switch (mode) { + case Dock::AutoHide: + raiseDock(false); + break; + + case Dock::DodgeActive: + dodgeActive(wm->activeWindow()); + break; + + case Dock::DodgeMaximized: + dodgeMaximized(wm->activeWindow()); + break; + + case Dock::DodgeAllWindows: + dodgeWindows(wm->activeWindow()); + break; + } +} + inline void VisibilityManagerPrivate::setDockRect(const QRect &dockRect) { if (!view->containment() || this->dockRect == dockRect) @@ -314,24 +359,7 @@ bool VisibilityManagerPrivate::event(QEvent *ev) containsMouse = false; emit q->containsMouseChanged(); - switch (mode) { - case Dock::AutoHide: - raiseDock(false); - break; - - case Dock::DodgeActive: - dodgeActive(wm->activeWindow()); - break; - - case Dock::DodgeMaximized: - dodgeMaximized(wm->activeWindow()); - break; - - case Dock::DodgeAllWindows: - dodgeWindows(wm->activeWindow()); - break; - } - + updateHiddenState(); } else if (ev->type() == QEvent::Show) { wm->setDockDefaultFlags(); } @@ -372,6 +400,16 @@ void VisibilityManager::setIsHidden(bool isHidden) d->setIsHidden(isHidden); } +bool VisibilityManager::blockHiding() const +{ + return d->blockHiding; +} + +void VisibilityManager::setBlockHiding(bool blockHiding) +{ + d->setBlockHiding(blockHiding); +} + bool VisibilityManager::containsMouse() const { return d->containsMouse; diff --git a/app/visibilitymanager.h b/app/visibilitymanager.h index 1dc9f8357..6c09d0ed0 100644 --- a/app/visibilitymanager.h +++ b/app/visibilitymanager.h @@ -18,6 +18,7 @@ class VisibilityManager : public QObject { Q_PROPERTY(Latte::Dock::Visibility mode READ mode WRITE setMode NOTIFY modeChanged) Q_PROPERTY(bool isHidden READ isHidden WRITE setIsHidden NOTIFY isHiddenChanged) + Q_PROPERTY(bool blockHiding READ blockHiding WRITE setBlockHiding NOTIFY blockHidingChanged) Q_PROPERTY(bool containsMouse READ containsMouse NOTIFY containsMouseChanged) Q_PROPERTY(int timerShow READ timerShow WRITE setTimerShow NOTIFY timerShowChanged) Q_PROPERTY(int timerHide READ timerHide WRITE setTimerHide NOTIFY timerHideChanged) @@ -32,6 +33,9 @@ public: bool isHidden() const; void setIsHidden(bool isHidden); + bool blockHiding() const; + void setBlockHiding(bool blockHiding); + bool containsMouse() const; int timerShow() const; @@ -51,6 +55,7 @@ signals: void modeChanged(); void isHiddenChanged(); + void blockHidingChanged(); void containsMouseChanged(); void timerShowChanged(); void timerHideChanged(); diff --git a/app/visibilitymanager_p.h b/app/visibilitymanager_p.h index e7f00856e..f4138192e 100644 --- a/app/visibilitymanager_p.h +++ b/app/visibilitymanager_p.h @@ -30,10 +30,12 @@ public: void setMode(Dock::Visibility mode); void setIsHidden(bool isHidden); + void setBlockHiding(bool blockHiding); void setTimerShow(int msec); void setTimerHide(int msec); void raiseDock(bool raise); + void updateHiddenState(); void setDockRect(const QRect &rect); @@ -61,6 +63,7 @@ public: QTimer timerCheckWindows; QRect dockRect; bool isHidden{false}; + bool blockHiding{false}; bool containsMouse{false}; };