wm: propagate nitpicker mode changes to layouter

This commit is contained in:
Norman Feske 2016-01-29 12:12:43 +01:00
parent 752ddc153e
commit 31888c610a
2 changed files with 23 additions and 10 deletions

View File

@ -17,6 +17,7 @@
/* Genode includes */
#include <os/server.h>
#include <input/component.h>
#include <nitpicker_session/connection.h>
namespace Wm { using Server::Entrypoint; }
@ -34,17 +35,21 @@ struct Wm::Layouter_nitpicker_session : Genode::Rpc_object<Nitpicker::Session>
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<Nitpicker::Session>
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 { }

View File

@ -1163,8 +1163,7 @@ class Wm::Nitpicker::Root : public Genode::Rpc_object<Genode::Typed_root<Session
{
_layouter_session = new (_md_alloc)
Layouter_nitpicker_session(*Genode::env()->ram_session(),
_window_layouter_input_cap,
_focus_nitpicker_session.mode());
_window_layouter_input_cap);
return _ep.manage(*_layouter_session);
}