From 6c2dcfbab89e414935b15bdfe456049dd7b1054b Mon Sep 17 00:00:00 2001 From: Michail Vourlakos Date: Sat, 27 Jun 2020 14:42:29 +0300 Subject: [PATCH] drop Plasma::ConfigView for View primary window --this is a step forward in order for all Views to use the same Config Windows which is more memory efficient. --- app/view/settings/primaryconfigview.cpp | 25 +++--- app/view/settings/primaryconfigview.h | 8 +- app/view/view.cpp | 85 ++++++++++--------- app/view/view.h | 5 +- .../configuration/LatteDockConfiguration.qml | 2 - .../LatteDockSecondaryConfiguration.qml | 2 - .../configuration/pages/AppearanceConfig.qml | 1 - .../configuration/pages/BehaviorConfig.qml | 1 - .../configuration/pages/EffectsConfig.qml | 1 - .../configuration/pages/TasksConfig.qml | 1 - 10 files changed, 66 insertions(+), 65 deletions(-) diff --git a/app/view/settings/primaryconfigview.cpp b/app/view/settings/primaryconfigview.cpp index eea5b3c02..0b1786958 100644 --- a/app/view/settings/primaryconfigview.cpp +++ b/app/view/settings/primaryconfigview.cpp @@ -54,8 +54,8 @@ namespace Latte { namespace ViewPart { -PrimaryConfigView::PrimaryConfigView(Plasma::Containment *containment, Latte::View *view, QWindow *parent) - : PlasmaQuick::ConfigView(containment, parent), +PrimaryConfigView::PrimaryConfigView(Latte::View *view, QWindow *parent) + : QQuickView(parent), m_latteView(view) { m_corona = qobject_cast(m_latteView->containment()->corona()); @@ -70,11 +70,8 @@ PrimaryConfigView::PrimaryConfigView(Plasma::Containment *containment, Latte::Vi connect(m_corona->wm(), &WindowSystem::AbstractWindowInterface::latteWindowAdded, this, &PrimaryConfigView::updateWaylandId); } - setScreen(m_latteView->screen()); - - if (containment) { - setIcon(qGuiApp->windowIcon()); - } + setScreen(m_latteView->screen()); + setIcon(qGuiApp->windowIcon()); m_screenSyncTimer.setSingleShot(true); m_screenSyncTimer.setInterval(100); @@ -109,7 +106,7 @@ PrimaryConfigView::PrimaryConfigView(Plasma::Containment *containment, Latte::Vi connections << connect(m_latteView, &View::hiddenConfigurationWindowsAreDeletedChanged, this, &PrimaryConfigView::onHiddenConfigurationWindowsAreDeletedChanged); connections << connect(m_latteView->visibility(), &VisibilityManager::modeChanged, this, &PrimaryConfigView::syncGeometry); - connections << connect(containment, &Plasma::Containment::immutabilityChanged, this, &PrimaryConfigView::immutabilityChanged); + connections << connect(m_latteView->containment(), &Plasma::Containment::immutabilityChanged, this, &PrimaryConfigView::immutabilityChanged); m_thicknessSyncTimer.setSingleShot(true); m_thicknessSyncTimer.setInterval(200); @@ -125,6 +122,8 @@ PrimaryConfigView::PrimaryConfigView(Plasma::Containment *containment, Latte::Vi connections << connect(m_corona, &Latte::Corona::raiseViewsTemporaryChanged, this, &PrimaryConfigView::raiseDocksTemporaryChanged); connections << connect(m_corona, &Latte::Corona::availableScreenRectChangedFrom, this, &PrimaryConfigView::updateAvailableScreenGeometry); } + + init(); } PrimaryConfigView::~PrimaryConfigView() @@ -162,6 +161,11 @@ void PrimaryConfigView::init() setDefaultAlphaBuffer(true); setColor(Qt::transparent); m_corona->dialogShadows()->addWindow(this); + + //! Assign app interfaces in be accessible through containment graphic item + QQuickItem *containmentGraphicItem = qobject_cast(m_latteView->containment()->property("_plasma_graphicObject").value()); + + rootContext()->setContextProperty(QStringLiteral("plasmoid"), containmentGraphicItem); rootContext()->setContextProperty(QStringLiteral("latteView"), m_latteView); rootContext()->setContextProperty(QStringLiteral("shortcutsEngine"), m_corona->globalShortcuts()->shortcutsTracker()); rootContext()->setContextProperty(QStringLiteral("viewConfig"), this); @@ -582,14 +586,15 @@ bool PrimaryConfigView::event(QEvent *e) } } - return PlasmaQuick::ConfigView::event(e); + return QQuickView::event(e); } void PrimaryConfigView::immutabilityChanged(Plasma::Types::ImmutabilityType type) { - if (type != Plasma::Types::Mutable && isVisible()) + if (type != Plasma::Types::Mutable && isVisible()) { hideConfigWindow(); + } } bool PrimaryConfigView::sticker() const diff --git a/app/view/settings/primaryconfigview.h b/app/view/settings/primaryconfigview.h index 5f4c41707..26c697c1b 100644 --- a/app/view/settings/primaryconfigview.h +++ b/app/view/settings/primaryconfigview.h @@ -23,12 +23,12 @@ // local #include -#include "../../plasma/quick/configview.h" #include "../../wm/windowinfowrap.h" //Qt #include #include +#include #include #include @@ -63,7 +63,7 @@ class SecondaryConfigView; namespace Latte { namespace ViewPart { -class PrimaryConfigView : public PlasmaQuick::ConfigView +class PrimaryConfigView : public QQuickView { Q_OBJECT //! used when the secondary config window can not be shown @@ -81,10 +81,10 @@ public: SecondaryConfig }; - PrimaryConfigView(Plasma::Containment *containment, Latte::View *view, QWindow *parent = nullptr); + PrimaryConfigView(Latte::View *view, QWindow *parent = nullptr); ~PrimaryConfigView() override; - void init() override; + void init(); void requestActivate(); Qt::WindowFlags wFlags() const; diff --git a/app/view/view.cpp b/app/view/view.cpp index a3720d16b..fbd794d2d 100644 --- a/app/view/view.cpp +++ b/app/view/view.cpp @@ -200,8 +200,12 @@ View::~View() //! windows. //! this->disconnect(); - if (m_configView) { - delete m_configView; + if (m_containmentConfigView) { + delete m_containmentConfigView; + } + + if (m_appletConfigView) { + delete m_appletConfigView; } if (m_contextMenu) { @@ -325,9 +329,9 @@ void View::init(Plasma::Containment *plasma_containment) void View::reloadSource() { if (m_layout && containment()) { - if (settingsWindowIsShown()) { - m_configView->deleteLater(); - } + // if (settingsWindowIsShown()) { + // m_configView->deleteLater(); + // } engine()->clearComponentCache(); m_layout->recreateView(containment(), settingsWindowIsShown()); @@ -429,7 +433,7 @@ void View::removeView() bool View::settingsWindowIsShown() { - auto cview = qobject_cast(m_configView); + auto cview = qobject_cast(m_containmentConfigView); if (hiddenConfigurationWindowsAreDeleted()) { return (cview != nullptr); @@ -449,9 +453,9 @@ void View::showSettingsWindow() } } -PlasmaQuick::ConfigView *View::configView() +QQuickView *View::configView() { - return m_configView; + return m_containmentConfigView.data(); } void View::showConfigurationInterface(Plasma::Applet *applet) @@ -461,49 +465,44 @@ void View::showConfigurationInterface(Plasma::Applet *applet) Plasma::Containment *c = qobject_cast(applet); - if (m_configView && c && c->isContainment() && c == this->containment()) { - if (m_configView->isVisible()) { - m_configView->hide(); + if (m_containmentConfigView && c && c->isContainment() && c == this->containment()) { + if (m_containmentConfigView->isVisible()) { + m_containmentConfigView->hide(); } else { - m_configView->show(); + m_containmentConfigView->show(); } return; - } else if (m_configView) { - if (m_configView->applet() == applet) { - m_configView->show(); + } else if (m_appletConfigView) { + if (m_appletConfigView->applet() == applet) { + m_appletConfigView->show(); if (KWindowSystem::isPlatformX11()) { - m_configView->requestActivate(); + m_appletConfigView->requestActivate(); } return; } else { - m_configView->hide(); + m_appletConfigView->hide(); } } bool delayConfigView = false; - if (c && containment() && c->isContainment() && c->id() == this->containment()->id()) { - m_configView = new ViewPart::PrimaryConfigView(c, this); - delayConfigView = true; - } else { - m_configView = new PlasmaQuick::ConfigView(applet); - } - - m_configView.data()->init(); + if (c && containment() && c->isContainment() && c->id() == containment()->id()) { + m_containmentConfigView = new ViewPart::PrimaryConfigView(this); - if (!delayConfigView) { - m_configView->show(); - } else { //add a timer for showing the configuration window the first time it is //created in order to give the containment's layouts the time to //calculate the window's height QTimer::singleShot(150, [this]() { - if (m_configView) { - m_configView->show(); + if (m_containmentConfigView) { + m_containmentConfigView->show(); } }); + } else { + m_appletConfigView = new PlasmaQuick::ConfigView(applet); + m_appletConfigView.data()->init(); + m_appletConfigView->show(); } } @@ -813,8 +812,8 @@ void View::setIsPreferredForShortcuts(bool preferred) bool View::inSettingsAdvancedMode() const { - if (m_configView) { - auto configView = qobject_cast(m_configView); + if (m_containmentConfigView) { + auto configView = qobject_cast(m_containmentConfigView); if (configView) { return configView->inAdvancedMode(); @@ -1058,16 +1057,20 @@ void View::applyActivitiesToWindows() m_windowsTracker->setWindowOnActivities(*this, runningActivities); //! config windows - if (m_configView) { - m_windowsTracker->setWindowOnActivities(*m_configView, runningActivities); + if (m_containmentConfigView) { + m_windowsTracker->setWindowOnActivities(*m_containmentConfigView, runningActivities); - auto configView = qobject_cast(m_configView); + auto configView = qobject_cast(m_containmentConfigView); if (configView && configView->secondaryWindow()) { m_windowsTracker->setWindowOnActivities(*configView->secondaryWindow(), runningActivities); } } + if (m_appletConfigView) { + m_windowsTracker->setWindowOnActivities(*m_appletConfigView, runningActivities); + } + //! hidden windows if (m_visibility->supportsKWinEdges()) { m_visibility->applyActivitiesToHiddenWindows(runningActivities); @@ -1226,11 +1229,11 @@ void View::moveToLayout(QString layoutName) void View::configViewShownFor(Latte::View *view) { - if (view!=this && m_configView) { + if (view!=this && m_containmentConfigView) { //! for each layout only one dock should show its configuration windows //! otherwise we could reach a point that because a settings window //! is below another Latte View its options are not reachable - auto configDialog = qobject_cast(m_configView); + auto configDialog = qobject_cast(m_containmentConfigView); if (configDialog) { if (hiddenConfigurationWindowsAreDeleted()) { @@ -1244,8 +1247,8 @@ void View::configViewShownFor(Latte::View *view) void View::hideWindowsForSlidingOut() { - if (m_configView) { - auto configDialog = qobject_cast(m_configView); + if (m_containmentConfigView) { + auto configDialog = qobject_cast(m_containmentConfigView); if (configDialog) { configDialog->hideConfigWindow(); @@ -1336,8 +1339,8 @@ bool View::event(QEvent *e) case QEvent::Enter: m_containsMouse = true; - if (m_configView) { - ViewPart::PrimaryConfigView *primaryConfigView = qobject_cast(m_configView); + if (m_containmentConfigView) { + ViewPart::PrimaryConfigView *primaryConfigView = qobject_cast(m_containmentConfigView); if (primaryConfigView) { if (primaryConfigView->secondaryWindow()) { diff --git a/app/view/view.h b/app/view/view.h index 7dac01c20..58f783eb4 100644 --- a/app/view/view.h +++ b/app/view/view.h @@ -225,7 +225,7 @@ public: bool settingsWindowIsShown(); void showSettingsWindow(); - PlasmaQuick::ConfigView *configView(); + QQuickView *configView(); ViewPart::Effects *effects() const; ViewPart::ContainmentInterface *extendedInterface() const; @@ -410,7 +410,8 @@ private: int m_releaseGrab_y; Layout::GenericLayout *m_layout{nullptr}; - QPointer m_configView; + QPointer m_appletConfigView; + QPointer m_containmentConfigView; QPointer m_contextMenu; QPointer m_effects; diff --git a/shell/package/contents/configuration/LatteDockConfiguration.qml b/shell/package/contents/configuration/LatteDockConfiguration.qml index 9c0767b39..a1902523d 100644 --- a/shell/package/contents/configuration/LatteDockConfiguration.qml +++ b/shell/package/contents/configuration/LatteDockConfiguration.qml @@ -30,8 +30,6 @@ import org.kde.plasma.components 3.0 as PlasmaComponents3 import org.kde.plasma.extras 2.0 as PlasmaExtras import QtQuick.Controls.Styles.Plasma 2.0 as Styles -import org.kde.plasma.plasmoid 2.0 - import org.kde.kquickcontrolsaddons 2.0 as KQuickControlAddons import org.kde.latte.core 0.2 as LatteCore diff --git a/shell/package/contents/configuration/LatteDockSecondaryConfiguration.qml b/shell/package/contents/configuration/LatteDockSecondaryConfiguration.qml index 8fcb8f8fe..800552ab6 100644 --- a/shell/package/contents/configuration/LatteDockSecondaryConfiguration.qml +++ b/shell/package/contents/configuration/LatteDockSecondaryConfiguration.qml @@ -29,8 +29,6 @@ import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.extras 2.0 as PlasmaExtras import QtQuick.Controls.Styles.Plasma 2.0 as Styles -import org.kde.plasma.plasmoid 2.0 - import org.kde.kquickcontrolsaddons 2.0 as KQuickControlAddons import org.kde.latte.core 0.2 as LatteCore diff --git a/shell/package/contents/configuration/pages/AppearanceConfig.qml b/shell/package/contents/configuration/pages/AppearanceConfig.qml index afeb0244e..f3097d06b 100644 --- a/shell/package/contents/configuration/pages/AppearanceConfig.qml +++ b/shell/package/contents/configuration/pages/AppearanceConfig.qml @@ -27,7 +27,6 @@ import QtQuick.Dialogs 1.2 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 3.0 as PlasmaComponents3 -import org.kde.plasma.plasmoid 2.0 import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.components 1.0 as LatteComponents diff --git a/shell/package/contents/configuration/pages/BehaviorConfig.qml b/shell/package/contents/configuration/pages/BehaviorConfig.qml index 34739baec..d579e47e7 100644 --- a/shell/package/contents/configuration/pages/BehaviorConfig.qml +++ b/shell/package/contents/configuration/pages/BehaviorConfig.qml @@ -26,7 +26,6 @@ import QtGraphicalEffects 1.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 3.0 as PlasmaComponents3 -import org.kde.plasma.plasmoid 2.0 import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.components 1.0 as LatteComponents diff --git a/shell/package/contents/configuration/pages/EffectsConfig.qml b/shell/package/contents/configuration/pages/EffectsConfig.qml index e9cd71093..94e705540 100644 --- a/shell/package/contents/configuration/pages/EffectsConfig.qml +++ b/shell/package/contents/configuration/pages/EffectsConfig.qml @@ -26,7 +26,6 @@ import QtQuick.Dialogs 1.2 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 3.0 as PlasmaComponents3 -import org.kde.plasma.plasmoid 2.0 import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.components 1.0 as LatteComponents diff --git a/shell/package/contents/configuration/pages/TasksConfig.qml b/shell/package/contents/configuration/pages/TasksConfig.qml index 6f270ac89..bfeae5e06 100644 --- a/shell/package/contents/configuration/pages/TasksConfig.qml +++ b/shell/package/contents/configuration/pages/TasksConfig.qml @@ -25,7 +25,6 @@ import QtGraphicalEffects 1.0 import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 3.0 as PlasmaComponents3 -import org.kde.plasma.plasmoid 2.0 import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.components 1.0 as LatteComponents