mirror of
https://git.outfoxxed.me/quickshell/quickshell.git
synced 2026-04-10 06:11:54 +10:00
wip ext-ws
This commit is contained in:
parent
15a8409765
commit
e2b0f8705e
18 changed files with 1040 additions and 0 deletions
85
src/wayland/windowmanager/workspace.hpp
Normal file
85
src/wayland/windowmanager/workspace.hpp
Normal 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
|
||||
Loading…
Add table
Add a link
Reference in a new issue