1
0
mirror of https://github.com/KDE/latte-dock.git synced 2025-03-22 14:50:31 +03:00

X11:track more LastActiveWindow properties

--track windowChanged properties for KeepAbove
and isOnAllDesktops flags under X11
This commit is contained in:
Michail Vourlakos 2019-06-02 01:33:34 +03:00
parent f3eacf169e
commit af609ca53f
4 changed files with 33 additions and 1 deletions

View File

@ -124,6 +124,21 @@ void LastActiveWindow::setIsKeepAbove(bool above)
emit isKeepAboveChanged();
}
bool LastActiveWindow::isOnAllDesktops() const
{
return m_isOnAllDesktops;
}
void LastActiveWindow::setIsOnAllDesktops(bool all)
{
if (m_isOnAllDesktops == all) {
return;
}
m_isOnAllDesktops = all;
emit isOnAllDesktopsChanged();
}
bool LastActiveWindow::isShaded() const
{
return m_isShaded;
@ -232,10 +247,12 @@ void LastActiveWindow::setInformation(const WindowInfoWrap &info)
setActive(info.isActive());
setIsMinimized(info.isMinimized());
setIsMaximized(info.isMaxVert() || info.isMaxHoriz());
setIsOnAllDesktops(info.isOnAllDesktops());
setAppName(info.appName());
setDisplay(info.display());
setGeometry(info.geometry());
setIsKeepAbove(info.isKeepAbove());
if (info.appName().isEmpty()) {
setAppName(m_windowsTracker->appNameFor(info.wid()));

View File

@ -50,6 +50,7 @@ class LastActiveWindow : public QObject {
Q_PROPERTY(bool isMaximized READ isMaximized NOTIFY isMaximizedChanged)
Q_PROPERTY(bool isFullScreen READ isFullScreen NOTIFY isFullScreenChanged)
Q_PROPERTY(bool isKeepAbove READ isKeepAbove NOTIFY isKeepAboveChanged)
Q_PROPERTY(bool isOnAllDesktops READ isOnAllDesktops NOTIFY isOnAllDesktopsChanged)
Q_PROPERTY(bool isShaded READ isShaded NOTIFY isShadedChanged)
Q_PROPERTY(bool hasSkipTaskbar READ hasSkipTaskbar NOTIFY hasSkipTaskbarChanged)
@ -70,6 +71,7 @@ public:
bool isMaximized() const;
bool isFullScreen() const;
bool isKeepAbove() const;
bool isOnAllDesktops() const;
bool isShaded() const;
bool hasSkipTaskbar() const;
@ -102,6 +104,7 @@ signals:
void isMaximizedChanged();
void isFullScreenChanged();
void isKeepAboveChanged();
void isOnAllDesktopsChanged();
void isShadedChanged();
void hasSkipTaskbarChanged();
@ -117,6 +120,7 @@ private:
void setIsMaximized(bool maximized);
void setIsFullScreen(bool fullscreen);
void setIsKeepAbove(bool above);
void setIsOnAllDesktops(bool all);
void setIsShaded(bool shaded);
void setHasSkipTaskbar(bool skip);
@ -134,6 +138,7 @@ private:
bool m_isMaximized{false};
bool m_isFullScreen{false};
bool m_isKeepAbove{false};
bool m_isOnAllDesktops{false};
bool m_isShaded{false};
bool m_hasSkipTaskbar{false};

View File

@ -60,6 +60,14 @@ void Windows::init()
connect(m_wm, &AbstractWindowInterface::windowChanged, this, [&](WindowId wid) {
m_windows[wid] = m_wm->requestInfo(wid);
for (const auto view : m_views.keys()) {
WindowId lastWinId = m_views[view]->lastActiveWindow()->winId();
if (lastWinId == wid) {
m_views[view]->lastActiveWindow()->setInformation(m_windows[lastWinId]);
}
}
updateViewsHints();
});

View File

@ -608,6 +608,7 @@ void XWindowInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::P
if ( !(prop1 & NET::WMState)
&& !(prop1 & NET::WMGeometry)
&& !(prop1 & NET::ActiveWindow)
&& !(prop1 & NET::WMDesktop)
&& !(prop1 & (NET::WMName | NET::WMVisibleName)) ) {
return;
}
@ -616,11 +617,12 @@ void XWindowInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::P
if ((prop1 & NET::WMState)
&& !(prop1 & NET::WMGeometry)
&& !(prop1 & NET::ActiveWindow)
&& !(prop1 & NET::WMDesktop)
&& !(prop1 & (NET::WMName | NET::WMVisibleName)) ) {
KWindowInfo info(wid, NET::WMState);
if (info.valid()) {
if (!info.hasState(NET::Sticky) && !info.hasState(NET::Shaded)
if ( !info.hasState(NET::KeepAbove) && !info.hasState(NET::Sticky) && !info.hasState(NET::Shaded)
&& !info.hasState(NET::FullScreen) && !info.hasState(NET::Hidden)) {
return;
}