protocols: add ext-workspace implementation (#10818)
This commit is contained in:
parent
1f337a7a5e
commit
3bbdf9dc5a
11 changed files with 510 additions and 22 deletions
|
|
@ -70,6 +70,8 @@ CWorkspace::~CWorkspace() {
|
|||
g_pEventManager->postEvent({.event = "destroyworkspacev2", .data = std::format("{},{}", m_id, m_name)});
|
||||
EMIT_HOOK_EVENT("destroyWorkspace", this);
|
||||
}
|
||||
|
||||
m_events.destroy.emit();
|
||||
}
|
||||
|
||||
void CWorkspace::startAnim(bool in, bool left, bool instant) {
|
||||
|
|
@ -185,14 +187,6 @@ void CWorkspace::startAnim(bool in, bool left, bool instant) {
|
|||
}
|
||||
}
|
||||
|
||||
void CWorkspace::setActive(bool on) {
|
||||
; // empty until https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/40
|
||||
}
|
||||
|
||||
void CWorkspace::moveToMonitor(const MONITORID& id) {
|
||||
; // empty until https://gitlab.freedesktop.org/wayland/wayland-protocols/-/merge_requests/40
|
||||
}
|
||||
|
||||
PHLWINDOW CWorkspace::getLastFocusedWindow() {
|
||||
if (!validMapped(m_lastFocusedWindow) || m_lastFocusedWindow->workspaceID() != m_id)
|
||||
return nullptr;
|
||||
|
|
@ -650,6 +644,7 @@ void CWorkspace::rename(const std::string& name) {
|
|||
g_pCompositor->ensurePersistentWorkspacesPresent(std::vector<SWorkspaceRule>{WORKSPACERULE}, m_self.lock());
|
||||
|
||||
g_pEventManager->postEvent({.event = "renameworkspace", .data = std::to_string(m_id) + "," + m_name});
|
||||
m_events.rename.emit();
|
||||
}
|
||||
|
||||
void CWorkspace::updateWindows() {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
#include <string>
|
||||
#include "DesktopTypes.hpp"
|
||||
#include "../helpers/MiscFunctions.hpp"
|
||||
#include "../helpers/signal/Signal.hpp"
|
||||
|
||||
enum eFullscreenMode : int8_t {
|
||||
FSMODE_NONE = 0,
|
||||
|
|
@ -21,6 +22,8 @@ class CWorkspace {
|
|||
CWorkspace(WORKSPACEID id, PHLMONITOR monitor, std::string name, bool special = false, bool isEmpty = true);
|
||||
~CWorkspace();
|
||||
|
||||
WP<CWorkspace> m_self;
|
||||
|
||||
// Workspaces ID-based have IDs > 0
|
||||
// and workspaces name-based have IDs starting with -1337
|
||||
WORKSPACEID m_id = WORKSPACE_INVALID;
|
||||
|
|
@ -60,8 +63,6 @@ class CWorkspace {
|
|||
// Inert: destroyed and invalid. If this is true, release the ptr you have.
|
||||
bool inert();
|
||||
void startAnim(bool in, bool left, bool instant = false);
|
||||
void setActive(bool on);
|
||||
void moveToMonitor(const MONITORID&);
|
||||
MONITORID monitorID();
|
||||
PHLWINDOW getLastFocusedWindow();
|
||||
void rememberPrevWorkspace(const PHLWORKSPACE& prevWorkspace);
|
||||
|
|
@ -83,6 +84,13 @@ class CWorkspace {
|
|||
void forceReportSizesToWindows();
|
||||
void updateWindows();
|
||||
|
||||
struct {
|
||||
CSignal destroy;
|
||||
CSignal rename;
|
||||
CSignal monitorChange;
|
||||
CSignal activeChange;
|
||||
} m_events;
|
||||
|
||||
private:
|
||||
void init(PHLWORKSPACE self);
|
||||
// Previous workspace ID and name is stored during a workspace change, allowing travel
|
||||
|
|
@ -91,7 +99,6 @@ class CWorkspace {
|
|||
|
||||
SP<HOOK_CALLBACK_FN> m_focusedWindowHook;
|
||||
bool m_inert = true;
|
||||
WP<CWorkspace> m_self;
|
||||
};
|
||||
|
||||
inline bool valid(const PHLWORKSPACE& ref) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue