|
|
|
@ -14,6 +14,7 @@
|
|
|
|
|
|
|
|
|
|
// Qt
|
|
|
|
|
#include <QDebug>
|
|
|
|
|
#include <QtDBus>
|
|
|
|
|
|
|
|
|
|
// KDE
|
|
|
|
|
#include <KActivities/Controller>
|
|
|
|
@ -24,8 +25,12 @@ namespace WindowSystem {
|
|
|
|
|
#define MAXPLASMAPANELTHICKNESS 96
|
|
|
|
|
#define MAXSIDEPANELTHICKNESS 512
|
|
|
|
|
|
|
|
|
|
#define KWINSERVICE "org.kde.KWin"
|
|
|
|
|
#define KWINVIRTUALDESKTOPMANAGERNAMESPACE "org.kde.KWin.VirtualDesktopManager"
|
|
|
|
|
|
|
|
|
|
AbstractWindowInterface::AbstractWindowInterface(QObject *parent)
|
|
|
|
|
: QObject(parent)
|
|
|
|
|
: QObject(parent),
|
|
|
|
|
m_kwinServiceWatcher(new QDBusServiceWatcher(this))
|
|
|
|
|
{
|
|
|
|
|
m_activities = new KActivities::Consumer(this);
|
|
|
|
|
m_currentActivity = m_activities->currentActivity();
|
|
|
|
@ -56,6 +61,22 @@ AbstractWindowInterface::AbstractWindowInterface(QObject *parent)
|
|
|
|
|
emit currentActivityChanged();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
//! KWin Service tracking
|
|
|
|
|
m_kwinServiceWatcher->setConnection(QDBusConnection::sessionBus());
|
|
|
|
|
m_kwinServiceWatcher->setWatchedServices(QStringList({KWINSERVICE}));
|
|
|
|
|
connect(m_kwinServiceWatcher, &QDBusServiceWatcher::serviceRegistered, this, [this](const QString & serviceName) {
|
|
|
|
|
if (serviceName == KWINSERVICE && !m_isKWinInterfaceAvailable) {
|
|
|
|
|
initKWinInterface();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
connect(m_kwinServiceWatcher, &QDBusServiceWatcher::serviceUnregistered, this, [this](const QString & serviceName) {
|
|
|
|
|
if (serviceName == KWINSERVICE && m_isKWinInterfaceAvailable) {
|
|
|
|
|
m_isKWinInterfaceAvailable = false;
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
initKWinInterface();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
AbstractWindowInterface::~AbstractWindowInterface()
|
|
|
|
@ -187,6 +208,42 @@ bool AbstractWindowInterface::inCurrentDesktopActivity(const WindowInfoWrap &win
|
|
|
|
|
return (winfo.isValid() && winfo.isOnDesktop(currentDesktop()) && winfo.isOnActivity(currentActivity()));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//! KWin Interface
|
|
|
|
|
void AbstractWindowInterface::initKWinInterface()
|
|
|
|
|
{
|
|
|
|
|
QDBusInterface kwinIface(KWINSERVICE, "/VirtualDesktopManager", KWINVIRTUALDESKTOPMANAGERNAMESPACE, QDBusConnection::sessionBus());
|
|
|
|
|
|
|
|
|
|
if (kwinIface.isValid() && !m_isKWinInterfaceAvailable) {
|
|
|
|
|
m_isKWinInterfaceAvailable = true;
|
|
|
|
|
qDebug() << " KWIN SERVICE :: is available...";
|
|
|
|
|
|
|
|
|
|
QDBusReply<bool> navWrapAround = kwinIface.call("navigationWrappingAround");
|
|
|
|
|
m_isVirtualDesktopNavigationWrappingAround = navWrapAround.value();
|
|
|
|
|
|
|
|
|
|
QDBusConnection bus = QDBusConnection::sessionBus();
|
|
|
|
|
bool signalconnected = bus.connect(KWINSERVICE,
|
|
|
|
|
"/VirtualDesktopManager",
|
|
|
|
|
KWINVIRTUALDESKTOPMANAGERNAMESPACE,
|
|
|
|
|
"navigationWrappingAroundChanged",
|
|
|
|
|
this,
|
|
|
|
|
SLOT(onVirtualDesktopNavigationWrappingAroundChanged(bool)));
|
|
|
|
|
|
|
|
|
|
if (!signalconnected) {
|
|
|
|
|
qDebug() << " KWIN SERVICE :: Virtual Desktop Manager :: navigationsWrappingSignal is not connected...";
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool AbstractWindowInterface::isVirtualDesktopNavigationWrappingAround() const
|
|
|
|
|
{
|
|
|
|
|
return m_isVirtualDesktopNavigationWrappingAround;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void AbstractWindowInterface::onVirtualDesktopNavigationWrappingAroundChanged(bool navigationWrappingAround)
|
|
|
|
|
{
|
|
|
|
|
m_isVirtualDesktopNavigationWrappingAround = navigationWrappingAround;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//! Register Latte Ignored Windows in order to NOT be tracked
|
|
|
|
|
void AbstractWindowInterface::registerIgnoredWindow(WindowId wid)
|
|
|
|
|
{
|
|
|
|
|