support DodgeActive

--add localDockGeometry to be used for the
intersect situation
v0.6
Michail Vourlakos 8 years ago
parent 5550d5bc53
commit 13fad948de

@ -73,6 +73,10 @@ NowDockView::NowDockView(Plasma::Corona *corona, QScreen *targetScreen)
m_lockGeometry.setSingleShot(true); m_lockGeometry.setSingleShot(true);
m_lockGeometry.setInterval(700); m_lockGeometry.setInterval(700);
connect(this, SIGNAL(localDockGeometryChanged()), this, SLOT(updateAbsDockGeometry()));
connect(this, SIGNAL(xChanged(int)), this, SLOT(updateAbsDockGeometry()));
connect(this, SIGNAL(yChanged(int)), this, SLOT(updateAbsDockGeometry()));
connect(this, &NowDockView::containmentChanged connect(this, &NowDockView::containmentChanged
, this, [&]() { , this, [&]() {
if (!containment()) if (!containment())
@ -286,6 +290,23 @@ void NowDockView::resizeWindow()
} }
} }
void NowDockView::setLocalDockGeometry(QRect geometry)
{
if (geometry == m_localDockGeometry) {
return;
}
m_localDockGeometry = geometry;
emit localDockGeometryChanged();
}
void NowDockView::updateAbsDockGeometry()
{
QRect absoluteGeometry = {x() + m_localDockGeometry.x(), y() + m_localDockGeometry.y(), m_localDockGeometry.width(), m_localDockGeometry.height()};
m_visibility->updateDockGeometry(absoluteGeometry);
}
inline void NowDockView::updateDockPosition() inline void NowDockView::updateDockPosition()
{ {
if (!containment()) if (!containment())

@ -109,6 +109,7 @@ public slots:
Q_INVOKABLE QList<int> freeEdges() const; Q_INVOKABLE QList<int> freeEdges() const;
Q_INVOKABLE void initialize(); Q_INVOKABLE void initialize();
Q_INVOKABLE void removeDock(); Q_INVOKABLE void removeDock();
Q_INVOKABLE void setLocalDockGeometry(QRect geometry);
void resizeWindow(); void resizeWindow();
void restoreConfig(); void restoreConfig();
void saveConfig(); void saveConfig();
@ -129,6 +130,7 @@ signals:
void compositingChanged(); void compositingChanged();
void heightChanged(); void heightChanged();
void lengthChanged(); void lengthChanged();
void localDockGeometryChanged();
void maskAreaChanged(); void maskAreaChanged();
void maxLengthChanged(); void maxLengthChanged();
void maxThicknessChanged(); void maxThicknessChanged();
@ -139,6 +141,7 @@ signals:
public Q_SLOTS: public Q_SLOTS:
void updateDockPositionSlot(); void updateDockPositionSlot();
void updateAbsDockGeometry();
private: private:
bool m_secondInitPass; bool m_secondInitPass;
@ -148,7 +151,7 @@ private:
int m_length{0}; int m_length{0};
int m_maxLength{INT_MAX}; int m_maxLength{INT_MAX};
QRect m_dockGeometry; QRect m_localDockGeometry;
QRect m_maskArea; QRect m_maskArea;
QPointer<PlasmaQuick::ConfigView> m_configView; QPointer<PlasmaQuick::ConfigView> m_configView;

@ -144,10 +144,8 @@ inline void VisibilityManagerPrivate::raiseDock(bool raise)
if (raise) { if (raise) {
timerHide.stop(); timerHide.stop();
if (!timerShow.isActive() && mode != Dock::AutoHide) { if (!timerShow.isActive()) {
timerShow.start(); timerShow.start();
} else {
emit q->mustBeShown();
} }
} else { } else {
timerShow.stop(); timerShow.stop();
@ -179,7 +177,7 @@ void VisibilityManagerPrivate::dodgeActive(WId wid)
if (!winfo.isValid() || !winfo.isOnCurrentDesktop() || winfo.isMinimized()) if (!winfo.isValid() || !winfo.isOnCurrentDesktop() || winfo.isMinimized())
return; return;
raiseDock(intersects(winfo)); raiseDock(!intersects(winfo));
} }
void VisibilityManagerPrivate::dodgeMaximized(WId wid) void VisibilityManagerPrivate::dodgeMaximized(WId wid)
@ -270,9 +268,7 @@ bool VisibilityManagerPrivate::event(QEvent *ev)
containsMouse = true; containsMouse = true;
emit q->containsMouseChanged(); emit q->containsMouseChanged();
if (mode == Dock::AutoHide) emit q->mustBeShown();
raiseDock(true);
} else if (ev->type() == QEvent::Leave && containsMouse) { } else if (ev->type() == QEvent::Leave && containsMouse) {
containsMouse = false; containsMouse = false;
emit q->containsMouseChanged(); emit q->containsMouseChanged();

@ -122,7 +122,7 @@ WindowInfoWrap XWindowInterface::requestInfoActive()
WindowInfoWrap XWindowInterface::requestInfo(WId wid) WindowInfoWrap XWindowInterface::requestInfo(WId wid)
{ {
const KWindowInfo winfo{wid, NET::WMDesktop | NET::WMFrameExtents | NET::WMWindowType | NET::WMState}; const KWindowInfo winfo{wid, NET::WMDesktop | NET::WMFrameExtents | NET::WMWindowType | NET::WMGeometry | NET::WMState};
WindowInfoWrap winfoWrap; WindowInfoWrap winfoWrap;
@ -172,4 +172,3 @@ void XWindowInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::P
} }
} }

@ -241,6 +241,10 @@ Item{
} }
dock.maskArea = newMaskArea; dock.maskArea = newMaskArea;
if(normalState && !dock.visibility.isHidden){
dock.setLocalDockGeometry(newMaskArea);
}
} }
} }

Loading…
Cancel
Save