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:
parent
f3eacf169e
commit
af609ca53f
@ -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()));
|
||||
|
@ -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};
|
||||
|
||||
|
@ -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();
|
||||
});
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user