From ce415370df6012f4a837ec1561b168e23309a077 Mon Sep 17 00:00:00 2001 From: abc12133 Date: Fri, 15 Sep 2023 11:20:56 +0800 Subject: [PATCH 1/2] fix desktop size Signed-off-by: abc12133 --- wayland_adapter/framework/core/wayland_surface.cpp | 7 ++++++- wayland_adapter/framework/core/wayland_surface.h | 2 ++ wayland_adapter/framework/stable/wayland_xdg_surface.cpp | 5 +++++ wayland_adapter/framework/stable/wayland_xdg_surface.h | 1 + wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp | 3 +++ 5 files changed, 17 insertions(+), 1 deletion(-) diff --git a/wayland_adapter/framework/core/wayland_surface.cpp b/wayland_adapter/framework/core/wayland_surface.cpp index 1192542..00dab6e 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 13479f4..0d819f7 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 e315351..34aa46d 100644 --- a/wayland_adapter/framework/stable/wayland_xdg_surface.cpp +++ b/wayland_adapter/framework/stable/wayland_xdg_surface.cpp @@ -114,6 +114,11 @@ void WaylandXdgSurface::StartMove() surface_->StartMove(); } +void WaylandXdgSurface::SetWindowMode(OHOS::Rosen::WindowMode mode) +{ + surface_->SetWindowMode(mode); +} + void WaylandXdgSurface::OnSurfaceCommit() { if (role_ == SurfaceRole::XDG_TOPLEVEL) { diff --git a/wayland_adapter/framework/stable/wayland_xdg_surface.h b/wayland_adapter/framework/stable/wayland_xdg_surface.h index 6f1a016..91bd0f0 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 feba5ba..93eec6f 100644 --- a/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp +++ b/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp @@ -152,6 +152,9 @@ void WaylandXdgToplevel::Resize(uint32_t serial, uint32_t edges) void WaylandXdgToplevel::SetAppId(const char *appId) { + if (strstr(appId, "desktop") != nullptr) { + xdgSurface_->SetWindowMode(OHOS::Rosen::WindowMode::WINDOW_MODE_FULLSCREEN); + } } void WaylandXdgToplevel::SetMaxSize(int32_t width, int32_t height) -- Gitee From 3fd0fe62159c1078a2f16717219ef3ff0fa8b585 Mon Sep 17 00:00:00 2001 From: abc12133 Date: Fri, 15 Sep 2023 11:25:27 +0800 Subject: [PATCH 2/2] fix nullptr Signed-off-by: abc12133 --- .../framework/stable/wayland_xdg_surface.cpp | 10 ++++++++-- .../framework/stable/wayland_xdg_toplevel.cpp | 10 ++++++++-- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/wayland_adapter/framework/stable/wayland_xdg_surface.cpp b/wayland_adapter/framework/stable/wayland_xdg_surface.cpp index 34aa46d..7256acb 100644 --- a/wayland_adapter/framework/stable/wayland_xdg_surface.cpp +++ b/wayland_adapter/framework/stable/wayland_xdg_surface.cpp @@ -111,12 +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) { - surface_->SetWindowMode(mode); + auto surface = surface_.promote(); + if (surface != nullptr) { + surface->SetWindowMode(mode); + } } void WaylandXdgSurface::OnSurfaceCommit() diff --git a/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp b/wayland_adapter/framework/stable/wayland_xdg_toplevel.cpp index 93eec6f..1e6f6cb 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) @@ -153,7 +156,10 @@ void WaylandXdgToplevel::Resize(uint32_t serial, uint32_t edges) void WaylandXdgToplevel::SetAppId(const char *appId) { if (strstr(appId, "desktop") != nullptr) { - xdgSurface_->SetWindowMode(OHOS::Rosen::WindowMode::WINDOW_MODE_FULLSCREEN); + auto xdgSurface = xdgSurface_.promote(); + if (xdgSurface != nullptr) { + xdgSurface->SetWindowMode(OHOS::Rosen::WindowMode::WINDOW_MODE_FULLSCREEN); + } } } -- Gitee