diff --git a/como/win/CMakeLists.txt b/como/win/CMakeLists.txt
index 5806e1faa..b303f0786 100644
--- a/como/win/CMakeLists.txt
+++ b/como/win/CMakeLists.txt
@@ -24,6 +24,7 @@ target_sources(win
FILE_SET HEADERS
FILES
dbus/appmenu.h
+ dbus/session_manager.h
dbus/virtual_desktop_manager.h
dbus/virtual_desktop_types.h
deco/bridge.h
@@ -129,6 +130,7 @@ target_sources(win
PRIVATE
cursor_shape.cpp
dbus/appmenu.cpp
+ dbus/session_manager.cpp
dbus/virtual_desktop_manager.cpp
dbus/virtual_desktop_types.cpp
deco/palette.cpp
@@ -184,6 +186,11 @@ qt6_add_dbus_interface(win_dbus_src
${KSCREENLOCKER_DBUS_INTERFACES_DIR}/kf6_org.freedesktop.ScreenSaver.xml
screenlocker_interface
)
+qt6_add_dbus_adaptor(win_dbus_src
+ dbus/org.kde.KWin.Session.xml
+ dbus/session_manager.h
+ como::win::dbus::session_manager
+)
target_sources(win PRIVATE ${win_dbus_src})
@@ -295,14 +302,6 @@ target_sources(win-x11
x11/net/win_info.cpp
)
-qt6_add_dbus_adaptor(win_x11_dbus_src
- dbus/org.kde.KWin.Session.xml
- x11/session_manager.h
- como::win::x11::session_manager
-)
-
-target_sources(win-x11 PRIVATE ${win_x11_dbus_src})
-
add_library(win-x11-backend SHARED)
target_link_libraries(win-x11-backend
@@ -342,6 +341,7 @@ target_sources(win-wl
wayland/plasma_window.h
wayland/popup_placement.h
wayland/scene.h
+ wayland/session_manager.h
wayland/setup.h
wayland/space.h
wayland/space_areas.h
diff --git a/como/win/dbus/org.kde.KWin.Session.xml b/como/win/dbus/org.kde.KWin.Session.xml
index ad80f052a..efb327702 100644
--- a/como/win/dbus/org.kde.KWin.Session.xml
+++ b/como/win/dbus/org.kde.KWin.Session.xml
@@ -22,6 +22,8 @@
+
+
+
-
diff --git a/como/win/dbus/session_manager.cpp b/como/win/dbus/session_manager.cpp
new file mode 100644
index 000000000..b39dca6b4
--- /dev/null
+++ b/como/win/dbus/session_manager.cpp
@@ -0,0 +1,20 @@
+/*
+ SPDX-FileCopyrightText: 2024 Roman Gilg
+
+ SPDX-License-Identifier: GPL-2.0-or-later
+*/
+#include "session_manager.h"
+
+// Include first to not clash with later X definitions in other includes.
+#include "sessionadaptor.h"
+
+namespace como::win::dbus
+{
+
+session_manager::session_manager()
+{
+ new SessionAdaptor(this);
+ QDBusConnection::sessionBus().registerObject(QStringLiteral("/Session"), this);
+}
+
+}
diff --git a/como/win/dbus/session_manager.h b/como/win/dbus/session_manager.h
new file mode 100644
index 000000000..490f34098
--- /dev/null
+++ b/como/win/dbus/session_manager.h
@@ -0,0 +1,50 @@
+/*
+ SPDX-FileCopyrightText: 2024 Roman Gilg
+
+ SPDX-License-Identifier: GPL-2.0-or-later
+*/
+#pragma once
+
+#include
+#include
+
+#include
+
+namespace como::win::dbus
+{
+
+class COMO_EXPORT session_manager : public QObject
+{
+ Q_OBJECT
+public:
+ session_manager();
+
+public Q_SLOTS:
+ virtual void setState(uint /*state*/)
+ {
+ }
+ virtual void loadSession(QString const& /*name*/)
+ {
+ }
+ virtual void aboutToSaveSession(QString const& /*name*/)
+ {
+ }
+ virtual void finishSaveSession(QString const& /*name*/)
+ {
+ }
+ virtual bool closeWaylandWindows()
+ {
+ return true;
+ }
+ virtual void quit()
+ {
+ }
+
+Q_SIGNALS:
+ void stateChanged(session_state prev, session_state next);
+ void loadSessionRequested(QString const& name);
+ void prepareSessionSaveRequested(QString const& name);
+ void finishSessionSaveRequested(QString const& name);
+};
+
+}
diff --git a/como/win/wayland/session_manager.h b/como/win/wayland/session_manager.h
new file mode 100644
index 000000000..c3b711962
--- /dev/null
+++ b/como/win/wayland/session_manager.h
@@ -0,0 +1,21 @@
+/*
+ SPDX-FileCopyrightText: 2024 Roman Gilg
+ SPDX-License-Identifier: GPL-2.0-or-later
+*/
+#pragma once
+
+#include
+
+namespace como::win::wayland
+{
+
+class session_manager : public dbus::session_manager
+{
+public:
+ bool closeWaylandWindows() override
+ {
+ return true;
+ }
+};
+
+}
diff --git a/como/win/wayland/space.h b/como/win/wayland/space.h
index 5475c6d41..05b7097bb 100644
--- a/como/win/wayland/space.h
+++ b/como/win/wayland/space.h
@@ -7,7 +7,6 @@
#include "subsurface.h"
#include "surface.h"
-#include
#include
#include
@@ -17,7 +16,9 @@
#include
#include
#include
+#include
#include
+#include
#include
@@ -46,6 +47,7 @@ class space
{
space_setup_init(*this, render, input);
init_space(*this);
+ session_manager = std::make_unique();
}
virtual ~space()
@@ -130,6 +132,7 @@ class space
std::vector oldrestrictedmovearea;
std::unique_ptr subspace_manager;
+ std::unique_ptr session_manager;
QTimer* m_quickTileCombineTimer{nullptr};
win::quicktiles m_lastTilingMode{win::quicktiles::none};
diff --git a/como/win/x11/session_manager.cpp b/como/win/x11/session_manager.cpp
index 08d562194..efc8f0cf5 100644
--- a/como/win/x11/session_manager.cpp
+++ b/como/win/x11/session_manager.cpp
@@ -7,9 +7,6 @@
*/
#include "session_manager.h"
-// Include first to not clash with later X definitions in other includes.
-#include "sessionadaptor.h"
-
#include
#include
#include
@@ -23,15 +20,7 @@
namespace como::win::x11
{
-session_manager::session_manager()
-{
- new SessionAdaptor(this);
- QDBusConnection::sessionBus().registerObject(QStringLiteral("/Session"), this);
-}
-
-session_manager::~session_manager()
-{
-}
+session_manager::~session_manager() = default;
session_state session_manager::state() const
{
diff --git a/como/win/x11/session_manager.h b/como/win/x11/session_manager.h
index b685b41a4..c21a96a9a 100644
--- a/como/win/x11/session_manager.h
+++ b/como/win/x11/session_manager.h
@@ -7,39 +7,28 @@
*/
#pragma once
-#include "types.h"
+#include
+#include
+#include
-#include "como_export.h"
-
-#include
#include
namespace como::win::x11
{
-class COMO_EXPORT session_manager : public QObject
+class COMO_EXPORT session_manager : public dbus::session_manager
{
- Q_OBJECT
public:
- session_manager();
~session_manager() override;
session_state state() const;
-Q_SIGNALS:
- void stateChanged(session_state prev, session_state next);
-
- void loadSessionRequested(const QString& name);
- void prepareSessionSaveRequested(const QString& name);
- void finishSessionSaveRequested(const QString& name);
-
-public Q_SLOTS:
- // DBus API
- void setState(uint state);
- void loadSession(const QString& name);
- void aboutToSaveSession(const QString& name);
- void finishSaveSession(const QString& name);
- void quit();
+public:
+ void setState(uint state) override;
+ void loadSession(const QString& name) override;
+ void aboutToSaveSession(const QString& name) override;
+ void finishSaveSession(const QString& name) override;
+ void quit() override;
private:
void setState(session_state state);