mirror of
https://github.com/Bismuth-Forge/bismuth.git
synced 2024-10-05 12:37:47 +03:00
chore(new_backend): add active window method
This commit is contained in:
parent
0199c63653
commit
f539a6b9fa
@ -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>();
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -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) {
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user