Only use multi window manager when platform supports

This commit is contained in:
Simon Fels 2017-06-20 07:30:32 +02:00
commit c2e5bec26d
6 changed files with 16 additions and 3 deletions

View file

@ -186,10 +186,10 @@ anbox::cmds::SessionManager::SessionManager(const BusFactory &bus_factory)
auto app_db = std::make_shared<application::Database>();
std::shared_ptr<wm::Manager> window_manager;
if (single_window_)
window_manager = std::make_shared<wm::SingleWindowManager>(platform, display_frame, app_db);
else
if (platform->supports_multi_window() && !single_window_)
window_manager = std::make_shared<wm::MultiWindowManager>(platform, android_api_stub, app_db);
else
window_manager = std::make_shared<wm::SingleWindowManager>(platform, display_frame, app_db);
auto gl_server = std::make_shared<graphics::GLRendererServer>(
graphics::GLRendererServer::Config{gles_driver_, single_window_}, window_manager);

View file

@ -56,6 +56,8 @@ class BasePlatform {
virtual void set_renderer(const std::shared_ptr<Renderer> &renderer) = 0;
virtual void set_window_manager(const std::shared_ptr<wm::Manager> &window_manager) = 0;
virtual bool supports_multi_window() const = 0;
};
std::shared_ptr<BasePlatform> create(const std::string &name = "",
const std::shared_ptr<input::Manager> &input_manager = nullptr,

View file

@ -67,5 +67,9 @@ void NullPlatform::set_window_manager(const std::shared_ptr<wm::Manager> &window
(void) window_manager;
ERROR("Not implemented");
}
bool NullPlatform::supports_multi_window() const {
return false;
}
} // namespace wm
} // namespace anbox

View file

@ -35,6 +35,7 @@ class NullPlatform : public BasePlatform {
std::shared_ptr<audio::Source> create_audio_source() override;
void set_renderer(const std::shared_ptr<Renderer> &renderer) override;
void set_window_manager(const std::shared_ptr<wm::Manager> &window_manager) override;
bool supports_multi_window() const override;
};
} // namespace wm
} // namespace anbox

View file

@ -312,6 +312,10 @@ std::shared_ptr<audio::Source> Platform::create_audio_source() {
ERROR("Not implemented");
return nullptr;
}
bool Platform::supports_multi_window() const {
return true;
}
} // namespace sdl
} // namespace platform
} // namespace anbox

View file

@ -68,6 +68,8 @@ class Platform : public std::enable_shared_from_this<Platform>,
std::shared_ptr<audio::Sink> create_audio_sink() override;
std::shared_ptr<audio::Source> create_audio_source() override;
bool supports_multi_window() const override;
private:
void process_events();
void process_input_event(const SDL_Event &event);