From df08a92d0e095d3e3a59548d9fb7d889d5e11bd6 Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Fri, 30 Dec 2016 13:46:56 +0200 Subject: [PATCH] support new visibilitymanager in ui -- small fixes in visibilitymanager and removed some whitespaces also --- app/nowdockview.cpp | 14 +--- app/nowdockview.h | 1 + app/visibilitymanager.cpp | 67 +++++++++++-------- app/visibilitymanager.h | 5 +- containment/contents/ui/VisibilityManager.qml | 65 +++++++----------- containment/contents/ui/main.qml | 43 ++++++------ .../LatteDockConfiguration.qml.cmake | 6 ++ 7 files changed, 100 insertions(+), 101 deletions(-) diff --git a/app/nowdockview.cpp b/app/nowdockview.cpp index 363766079..026ece423 100644 --- a/app/nowdockview.cpp +++ b/app/nowdockview.cpp @@ -475,19 +475,7 @@ VisibilityManager *NowDockView::visibility() bool NowDockView::event(QEvent *e) { - - /* if (ev->type() == QEvent::Enter) { - m_visibility->show(); - emit entered(); - } else if (ev->type() == QEvent::Leave) { - m_visibility->restore(); - emit exited(); - } */ - - //return QQuickWindow::event(e); - if (m_visibility) { - m_visibility->event(e); - } + emit eventTriggered(e); return ContainmentView::event(e); } diff --git a/app/nowdockview.h b/app/nowdockview.h index 77cde3296..7e54c84cb 100644 --- a/app/nowdockview.h +++ b/app/nowdockview.h @@ -124,6 +124,7 @@ protected: signals: // void visibilityChanged(); void addInternalViewSplitter(); + void eventTriggered(QEvent *ev); void alignmentChanged(); void compositingChanged(); void heightChanged(); diff --git a/app/visibilitymanager.cpp b/app/visibilitymanager.cpp index d106b9416..d91df9082 100644 --- a/app/visibilitymanager.cpp +++ b/app/visibilitymanager.cpp @@ -4,12 +4,20 @@ #include "../liblattedock/extras.h" +#include "nowdockview.h" + namespace Latte { //! BEGIN: VisiblityManagerPrivate implementation VisibilityManagerPrivate::VisibilityManagerPrivate(PlasmaQuick::ContainmentView *view, VisibilityManager *q) : QObject(view), q(q), view(view), wm(AbstractWindowInterface::getInstance(view, nullptr)) { + NowDockView *dockView = dynamic_cast(view); + + if (dockView) { + connect(dockView, &NowDockView::eventTriggered, q, &VisibilityManager::eventReceived); + } + timerCheckWindows.setInterval(350); timerCheckWindows.setSingleShot(true); @@ -34,11 +42,11 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) { if (this->mode == mode) return; - + // clear mode if (this->mode == Dock::AlwaysVisible) wm->removeDockStruts(); - + for (auto &c : connections) { disconnect(c); } @@ -60,31 +68,31 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) raiseDock(true); } break; - + case Dock::DodgeActive: { connections[0] = connect(wm.get(), &AbstractWindowInterface::activeWindowChanged , this, &VisibilityManagerPrivate::dodgeActive); connections[1] = connect(wm.get(), &AbstractWindowInterface::windowChanged , this, &VisibilityManagerPrivate::dodgeActive); - + dodgeActive(wm->activeWindow()); } break; - + case Dock::DodgeMaximized: { connections[0] = connect(wm.get(), &AbstractWindowInterface::windowChanged , this, &VisibilityManagerPrivate::dodgeMaximized); } break; - + case Dock::DodgeAllWindows: { for (const auto &wid : wm->windows()) { windows.insert({wid, wm->requestInfo(wid)}); } - + connections[0] = connect(wm.get(), &AbstractWindowInterface::windowChanged , this, &VisibilityManagerPrivate::dodgeWindows); - + connections[1] = connect(wm.get(), &AbstractWindowInterface::windowRemoved , this, [&](WId wid) { windows.erase(wid); @@ -99,13 +107,15 @@ inline void VisibilityManagerPrivate::setMode(Dock::Visibility mode) } saveConfig(); + + emit q->modeChanged(); } inline void VisibilityManagerPrivate::setIsHidden(bool isHidden) { if (this->isHidden == isHidden) return; - + this->isHidden = isHidden; emit q->isHiddenChanged(); } @@ -130,15 +140,18 @@ inline void VisibilityManagerPrivate::raiseDock(bool raise) /* if (!isHidden == raise) { return; } */ - + if (raise) { timerHide.stop(); - if (!timerShow.isActive()) + if (!timerShow.isActive() && mode != Dock::AutoHide) { timerShow.start(); + } else { + emit q->mustBeShown(); + } } else { timerShow.stop(); - + if (!timerHide.isActive()) timerHide.start(); } @@ -148,7 +161,7 @@ inline void VisibilityManagerPrivate::setDockRect(const QRect &dockRect) { if (!view->containment() || this->dockRect == dockRect) return; - + this->dockRect = dockRect; if (mode == Dock::AlwaysVisible) { @@ -160,12 +173,12 @@ void VisibilityManagerPrivate::dodgeActive(WId wid) { if (wid != wm->activeWindow()) return; - + auto winfo = wm->requestInfo(wid); if (!winfo.isValid() || !winfo.isOnCurrentDesktop() || winfo.isMinimized()) return; - + raiseDock(intersects(winfo)); } @@ -173,12 +186,12 @@ void VisibilityManagerPrivate::dodgeMaximized(WId wid) { if (wid != wm->activeWindow()) return; - + auto winfo = wm->requestInfo(wid); if (!winfo.isValid() || !winfo.isOnCurrentDesktop() || winfo.isMinimized()) return; - + raiseDock(winfo.isMaximized()); } @@ -188,7 +201,7 @@ void VisibilityManagerPrivate::dodgeWindows(WId wid) if (!winfo.isValid() || !winfo.isOnCurrentDesktop() || winfo.isMinimized()) return; - + if (intersects(winfo)) raiseDock(false); else @@ -203,7 +216,7 @@ void VisibilityManagerPrivate::checkAllWindows() //! std::pair if (!std::get<1>(winfo).isValid() || !std::get<1>(winfo).isOnCurrentDesktop()) continue; - + if (std::get<1>(winfo).isFullscreen()) { raise = false; break; @@ -229,7 +242,7 @@ inline void VisibilityManagerPrivate::saveConfig() { if (!view->containment()) return; - + auto config = view->containment()->config(); config.writeEntry("visibility", static_cast(mode)); @@ -243,7 +256,7 @@ inline void VisibilityManagerPrivate::restoreConfig() { if (!view->containment()) return; - + auto config = view->containment()->config(); mode = static_cast(config.readEntry("visibility", static_cast(Dock::DodgeActive))); @@ -259,14 +272,14 @@ bool VisibilityManagerPrivate::event(QEvent *ev) if (mode == Dock::AutoHide) raiseDock(true); - + } else if (ev->type() == QEvent::Leave && containsMouse) { containsMouse = false; emit q->containsMouseChanged(); if (mode == Dock::AutoHide) raiseDock(false); - + } else if (ev->type() == QEvent::Show) { wm->setDockDefaultFlags(); } @@ -338,13 +351,13 @@ void VisibilityManager::updateDockGeometry(const QRect &geometry) d->setDockRect(geometry); } +void VisibilityManager::eventReceived(QEvent *ev) +{ + d->event(ev); +} //! END: VisibilityManager implementation } #include "abstractwindowinterface.h" #include "xwindowinterface.h" #include "plasmaquick/containmentview.h" - - - - diff --git a/app/visibilitymanager.h b/app/visibilitymanager.h index 1dc9f8357..97cd64046 100644 --- a/app/visibilitymanager.h +++ b/app/visibilitymanager.h @@ -44,7 +44,10 @@ public: * @brief updateDockGeometry, the window geometry in absolute coordinates. */ void updateDockGeometry(const QRect &geometry); - + +public Q_SLOTS: + void eventReceived(QEvent *); + signals: void mustBeShown(); void mustBeHide(); diff --git a/containment/contents/ui/VisibilityManager.qml b/containment/contents/ui/VisibilityManager.qml index d98680d9c..5625812ed 100644 --- a/containment/contents/ui/VisibilityManager.qml +++ b/containment/contents/ui/VisibilityManager.qml @@ -36,15 +36,6 @@ Item{ property int thicknessNormalOriginalValue: statesLineSizeOriginal + plasmoid.configuration.iconSize + iconMarginOriginal + 1 property int thicknessZoomOriginal: statesLineSizeOriginal + ((plasmoid.configuration.iconSize+iconMarginOriginal) * root.zoomFactor) + 2 - - Binding{ - //this is way to avoid warnings for null during initialization phase - target: dock ? dock.visibility : manager - property:"panelVisibility" - when: dock && dock.visibility - value: plasmoid.configuration.panelVisibility - } - Binding{ target: dock ? dock : manager property:"maxThickness" @@ -71,22 +62,22 @@ Item{ onThicknessZoomOriginalChanged: updateMaskArea(); function slotDisableHidingChanged() { - if (!dock.visibility.disableHiding) { + /*if (!dock.visibility.disableHiding) { checkListHovered.restart(); - } + }*/ } - function slotIsHoveredChanged() { - if(dock.visibility.isHovered) { + function slotContainsMouseChanged() { + if(dock.visibility.containsMouse) { //stop parent window timer for auto hiding - if ((dock.visibility.panelVisibility === Latte.Dock.AutoHide)|| dock.visibility.isDockWindowType) { + /* if (dock.visibility.mode === Latte.Dock.AutoHide) { if(hideMagicWindowInAutoHide.forcedDisableHiding) { hideMagicWindowInAutoHide.forcedDisableHiding = false; dock.visibility.disableHiding = false; } hideMagicWindowInAutoHide.stop(); - } + }*/ if (delayerTimer.running) { delayerTimer.stop(); @@ -99,29 +90,23 @@ Item{ } } - function slotMustBeRaised() { - if ((dock.visibility.panelVisibility === Latte.Dock.AutoHide) || dock.visibility.isDockWindowType) { - slidingAnimationAutoHiddenIn.init(); - } else { - slidingAnimation.init(true,false); - } + function slotMustBeShown() { + console.log("show..."); + slidingAnimationAutoHiddenIn.init(); } function slotMustBeRaisedImmediately() { slidingAnimation.init(true,true); } - function slotMustBeLowered() { - if ((dock.visibility.panelVisibility === Latte.Dock.AutoHide) || dock.visibility.isDockWindowType ) { - slidingAnimationAutoHiddenOut.init(); - } else { - slidingAnimation.init(false,false); - } + function slotMustBeHide() { + console.log("hide...."); + slidingAnimationAutoHiddenOut.init(); } - function slotPanelVisibilityChanged() { - if (dock.visibility.panelVisibility !== Latte.Dock.AutoHide) { - dock.visibility.isAutoHidden = false; + function slotModeChanged() { + if (dock.visibility.mode !== Latte.Dock.AutoHide) { + dock.visibility.isHidden = false; } } @@ -164,7 +149,7 @@ Item{ tempThickness = thicknessMidOriginal; } - if (dock.visibility.isAutoHidden && ((dock.visibility.panelVisibility === Latte.Dock.AutoHide) || dock.visibility.isDockWindowType)) { + if (dock.visibility.isHidden && (dock.visibility.mode === Latte.Dock.AutoHide)) { tempThickness = thicknessAutoHidden; } @@ -358,7 +343,7 @@ Item{ } onStopped: { - dock.visibility.isAutoHidden = true; + dock.visibility.isHidden = true; updateMaskArea(); } @@ -385,7 +370,7 @@ Item{ } function init() { - dock.visibility.isAutoHidden = false; + dock.visibility.isHidden = false; updateMaskArea(); start(); } @@ -396,12 +381,12 @@ Item{ onCurrentActivityChanged: { dock.visibility.disableHiding = true; - if (dock.visibility.isAutoHidden) { - dock.visibility.mustBeRaised(); + if (dock.visibility.isHidden) { + dock.visibility.mustBeShown(); } - hideMagicWindowInAutoHide.forcedDisableHiding = true; - hideMagicWindowInAutoHide.start(); + // hideMagicWindowInAutoHide.forcedDisableHiding = true; + // hideMagicWindowInAutoHide.start(); } } @@ -424,9 +409,9 @@ Item{ interval: manager.inStartup ? 1000 : 500 onTriggered: { layoutsContainer.opacity = 1; - if ((dock.visibility.panelVisibility !== Latte.Dock.AutoHide) && !dock.visibility.isDockWindowType) { - slidingAnimation.init(true,false); - } else { + if (dock.visibility.mode !== Latte.Dock.AutoHide) { + /*slidingAnimation.init(true,false); + } else {*/ slidingAnimationAutoHiddenIn.init(); } } diff --git a/containment/contents/ui/main.qml b/containment/contents/ui/main.qml index b914d2cfc..635b80e9a 100644 --- a/containment/contents/ui/main.qml +++ b/containment/contents/ui/main.qml @@ -398,12 +398,15 @@ DragDrop.DropArea { dock.onWidthChanged.connect(visibilityManager.updateMaskArea); dock.onHeightChanged.connect(visibilityManager.updateMaskArea); - dock.visibility.onDisableHidingChanged.connect(visibilityManager.slotDisableHidingChanged); - dock.visibility.onIsHoveredChanged.connect(visibilityManager.slotIsHoveredChanged); - dock.visibility.onMustBeLowered.connect(visibilityManager.slotMustBeLowered); - dock.visibility.onMustBeRaised.connect(visibilityManager.slotMustBeRaised); - dock.visibility.onMustBeRaisedImmediately.connect(visibilityManager.slotMustBeRaisedImmediately); - dock.visibility.onPanelVisibilityChanged.connect(visibilityManager.slotPanelVisibilityChanged); + dock.visibility.timerShow = 1000; + dock.visibility.timerHide = 1000; + + //dock.visibility.onDisableHidingChanged.connect(visibilityManager.slotDisableHidingChanged); + dock.visibility.onContainsMouseChanged.connect(visibilityManager.slotContainsMouseChanged); + dock.visibility.onMustBeHide.connect(visibilityManager.slotMustBeHide); + dock.visibility.onMustBeShown.connect(visibilityManager.slotMustBeShown); + //dock.visibility.onMustBeRaisedImmediately.connect(visibilityManager.slotMustBeRaisedImmediately); + dock.visibility.onModeChanged.connect(visibilityManager.slotModeChanged); } } @@ -439,9 +442,9 @@ DragDrop.DropArea { } onIsHoveredChanged: { - if (isHovered){ + /*if (isHovered){ dock.visibility.showOnTopCheck(); - } + }*/ } onHeightChanged: { @@ -584,16 +587,16 @@ DragDrop.DropArea { } } - if (plasmoid.immutable) { + /* if (plasmoid.immutable) { if (windowSystem.compositingActive) { - // magicWin.initialize(); + magicWin.initialize(); } dock.visibility.disableHiding = false; } else { dock.visibility.disableHiding = true; dock.visibility.mustBeRaised(); - } + }*/ visibilityManager.updateMaskArea(); @@ -749,7 +752,7 @@ DragDrop.DropArea { animatedLengthTimer.start(); } - if (!dock.visibility.isHovered && (root.animationsNeedBothAxis === 0) + if (!dock.visibility.containsMouse && (root.animationsNeedBothAxis === 0) && (root.animationsNeedLength===0) && (root.appletsAnimations === 0)) { mainLayout.animatedLength = true; } else { @@ -761,9 +764,9 @@ DragDrop.DropArea { function clearZoom(){ //console.log("Panel clear...."); - if (dock.visibility.disableHiding) { + /* if (dock.visibility.disableHiding) { return; - } + } */ layoutsContainer.currentSpot = -1000; layoutsContainer.hoveredIndex = -1; @@ -871,7 +874,7 @@ DragDrop.DropArea { } function slotDisableHiding(value) { - dock.visibility.disableHiding = value; + // dock.visibility.disableHiding = value; } function updateAutomaticIconSize() { @@ -1251,17 +1254,17 @@ DragDrop.DropArea { property bool forcedDisableHiding: false onTriggered: { - if (forcedDisableHiding) { + /* if (forcedDisableHiding) { forcedDisableHiding = false; dock.visibility.disableHiding = false; } var visibility = dock.visibility; - if (plasmoid.immutable && !visibility.isHovered //&& !wholeArea.containsMouse - && ((visibility.panelVisibility === Latte.Dock.AutoHide) || visibility.isDockWindowType) ) { - visibility.mustBeLowered(); - } + if (plasmoid.immutable && !visibility.containsMouse //&& !wholeArea.containsMouse + && (visibility.movde === Latte.Dock.AutoHide) ) { + visibility.mustBeHide(); + }*/ } } diff --git a/shell/contents/configuration/LatteDockConfiguration.qml.cmake b/shell/contents/configuration/LatteDockConfiguration.qml.cmake index b85e9dcd8..f18adb01b 100644 --- a/shell/contents/configuration/LatteDockConfiguration.qml.cmake +++ b/shell/contents/configuration/LatteDockConfiguration.qml.cmake @@ -375,6 +375,7 @@ PlasmaCore.FrameSvgItem { onCheckedChanged: { if(checked && !parent.inStartup){ + dock.visibility.mode = Latte.Dock.AlwaysVisible plasmoid.configuration.panelVisibility = 0 } } @@ -388,6 +389,7 @@ PlasmaCore.FrameSvgItem { onCheckedChanged: { if(checked && !parent.inStartup){ + dock.visibility.mode = Latte.Dock.AutoHide plasmoid.configuration.panelVisibility = 1 } } @@ -401,6 +403,7 @@ PlasmaCore.FrameSvgItem { onCheckedChanged: { if(checked && !parent.inStartup){ + dock.visibility.mode = Latte.Dock.DodgeActive plasmoid.configuration.panelVisibility = 2 } } @@ -415,6 +418,7 @@ PlasmaCore.FrameSvgItem { onCheckedChanged: { if(checked && !parent.inStartup){ + dock.visibility.mode = Latte.Dock.DodgeMaximized plasmoid.configuration.panelVisibility = 3 } } @@ -429,6 +433,7 @@ PlasmaCore.FrameSvgItem { onCheckedChanged: { if(checked && !parent.inStartup){ + dock.visibility.mode = Latte.Dock.DodgeWindows plasmoid.configuration.panelVisibility = 4 } } @@ -442,6 +447,7 @@ PlasmaCore.FrameSvgItem { onCheckedChanged: { if(checked && !parent.inStartup){ + dock.visibility.mode = Latte.Dock.AlwaysVisible plasmoid.configuration.panelVisibility = 5 } }