@@ -16,6 +16,7 @@
17#include "WorkspaceManager.h"
17#include "WorkspaceManager.h"
18#include "Workspace.h"
18#include "Workspace.h"
19+#include "TopLevelWindowModel.h"
21#include <QGuiApplication>
22#include <QGuiApplication>
@@ -29,19 +30,55 @@ WorkspaceManager *WorkspaceManager::instance()
31WorkspaceManager::WorkspaceManager()
32WorkspaceManager::WorkspaceManager()
33+ : m_activeWorkspace(nullptr)
34Workspace *WorkspaceManager::createWorkspace()
37Workspace *WorkspaceManager::createWorkspace()
36 auto workspace = new Workspace(this);
39 auto workspace = new Workspace(this);
37 QQmlEngine::setObjectOwnership(workspace, QQmlEngine::CppOwnership);
40 QQmlEngine::setObjectOwnership(workspace, QQmlEngine::CppOwnership);
38 m_allWorkspaces.append(workspace);
41 m_allWorkspaces.append(workspace);
39 workspace->assign(this);
42 workspace->assign(this);
44+ if (m_allWorkspaces.count() == 0 && m_activeWorkspace) {
45+ m_activeWorkspace = nullptr;
46+ Q_EMIT activeWorkspaceChanged();
47+ } else if (m_allWorkspaces.count() == 1) {
48+ m_activeWorkspace = workspace;
49+ Q_EMIT activeWorkspaceChanged();
40 return workspace;
52 return workspace;
43void WorkspaceManager::destroyWorkspace(Workspace *workspace)
55void WorkspaceManager::destroyWorkspace(Workspace *workspace)
57+ if (!workspace) return;
59+ int index = m_workspaces.indexOf(workspace);
61+ if (workspace == m_activeWorkspace) {
62+ int newIndex = qMax(index, m_allWorkspaces.count()-1);
63+ m_activeWorkspace = newIndex > 0 ? m_allWorkspaces[newIndex] : nullptr;
64+ Q_EMIT activeWorkspaceChanged();
66+// if (m_activeWorkspace) {
67+// m_activeWorkspace->windowModel()->transferWindowsFrom(workspace->windowModel());
45 workspace->deleteLater();
70 workspace->deleteLater();
73+Workspace *WorkspaceManager::activeWorkspace() const
75+ return m_activeWorkspace;
78+void WorkspaceManager::setActiveWorkspace(Workspace *workspace)
80+ if (workspace != m_activeWorkspace) {
81+ m_activeWorkspace = workspace;
82+ Q_EMIT activeWorkspaceChanged();