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 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<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);
}
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<QQuickItem *>(m_latteView->containment()->property("_plasma_graphicObject").value<QObject *>());
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

@ -23,12 +23,12 @@
// local
#include <coretypes.h>
#include "../../plasma/quick/configview.h"
#include "../../wm/windowinfowrap.h"
//Qt
#include <QObject>
#include <QPointer>
#include <QQuickView>
#include <QTimer>
#include <QWindow>
@ -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;

@ -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<ViewPart::PrimaryConfigView *>(m_configView);
auto cview = qobject_cast<ViewPart::PrimaryConfigView *>(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<Plasma::Containment *>(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<ViewPart::PrimaryConfigView *>(m_configView);
if (m_containmentConfigView) {
auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(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<ViewPart::PrimaryConfigView *>(m_configView);
auto configView = qobject_cast<ViewPart::PrimaryConfigView *>(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<ViewPart::PrimaryConfigView *>(m_configView);
auto configDialog = qobject_cast<ViewPart::PrimaryConfigView *>(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<ViewPart::PrimaryConfigView *>(m_configView);
if (m_containmentConfigView) {
auto configDialog = qobject_cast<ViewPart::PrimaryConfigView *>(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<ViewPart::PrimaryConfigView *>(m_configView);
if (m_containmentConfigView) {
ViewPart::PrimaryConfigView *primaryConfigView = qobject_cast<ViewPart::PrimaryConfigView *>(m_containmentConfigView);
if (primaryConfigView) {
if (primaryConfigView->secondaryWindow()) {

@ -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<PlasmaQuick::ConfigView> m_configView;
QPointer<PlasmaQuick::ConfigView> m_appletConfigView;
QPointer<QQuickView> m_containmentConfigView;
QPointer<ViewPart::ContextMenu> m_contextMenu;
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 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

@ -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

@ -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

@ -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

@ -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

@ -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

Loading…
Cancel
Save