diff --git a/app/dock/dockview.cpp b/app/dock/dockview.cpp index 08bf6c8af..1cb76829c 100644 --- a/app/dock/dockview.cpp +++ b/app/dock/dockview.cpp @@ -68,7 +68,7 @@ DockView::DockView(Plasma::Corona *corona, QScreen *targetScreen, bool dockWindo : PlasmaQuick::ContainmentView(corona), m_menuManager(new DockMenuManager(this)), m_effects(new View::Effects(this)), - m_positioner(new Positioner(this)) //needs to be created after Effects becuase it catches some of its signals + m_positioner(new View::Positioner(this)) //needs to be created after Effects becuase it catches some of its signals { setTitle(corona->kPackage().metadata().name()); setIcon(qGuiApp->windowIcon()); @@ -187,8 +187,9 @@ void DockView::init() connect(corona(), &Plasma::Corona::availableScreenRectChanged, this, &DockView::availableScreenRectChanged); - connect(m_positioner, &Positioner::currentScreenChanged, this, &DockView::currentScreenChanged); - connect(m_positioner, &Positioner::screenGeometryChanged, this, &DockView::screenGeometryChanged); + connect(m_positioner, &View::Positioner::currentScreenChanged, this, &DockView::currentScreenChanged); + connect(m_positioner, &View::Positioner::onHideWindowsForSlidingOut, this, &DockView::hideWindowsForSlidingOut); + connect(m_positioner, &View::Positioner::screenGeometryChanged, this, &DockView::screenGeometryChanged); connect(this, &DockView::dockWinBehaviorChanged, this, &DockView::saveConfig); connect(this, &DockView::onPrimaryChanged, this, &DockView::saveConfig); @@ -534,27 +535,6 @@ int DockView::docksWithTasks() return m_managedLayout->noDocksWithTasks(); } -void DockView::updateFormFactor() -{ - if (!this->containment()) - return; - - switch (location()) { - case Plasma::Types::TopEdge: - case Plasma::Types::BottomEdge: - this->containment()->setFormFactor(Plasma::Types::Horizontal); - break; - - case Plasma::Types::LeftEdge: - case Plasma::Types::RightEdge: - this->containment()->setFormFactor(Plasma::Types::Vertical); - break; - - default: - qWarning() << "wrong location, couldn't update the panel position" << location(); - } -} - bool DockView::dockWinBehavior() const { return m_dockWinBehavior; @@ -952,6 +932,19 @@ void DockView::setBlockHiding(bool block) } } +void DockView::hideWindowsForSlidingOut() +{ + setBlockHiding(false); + + if (m_configView) { + auto configDialog = qobject_cast(m_configView); + + if (configDialog) { + configDialog->hideConfigWindow(); + } + } +} + //! remove latte tasks plasmoid void DockView::removeTasksPlasmoid() { @@ -1037,7 +1030,7 @@ View::Effects *DockView::effects() const return m_effects; } -Positioner *DockView::positioner() const +View::Positioner *DockView::positioner() const { return m_positioner; } diff --git a/app/dock/dockview.h b/app/dock/dockview.h index c7b6eabe3..87e40e64c 100644 --- a/app/dock/dockview.h +++ b/app/dock/dockview.h @@ -23,6 +23,7 @@ #include "dockconfigview.h" #include "effects.h" +#include "positioner.h" #include "visibilitymanager.h" #include "../layout.h" #include "../plasmaquick/containmentview.h" @@ -56,7 +57,6 @@ class PlasmaShellSurface; namespace Latte { class DockMenuManager; class Layout; -class Positioner; } namespace Latte { @@ -97,7 +97,7 @@ class DockView : public PlasmaQuick::ContainmentView Q_PROPERTY(Latte::View::Effects *effects READ effects NOTIFY effectsChanged) Q_PROPERTY(Layout *managedLayout READ managedLayout WRITE setManagedLayout NOTIFY managedLayoutChanged) - Q_PROPERTY(Positioner *positioner READ positioner NOTIFY positionerChanged) + Q_PROPERTY(Latte::View::Positioner *positioner READ positioner NOTIFY positionerChanged) Q_PROPERTY(VisibilityManager *visibility READ visibility NOTIFY visibilityChanged) Q_PROPERTY(QQmlListProperty screens READ screens) @@ -183,7 +183,7 @@ public: void showSettingsWindow(); View::Effects *effects() const; - Positioner *positioner() const; + View::Positioner *positioner() const; VisibilityManager *visibility() const; Layout *managedLayout() const; @@ -278,6 +278,7 @@ signals: private slots: void availableScreenRectChanged(); + void hideWindowsForSlidingOut(); void preferredViewForShortcutsChangedSlot(DockView *view); void statusChanged(Plasma::Types::ItemStatus); @@ -288,7 +289,6 @@ private: void applyActivitiesToWindows(); void initSignalingForLocationChangeSliding(); void setupWaylandIntegration(); - void updateFormFactor(); void updateAppletContainsMethod(); private: @@ -321,7 +321,7 @@ private: QPointer m_menuManager; QPointer m_effects; - QPointer m_positioner; + QPointer m_positioner; QPointer m_visibility; //! Connections to release and bound for the managed layout @@ -330,8 +330,6 @@ private: Plasma::Theme m_theme; KWayland::Client::PlasmaShellSurface *m_shellSurface{nullptr}; - - friend class Positioner; }; } diff --git a/app/dock/positioner.cpp b/app/dock/positioner.cpp index 02c09707d..de7e7ae93 100644 --- a/app/dock/positioner.cpp +++ b/app/dock/positioner.cpp @@ -34,8 +34,9 @@ #include namespace Latte { +namespace View { -Positioner::Positioner(DockView *parent) +Positioner::Positioner(Latte::DockView *parent) : QObject(parent), m_view(parent) { @@ -89,35 +90,36 @@ void Positioner::init() connect(m_view, &QQuickWindow::widthChanged, this, &Positioner::validateDockGeometry); connect(m_view, &QQuickWindow::heightChanged, this, &Positioner::validateDockGeometry); connect(m_view, &QQuickWindow::screenChanged, this, &Positioner::screenChanged); - connect(m_view, &DockView::absGeometryChanged, this, &Positioner::syncGeometry); - connect(m_view, &DockView::behaveAsPlasmaPanelChanged, this, &Positioner::syncGeometry); - connect(m_view, &DockView::maxThicknessChanged, this, &Positioner::syncGeometry); - connect(m_view, &DockView::maxLengthChanged, this, &Positioner::syncGeometry); - connect(m_view, &DockView::offsetChanged, this, &Positioner::syncGeometry); - connect(m_view->effects(), &Latte::View::Effects::drawShadowsChanged, this, [&]() { - if (!m_view->behaveAsPlasmaPanel()) { - syncGeometry(); - } - }); + connect(m_view, &Latte::DockView::absGeometryChanged, this, &Positioner::syncGeometry); + connect(m_view, &Latte::DockView::behaveAsPlasmaPanelChanged, this, &Positioner::syncGeometry); + connect(m_view, &Latte::DockView::maxThicknessChanged, this, &Positioner::syncGeometry); + connect(m_view, &Latte::DockView::maxLengthChanged, this, &Positioner::syncGeometry); + connect(m_view, &Latte::DockView::offsetChanged, this, &Positioner::syncGeometry); - connect(m_view, &DockView::locationChanged, this, [&]() { - m_view->updateFormFactor(); + connect(m_view, &Latte::DockView::locationChanged, this, [&]() { + updateFormFactor(); syncGeometry(); }); - connect(m_view, &DockView::normalThicknessChanged, this, [&]() { + connect(m_view, &Latte::DockView::normalThicknessChanged, this, [&]() { if (m_view->behaveAsPlasmaPanel()) { syncGeometry(); } }); - connect(m_view, &DockView::shadowChanged, this, [&]() { + connect(m_view, &Latte::DockView::shadowChanged, this, [&]() { if (m_view->behaveAsPlasmaPanel()) { syncGeometry(); } }); + connect(m_view->effects(), &Latte::View::Effects::drawShadowsChanged, this, [&]() { + if (!m_view->behaveAsPlasmaPanel()) { + syncGeometry(); + } + }); + connect(qGuiApp, &QGuiApplication::screenAdded, this, &Positioner::screenChanged); connect(qGuiApp, &QGuiApplication::primaryScreenChanged, this, &Positioner::screenChanged); @@ -540,25 +542,31 @@ void Positioner::resizeWindow(QRect availableScreenRect) } } -void Positioner::hideWindowsForSlidingOut() +void Positioner::updateFormFactor() { - m_view->setBlockHiding(false); + if (!m_view->containment()) + return; - if (m_view->m_configView) { - auto configDialog = qobject_cast(m_view->m_configView); + switch (m_view->location()) { + case Plasma::Types::TopEdge: + case Plasma::Types::BottomEdge: + m_view->containment()->setFormFactor(Plasma::Types::Horizontal); + break; - if (configDialog) { - configDialog->hideConfigWindow(); - } + case Plasma::Types::LeftEdge: + case Plasma::Types::RightEdge: + m_view->containment()->setFormFactor(Plasma::Types::Vertical); + break; + + default: + qWarning() << "wrong location, couldn't update the panel position" << m_view->location(); } } void Positioner::initSignalingForLocationChangeSliding() { //! signals to handle the sliding-in/out during location changes - connect(this, &Positioner::hideDockDuringLocationChangeStarted, this, [&]() { - hideWindowsForSlidingOut(); - }); + connect(this, &Positioner::hideDockDuringLocationChangeStarted, this, &Positioner::onHideWindowsForSlidingOut); connect(m_view, &DockView::locationChanged, this, [&]() { if (m_goToLocation != Plasma::Types::Floating) { @@ -576,9 +584,7 @@ void Positioner::initSignalingForLocationChangeSliding() }); //! signals to handle the sliding-in/out during screen changes - connect(this, &Positioner::hideDockDuringScreenChangeStarted, this, [&]() { - hideWindowsForSlidingOut(); - }); + connect(this, &Positioner::hideDockDuringScreenChangeStarted, this, &Positioner::onHideWindowsForSlidingOut); connect(m_view, &DockView::currentScreenChanged, this, [&]() { if (m_goToScreen) { @@ -596,9 +602,7 @@ void Positioner::initSignalingForLocationChangeSliding() }); //! signals to handle the sliding-in/out during moving to another layout - connect(this, &Positioner::hideDockDuringMovingToLayoutStarted, this, [&]() { - hideWindowsForSlidingOut(); - }); + connect(this, &Positioner::hideDockDuringMovingToLayoutStarted, this, &Positioner::onHideWindowsForSlidingOut); connect(m_view, &DockView::managedLayoutChanged, this, [&]() { if (!m_moveToLayout.isEmpty() && m_view->managedLayout()) { @@ -645,3 +649,4 @@ void Positioner::hideDockDuringMovingToLayout(QString layoutName) } } +} diff --git a/app/dock/positioner.h b/app/dock/positioner.h index bd3a965c7..d3e3342b1 100644 --- a/app/dock/positioner.h +++ b/app/dock/positioner.h @@ -36,6 +36,7 @@ class DockView; } namespace Latte { +namespace View { class Positioner: public QObject { @@ -73,6 +74,7 @@ signals: void hideDockDuringScreenChangeFinished(); void hideDockDuringMovingToLayoutStarted(); void hideDockDuringMovingToLayoutFinished(); + void onHideWindowsForSlidingOut(); void showDockAfterLocationChangeFinished(); void showDockAfterScreenChangeFinished(); void showDockAfterMovingToLayoutFinished(); @@ -84,9 +86,9 @@ private slots: private: void init(); void initSignalingForLocationChangeSliding(); - void hideWindowsForSlidingOut(); void resizeWindow(QRect availableScreenRect = QRect()); + void updateFormFactor(); void updatePosition(QRect availableScreenRect = QRect()); QRect maximumNormalGeometry(); @@ -97,7 +99,7 @@ private: //! it is used in order to enforce X11 to never miss window geometry QRect m_validGeometry; - QPointer m_view; + QPointer m_view; QString m_screenToFollowId; QPointer m_screenToFollow; @@ -111,6 +113,7 @@ private: QScreen *m_goToScreen{nullptr}; }; +} } #endif