nitpicker: change to component API

Issue #1987
This commit is contained in:
Norman Feske 2016-07-13 16:30:38 +02:00
parent b85fdd828a
commit 11c5bf28c9
7 changed files with 138 additions and 139 deletions

View File

@ -125,7 +125,7 @@ class Domain_registry
if (value == "no") return Entry::LABEL_NO;
if (value == "yes") return Entry::LABEL_YES;
PWRN("invalid value of label attribute in <domain>");
Genode::warning("invalid value of label attribute in <domain>");
return Entry::LABEL_YES;
}
@ -148,7 +148,7 @@ class Domain_registry
if (value == "focused") return Entry::HOVER_FOCUSED;
if (value == "always") return Entry::HOVER_ALWAYS;
PWRN("invalid value of hover attribute in <domain>");
Genode::warning("invalid value of hover attribute in <domain>");
return Entry::HOVER_FOCUSED;
}
@ -161,7 +161,7 @@ class Domain_registry
if (value == "click") return Entry::FOCUS_CLICK;
if (value == "transient") return Entry::FOCUS_TRANSIENT;
PWRN("invalid value of focus attribute in <domain>");
Genode::warning("invalid value of focus attribute in <domain>");
return Entry::FOCUS_NONE;
}
@ -176,7 +176,7 @@ class Domain_registry
if (value == "bottom_right") return Entry::ORIGIN_BOTTOM_RIGHT;
if (value == "pointer") return Entry::ORIGIN_POINTER;
PWRN("invalid value of origin attribute in <domain>");
Genode::warning("invalid value of origin attribute in <domain>");
return Entry::ORIGIN_BOTTOM_LEFT;
}
@ -191,19 +191,19 @@ class Domain_registry
} catch (...) { }
if (!name_defined) {
PERR("no valid domain name specified");
Genode::error("no valid domain name specified");
return;
}
Entry::Name const name(buf);
if (lookup(name)) {
PERR("domain name \"%s\" is not unique", name.string());
Genode::error("domain name \"", name, "\" is not unique");
return;
}
if (!domain.has_attribute("layer")) {
PERR("no layer specified for domain \"%s\"", name.string());
Genode::error("no layer specified for domain \"", name, "\"");
return;
}

View File

@ -11,9 +11,6 @@
* under the terms of the GNU General Public License version 2.
*/
/* Genode includes */
#include <os/config.h>
/* local includes */
#include "global_keys.h"
@ -28,30 +25,28 @@ Global_keys::Policy *Global_keys::_lookup_policy(char const *key_name)
}
void Global_keys::apply_config(Session_list &session_list)
void Global_keys::apply_config(Xml_node config, Session_list &session_list)
{
for (unsigned i = 0; i < NUM_POLICIES; i++)
_policies[i] = Policy();
char const *node_type = "global-key";
using Genode::Xml_node;
try {
Xml_node node = Genode::config()->xml_node().sub_node(node_type);
Xml_node node = config.sub_node(node_type);
for (; ; node = node.next(node_type)) {
if (!node.has_attribute("name")) {
PWRN("attribute 'name' missing in <global-key> config node");
Genode::warning("attribute 'name' missing in <global-key> config node");
continue;
}
char name[32]; name[0] = 0;
node.attribute("name").value(name, sizeof(name));
Policy * policy = _lookup_policy(name);
typedef Genode::String<32> Name;
Name name = node.attribute_value("name", Name());
Policy * policy = _lookup_policy(name.string());
if (!policy) {
PWRN("invalid key name \"%s\"", name);
Genode::warning("invalid key name \"", name, "\"");
continue;
}
@ -60,7 +55,7 @@ void Global_keys::apply_config(Session_list &session_list)
continue;
if (!node.has_attribute("label")) {
PWRN("missing 'label' attribute for key %s", name);
Genode::warning("missing 'label' attribute for key ", name);
continue;
}

View File

@ -16,6 +16,7 @@
/* Genode includes */
#include <input/keycodes.h>
#include <util/xml_node.h>
/* local includes */
#include "session.h"
@ -24,6 +25,8 @@ class Global_keys
{
private:
typedef Genode::Xml_node Xml_node;
struct Policy
{
Session *_session = nullptr;
@ -50,7 +53,7 @@ class Global_keys
Session *global_receiver(Input::Keycode key) {
return _valid(key) ? _policies[key]._session : 0; }
void apply_config(Session_list &session_list);
void apply_config(Xml_node config, Session_list &session_list);
};
#endif /* _GLOBAL_KEYS_H_ */

View File

@ -12,11 +12,12 @@
*/
/* Genode includes */
#include <base/env.h>
#include <base/sleep.h>
#include <base/printf.h>
#include <base/log.h>
#include <base/component.h>
#include <base/allocator_guard.h>
#include <os/attached_ram_dataspace.h>
#include <base/attached_ram_dataspace.h>
#include <base/attached_rom_dataspace.h>
#include <input/event.h>
#include <input/keycodes.h>
#include <root/component.h>
@ -29,7 +30,6 @@
#include <util/color.h>
#include <os/pixel_rgb565.h>
#include <os/session_policy.h>
#include <os/server.h>
#include <os/reporter.h>
/* local includes */
@ -50,20 +50,20 @@ namespace Nitpicker {
using Genode::size_t;
using Genode::Allocator;
using Genode::Rpc_entrypoint;
using Genode::Entrypoint;
using Genode::List;
using Genode::Pixel_rgb565;
using Genode::strcmp;
using Genode::config;
using Genode::env;
using Genode::Env;
using Genode::Arg_string;
using Genode::Object_pool;
using Genode::Dataspace_capability;
using Genode::Session_label;
using Genode::Signal_transmitter;
using Genode::Signal_context_capability;
using Genode::Signal_rpc_member;
using Genode::Signal_handler;
using Genode::Attached_ram_dataspace;
using Genode::Attached_rom_dataspace;
using Genode::Attached_dataspace;
using Genode::Weak_ptr;
using Genode::Locked_ptr;
@ -131,10 +131,10 @@ class Buffer
* \throw Ram_session::Alloc_failed
* \throw Rm_session::Attach_failed
*/
Buffer(Area size, Framebuffer::Mode::Format format, Genode::size_t bytes)
Buffer(Genode::Ram_session &ram, Genode::Region_map &rm,
Area size, Framebuffer::Mode::Format format, Genode::size_t bytes)
:
_size(size), _format(format),
_ram_ds(env()->ram_session(), bytes)
_size(size), _format(format), _ram_ds(ram, rm, bytes)
{ }
/**
@ -184,9 +184,10 @@ class Chunky_dataspace_texture : public Buffer,
/**
* Constructor
*/
Chunky_dataspace_texture(Area size, bool use_alpha)
Chunky_dataspace_texture(Genode::Ram_session &ram, Genode::Region_map &rm,
Area size, bool use_alpha)
:
Buffer(size, _format(), calc_num_bytes(size, use_alpha)),
Buffer(ram, rm, size, _format(), calc_num_bytes(size, use_alpha)),
Texture<PT>((PT *)local_addr(),
_alpha_base(size, use_alpha), size) { }
@ -233,7 +234,7 @@ class Input::Session_component : public Genode::Rpc_object<Session>
/*
* Exported event buffer dataspace
*/
Attached_ram_dataspace _ev_ram_ds = { env()->ram_session(), ev_ds_size() };
Attached_ram_dataspace _ev_ram_ds;
/*
* Local event buffer that is copied
@ -247,6 +248,11 @@ class Input::Session_component : public Genode::Rpc_object<Session>
public:
Session_component(Genode::Env &env)
:
_ev_ram_ds(env.ram(), env.rm(), ev_ds_size())
{ }
/**
* Wake up client
*/
@ -402,6 +408,8 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
typedef ::View View;
Env &_env;
Genode::Allocator_guard _session_alloc;
Framebuffer::Session &_framebuffer;
@ -410,13 +418,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
Framebuffer::Session_component _framebuffer_session_component;
/* Input_session_component */
Input::Session_component _input_session_component;
/*
* Entrypoint that is used for the views, input session,
* and framebuffer session.
*/
Rpc_entrypoint &_ep;
Input::Session_component _input_session_component { _env };
View_stack &_view_stack;
@ -439,7 +441,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
/* size of currently allocated virtual framebuffer, in bytes */
size_t _buffer_size = 0;
Attached_ram_dataspace _command_ds { env()->ram_session(),
Attached_ram_dataspace _command_ds { _env.ram(), _env.rm(),
sizeof(Command_buffer) };
Command_buffer &_command_buffer = *_command_ds.local_addr<Command_buffer>();
@ -646,7 +648,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
void _destroy_view(View &view)
{
_view_stack.remove_view(view);
_ep.dissolve(&view);
_env.ep().dissolve(view);
_view_list.remove(&view);
destroy(_view_alloc, &view);
}
@ -656,11 +658,11 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
/**
* Constructor
*/
Session_component(Session_label const &label,
Session_component(Env &env,
Session_label const &label,
View_stack &view_stack,
Mode &mode,
View &pointer_origin,
Rpc_entrypoint &ep,
Framebuffer::Session &framebuffer,
bool provides_default_bg,
Allocator &session_alloc,
@ -668,13 +670,14 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
Genode::Reporter &focus_reporter)
:
::Session(label),
_env(env),
_session_alloc(&session_alloc, ram_quota),
_framebuffer(framebuffer),
_framebuffer_session_component(view_stack, *this, framebuffer, *this),
_ep(ep), _view_stack(view_stack), _mode(mode),
_view_stack(view_stack), _mode(mode),
_pointer_origin(pointer_origin),
_framebuffer_session_cap(_ep.manage(&_framebuffer_session_component)),
_input_session_cap(_ep.manage(&_input_session_component)),
_framebuffer_session_cap(_env.ep().manage(_framebuffer_session_component)),
_input_session_cap(_env.ep().manage(_input_session_component)),
_provides_default_bg(provides_default_bg),
_view_handle_registry(_session_alloc),
_focus_reporter(focus_reporter)
@ -687,8 +690,8 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
*/
~Session_component()
{
_ep.dissolve(&_framebuffer_session_component);
_ep.dissolve(&_input_session_component);
_env.ep().dissolve(_framebuffer_session_component);
_env.ep().dissolve(_input_session_component);
destroy_all_views();
@ -799,7 +802,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
view->apply_origin_policy(_pointer_origin);
_view_list.insert(view);
_ep.manage(view);
_env.ep().manage(*view);
try { return _view_handle_registry.alloc(*view); }
catch (View_handle_registry::Out_of_memory) {
@ -840,7 +843,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
: View_handle();
};
try { return _ep.apply(view_cap, lambda); }
try { return _env.ep().rpc_ep().apply(view_cap, lambda); }
catch (View_handle_registry::Out_of_memory) {
throw Nitpicker::Session::Out_of_metadata(); }
}
@ -862,7 +865,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
_view_handle_registry.free(handle); }
catch (View_handle_registry::Lookup_failed) {
PWRN("view lookup failed while releasing view handle");
Genode::warning("view lookup failed while releasing view handle");
return;
}
}
@ -878,7 +881,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
try {
_execute_command(_command_buffer.get(i)); }
catch (View_handle_registry::Lookup_failed) {
PWRN("view lookup failed during command execution"); }
Genode::warning("view lookup failed during command execution"); }
}
}
@ -911,7 +914,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
{
/* check permission by comparing session labels */
if (!_focus_change_permitted()) {
PWRN("unauthorized focus change requesed by %s", label().string());
Genode::warning("unauthorized focus change requesed by ", label().string());
return;
}
@ -920,7 +923,7 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
{
_mode.next_focused_session(session);
};
_ep.apply(session_cap, lambda);
_env.ep().rpc_ep().apply(session_cap, lambda);
/*
* To avoid changing the focus in the middle of a drag operation,
@ -968,16 +971,16 @@ class Nitpicker::Session_component : public Genode::Rpc_object<Session>,
if (::Session::texture()) {
enum { PRESERVED_RAM = 128*1024 };
if (env()->ram_session()->avail() > _buffer_size + PRESERVED_RAM) {
if (_env.ram().avail() > _buffer_size + PRESERVED_RAM) {
src_texture = static_cast<Texture<PT> const *>(::Session::texture());
} else {
PWRN("not enough RAM to preserve buffer content during resize");
Genode::warning("not enough RAM to preserve buffer content during resize");
_release_buffer();
}
}
Chunky_dataspace_texture<PT> * const texture =
new (&_session_alloc) Chunky_dataspace_texture<PT>(size, use_alpha);
Chunky_dataspace_texture<PT> * const texture = new (&_session_alloc)
Chunky_dataspace_texture<PT>(_env.ram(), _env.rm(), size, use_alpha);
/* copy old buffer content into new buffer and release old buffer */
if (src_texture) {
@ -1009,29 +1012,30 @@ class Nitpicker::Root : public Genode::Root_component<Session_component>
{
private:
Session_list &_session_list;
Domain_registry const &_domain_registry;
Global_keys &_global_keys;
Framebuffer::Mode _scr_mode;
View_stack &_view_stack;
Mode &_mode;
::View &_pointer_origin;
Framebuffer::Session &_framebuffer;
Genode::Reporter &_focus_reporter;
Env &_env;
Attached_rom_dataspace const &_config;
Session_list &_session_list;
Domain_registry const &_domain_registry;
Global_keys &_global_keys;
Framebuffer::Mode _scr_mode;
View_stack &_view_stack;
Mode &_mode;
::View &_pointer_origin;
Framebuffer::Session &_framebuffer;
Genode::Reporter &_focus_reporter;
protected:
Session_component *_create_session(const char *args)
{
PINF("create session with args: %s\n", args);
size_t const ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0);
size_t const required_quota = Input::Session_component::ev_ds_size()
+ Genode::align_addr(sizeof(Session::Command_buffer), 12);
if (ram_quota < required_quota) {
PWRN("Insufficient dontated ram_quota (%zd bytes), require %zd bytes",
ram_quota, required_quota);
Genode::warning("Insufficient dontated ram_quota (", ram_quota,
" bytes), require ", required_quota, " bytes");
throw Root::Quota_exceeded();
}
@ -1041,14 +1045,14 @@ class Nitpicker::Root : public Genode::Root_component<Session_component>
bool const provides_default_bg = (label == "backdrop");
Session_component *session = new (md_alloc())
Session_component(label, _view_stack, _mode,
_pointer_origin, *ep(), _framebuffer,
Session_component(_env, label, _view_stack, _mode,
_pointer_origin, _framebuffer,
provides_default_bg, *md_alloc(), unused_quota,
_focus_reporter);
session->apply_session_policy(_domain_registry);
session->apply_session_policy(_config.xml(), _domain_registry);
_session_list.insert(session);
_global_keys.apply_config(_session_list);
_global_keys.apply_config(_config.xml(), _session_list);
return session;
}
@ -1062,7 +1066,7 @@ class Nitpicker::Root : public Genode::Root_component<Session_component>
void _destroy_session(Session_component *session)
{
_session_list.remove(session);
_global_keys.apply_config(_session_list);
_global_keys.apply_config(_config.xml(), _session_list);
session->destroy_all_views();
_mode.forget(*session);
@ -1075,13 +1079,14 @@ class Nitpicker::Root : public Genode::Root_component<Session_component>
/**
* Constructor
*/
Root(Session_list &session_list,
Domain_registry const &domain_registry, Global_keys &global_keys,
Rpc_entrypoint &session_ep, View_stack &view_stack, Mode &mode,
Root(Env &env, Attached_rom_dataspace const &config,
Session_list &session_list, Domain_registry const &domain_registry,
Global_keys &global_keys, View_stack &view_stack, Mode &mode,
::View &pointer_origin, Allocator &md_alloc,
Framebuffer::Session &framebuffer, Genode::Reporter &focus_reporter)
:
Root_component<Session_component>(&session_ep, &md_alloc),
Root_component<Session_component>(&env.ep().rpc_ep(), &md_alloc),
_env(env), _config(config),
_session_list(session_list), _domain_registry(domain_registry),
_global_keys(global_keys), _view_stack(view_stack), _mode(mode),
_pointer_origin(pointer_origin), _framebuffer(framebuffer),
@ -1092,7 +1097,7 @@ class Nitpicker::Root : public Genode::Root_component<Session_component>
struct Nitpicker::Main
{
Server::Entrypoint &ep;
Env &env;
/*
* Sessions to the required external services
@ -1100,8 +1105,7 @@ struct Nitpicker::Main
Framebuffer::Connection framebuffer;
Input::Connection input;
Input::Event * const ev_buf =
env()->rm_session()->attach(input.dataspace());
Input::Event * const ev_buf = env.rm().attach(input.dataspace());
typedef Pixel_rgb565 PT; /* physical pixel type */
@ -1129,9 +1133,9 @@ struct Nitpicker::Main
Genode::Volatile_object<Framebuffer_screen> fb_screen = { framebuffer };
void handle_fb_mode(unsigned);
void handle_fb_mode();
Signal_rpc_member<Main> fb_mode_dispatcher = { ep, *this, &Main::handle_fb_mode };
Signal_handler<Main> fb_mode_handler = { env.ep(), *this, &Main::handle_fb_mode };
/*
* User-input policy
@ -1144,8 +1148,9 @@ struct Nitpicker::Main
* Construct empty domain registry. The initial version will be replaced
* on the first call of 'handle_config'.
*/
Genode::Heap domain_registry_heap { env.ram(), env.rm() };
Genode::Volatile_object<Domain_registry> domain_registry {
*env()->heap(), Genode::Xml_node("<config/>") };
domain_registry_heap, Genode::Xml_node("<config/>") };
User_state user_state = { global_keys, fb_screen->screen.size() };
@ -1159,33 +1164,35 @@ struct Nitpicker::Main
/*
* Initialize Nitpicker root interface
*/
Genode::Sliced_heap sliced_heap = { env()->ram_session(), env()->rm_session() };
Genode::Sliced_heap sliced_heap { env.ram(), env.rm() };
Genode::Reporter pointer_reporter = { "pointer" };
Genode::Reporter hover_reporter = { "hover" };
Genode::Reporter focus_reporter = { "focus" };
Root<PT> np_root = { session_list, *domain_registry, global_keys,
ep.rpc_ep(), user_state, user_state, pointer_origin,
Genode::Attached_rom_dataspace config { env, "config" };
Root<PT> np_root = { env, config, session_list, *domain_registry,
global_keys, user_state, user_state, pointer_origin,
sliced_heap, framebuffer, focus_reporter };
/*
* Configuration-update dispatcher, executed in the context of the RPC
* Configuration-update handler, executed in the context of the RPC
* entrypoint.
*
* In addition to installing the signal dispatcher, we trigger first signal
* In addition to installing the signal handler, we trigger first signal
* manually to turn the initial configuration into effect.
*/
void handle_config(unsigned);
void handle_config();
Signal_rpc_member<Main> config_dispatcher = { ep, *this, &Main::handle_config};
Signal_handler<Main> config_handler = { env.ep(), *this, &Main::handle_config};
/**
* Signal handler invoked on the reception of user input
*/
void handle_input(unsigned);
void handle_input();
Signal_rpc_member<Main> input_dispatcher = { ep, *this, &Main::handle_input };
Signal_handler<Main> input_handler = { env.ep(), *this, &Main::handle_input };
/*
* Dispatch input and redraw periodically
@ -1226,24 +1233,24 @@ struct Nitpicker::Main
rect.w(), rect.h()); });
}
Main(Server::Entrypoint &ep) : ep(ep)
Main(Env &env) : env(env)
{
user_state.default_background(background);
user_state.stack(pointer_origin);
user_state.stack(background);
config()->sigh(config_dispatcher);
handle_config(0);
config.sigh(config_handler);
handle_config();
framebuffer.sync_sigh(input_dispatcher);
framebuffer.mode_sigh(fb_mode_dispatcher);
framebuffer.sync_sigh(input_handler);
framebuffer.mode_sigh(fb_mode_handler);
env()->parent()->announce(ep.manage(np_root));
env.parent().announce(env.ep().manage(np_root));
}
};
void Nitpicker::Main::handle_input(unsigned)
void Nitpicker::Main::handle_input()
{
period_cnt++;
@ -1312,50 +1319,49 @@ void Nitpicker::Main::handle_input(unsigned)
/**
* Helper function for 'handle_config'
*/
static void configure_reporter(Genode::Reporter &reporter)
static void configure_reporter(Genode::Xml_node config, Genode::Reporter &reporter)
{
try {
Genode::Xml_node config_xml = Genode::config()->xml_node();
reporter.enabled(config_xml.sub_node("report")
.attribute_value(reporter.name().string(), false));
reporter.enabled(config.sub_node("report")
.attribute_value(reporter.name().string(), false));
} catch (...) {
reporter.enabled(false);
}
}
void Nitpicker::Main::handle_config(unsigned)
void Nitpicker::Main::handle_config()
{
config()->reload();
config.update();
/* update global keys policy */
global_keys.apply_config(session_list);
global_keys.apply_config(config.xml(), session_list);
/* update background color */
try {
config()->xml_node().sub_node("background")
config.xml().sub_node("background")
.attribute("color").value(&background.color);
} catch (...) { }
/* enable or disable redraw debug mode */
tmp_fb = config()->xml_node().attribute_value("flash", false)
tmp_fb = config.xml().attribute_value("flash", false)
? &framebuffer
: nullptr;
configure_reporter(pointer_reporter);
configure_reporter(hover_reporter);
configure_reporter(focus_reporter);
configure_reporter(config.xml(), pointer_reporter);
configure_reporter(config.xml(), hover_reporter);
configure_reporter(config.xml(), focus_reporter);
/* update domain registry and session policies */
for (::Session *s = session_list.first(); s; s = s->next())
s->reset_domain();
try {
domain_registry.construct(*env()->heap(), config()->xml_node()); }
domain_registry.construct(domain_registry_heap, config.xml()); }
catch (...) { }
for (::Session *s = session_list.first(); s; s = s->next())
s->apply_session_policy(*domain_registry);
s->apply_session_policy(config.xml(), *domain_registry);
user_state.apply_origin_policy(pointer_origin);
@ -1370,7 +1376,7 @@ void Nitpicker::Main::handle_config(unsigned)
}
void Nitpicker::Main::handle_fb_mode(unsigned)
void Nitpicker::Main::handle_fb_mode()
{
/* reconstruct framebuffer screen and menu bar */
fb_screen.construct(framebuffer);
@ -1390,18 +1396,13 @@ void Nitpicker::Main::handle_fb_mode(unsigned)
}
/************
** Server **
************/
/***************
** Component **
***************/
namespace Server {
namespace Component {
char const *name() { return "nitpicker_ep"; }
Genode::size_t stack_size() { return 4*1024*sizeof(long); }
size_t stack_size() { return 4*1024*sizeof(long); }
void construct(Entrypoint &ep)
{
static Nitpicker::Main nitpicker(ep);
}
void construct(Genode::Env &env) { static Nitpicker::Main nitpicker(env); }
}

View File

@ -196,17 +196,17 @@ class Session : public Session_list::Element
* Select the policy that matches the label. If multiple policies
* match, select the one with the largest number of characters.
*/
void apply_session_policy(Domain_registry const &domain_registry)
void apply_session_policy(Genode::Xml_node config,
Domain_registry const &domain_registry)
{
reset_domain();
try {
Genode::Session_policy policy(_label);
Genode::Session_policy policy(_label, config);
/* read domain attribute */
if (!policy.has_attribute("domain")) {
PERR("policy for label \"%s\" lacks domain declaration",
_label.string());
Genode::error("policy for label \"", _label, "\" lacks domain declaration");
return;
}
@ -221,10 +221,11 @@ class Session : public Session_list::Element
_domain = domain_registry.lookup(name);
if (!_domain)
PERR("policy for label \"%s\" specifies nonexistent domain \"%s\"",
_label.string(), name.string());
Genode::error("policy for label \"", _label,
"\" specifies nonexistent domain \"", name, "\"");
} catch (...) { PERR("no policy matching label \"%s\"", _label.string()); }
} catch (...) {
Genode::error("no policy matching label \"", _label, "\""); }
}
};

View File

@ -1,5 +1,5 @@
TARGET = nitpicker
LIBS = base blit config server
LIBS = base blit
SRC_CC = main.cc \
view_stack.cc \
view.cc \

View File

@ -11,7 +11,6 @@
* under the terms of the GNU General Public License version 2.
*/
#include <base/printf.h>
#include <os/pixel_rgb565.h>
#include <nitpicker_gfx/texture_painter.h>