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);