show configuration windows only for one view

-- 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
pull/5/head
Michail Vourlakos 6 years ago
parent 94415e24b4
commit fabf6f44d2

@ -27,6 +27,7 @@
// Qt
#include <QObject>
#include <QPointer>
#include <QQuickView>
#include <QScreen>
// KDE
@ -205,6 +206,9 @@ signals:
void preferredViewForShortcutsChanged(Latte::View *view);
void preferredForShortcutsTouchedChanged();
//! used from ConfigView(s) in order to be informed which is one should be shown
void configViewCreated(QQuickView *configView);
private slots:
void loadConfig();
void saveConfig();

@ -26,6 +26,7 @@
#include "../view.h"
#include "../../lattecorona.h"
#include "../../layoutmanager.h"
#include "../../layout/layout.h"
#include "../../settings/universalsettings.h"
#include "../../shortcuts/globalshortcuts.h"
#include "../../shortcuts/shortcutstracker.h"
@ -94,6 +95,10 @@ PrimaryConfigView::PrimaryConfigView(Plasma::Containment *containment, Latte::Vi
if (m_corona) {
connections << connect(m_corona, &Latte::Corona::raiseViewsTemporaryChanged, this, &PrimaryConfigView::raiseDocksTemporaryChanged);
}
if (m_latteView->managedLayout()) {
emit m_latteView->managedLayout()->configViewCreated(this);
}
}
PrimaryConfigView::~PrimaryConfigView()

@ -758,12 +758,13 @@ void View::setManagedLayout(Layout *layout)
});
connectionsManagedLayout[0] = connect(m_managedLayout, &Layout::preferredViewForShortcutsChanged, this, &View::preferredViewForShortcutsChangedSlot);
connectionsManagedLayout[1] = connect(m_managedLayout, &Latte::Layout::configViewCreated, this, &View::configViewCreated);
}
Latte::Corona *latteCorona = qobject_cast<Latte::Corona *>(this->corona());
if (latteCorona->layoutManager()->memoryUsage() == Types::MultipleLayouts) {
connectionsManagedLayout[1] = connect(latteCorona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, [&]() {
connectionsManagedLayout[2] = connect(latteCorona->activitiesConsumer(), &KActivities::Consumer::runningActivitiesChanged, this, [&]() {
if (m_managedLayout && m_visibility) {
qDebug() << "DOCK VIEW FROM LAYOUT (runningActivitiesChanged) ::: " << m_managedLayout->name()
<< " - activities: " << m_managedLayout->appliedActivities();
@ -772,14 +773,14 @@ void View::setManagedLayout(Layout *layout)
}
});
connectionsManagedLayout[2] = connect(m_managedLayout, &Layout::activitiesChanged, this, [&]() {
connectionsManagedLayout[3] = connect(m_managedLayout, &Layout::activitiesChanged, this, [&]() {
if (m_managedLayout) {
applyActivitiesToWindows();
emit activitiesChanged();
}
});
connectionsManagedLayout[3] = connect(latteCorona->layoutManager(), &LayoutManager::layoutsChanged, this, [&]() {
connectionsManagedLayout[4] = connect(latteCorona->layoutManager(), &LayoutManager::layoutsChanged, this, [&]() {
if (m_managedLayout) {
applyActivitiesToWindows();
emit activitiesChanged();
@ -788,7 +789,7 @@ void View::setManagedLayout(Layout *layout)
//!IMPORTANT!!! ::: This fixes a bug when closing an Activity all docks from all Activities are
//! disappearing! With this they reappear!!!
connectionsManagedLayout[4] = connect(this, &QWindow::visibleChanged, this, [&]() {
connectionsManagedLayout[5] = connect(this, &QWindow::visibleChanged, this, [&]() {
if (!isVisible() && m_managedLayout) {
QTimer::singleShot(100, [this]() {
if (m_managedLayout && containment() && !containment()->destroyed()) {
@ -850,6 +851,16 @@ void View::setBlockHiding(bool block)
}
}
void View::configViewCreated(QQuickView *configView)
{
if (m_configView && m_configView!=configView) {
//! 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
m_configView->deleteLater();
}
}
void View::hideWindowsForSlidingOut()
{
setBlockHiding(false);

@ -257,6 +257,7 @@ signals:
private slots:
void availableScreenRectChanged();
void configViewCreated(QQuickView *configView);
void hideWindowsForSlidingOut();
void preferredViewForShortcutsChangedSlot(Latte::View *view);
void statusChanged(Plasma::Types::ItemStatus);
@ -304,7 +305,7 @@ private:
QPointer<ViewPart::WindowsTracker> m_windowsTracker;
//! Connections to release and bound for the managed layout
std::array<QMetaObject::Connection, 5> connectionsManagedLayout;
std::array<QMetaObject::Connection, 6> connectionsManagedLayout;
KWayland::Client::PlasmaShellSurface *m_shellSurface{nullptr};
};

Loading…
Cancel
Save