Refactor activity

pull/7/head
cutefishd 5 years ago
parent bb38440b71
commit dc274ae1b3

@ -29,6 +29,10 @@
#include <NETWM>
#include <KWindowSystem>
static const QStringList blockList = {"cutefish-launcher",
"cutefish-desktop",
"cutefish-statusbar"};
Activity::Activity(QObject *parent)
: QObject(parent)
, m_cApps(CApplications::self())
@ -55,20 +59,53 @@ void Activity::close()
NETRootInfo(QX11Info::connection(), NET::CloseWindow).closeWindowRequest(KWindowSystem::activeWindow());
}
bool Activity::isAcceptableWindow(quint64 wid)
{
QFlags<NET::WindowTypeMask> ignoreList;
ignoreList |= NET::DesktopMask;
ignoreList |= NET::DockMask;
ignoreList |= NET::SplashMask;
ignoreList |= NET::ToolbarMask;
ignoreList |= NET::MenuMask;
ignoreList |= NET::PopupMenuMask;
ignoreList |= NET::NotificationMask;
KWindowInfo info(wid, NET::WMWindowType | NET::WMState, NET::WM2TransientFor | NET::WM2WindowClass);
if (!info.valid())
return false;
if (NET::typeMatchesMask(info.windowType(NET::AllTypesMask), ignoreList))
return false;
if (info.hasState(NET::SkipTaskbar) || info.hasState(NET::SkipPager))
return false;
// WM_TRANSIENT_FOR hint not set - normal window
WId transFor = info.transientFor();
if (transFor == 0 || transFor == wid || transFor == (WId) QX11Info::appRootWindow())
return true;
info = KWindowInfo(transFor, NET::WMWindowType);
QFlags<NET::WindowTypeMask> normalFlag;
normalFlag |= NET::NormalMask;
normalFlag |= NET::DialogMask;
normalFlag |= NET::UtilityMask;
return !NET::typeMatchesMask(info.windowType(NET::AllTypesMask), normalFlag);
}
void Activity::onActiveWindowChanged()
{
KWindowInfo info(KWindowSystem::activeWindow(),
NET::WMState | NET::WMVisibleName,
NET::WM2WindowClass);
// Skip...
if (info.windowClassClass() == "cutefish-launcher" ||
info.windowClassClass() == "cutefish-desktop" ||
info.windowClassClass() == "cutefish-statusbar") {
m_title.clear();
m_icon.clear();
emit titleChanged();
emit iconChanged();
if (!isAcceptableWindow(KWindowSystem::activeWindow())
|| blockList.contains(info.windowClassClass())) {
clearTitle();
clearIcon();
return;
}
@ -91,8 +128,19 @@ void Activity::onActiveWindowChanged()
if (title != m_title) {
m_title = title;
emit titleChanged();
m_icon.clear();
emit iconChanged();
clearIcon();
}
}
}
void Activity::clearTitle()
{
m_title.clear();
emit titleChanged();
}
void Activity::clearIcon()
{
m_icon.clear();
emit iconChanged();
}

@ -37,9 +37,14 @@ public:
Q_INVOKABLE void close();
bool isAcceptableWindow(quint64 wid);
private slots:
void onActiveWindowChanged();
void clearTitle();
void clearIcon();
signals:
void titleChanged();
void iconChanged();

Loading…
Cancel
Save