diff --git a/src/anbox/cmds/session_manager.cpp b/src/anbox/cmds/session_manager.cpp index 0446a10..946a370 100644 --- a/src/anbox/cmds/session_manager.cpp +++ b/src/anbox/cmds/session_manager.cpp @@ -186,10 +186,10 @@ anbox::cmds::SessionManager::SessionManager(const BusFactory &bus_factory) auto app_db = std::make_shared(); std::shared_ptr window_manager; - if (single_window_) - window_manager = std::make_shared(platform, display_frame, app_db); - else + if (platform->supports_multi_window() && !single_window_) window_manager = std::make_shared(platform, android_api_stub, app_db); + else + window_manager = std::make_shared(platform, display_frame, app_db); auto gl_server = std::make_shared( graphics::GLRendererServer::Config{gles_driver_, single_window_}, window_manager); diff --git a/src/anbox/platform/base_platform.h b/src/anbox/platform/base_platform.h index 53836db..18b93e5 100644 --- a/src/anbox/platform/base_platform.h +++ b/src/anbox/platform/base_platform.h @@ -56,6 +56,8 @@ class BasePlatform { virtual void set_renderer(const std::shared_ptr &renderer) = 0; virtual void set_window_manager(const std::shared_ptr &window_manager) = 0; + + virtual bool supports_multi_window() const = 0; }; std::shared_ptr create(const std::string &name = "", const std::shared_ptr &input_manager = nullptr, diff --git a/src/anbox/platform/null/platform.cpp b/src/anbox/platform/null/platform.cpp index 23d6a68..c894806 100644 --- a/src/anbox/platform/null/platform.cpp +++ b/src/anbox/platform/null/platform.cpp @@ -67,5 +67,9 @@ void NullPlatform::set_window_manager(const std::shared_ptr &window (void) window_manager; ERROR("Not implemented"); } + +bool NullPlatform::supports_multi_window() const { + return false; +} } // namespace wm } // namespace anbox diff --git a/src/anbox/platform/null/platform.h b/src/anbox/platform/null/platform.h index b0ff743..24ad341 100644 --- a/src/anbox/platform/null/platform.h +++ b/src/anbox/platform/null/platform.h @@ -35,6 +35,7 @@ class NullPlatform : public BasePlatform { std::shared_ptr create_audio_source() override; void set_renderer(const std::shared_ptr &renderer) override; void set_window_manager(const std::shared_ptr &window_manager) override; + bool supports_multi_window() const override; }; } // namespace wm } // namespace anbox diff --git a/src/anbox/platform/sdl/platform.cpp b/src/anbox/platform/sdl/platform.cpp index 64d6124..f4ea51f 100644 --- a/src/anbox/platform/sdl/platform.cpp +++ b/src/anbox/platform/sdl/platform.cpp @@ -312,6 +312,10 @@ std::shared_ptr Platform::create_audio_source() { ERROR("Not implemented"); return nullptr; } + +bool Platform::supports_multi_window() const { + return true; +} } // namespace sdl } // namespace platform } // namespace anbox diff --git a/src/anbox/platform/sdl/platform.h b/src/anbox/platform/sdl/platform.h index 2a01cf0..24e7546 100644 --- a/src/anbox/platform/sdl/platform.h +++ b/src/anbox/platform/sdl/platform.h @@ -68,6 +68,8 @@ class Platform : public std::enable_shared_from_this, std::shared_ptr create_audio_sink() override; std::shared_ptr create_audio_source() override; + bool supports_multi_window() const override; + private: void process_events(); void process_input_event(const SDL_Event &event);