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.
pull/18/head
Michail Vourlakos 5 years ago
parent e1c38213b9
commit 6c2dcfbab8

@ -54,8 +54,8 @@
namespace Latte { namespace Latte {
namespace ViewPart { namespace ViewPart {
PrimaryConfigView::PrimaryConfigView(Plasma::Containment *containment, Latte::View *view, QWindow *parent) PrimaryConfigView::PrimaryConfigView(Latte::View *view, QWindow *parent)
: PlasmaQuick::ConfigView(containment, parent), : QQuickView(parent),
m_latteView(view) m_latteView(view)
{ {
m_corona = qobject_cast<Latte::Corona *>(m_latteView->containment()->corona()); m_corona = qobject_cast<Latte::Corona *>(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); connect(m_corona->wm(), &WindowSystem::AbstractWindowInterface::latteWindowAdded, this, &PrimaryConfigView::updateWaylandId);
} }
setScreen(m_latteView->screen()); setScreen(m_latteView->screen());
setIcon(qGuiApp->windowIcon());
if (containment) {
setIcon(qGuiApp->windowIcon());
}
m_screenSyncTimer.setSingleShot(true); m_screenSyncTimer.setSingleShot(true);
m_screenSyncTimer.setInterval(100); 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, &View::hiddenConfigurationWindowsAreDeletedChanged, this, &PrimaryConfigView::onHiddenConfigurationWindowsAreDeletedChanged);
connections << connect(m_latteView->visibility(), &VisibilityManager::modeChanged, this, &PrimaryConfigView::syncGeometry); 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.setSingleShot(true);
m_thicknessSyncTimer.setInterval(200); 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::raiseViewsTemporaryChanged, this, &PrimaryConfigView::raiseDocksTemporaryChanged);
connections << connect(m_corona, &Latte::Corona::availableScreenRectChangedFrom, this, &PrimaryConfigView::updateAvailableScreenGeometry); connections << connect(m_corona, &Latte::Corona::availableScreenRectChangedFrom, this, &PrimaryConfigView::updateAvailableScreenGeometry);
} }
init();
} }
PrimaryConfigView::~PrimaryConfigView() PrimaryConfigView::~PrimaryConfigView()
@ -162,6 +161,11 @@ void PrimaryConfigView::init()
setDefaultAlphaBuffer(true); setDefaultAlphaBuffer(true);
setColor(Qt::transparent); setColor(Qt::transparent);
m_corona->dialogShadows()->addWindow(this); m_corona->dialogShadows()->addWindow(this);
//! Assign app interfaces in be accessible through containment graphic item
QQuickItem *containmentGraphicItem = qobject_cast<QQuickItem *>(m_latteView->containment()->property("_plasma_graphicObject").value<QObject *>());
rootContext()->setContextProperty(QStringLiteral("plasmoid"), containmentGraphicItem);
rootContext()->setContextProperty(QStringLiteral("latteView"), m_latteView); rootContext()->setContextProperty(QStringLiteral("latteView"), m_latteView);
rootContext()->setContextProperty(QStringLiteral("shortcutsEngine"), m_corona->globalShortcuts()->shortcutsTracker()); rootContext()->setContextProperty(QStringLiteral("shortcutsEngine"), m_corona->globalShortcuts()->shortcutsTracker());
rootContext()->setContextProperty(QStringLiteral("viewConfig"), this); 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) void PrimaryConfigView::immutabilityChanged(Plasma::Types::ImmutabilityType type)
{ {
if (type != Plasma::Types::Mutable && isVisible()) if (type != Plasma::Types::Mutable && isVisible()) {
hideConfigWindow(); hideConfigWindow();
}
} }
bool PrimaryConfigView::sticker() const bool PrimaryConfigView::sticker() const

@ -23,12 +23,12 @@
// local // local
#include <coretypes.h> #include <coretypes.h>
#include "../../plasma/quick/configview.h"
#include "../../wm/windowinfowrap.h" #include "../../wm/windowinfowrap.h"
//Qt //Qt
#include <QObject> #include <QObject>
#include <QPointer> #include <QPointer>
#include <QQuickView>
#include <QTimer> #include <QTimer>
#include <QWindow> #include <QWindow>
@ -63,7 +63,7 @@ class SecondaryConfigView;
namespace Latte { namespace Latte {
namespace ViewPart { namespace ViewPart {
class PrimaryConfigView : public PlasmaQuick::ConfigView class PrimaryConfigView : public QQuickView
{ {
Q_OBJECT Q_OBJECT
//! used when the secondary config window can not be shown //! used when the secondary config window can not be shown
@ -81,10 +81,10 @@ public:
SecondaryConfig SecondaryConfig
}; };
PrimaryConfigView(Plasma::Containment *containment, Latte::View *view, QWindow *parent = nullptr); PrimaryConfigView(Latte::View *view, QWindow *parent = nullptr);
~PrimaryConfigView() override; ~PrimaryConfigView() override;
void init() override; void init();
void requestActivate(); void requestActivate();
Qt::WindowFlags wFlags() const; Qt::WindowFlags wFlags() const;

@ -200,8 +200,12 @@ View::~View()
//! windows. //! windows.
//! this->disconnect(); //! this->disconnect();
if (m_configView) { if (m_containmentConfigView) {
delete m_configView; delete m_containmentConfigView;
}
if (m_appletConfigView) {
delete m_appletConfigView;
} }
if (m_contextMenu) { if (m_contextMenu) {
@ -325,9 +329,9 @@ void View::init(Plasma::Containment *plasma_containment)
void View::reloadSource() void View::reloadSource()
{ {
if (m_layout && containment()) { if (m_layout && containment()) {
if (settingsWindowIsShown()) { // if (settingsWindowIsShown()) {
m_configView->deleteLater(); // m_configView->deleteLater();
} // }
engine()->clearComponentCache(); engine()->clearComponentCache();
m_layout->recreateView(containment(), settingsWindowIsShown()); m_layout->recreateView(containment(), settingsWindowIsShown());
@ -429,7 +433,7 @@ void View::removeView()
bool View::settingsWindowIsShown() bool View::settingsWindowIsShown()
{ {
auto cview = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView); auto cview = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (hiddenConfigurationWindowsAreDeleted()) { if (hiddenConfigurationWindowsAreDeleted()) {
return (cview != nullptr); 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) void View::showConfigurationInterface(Plasma::Applet *applet)
@ -461,49 +465,44 @@ void View::showConfigurationInterface(Plasma::Applet *applet)
Plasma::Containment *c = qobject_cast<Plasma::Containment *>(applet); Plasma::Containment *c = qobject_cast<Plasma::Containment *>(applet);
if (m_configView && c && c->isContainment() && c == this->containment()) { if (m_containmentConfigView && c && c->isContainment() && c == this->containment()) {
if (m_configView->isVisible()) { if (m_containmentConfigView->isVisible()) {
m_configView->hide(); m_containmentConfigView->hide();
} else { } else {
m_configView->show(); m_containmentConfigView->show();
} }
return; return;
} else if (m_configView) { } else if (m_appletConfigView) {
if (m_configView->applet() == applet) { if (m_appletConfigView->applet() == applet) {
m_configView->show(); m_appletConfigView->show();
if (KWindowSystem::isPlatformX11()) { if (KWindowSystem::isPlatformX11()) {
m_configView->requestActivate(); m_appletConfigView->requestActivate();
} }
return; return;
} else { } else {
m_configView->hide(); m_appletConfigView->hide();
} }
} }
bool delayConfigView = false; bool delayConfigView = false;
if (c && containment() && c->isContainment() && c->id() == this->containment()->id()) { if (c && containment() && c->isContainment() && c->id() == containment()->id()) {
m_configView = new ViewPart::PrimaryConfigView(c, this); m_containmentConfigView = new ViewPart::PrimaryConfigView(this);
delayConfigView = true;
} else {
m_configView = new PlasmaQuick::ConfigView(applet);
}
m_configView.data()->init();
if (!delayConfigView) {
m_configView->show();
} else {
//add a timer for showing the configuration window the first time it is //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 //created in order to give the containment's layouts the time to
//calculate the window's height //calculate the window's height
QTimer::singleShot(150, [this]() { QTimer::singleShot(150, [this]() {
if (m_configView) { if (m_containmentConfigView) {
m_configView->show(); 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 bool View::inSettingsAdvancedMode() const
{ {
if (m_configView) { if (m_containmentConfigView) {
auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView); auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (configView) { if (configView) {
return configView->inAdvancedMode(); return configView->inAdvancedMode();
@ -1058,16 +1057,20 @@ void View::applyActivitiesToWindows()
m_windowsTracker->setWindowOnActivities(*this, runningActivities); m_windowsTracker->setWindowOnActivities(*this, runningActivities);
//! config windows //! config windows
if (m_configView) { if (m_containmentConfigView) {
m_windowsTracker->setWindowOnActivities(*m_configView, runningActivities); m_windowsTracker->setWindowOnActivities(*m_containmentConfigView, runningActivities);
auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView); auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (configView && configView->secondaryWindow()) { if (configView && configView->secondaryWindow()) {
m_windowsTracker->setWindowOnActivities(*configView->secondaryWindow(), runningActivities); m_windowsTracker->setWindowOnActivities(*configView->secondaryWindow(), runningActivities);
} }
} }
if (m_appletConfigView) {
m_windowsTracker->setWindowOnActivities(*m_appletConfigView, runningActivities);
}
//! hidden windows //! hidden windows
if (m_visibility->supportsKWinEdges()) { if (m_visibility->supportsKWinEdges()) {
m_visibility->applyActivitiesToHiddenWindows(runningActivities); m_visibility->applyActivitiesToHiddenWindows(runningActivities);
@ -1226,11 +1229,11 @@ void View::moveToLayout(QString layoutName)
void View::configViewShownFor(Latte::View *view) 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 //! for each layout only one dock should show its configuration windows
//! otherwise we could reach a point that because a settings window //! otherwise we could reach a point that because a settings window
//! is below another Latte View its options are not reachable //! is below another Latte View its options are not reachable
auto configDialog = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView); auto configDialog = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (configDialog) { if (configDialog) {
if (hiddenConfigurationWindowsAreDeleted()) { if (hiddenConfigurationWindowsAreDeleted()) {
@ -1244,8 +1247,8 @@ void View::configViewShownFor(Latte::View *view)
void View::hideWindowsForSlidingOut() void View::hideWindowsForSlidingOut()
{ {
if (m_configView) { if (m_containmentConfigView) {
auto configDialog = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView); auto configDialog = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (configDialog) { if (configDialog) {
configDialog->hideConfigWindow(); configDialog->hideConfigWindow();
@ -1336,8 +1339,8 @@ bool View::event(QEvent *e)
case QEvent::Enter: case QEvent::Enter:
m_containsMouse = true; m_containsMouse = true;
if (m_configView) { if (m_containmentConfigView) {
ViewPart::PrimaryConfigView *primaryConfigView = qobject_cast<ViewPart::PrimaryConfigView *>(m_configView); ViewPart::PrimaryConfigView *primaryConfigView = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (primaryConfigView) { if (primaryConfigView) {
if (primaryConfigView->secondaryWindow()) { if (primaryConfigView->secondaryWindow()) {

@ -225,7 +225,7 @@ public:
bool settingsWindowIsShown(); bool settingsWindowIsShown();
void showSettingsWindow(); void showSettingsWindow();
PlasmaQuick::ConfigView *configView(); QQuickView *configView();
ViewPart::Effects *effects() const; ViewPart::Effects *effects() const;
ViewPart::ContainmentInterface *extendedInterface() const; ViewPart::ContainmentInterface *extendedInterface() const;
@ -410,7 +410,8 @@ private:
int m_releaseGrab_y; int m_releaseGrab_y;
Layout::GenericLayout *m_layout{nullptr}; Layout::GenericLayout *m_layout{nullptr};
QPointer<PlasmaQuick::ConfigView> m_configView; QPointer<PlasmaQuick::ConfigView> m_appletConfigView;
QPointer<QQuickView> m_containmentConfigView;
QPointer<ViewPart::ContextMenu> m_contextMenu; QPointer<ViewPart::ContextMenu> m_contextMenu;
QPointer<ViewPart::Effects> m_effects; QPointer<ViewPart::Effects> m_effects;

@ -30,8 +30,6 @@ import org.kde.plasma.components 3.0 as PlasmaComponents3
import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.plasma.extras 2.0 as PlasmaExtras
import QtQuick.Controls.Styles.Plasma 2.0 as Styles 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.kquickcontrolsaddons 2.0 as KQuickControlAddons
import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.core 0.2 as LatteCore

@ -29,8 +29,6 @@ import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.extras 2.0 as PlasmaExtras import org.kde.plasma.extras 2.0 as PlasmaExtras
import QtQuick.Controls.Styles.Plasma 2.0 as Styles 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.kquickcontrolsaddons 2.0 as KQuickControlAddons
import org.kde.latte.core 0.2 as LatteCore import org.kde.latte.core 0.2 as LatteCore

@ -27,7 +27,6 @@ import QtQuick.Dialogs 1.2
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PlasmaComponents3 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.core 0.2 as LatteCore
import org.kde.latte.components 1.0 as LatteComponents import org.kde.latte.components 1.0 as LatteComponents

@ -26,7 +26,6 @@ import QtGraphicalEffects 1.0
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PlasmaComponents3 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.core 0.2 as LatteCore
import org.kde.latte.components 1.0 as LatteComponents import org.kde.latte.components 1.0 as LatteComponents

@ -26,7 +26,6 @@ import QtQuick.Dialogs 1.2
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PlasmaComponents3 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.core 0.2 as LatteCore
import org.kde.latte.components 1.0 as LatteComponents import org.kde.latte.components 1.0 as LatteComponents

@ -25,7 +25,6 @@ import QtGraphicalEffects 1.0
import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.plasma.core 2.0 as PlasmaCore
import org.kde.plasma.components 2.0 as PlasmaComponents import org.kde.plasma.components 2.0 as PlasmaComponents
import org.kde.plasma.components 3.0 as PlasmaComponents3 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.core 0.2 as LatteCore
import org.kde.latte.components 1.0 as LatteComponents import org.kde.latte.components 1.0 as LatteComponents

Loading…
Cancel
Save