wip ext-ws

This commit is contained in:
outfoxxed 2025-06-21 12:57:15 -07:00
parent 15a8409765
commit e2b0f8705e
No known key found for this signature in database
GPG key ID: 4C88A185FB89301E
18 changed files with 1040 additions and 0 deletions

View file

@ -0,0 +1,85 @@
#pragma once
#include <qhash.h>
#include <qobject.h>
#include <qproperty.h>
#include <qtmetamacros.h>
#include "../../core/model.hpp"
#include "../../windowmanager/workspace.hpp"
#include "ext_workspace.hpp"
namespace qs::wm::wayland {
namespace impl = qs::wayland::workspace;
class WlWorkspace;
class WlWorkspaceGroup;
class WorkspaceManager: public QObject {
Q_OBJECT;
public:
static WorkspaceManager* instance();
ObjectModel<WlWorkspace> mWorkspaces {this};
ObjectModel<WlWorkspaceGroup> mWorkspaceGroups {this};
static void commit();
private slots:
void onServerCommit();
void onWorkspaceCreated(impl::Workspace* workspace);
void onWorkspaceDestroyed(impl::Workspace* workspace);
void onGroupCreated(impl::WorkspaceGroup* group);
void onGroupDestroyed(impl::WorkspaceGroup* group);
private:
WorkspaceManager();
QList<impl::Workspace*> pendingWorkspaceCreations;
QList<impl::Workspace*> pendingWorkspaceDestructions;
QHash<impl::Workspace*, WlWorkspace*> workspaceByImpl;
QList<impl::WorkspaceGroup*> pendingGroupCreations;
QList<impl::WorkspaceGroup*> pendingGroupDestructions;
QHash<impl::WorkspaceGroup*, WlWorkspaceGroup*> groupsByImpl;
friend class WlWorkspace;
};
class WlWorkspace: public Workspace {
public:
WlWorkspace(WorkspaceManager* manager, impl::Workspace* impl);
void commitImpl();
void activate() override;
void deactivate() override;
void remove() override;
void setGroup(WorkspaceGroup* group) override;
[[nodiscard]] WorkspaceManager* manager() {
return static_cast<WorkspaceManager*>(this->parent()); // NOLINT
}
private:
impl::Workspace* impl = nullptr;
};
class WlWorkspaceGroup: public WorkspaceGroup {
public:
WlWorkspaceGroup(WorkspaceManager* manager, impl::WorkspaceGroup* impl);
void commitImpl();
[[nodiscard]] WorkspaceManager* manager() {
return static_cast<WorkspaceManager*>(this->parent()); // NOLINT
}
private:
impl::WorkspaceGroup* impl = nullptr;
friend class WlWorkspace;
};
} // namespace qs::wm::wayland