mirror of
https://github.com/KDE/latte-dock.git
synced 2025-03-06 16:58:17 +03:00
fix #277,use normal dock window from tweaks
-- with this setting the user can disable the BypassWindowManagerHint flag for specific docks
This commit is contained in:
parent
f371ea2a45
commit
d8410ff235
@ -48,6 +48,8 @@ DockConfigView::DockConfigView(Plasma::Containment *containment, DockView *dockV
|
||||
setIcon(qGuiApp->windowIcon());
|
||||
}
|
||||
|
||||
m_previousDockWinBehavior = m_dockView->dockWinBehavior();
|
||||
|
||||
connections << connect(dockView, &QObject::destroyed, this, &QObject::deleteLater);
|
||||
m_screenSyncTimer.setSingleShot(true);
|
||||
m_screenSyncTimer.setInterval(100);
|
||||
@ -220,9 +222,10 @@ void DockConfigView::hideEvent(QHideEvent *ev)
|
||||
|
||||
QQuickWindow::hideEvent(ev);
|
||||
|
||||
if (m_dockView && m_dockView->visibility()->mode() != m_previousMode
|
||||
&& ((m_dockView->visibility()->mode() == Dock::AlwaysVisible)
|
||||
|| (m_previousMode == Dock::AlwaysVisible))) {
|
||||
if ((m_dockView && m_dockView->visibility()->mode() != m_previousMode
|
||||
&& ((m_dockView->visibility()->mode() == Dock::AlwaysVisible)
|
||||
|| (m_previousMode == Dock::AlwaysVisible)))
|
||||
|| (m_previousDockWinBehavior != m_dockView->dockWinBehavior())) {
|
||||
|
||||
auto *dockCorona = qobject_cast<DockCorona *>(m_dockView->corona());
|
||||
|
||||
|
@ -76,6 +76,9 @@ signals:
|
||||
|
||||
private:
|
||||
bool m_blockFocusLost;
|
||||
//! it is used to check if we need to recreate the dock window
|
||||
//! after the configuration window gets closed
|
||||
bool m_previousDockWinBehavior;
|
||||
|
||||
QPointer<DockView> m_dockView;
|
||||
QTimer m_screenSyncTimer;
|
||||
|
@ -800,13 +800,14 @@ void DockCorona::addDock(Plasma::Containment *containment)
|
||||
//! of the window... This of course is also used during
|
||||
//! recreations of the window between different visibility modes
|
||||
auto mode = static_cast<Dock::Visibility>(containment->config().readEntry("visibility", static_cast<int>(Dock::DodgeActive)));
|
||||
bool dockWin = containment->config().readEntry("dockWindowBehavior", false);
|
||||
bool alwaysVisible{false};
|
||||
|
||||
if (mode == Latte::Dock::AlwaysVisible) {
|
||||
alwaysVisible = true;
|
||||
}
|
||||
|
||||
auto dockView = new DockView(this, nextScreen, alwaysVisible);
|
||||
auto dockView = new DockView(this, nextScreen, alwaysVisible, dockWin);
|
||||
dockView->init();
|
||||
dockView->setContainment(containment);
|
||||
|
||||
|
@ -47,7 +47,10 @@
|
||||
|
||||
namespace Latte {
|
||||
|
||||
DockView::DockView(Plasma::Corona *corona, QScreen *targetScreen, bool alwaysVisible)
|
||||
//! both alwaysVisible and dockWinBehavior are passed through corona because
|
||||
//! during the dock window creation containment hasnt been set, but these variables
|
||||
//! are needed in order for window flags to be set correctly
|
||||
DockView::DockView(Plasma::Corona *corona, QScreen *targetScreen, bool alwaysVisible, bool dockWindowBehavior)
|
||||
: PlasmaQuick::ContainmentView(corona),
|
||||
m_contextMenu(nullptr)
|
||||
{
|
||||
@ -58,7 +61,7 @@ DockView::DockView(Plasma::Corona *corona, QScreen *targetScreen, bool alwaysVis
|
||||
setColor(QColor(Qt::transparent));
|
||||
setClearBeforeRendering(true);
|
||||
|
||||
if (!alwaysVisible) {
|
||||
if (!alwaysVisible && !dockWindowBehavior) {
|
||||
setFlags(Qt::BypassWindowManagerHint
|
||||
| Qt::FramelessWindowHint
|
||||
| Qt::WindowStaysOnTopHint
|
||||
@ -159,6 +162,7 @@ void DockView::init()
|
||||
connect(this, &DockView::drawShadowsChanged, this, &DockView::syncGeometry);
|
||||
connect(this, &DockView::maxLengthChanged, this, &DockView::syncGeometry);
|
||||
connect(this, &DockView::alignmentChanged, this, &DockView::updateEnabledBorders);
|
||||
connect(this, &DockView::dockWinBehaviorChanged, this, &DockView::saveConfig);
|
||||
connect(this, &DockView::onPrimaryChanged, this, &DockView::saveConfig);
|
||||
connect(this, &DockView::onPrimaryChanged, this, &DockView::reconsiderScreen);
|
||||
connect(this, &DockView::sessionChanged, this, &DockView::saveConfig);
|
||||
@ -733,6 +737,21 @@ void DockView::updateFormFactor()
|
||||
}
|
||||
}
|
||||
|
||||
bool DockView::dockWinBehavior() const
|
||||
{
|
||||
return m_dockWinBehavior;
|
||||
}
|
||||
|
||||
void DockView::setDockWinBehavior(bool dock)
|
||||
{
|
||||
if (m_dockWinBehavior == dock) {
|
||||
return;
|
||||
}
|
||||
|
||||
m_dockWinBehavior = dock;
|
||||
emit dockWinBehaviorChanged();
|
||||
}
|
||||
|
||||
bool DockView::drawShadows() const
|
||||
{
|
||||
return m_drawShadows;
|
||||
@ -1502,6 +1521,7 @@ void DockView::saveConfig()
|
||||
auto config = this->containment()->config();
|
||||
config.writeEntry("onPrimary", m_onPrimary);
|
||||
config.writeEntry("session", (int)m_session);
|
||||
config.writeEntry("dockWindowBehavior", m_dockWinBehavior);
|
||||
this->containment()->configNeedsSaving();
|
||||
}
|
||||
|
||||
@ -1513,6 +1533,7 @@ void DockView::restoreConfig()
|
||||
auto config = this->containment()->config();
|
||||
setOnPrimary(config.readEntry("onPrimary", true));
|
||||
setSession((Dock::SessionType)config.readEntry("session", (int)Dock::DefaultSession));
|
||||
setDockWinBehavior(config.readEntry("dockWindowBehavior", false));
|
||||
}
|
||||
//!END configuration functions
|
||||
|
||||
|
@ -45,6 +45,7 @@ namespace Latte {
|
||||
|
||||
class DockView : public PlasmaQuick::ContainmentView {
|
||||
Q_OBJECT
|
||||
Q_PROPERTY(bool dockWinBehavior READ dockWinBehavior WRITE setDockWinBehavior NOTIFY dockWinBehaviorChanged)
|
||||
Q_PROPERTY(bool drawShadows READ drawShadows WRITE setDrawShadows NOTIFY drawShadowsChanged)
|
||||
Q_PROPERTY(bool drawEffects READ drawEffects WRITE setDrawEffects NOTIFY drawEffectsChanged)
|
||||
Q_PROPERTY(bool onPrimary READ onPrimary WRITE setOnPrimary NOTIFY onPrimaryChanged)
|
||||
@ -76,7 +77,7 @@ class DockView : public PlasmaQuick::ContainmentView {
|
||||
Q_PROPERTY(Latte::Dock::SessionType session READ session WRITE setSession NOTIFY sessionChanged)
|
||||
|
||||
public:
|
||||
DockView(Plasma::Corona *corona, QScreen *targetScreen = nullptr, bool alwaysVisible = false);
|
||||
DockView(Plasma::Corona *corona, QScreen *targetScreen = nullptr, bool alwaysVisible = false, bool dockWindowBehavior = false);
|
||||
virtual ~DockView();
|
||||
|
||||
void init();
|
||||
@ -93,6 +94,9 @@ public:
|
||||
|
||||
int docksCount() const;
|
||||
|
||||
bool dockWinBehavior() const;
|
||||
void setDockWinBehavior(bool dock);
|
||||
|
||||
bool drawShadows() const;
|
||||
void setDrawShadows(bool draw);
|
||||
|
||||
@ -172,6 +176,7 @@ signals:
|
||||
void currentScreenChanged();
|
||||
void dockLocationChanged();
|
||||
void docksCountChanged();
|
||||
void dockWinBehaviorChanged();
|
||||
void drawShadowsChanged();
|
||||
void drawEffectsChanged();
|
||||
void effectsAreaChanged();
|
||||
@ -214,6 +219,7 @@ private:
|
||||
Plasma::Containment *containmentById(uint id);
|
||||
|
||||
bool m_forceDrawCenteredBorders{false};
|
||||
bool m_dockWinBehavior{false};
|
||||
bool m_drawShadows{false};
|
||||
bool m_drawEffects{false};
|
||||
bool m_onPrimary{true};
|
||||
|
@ -89,6 +89,17 @@ PlasmaComponents.Page {
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.CheckBox {
|
||||
Layout.leftMargin: units.smallSpacing * 2
|
||||
text: i18n("Behave as a normal dock window")
|
||||
checked: dock.dockWinBehavior
|
||||
tooltip: i18n("Removes the BypassWindowManagerHint flag from the window")
|
||||
|
||||
onClicked: {
|
||||
dock.dockWinBehavior = checked;
|
||||
}
|
||||
}
|
||||
|
||||
PlasmaComponents.CheckBox {
|
||||
Layout.leftMargin: units.smallSpacing * 2
|
||||
text: i18n("Expose Alternative Session in the context menu")
|
||||
|
Loading…
x
Reference in New Issue
Block a user