diff --git a/src/server/CMakeLists.txt b/src/server/CMakeLists.txt --- a/src/server/CMakeLists.txt +++ b/src/server/CMakeLists.txt @@ -369,6 +369,7 @@ slide_interface.h subcompositor_interface.h surface_interface.h + surfacerole.h textinput_interface.h touch_interface.h xdgdecoration_interface.h diff --git a/src/server/generic_shell_surface_p.h b/src/server/generic_shell_surface_p.h --- a/src/server/generic_shell_surface_p.h +++ b/src/server/generic_shell_surface_p.h @@ -22,7 +22,7 @@ #include "seat_interface.h" #include "surface_interface.h" -#include "surfacerole_p.h" +#include "surfacerole.h" #include namespace KWayland diff --git a/src/server/surface_interface.cpp b/src/server/surface_interface.cpp --- a/src/server/surface_interface.cpp +++ b/src/server/surface_interface.cpp @@ -27,7 +27,7 @@ #include "region_interface.h" #include "subcompositor_interface.h" #include "subsurface_interface_p.h" -#include "surfacerole_p.h" +#include "surfacerole.h" // Qt #include // Wayland diff --git a/src/server/surfacerole_p.h b/src/server/surfacerole.h rename from src/server/surfacerole_p.h rename to src/server/surfacerole.h --- a/src/server/surfacerole_p.h +++ b/src/server/surfacerole.h @@ -18,33 +18,50 @@ License along with this library. If not, see . ****************************************************************************/ -#ifndef KWAYLAND_SERVER_SURFACEROLE_P_H -#define KWAYLAND_SERVER_SURFACEROLE_P_H +#ifndef KWAYLAND_SERVER_SURFACEROLE_H +#define KWAYLAND_SERVER_SURFACEROLE_H -#include +#include + +#include namespace KWayland { namespace Server { class SurfaceInterface; +class SurfaceRolePrivate; -class SurfaceRole +class KWAYLANDSERVER_EXPORT SurfaceRole { public: + /** + * Constructs a SurfaceRole for the given @p surface. + */ explicit SurfaceRole(SurfaceInterface *surface); + /** + * Destructs the SurfaceRole object. + */ virtual ~SurfaceRole(); + /** + * Called when the pending state of the surface role must be applied. + */ virtual void commit() = 0; -private: - QPointer m_surface; + /** + * Returns a surface role associated with the specified @p surface. + * + * This method returns @c nullptr if the given surface has no role. + */ + static SurfaceRole *get(SurfaceInterface *surface); - Q_DISABLE_COPY(SurfaceRole) +private: + QScopedPointer d; }; } } -#endif // KWAYLAND_SERVER_SURFACEROLE_P_H +#endif // KWAYLAND_SERVER_SURFACEROLE_H diff --git a/src/server/surfacerole.cpp b/src/server/surfacerole.cpp --- a/src/server/surfacerole.cpp +++ b/src/server/surfacerole.cpp @@ -18,27 +18,44 @@ License along with this library. If not, see . ****************************************************************************/ -#include "surfacerole_p.h" +#include "surfacerole.h" #include "surface_interface_p.h" #include "surface_interface.h" +#include + namespace KWayland { namespace Server { +class SurfaceRolePrivate +{ +public: + QPointer surface; +}; + SurfaceRole::SurfaceRole(SurfaceInterface *surface) - : m_surface(surface) + : d(new SurfaceRolePrivate) { - m_surface->d_func()->role = this; + d->surface = surface; + surface->d_func()->role = this; } SurfaceRole::~SurfaceRole() { // Lifetime of the surface role is not bounded to the associated surface. - if (m_surface) { - m_surface->d_func()->role = nullptr; + if (d->surface) { + d->surface->d_func()->role = nullptr; + } +} + +SurfaceRole *SurfaceRole::get(SurfaceInterface *surface) +{ + if (surface) { + return surface->d_func()->role; } + return nullptr; } }