From 31888c610a3801b897752ff0fc1706e24a0b48fb Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Fri, 29 Jan 2016 12:12:43 +0100 Subject: [PATCH] wm: propagate nitpicker mode changes to layouter --- repos/gems/src/server/wm/layouter_nitpicker.h | 30 ++++++++++++++----- repos/gems/src/server/wm/nitpicker.h | 3 +- 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/repos/gems/src/server/wm/layouter_nitpicker.h b/repos/gems/src/server/wm/layouter_nitpicker.h index 6b8cbf0cc..b9e1b8912 100644 --- a/repos/gems/src/server/wm/layouter_nitpicker.h +++ b/repos/gems/src/server/wm/layouter_nitpicker.h @@ -17,6 +17,7 @@ /* Genode includes */ #include #include +#include namespace Wm { using Server::Entrypoint; } @@ -34,17 +35,21 @@ struct Wm::Layouter_nitpicker_session : Genode::Rpc_object Input::Session_capability _input_session_cap; + /* + * Nitpicker session solely used to supply the nitpicker mode to the + * layouter + */ + Nitpicker::Connection _mode_sigh_nitpicker; + + Genode::Signal_context_capability _mode_sigh; + Attached_ram_dataspace _command_ds; - Framebuffer::Mode const _mode; - Layouter_nitpicker_session(Genode::Ram_session &ram, - Input::Session_capability input_session_cap, - Framebuffer::Mode mode) + Input::Session_capability input_session_cap) : _input_session_cap(input_session_cap), - _command_ds(&ram, 4096), - _mode(mode) + _command_ds(&ram, 4096) { } @@ -85,9 +90,18 @@ struct Wm::Layouter_nitpicker_session : Genode::Rpc_object void execute() override { } - Framebuffer::Mode mode() override { return _mode; } + Framebuffer::Mode mode() override { return _mode_sigh_nitpicker.mode(); } - void mode_sigh(Genode::Signal_context_capability) override { } + void mode_sigh(Genode::Signal_context_capability sigh) override + { + /* + * Remember signal-context capability to keep NOVA from revoking + * transitive delegations of the capability. + */ + _mode_sigh = sigh; + + _mode_sigh_nitpicker.mode_sigh(sigh); + } void buffer(Framebuffer::Mode, bool) override { } diff --git a/repos/gems/src/server/wm/nitpicker.h b/repos/gems/src/server/wm/nitpicker.h index 07efec35d..f86b9def3 100644 --- a/repos/gems/src/server/wm/nitpicker.h +++ b/repos/gems/src/server/wm/nitpicker.h @@ -1163,8 +1163,7 @@ class Wm::Nitpicker::Root : public Genode::Rpc_objectram_session(), - _window_layouter_input_cap, - _focus_nitpicker_session.mode()); + _window_layouter_input_cap); return _ep.manage(*_layouter_session); }