chore(new_backend): add active window method

This commit is contained in:
Mikhail Zolotukhin 2022-03-29 23:33:44 +03:00 committed by Genda
parent 0199c63653
commit f539a6b9fa
5 changed files with 43 additions and 0 deletions

View File

@ -2,6 +2,9 @@
// SPDX-License-Identifier: MIT
#include "windows_list.hpp"
#include <functional>
#include "engine/surface.hpp"
#include "logger.hpp"
#include "plasma-api/workspace.hpp"
@ -25,6 +28,19 @@ void WindowsList::remove(PlasmaApi::Client client)
m_windowMap.erase(client);
}
std::optional<Window> WindowsList::activeWindow() const
{
auto activeClient = m_workspace.activeClient();
if (activeClient.has_value()) {
auto it = m_windowMap.find(activeClient.value());
if (it != m_windowMap.end()) {
return it->second;
}
}
return {};
}
std::vector<Window> WindowsList::visibleWindowsOn(const Surface &surface) const
{
auto result = std::vector<Window>();

View File

@ -3,6 +3,8 @@
#pragma once
#include <optional>
#include "engine/surface.hpp"
#include "plasma-api/client.hpp"
#include "plasma-api/workspace.hpp"
@ -16,6 +18,8 @@ struct WindowsList {
Window &add(PlasmaApi::Client);
void remove(PlasmaApi::Client);
std::optional<Window> activeWindow() const;
std::vector<Window> visibleWindowsOn(const Surface &surface) const;
private:

View File

@ -13,6 +13,8 @@
namespace PlasmaApi
{
class Workspace;
class Client : public TopLevel
{
Q_OBJECT
@ -134,6 +136,8 @@ public:
// */
// Q_PROPERTY(bool shade READ shade WRITE set_shade)
// BOOL_PRIMITIVE_SETGET(shade)
friend class PlasmaApi::Workspace;
};
}

View File

@ -26,6 +26,18 @@ Workspace::Workspace(const Workspace &rhs)
wrapSignals();
};
std::optional<PlasmaApi::Client> Workspace::activeClient() const
{
auto kwinClient = m_kwinImpl->property("activeClient").value<QObject *>();
return kwinClient ? PlasmaApi::Client(kwinClient) : std::optional<PlasmaApi::Client>();
}
void Workspace::setActiveClient(std::optional<PlasmaApi::Client> client)
{
auto valueToSet = client.has_value() ? client->m_kwinImpl : nullptr;
m_kwinImpl->setProperty("activeClient", QVariant::fromValue(valueToSet));
}
void Workspace::wrapSignals()
{
auto wrapSimpleSignal = [this](const char *signalSignature) {

View File

@ -6,6 +6,8 @@
#include <QObject>
#include <QQmlEngine>
#include <optional>
#include "plasma-api/client.hpp"
#include "utils.hpp"
@ -45,6 +47,11 @@ public:
BI_PROPERTY(QString, currentActivity, setCurrentActivity);
BI_PROPERTY(int, desktops, setDesktops);
Q_PROPERTY(std::optional<PlasmaApi::Client> activeClient READ activeClient WRITE setActiveClient);
std::optional<PlasmaApi::Client> activeClient() const;
void setActiveClient(std::optional<PlasmaApi::Client> client);
/**
* Returns the geometry a Client can use with the specified option.
* This method should be preferred over other methods providing screen sizes as the