diff --git a/repos/gems/src/server/wm/decorator_nitpicker.h b/repos/gems/src/server/wm/decorator_nitpicker.h index ead0bcdda..e58f04305 100644 --- a/repos/gems/src/server/wm/decorator_nitpicker.h +++ b/repos/gems/src/server/wm/decorator_nitpicker.h @@ -47,7 +47,6 @@ namespace Wm { class Main; namespace Wm { struct Decorator_nitpicker_session; - struct Decorator_nitpicker_service; struct Decorator_content_callback; struct Decorator_content_registry; } diff --git a/repos/gems/src/server/wm/direct_nitpicker.h b/repos/gems/src/server/wm/direct_nitpicker.h new file mode 100644 index 000000000..963567ef3 --- /dev/null +++ b/repos/gems/src/server/wm/direct_nitpicker.h @@ -0,0 +1,117 @@ +/* + * \brief Pass-through nitpicker service announced to the outside world + * \author Norman Feske + * \date 2015-09-29 + */ + +/* + * Copyright (C) 2015 Genode Labs GmbH + * + * This file is part of the Genode OS framework, which is distributed + * under the terms of the GNU General Public License version 2. + */ + +#ifndef _DIRECT_NITPICKER_H_ +#define _DIRECT_NITPICKER_H_ + +/* Genode includes */ +#include +#include + +namespace Wm { class Direct_nitpicker_session; } + + +class Wm::Direct_nitpicker_session : public Genode::Rpc_object +{ + private: + + Genode::Session_label _session_label; + Nitpicker::Connection _session { _session_label.string() }; + + public: + + /** + * Constructor + */ + Direct_nitpicker_session(Genode::Session_label const &session_label) + : + _session_label(session_label) + { } + + void upgrade(char const *args) + { + Genode::env()->parent()->upgrade(_session, args); + } + + + /********************************* + ** Nitpicker session interface ** + *********************************/ + + Framebuffer::Session_capability framebuffer_session() override + { + return _session.framebuffer_session(); + } + + Input::Session_capability input_session() override + { + return _session.input_session(); + } + + View_handle create_view(View_handle parent) override + { + return _session.create_view(parent); + } + + void destroy_view(View_handle view) override + { + _session.destroy_view(view); + } + + View_handle view_handle(Nitpicker::View_capability view_cap, View_handle handle) override + { + return _session.view_handle(view_cap, handle); + } + + Nitpicker::View_capability view_capability(View_handle view) override + { + return _session.view_capability(view); + } + + void release_view_handle(View_handle view) override + { + _session.release_view_handle(view); + } + + Genode::Dataspace_capability command_dataspace() override + { + return _session.command_dataspace(); + } + + void execute() override + { + _session.execute(); + } + + Framebuffer::Mode mode() override + { + return _session.mode(); + } + + void mode_sigh(Genode::Signal_context_capability sigh) override + { + _session.mode_sigh(sigh); + } + + void buffer(Framebuffer::Mode mode, bool use_alpha) override + { + _session.buffer(mode, use_alpha); + } + + void focus(Genode::Capability session) + { + _session.focus(session); + } +}; + +#endif /* _DIRECT_NITPICKER_H_ */ diff --git a/repos/gems/src/server/wm/main.cc b/repos/gems/src/server/wm/main.cc index 780367716..518a222f1 100644 --- a/repos/gems/src/server/wm/main.cc +++ b/repos/gems/src/server/wm/main.cc @@ -59,11 +59,12 @@ struct Wm::Main Window_registry window_registry { *env()->heap(), window_list_reporter }; + Nitpicker::Connection focus_nitpicker_session; + Nitpicker::Root nitpicker_root { ep, window_registry, *env()->heap(), env()->ram_session_cap(), - pointer_reporter, focus_request_reporter }; - - Nitpicker::Connection focus_nitpicker_session; + pointer_reporter, focus_request_reporter, + focus_nitpicker_session }; void handle_focus_update(unsigned) { diff --git a/repos/gems/src/server/wm/nitpicker.h b/repos/gems/src/server/wm/nitpicker.h index b13afa092..b85c49ede 100644 --- a/repos/gems/src/server/wm/nitpicker.h +++ b/repos/gems/src/server/wm/nitpicker.h @@ -33,6 +33,7 @@ #include #include #include +#include namespace Wm { @@ -675,8 +676,7 @@ class Wm::Nitpicker::Session_component : public Rpc_object, /** * Constructor * - * \param nitpicker real nitpicker service - * \param ep entrypoint used for managing the views + * \param ep entrypoint used for managing the views */ Session_component(Ram_session_capability ram, Window_registry &window_registry, @@ -1027,6 +1027,11 @@ class Wm::Nitpicker::Root : public Genode::Rpc_objectupgrade(args.string()); + + Direct_nitpicker_session *direct_session = + dynamic_cast(session); + + if (direct_session) + direct_session->upgrade(args.string()); }; _ep.rpc_ep().apply(session_cap, lambda); } @@ -1156,6 +1181,18 @@ class Wm::Nitpicker::Root : public Genode::Rpc_object