diff --git a/wayland_adapter/framework/core/wayland_surface.cpp b/wayland_adapter/framework/core/wayland_surface.cpp index 11925428e28662b858b328093b0cf9e1548eb020..00dab6ee9bf51ab0b4c592ffadfeb6b53ca6080a 100644 --- a/wayland_adapter/framework/core/wayland_surface.cpp +++ b/wayland_adapter/framework/core/wayland_surface.cpp @@ -342,6 +342,11 @@ void WaylandSurface::StartMove() } } +void WaylandSurface::SetWindowMode(OHOS::Rosen::WindowMode mode) +{ + mode_ = mode; +} + void WaylandSurface::Commit() { if (window_ == nullptr) { @@ -410,7 +415,7 @@ void WaylandSurface::CreateWindow() { OHOS::sptr option(new OHOS::Rosen::WindowOption()); option->SetWindowType(OHOS::Rosen::WindowType::APP_MAIN_WINDOW_BASE); - option->SetWindowMode(OHOS::Rosen::WindowMode::WINDOW_MODE_FLOATING); + option->SetWindowMode(mode_); option->SetMainHandlerAvailable(false); static int count = 0; diff --git a/wayland_adapter/framework/core/wayland_surface.h b/wayland_adapter/framework/core/wayland_surface.h index 13479f47a555108ec9eaad7d91bde80c0ad7d024..0d819f79ffddb38cf37885c3959fd9000f677e34 100644 --- a/wayland_adapter/framework/core/wayland_surface.h +++ b/wayland_adapter/framework/core/wayland_surface.h @@ -56,6 +56,7 @@ public: void AddCommitCallback(SurfaceCommitCallback callback); void AddRectCallback(SurfaceRectCallback callback); void StartMove(); + void SetWindowMode(OHOS::Rosen::WindowMode mode); void OnSizeChange(const OHOS::Rosen::Rect& rect, OHOS::Rosen::WindowSizeChangeReason reason); void OnModeChange(OHOS::Rosen::WindowMode mode); @@ -87,6 +88,7 @@ private: std::unique_ptr renderContext_; #endif OHOS::sptr window_; + OHOS::Rosen::WindowMode mode_ = OHOS::Rosen::WindowMode::WINDOW_MODE_FLOATING; std::shared_ptr surfaceNode_; std::shared_ptr rsSurface_; }; diff --git a/wayland_adapter/framework/stable/wayland_xdg_surface.cpp b/wayland_adapter/framework/stable/wayland_xdg_surface.cpp index e315351c85d04541059415b637bf3db2f3e8cfd5..7256acbf4b5eacec30fc402a4c355d3cb4dca65e 100644 --- a/wayland_adapter/framework/stable/wayland_xdg_surface.cpp +++ b/wayland_adapter/framework/stable/wayland_xdg_surface.cpp @@ -111,7 +111,18 @@ void WaylandXdgSurface::AckConfigure(uint32_t serial) void WaylandXdgSurface::StartMove() { - surface_->StartMove(); + auto surface = surface_.promote(); + if (surface != nullptr) { + surface->StartMove(); + } +} + +void WaylandXdgSurface::SetWindowMode(OHOS::Rosen::WindowMode mode) +{ + auto surface = surface_.promote(); + if (surface != nullptr) { + surface->SetWindowMode(mode); + } } void WaylandXdgSurface::OnSurfaceCommit() diff --git a/wayland_adapter/framework/stable/wayland_xdg_surface.h b/wayland_adapter/framework/stable/wayland_xdg_surface.h index 6f1a016fd3bee3e419bc10baa411ba9d13a83762..91bd0f0afd6d6713a5a1eb8a491744b7943a8eea 100644 --- a/wayland_adapter/framework/stable/wayland_xdg_surface.h +++ b/wayland_adapter/framework/stable/wayland_xdg_surface.h @@ -42,6 +42,7 @@ public: ~WaylandXdgSurface() noexcept override; void StartMove(); + void SetWindowMode(OHOS::Rosen::WindowMode mode); private: friend struct IWaylandXdgSurface; diff --git a/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp b/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp index feba5bacd53d2ced144278db0a887a6af9291d7c..1e6f6cb39affa26d6034572864ee6115495ddf5f 100644 --- a/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp +++ b/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp @@ -143,7 +143,10 @@ void WaylandXdgToplevel::SetTitle(const char *title) void WaylandXdgToplevel::Move(uint32_t serial) { - xdgSurface_->StartMove(); + auto xdgSurface = xdgSurface_.promote(); + if (xdgSurface != nullptr) { + xdgSurface->StartMove(); + } } void WaylandXdgToplevel::Resize(uint32_t serial, uint32_t edges) @@ -152,6 +155,12 @@ void WaylandXdgToplevel::Resize(uint32_t serial, uint32_t edges) void WaylandXdgToplevel::SetAppId(const char *appId) { + if (strstr(appId, "desktop") != nullptr) { + auto xdgSurface = xdgSurface_.promote(); + if (xdgSurface != nullptr) { + xdgSurface->SetWindowMode(OHOS::Rosen::WindowMode::WINDOW_MODE_FULLSCREEN); + } + } } void WaylandXdgToplevel::SetMaxSize(int32_t width, int32_t height)