introduce Display and Icon for WindowInfoWrap

pull/6/head
Michail Vourlakos 6 years ago
parent b251ea7b8e
commit 97332cc8cf

@ -33,22 +33,23 @@ target_link_libraries(latte-dock
Qt5::DBus
Qt5::Quick
Qt5::Qml
KF5::I18n
KF5::Activities
KF5::Archive
KF5::CoreAddons
KF5::Crash
KF5::DBusAddons
KF5::Declarative
KF5::CoreAddons
KF5::GuiAddons
KF5::GlobalAccel
KF5::Archive
KF5::Crash
KF5::XmlGui
KF5::Plasma
KF5::PlasmaQuick
KF5::Activities
KF5::I18n
KF5::IconThemes
KF5::Notifications
KF5::NewStuff
KF5::QuickAddons
KF5::NewStuff
KF5::QuickAddons
KF5::Plasma
KF5::PlasmaQuick
KF5::WaylandClient
KF5::XmlGui
)
if(HAVE_X11)

@ -99,6 +99,7 @@ public:
virtual void requestToggleMaximized(WindowId wid) const = 0;
virtual void requestMoveWindow(WindowId wid, QPoint from) const = 0;
virtual bool windowCanBeDragged(WindowId wid) const = 0;
virtual QIcon iconFor(WindowId wid) const = 0;
virtual WindowId winIdFor(QString appId, QRect geometry) const = 0;
Latte::Corona *corona();

@ -356,6 +356,8 @@ WindowInfoWrap WaylandInterface::requestInfoActive() const
winfoWrap.setHasSkipTaskbar(w->skipTaskbar());
winfoWrap.setDisplay(w->title());
return winfoWrap;
}
@ -424,6 +426,18 @@ KWayland::Client::PlasmaWindow *WaylandInterface::windowFor(WindowId wid) const
return *it;
}
QIcon WaylandInterface::iconFor(WindowId wid) const
{
auto window = windowFor(wid);
if (window) {
return window->icon();
}
return QIcon();
}
WindowId WaylandInterface::winIdFor(QString appId, QRect geometry) const
{
auto it = std::find_if(m_windowManagement->windows().constBegin(), m_windowManagement->windows().constEnd(), [&appId, &geometry](PlasmaWindow * w) noexcept {
@ -522,6 +536,7 @@ void WaylandInterface::windowCreatedProxy(KWayland::Client::PlasmaWindow *w)
});
connect(w, SIGNAL(activeChanged()), mapper, SLOT(map()) );
connect(w, SIGNAL(titleChanged()), mapper, SLOT(map()) );
connect(w, SIGNAL(fullscreenChanged()), mapper, SLOT(map()) );
connect(w, SIGNAL(geometryChanged()), mapper, SLOT(map()) );
connect(w, SIGNAL(maximizedChanged()), mapper, SLOT(map()) );

@ -83,6 +83,7 @@ public:
void requestToggleMaximized(WindowId wid) const override;
void requestMoveWindow(WindowId wid, QPoint from) const override;
bool windowCanBeDragged(WindowId wid) const;
QIcon iconFor(WindowId wid) const;
WindowId winIdFor(QString appId, QRect geometry) const override;
void setEdgeStateFor(QWindow *view, bool active) const override;

@ -23,6 +23,7 @@
// Qt
#include <QWindow>
#include <QIcon>
#include <QRect>
#include <QVariant>
@ -119,6 +120,12 @@ public:
inline QRect geometry() const noexcept;
inline void setGeometry(const QRect &geometry) noexcept;
inline QString display() const noexcept;
inline void setDisplay(const QString &display) noexcept;
inline QIcon icon() const noexcept;
inline void setIcon(const QIcon &icon) noexcept;
inline WindowId wid() const noexcept;
inline void setWid(WindowId wid) noexcept;
@ -136,6 +143,10 @@ private:
bool m_isPlasmaDesktop : 1;
bool m_isKeepAbove: 1;
bool m_hasSkipTaskbar: 1;
QString m_display;
QIcon m_icon;
};
// BEGIN: definitions
@ -153,6 +164,8 @@ inline WindowInfoWrap &WindowInfoWrap::operator=(WindowInfoWrap &&rhs) noexcept
m_isPlasmaDesktop = rhs.m_isPlasmaDesktop;
m_isKeepAbove = rhs.m_isKeepAbove;
m_hasSkipTaskbar = rhs.m_hasSkipTaskbar;
m_display = rhs.m_display;
m_icon = rhs.m_icon;
return *this;
}
@ -170,6 +183,8 @@ inline WindowInfoWrap &WindowInfoWrap::operator=(const WindowInfoWrap &rhs) noex
m_isPlasmaDesktop = rhs.m_isPlasmaDesktop;
m_isKeepAbove = rhs.m_isKeepAbove;
m_hasSkipTaskbar = rhs.m_hasSkipTaskbar;
m_display = rhs.m_display;
m_icon = rhs.m_icon;
return *this;
}
@ -293,6 +308,26 @@ inline void WindowInfoWrap::setHasSkipTaskbar(bool skipTaskbar) noexcept
m_hasSkipTaskbar = skipTaskbar;
}
inline QString WindowInfoWrap::display() const noexcept
{
return m_display;
}
inline void WindowInfoWrap::setDisplay(const QString &display) noexcept
{
m_display = display;
}
inline QIcon WindowInfoWrap::icon() const noexcept
{
return m_icon;
}
inline void WindowInfoWrap::setIcon(const QIcon &icon) noexcept
{
m_icon = icon;
}
inline QRect WindowInfoWrap::geometry() const noexcept
{
return m_geometry;

@ -453,6 +453,7 @@ void WindowsTracker::updateHints(Latte::View *view)
if (isActiveInViewScreen(view, winfo)) {
m_views[view].lastActiveWindow = winfo.wid();
qDebug() << " a w d :: " << winfo.display();
foundActiveInCurScreen = true;
activeWinId = winfo.wid();
}

@ -33,6 +33,7 @@
// KDE
#include <KWindowSystem>
#include <KWindowInfo>
#include <KIconThemes/KIconLoader>
// X11
#include <NETWM>
@ -278,10 +279,12 @@ bool XWindowInterface::isOnCurrentActivity(WindowId wid) const
WindowInfoWrap XWindowInterface::requestInfo(WindowId wid) const
{
const KWindowInfo winfo{wid.value<WId>(), NET::WMFrameExtents
const KWindowInfo winfo{wid.value<WId>(),NET::WMFrameExtents
| NET::WMWindowType
| NET::WMGeometry
| NET::WMState};
| NET::WMState
| NET::WMName
| NET::WMVisibleName};
WindowInfoWrap winfoWrap;
@ -297,6 +300,7 @@ WindowInfoWrap XWindowInterface::requestInfo(WindowId wid) const
winfoWrap.setGeometry(winfo.frameGeometry());
winfoWrap.setIsKeepAbove(winfo.hasState(NET::KeepAbove));
winfoWrap.setHasSkipTaskbar(winfo.hasState(NET::SkipTaskbar));
winfoWrap.setDisplay(winfo.visibleName());
} else if (m_desktopId == wid) {
winfoWrap.setIsValid(true);
winfoWrap.setIsPlasmaDesktop(true);
@ -340,6 +344,18 @@ void XWindowInterface::requestActivate(WindowId wid) const
KWindowSystem::activateWindow(wid.toInt());
}
QIcon XWindowInterface::iconFor(WindowId wid) const
{
QIcon icon;
icon.addPixmap(KWindowSystem::icon(wid.value<WId>(), KIconLoader::SizeSmall, KIconLoader::SizeSmall, false));
icon.addPixmap(KWindowSystem::icon(wid.value<WId>(), KIconLoader::SizeSmallMedium, KIconLoader::SizeSmallMedium, false));
icon.addPixmap(KWindowSystem::icon(wid.value<WId>(), KIconLoader::SizeMedium, KIconLoader::SizeMedium, false));
icon.addPixmap(KWindowSystem::icon(wid.value<WId>(), KIconLoader::SizeLarge, KIconLoader::SizeLarge, false));
return icon;
}
WindowId XWindowInterface::winIdFor(QString appId, QRect geometry) const
{
return activeWindow();
@ -437,12 +453,18 @@ void XWindowInterface::windowChangedProxy(WId wid, NET::Properties prop1, NET::P
//! accept only the following NET:Properties changed signals
//! NET::WMState, NET::WMGeometry, NET::ActiveWindow
if (!((prop1 & NET::WMState) || (prop1 & NET::WMGeometry) || (prop1 & NET::ActiveWindow))) {
if ( !(prop1 & NET::WMState)
&& !(prop1 & NET::WMGeometry)
&& !(prop1 & NET::ActiveWindow)
&& !(prop1 & (NET::WMName | NET::WMVisibleName)) ) {
return;
}
//! when only WMState changed we can whitelist the acceptable states
if ((prop1 & NET::WMState) && !(prop1 & NET::WMGeometry) && !(prop1 & NET::ActiveWindow)) {
if ((prop1 & NET::WMState)
&& !(prop1 & NET::WMGeometry)
&& !(prop1 & NET::ActiveWindow)
&& !(prop1 & NET::WMVisibleName)) {
KWindowInfo info(wid, NET::WMState);
if (info.valid()) {

@ -66,6 +66,7 @@ public:
void requestToggleMaximized(WindowId wid) const override;
void requestMoveWindow(WindowId wid, QPoint from) const override;
bool windowCanBeDragged(WindowId wid) const override;
QIcon iconFor(WindowId wid) const override;
WindowId winIdFor(QString appId, QRect geometry) const override;
void setEdgeStateFor(QWindow *view, bool active) const override;

Loading…
Cancel
Save