diff options
-rw-r--r-- | src/modules/Unity/Application/mirsurfaceitem.cpp | 1 | ||||
-rw-r--r-- | src/modules/Unity/Application/mirsurfaceitem.h | 4 | ||||
-rw-r--r-- | src/modules/Unity/Application/mirsurfacemanager.h | 1 | ||||
-rw-r--r-- | src/platforms/mirserver/mirserver.cpp | 14 | ||||
-rw-r--r-- | src/platforms/mirserver/mirserver.h | 3 | ||||
-rw-r--r-- | src/platforms/mirserver/mirshell.cpp | 118 | ||||
-rw-r--r-- | src/platforms/mirserver/mirshell.h | 48 |
7 files changed, 79 insertions, 110 deletions
diff --git a/src/modules/Unity/Application/mirsurfaceitem.cpp b/src/modules/Unity/Application/mirsurfaceitem.cpp index c8d895a..bb2582f 100644 --- a/src/modules/Unity/Application/mirsurfaceitem.cpp +++ b/src/modules/Unity/Application/mirsurfaceitem.cpp @@ -47,6 +47,7 @@ #include <mir/geometry/rectangle.h> #include <mir/events/event_builders.h> #include <mir_toolkit/event.h> +#include <mir/shell/shell.h> namespace mg = mir::graphics; diff --git a/src/modules/Unity/Application/mirsurfaceitem.h b/src/modules/Unity/Application/mirsurfaceitem.h index fd3ab45..aae1a94 100644 --- a/src/modules/Unity/Application/mirsurfaceitem.h +++ b/src/modules/Unity/Application/mirsurfaceitem.h @@ -33,8 +33,10 @@ #include "session_interface.h" +namespace mir { namespace shell { class Shell; }} + class SurfaceObserver; -class MirShell; +using MirShell = mir::shell::Shell; namespace qtmir { diff --git a/src/modules/Unity/Application/mirsurfacemanager.h b/src/modules/Unity/Application/mirsurfacemanager.h index b9e5533..8f5080a 100644 --- a/src/modules/Unity/Application/mirsurfacemanager.h +++ b/src/modules/Unity/Application/mirsurfacemanager.h @@ -40,7 +40,6 @@ namespace mir { } class MirServer; -class MirShell; namespace qtmir { diff --git a/src/platforms/mirserver/mirserver.cpp b/src/platforms/mirserver/mirserver.cpp index a60fb0d..e90296a 100644 --- a/src/platforms/mirserver/mirserver.cpp +++ b/src/platforms/mirserver/mirserver.cpp @@ -86,17 +86,10 @@ MirServer::MirServer(int argc, char const* argv[], QObject* parent) return std::make_shared<MirServerStatusListener>(); }); - override_the_shell([this] + override_the_window_manager_builder([this](mir::shell::FocusController* /*focus_controller*/) + -> std::shared_ptr<mir::shell::WindowManager> { - auto const shell = std::make_shared<MirShell>( - the_input_targeter(), - the_surface_coordinator(), - the_session_coordinator(), - the_prompt_session_manager(), - the_shell_display_layout()); - - m_shell = shell; - return shell; + return std::make_shared<QtMirWindowManager>(the_shell_display_layout()); }); set_terminator([&](int) @@ -151,5 +144,6 @@ PromptSessionListener *MirServer::promptSessionListener() MirShell *MirServer::shell() { + std::weak_ptr<MirShell> m_shell = the_shell(); return m_shell.lock().get(); } diff --git a/src/platforms/mirserver/mirserver.h b/src/platforms/mirserver/mirserver.h index b4b8dc2..3956f9c 100644 --- a/src/platforms/mirserver/mirserver.h +++ b/src/platforms/mirserver/mirserver.h @@ -23,7 +23,7 @@ class QtEventFeeder; class SessionListener; class SessionAuthorizer; -class MirShell; +using MirShell = mir::shell::Shell; class PromptSessionListener; // We use virtual inheritance of mir::Server to facilitate derived classes (e.g. testing) @@ -61,7 +61,6 @@ public: private: std::shared_ptr<QtEventFeeder> m_qtEventFeeder; - std::weak_ptr<MirShell> m_shell; }; #endif // MIRSERVER_H diff --git a/src/platforms/mirserver/mirshell.cpp b/src/platforms/mirserver/mirshell.cpp index 3b1e9c4..d62c76c 100644 --- a/src/platforms/mirserver/mirshell.cpp +++ b/src/platforms/mirserver/mirshell.cpp @@ -26,131 +26,79 @@ #include <mir/shell/window_manager.h> namespace ms = mir::scene; -using mir::shell::AbstractShell; -namespace -{ -class NullWindowManager : public mir::shell::WindowManager +QtMirWindowManager::QtMirWindowManager(const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout) : + m_displayLayout{displayLayout} { -public: - void add_session(std::shared_ptr<ms::Session> const& session) override; - - void remove_session(std::shared_ptr<ms::Session> const& session) override; - - mir::frontend::SurfaceId add_surface( - std::shared_ptr<ms::Session> const& session, - ms::SurfaceCreationParameters const& params, - std::function<mir::frontend::SurfaceId(std::shared_ptr<ms::Session> const& session, ms::SurfaceCreationParameters const& params)> const& build) override; - - void remove_surface( - std::shared_ptr<ms::Session> const& session, - std::weak_ptr<ms::Surface> const& surface) override; - - void add_display(mir::geometry::Rectangle const& area) override; - - void remove_display(mir::geometry::Rectangle const& area) override; - - bool handle_keyboard_event(MirKeyboardEvent const* event) override; - - bool handle_touch_event(MirTouchEvent const* event) override; - - bool handle_pointer_event(MirPointerEvent const* event) override; - - int set_surface_attribute( - std::shared_ptr<ms::Session> const& session, - std::shared_ptr<ms::Surface> const& surface, - MirSurfaceAttrib attrib, - int value) override; - - void modify_surface(const std::shared_ptr<mir::scene::Session>&, const std::shared_ptr<mir::scene::Surface>&, const mir::shell::SurfaceSpecification&); -}; + qCDebug(QTMIR_MIR_MESSAGES) << "QtMirWindowManager::QtMirWindowManager"; } +void QtMirWindowManager::add_session(std::shared_ptr<ms::Session> const& /*session*/) +{ +} -MirShell::MirShell( - const std::shared_ptr<mir::shell::InputTargeter> &inputTargeter, - const std::shared_ptr<mir::scene::SurfaceCoordinator> &surfaceCoordinator, - const std::shared_ptr<mir::scene::SessionCoordinator> &sessionCoordinator, - const std::shared_ptr<mir::scene::PromptSessionManager> &promptSessionManager, - const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout) : - AbstractShell(inputTargeter, surfaceCoordinator, sessionCoordinator, promptSessionManager, - [](mir::shell::FocusController*) { return std::make_shared<NullWindowManager>(); }), - m_displayLayout{displayLayout} +void QtMirWindowManager::remove_session(std::shared_ptr<ms::Session> const& /*session*/) { - qCDebug(QTMIR_MIR_MESSAGES) << "MirShell::MirShell"; } -mir::frontend::SurfaceId MirShell::create_surface(const std::shared_ptr<ms::Session> &session, const ms::SurfaceCreationParameters &requestParameters) +auto QtMirWindowManager::add_surface( + std::shared_ptr<ms::Session> const& session, + ms::SurfaceCreationParameters const& requestParameters, + std::function<mir::frontend::SurfaceId(std::shared_ptr<ms::Session> const& session, ms::SurfaceCreationParameters const& params)> const& build) +-> mir::frontend::SurfaceId { tracepoint(qtmirserver, surfacePlacementStart); - // TODO: Callback unity8 so that it can make a decision on that. - // unity8 must bear in mind that the called function will be on a Mir thread though. - // The QPA shouldn't be deciding for itself on such things. - - ms::SurfaceCreationParameters placedParameters = requestParameters; + // TODO: Callback unity8 so that it can make a decision on that. + // unity8 must bear in mind that the called function will be on a Mir thread though. + // The QPA shouldn't be deciding for itself on such things. - // Just make it fullscreen for now - mir::geometry::Rectangle rect{requestParameters.top_left, requestParameters.size}; - m_displayLayout->size_to_output(rect); - placedParameters.size = rect.size; + ms::SurfaceCreationParameters placedParameters = requestParameters; - qCDebug(QTMIR_MIR_MESSAGES) << "MirShell::create_surface(): size requested (" - << requestParameters.size.width.as_int() << "," << requestParameters.size.height.as_int() << ") and placed (" - << placedParameters.size.width.as_int() << "," << placedParameters.size.height.as_int() << ")"; + // Just make it fullscreen for now + mir::geometry::Rectangle rect{requestParameters.top_left, requestParameters.size}; + m_displayLayout->size_to_output(rect); + placedParameters.size = rect.size; - tracepoint(qtmirserver, surfacePlacementEnd); + qCDebug(QTMIR_MIR_MESSAGES) << "QtMirWindowManager::add_surface(): size requested (" + << requestParameters.size.width.as_int() << "," << requestParameters.size.height.as_int() << ") and placed (" + << placedParameters.size.width.as_int() << "," << placedParameters.size.height.as_int() << ")"; - return AbstractShell::create_surface(session, placedParameters); -} - -void NullWindowManager::add_session(std::shared_ptr<ms::Session> const& /*session*/) -{ -} + tracepoint(qtmirserver, surfacePlacementEnd); -void NullWindowManager::remove_session(std::shared_ptr<ms::Session> const& /*session*/) -{ -} - -auto NullWindowManager::add_surface( - std::shared_ptr<ms::Session> const& session, - ms::SurfaceCreationParameters const& params, - std::function<mir::frontend::SurfaceId(std::shared_ptr<ms::Session> const& session, ms::SurfaceCreationParameters const& params)> const& build) --> mir::frontend::SurfaceId -{ - return build(session, params); + return build(session, placedParameters); } -void NullWindowManager::remove_surface( +void QtMirWindowManager::remove_surface( std::shared_ptr<ms::Session> const& /*session*/, std::weak_ptr<ms::Surface> const& /*surface*/) { } -void NullWindowManager::add_display(mir::geometry::Rectangle const& /*area*/) +void QtMirWindowManager::add_display(mir::geometry::Rectangle const& /*area*/) { } -void NullWindowManager::remove_display(mir::geometry::Rectangle const& /*area*/) +void QtMirWindowManager::remove_display(mir::geometry::Rectangle const& /*area*/) { } -bool NullWindowManager::handle_keyboard_event(MirKeyboardEvent const* /*event*/) +bool QtMirWindowManager::handle_keyboard_event(MirKeyboardEvent const* /*event*/) { return false; } -bool NullWindowManager::handle_touch_event(MirTouchEvent const* /*event*/) +bool QtMirWindowManager::handle_touch_event(MirTouchEvent const* /*event*/) { return false; } -bool NullWindowManager::handle_pointer_event(MirPointerEvent const* /*event*/) +bool QtMirWindowManager::handle_pointer_event(MirPointerEvent const* /*event*/) { return false; } -int NullWindowManager::set_surface_attribute( +int QtMirWindowManager::set_surface_attribute( std::shared_ptr<ms::Session> const& /*session*/, std::shared_ptr<ms::Surface> const& surface, MirSurfaceAttrib attrib, @@ -159,6 +107,6 @@ int NullWindowManager::set_surface_attribute( return surface->configure(attrib, value); } -void NullWindowManager::modify_surface(const std::shared_ptr<mir::scene::Session>&, const std::shared_ptr<mir::scene::Surface>&, const mir::shell::SurfaceSpecification&) +void QtMirWindowManager::modify_surface(const std::shared_ptr<mir::scene::Session>&, const std::shared_ptr<mir::scene::Surface>&, const mir::shell::SurfaceSpecification&) { } diff --git a/src/platforms/mirserver/mirshell.h b/src/platforms/mirserver/mirshell.h index 85c243e..a467bbe 100644 --- a/src/platforms/mirserver/mirshell.h +++ b/src/platforms/mirserver/mirshell.h @@ -17,7 +17,8 @@ #ifndef QPAMIRSERVER_SHELL_H #define QPAMIRSERVER_SHELL_H -#include <mir/shell/abstract_shell.h> +#include <mir/shell/window_manager.h> + #include <QObject> namespace mir { @@ -26,19 +27,44 @@ namespace mir { } } -class MirShell : public QObject, public mir::shell::AbstractShell +class QtMirWindowManager : public QObject, public mir::shell::WindowManager { - Q_OBJECT +Q_OBJECT public: - MirShell( - const std::shared_ptr<mir::shell::InputTargeter> &inputTargeter, - const std::shared_ptr<mir::scene::SurfaceCoordinator> &surfaceCoordinator, - const std::shared_ptr<mir::scene::SessionCoordinator> &sessionCoordinator, - const std::shared_ptr<mir::scene::PromptSessionManager> &promptSessionManager, - const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout); - - virtual mir::frontend::SurfaceId create_surface(const std::shared_ptr<mir::scene::Session>& session, const mir::scene::SurfaceCreationParameters ¶ms); + + QtMirWindowManager(const std::shared_ptr<mir::shell::DisplayLayout> &displayLayout); + + void add_session(std::shared_ptr<mir::scene::Session> const& session) override; + + void remove_session(std::shared_ptr<mir::scene::Session> const& session) override; + + mir::frontend::SurfaceId add_surface( + std::shared_ptr<mir::scene::Session> const& session, + mir::scene::SurfaceCreationParameters const& params, + std::function<mir::frontend::SurfaceId(std::shared_ptr<mir::scene::Session> const& session, mir::scene::SurfaceCreationParameters const& params)> const& build) override; + + void remove_surface( + std::shared_ptr<mir::scene::Session> const& session, + std::weak_ptr<mir::scene::Surface> const& surface) override; + + void add_display(mir::geometry::Rectangle const& area) override; + + void remove_display(mir::geometry::Rectangle const& area) override; + + bool handle_keyboard_event(MirKeyboardEvent const* event) override; + + bool handle_touch_event(MirTouchEvent const* event) override; + + bool handle_pointer_event(MirPointerEvent const* event) override; + + int set_surface_attribute( + std::shared_ptr<mir::scene::Session> const& session, + std::shared_ptr<mir::scene::Surface> const& surface, + MirSurfaceAttrib attrib, + int value) override; + + void modify_surface(const std::shared_ptr<mir::scene::Session>&, const std::shared_ptr<mir::scene::Surface>&, const mir::shell::SurfaceSpecification&); private: std::shared_ptr<mir::shell::DisplayLayout> const m_displayLayout; |