diff --git a/repos/demo/include/launchpad/launchpad.h b/repos/demo/include/launchpad/launchpad.h
index 05206e2952..f73e2c6532 100644
--- a/repos/demo/include/launchpad/launchpad.h
+++ b/repos/demo/include/launchpad/launchpad.h
@@ -231,7 +231,7 @@ class Launchpad
/**
* Process launchpad XML configuration
*/
- void process_config();
+ void process_config(Genode::Xml_node);
/*************************
diff --git a/repos/demo/src/app/launchpad/main.cc b/repos/demo/src/app/launchpad/main.cc
index 8411d1bb9d..bbd7b42b20 100644
--- a/repos/demo/src/app/launchpad/main.cc
+++ b/repos/demo/src/app/launchpad/main.cc
@@ -12,6 +12,7 @@
*/
#include
+#include
#include
#include
@@ -25,7 +26,6 @@
#include
#include
-#include
/**
@@ -77,16 +77,6 @@ class Avail_quota_update : public Scout::Tick
};
-static long read_int_attr_from_config(const char *attr, long default_value)
-{
- long result = default_value;
- try {
- Genode::config()->xml_node().attribute(attr).value(&result);
- } catch (...) { }
- return result;
-}
-
-
struct Main : Scout::Event_handler
{
Scout::Platform &_pf;
@@ -134,10 +124,12 @@ void Component::construct(Genode::Env &env)
static Nitpicker::Connection nitpicker(env);
static Platform pf(env, *nitpicker.input());
- long initial_x = read_int_attr_from_config("xpos", 550);
- long initial_y = read_int_attr_from_config("ypos", 150);
- long initial_w = read_int_attr_from_config("width", 400);
- long initial_h = read_int_attr_from_config("height", 400);
+ static Genode::Attached_rom_dataspace config(env, "config");
+
+ long const initial_x = config.xml().attribute_value("xpos", 550U);
+ long const initial_y = config.xml().attribute_value("ypos", 150U);
+ long const initial_w = config.xml().attribute_value("width", 400U);
+ long const initial_h = config.xml().attribute_value("height", 400U);
Area const max_size (530, 620);
Point const initial_position(initial_x, initial_y);
@@ -152,7 +144,7 @@ void Component::construct(Genode::Env &env)
max_size, env.ram().avail());
/* request config file from ROM service */
- try { launchpad.process_config(); } catch (...) { }
+ try { launchpad.process_config(config.xml()); } catch (...) { }
static Avail_quota_update avail_quota_update(&launchpad);
diff --git a/repos/demo/src/app/launchpad/target.mk b/repos/demo/src/app/launchpad/target.mk
index 4cecb63cf9..c74722f490 100644
--- a/repos/demo/src/app/launchpad/target.mk
+++ b/repos/demo/src/app/launchpad/target.mk
@@ -1,5 +1,5 @@
TARGET = launchpad
-LIBS = launchpad scout_widgets config
+LIBS = launchpad scout_widgets
SRC_CC = launchpad_window.cc \
launcher.cc \
main.cc
diff --git a/repos/demo/src/app/scout/target.mk b/repos/demo/src/app/scout/target.mk
index ed38c6b9df..ae9286507d 100644
--- a/repos/demo/src/app/scout/target.mk
+++ b/repos/demo/src/app/scout/target.mk
@@ -1,5 +1,5 @@
TARGET = scout
-LIBS = libpng_static libz_static mini_c launchpad scout_widgets config
+LIBS = libpng_static libz_static mini_c launchpad scout_widgets
SRC_CC = main.cc doc.cc \
browser_window.cc png_image.cc \
navbar.cc about.cc \
diff --git a/repos/demo/src/lib/launchpad/launchpad.cc b/repos/demo/src/lib/launchpad/launchpad.cc
index 87e463af08..599abed1af 100644
--- a/repos/demo/src/lib/launchpad/launchpad.cc
+++ b/repos/demo/src/lib/launchpad/launchpad.cc
@@ -17,7 +17,6 @@
#include
#include
#include
-#include
#include
using namespace Genode;
@@ -91,12 +90,10 @@ Launchpad::_get_unique_child_name(Launchpad_child::Name const &binary_name)
/**
* Process launchpad XML configuration
*/
-void Launchpad::process_config()
+void Launchpad::process_config(Genode::Xml_node config_node)
{
using namespace Genode;
- Xml_node config_node = config()->xml_node();
-
/*
* Iterate through all entries of the config file and create
* launchpad entries as specified.
diff --git a/repos/gems/include/nano3d/scene.h b/repos/gems/include/nano3d/scene.h
index 467cba4c8e..a00485ee1b 100644
--- a/repos/gems/include/nano3d/scene.h
+++ b/repos/gems/include/nano3d/scene.h
@@ -20,6 +20,7 @@
#define _INCLUDE__NANO3D__SCENE_H_
/* Genode includes */
+#include
#include
#include
#include
@@ -54,7 +55,7 @@ class Nano3d::Scene
private:
- Genode::Signal_receiver &_sig_rec;
+ Genode::Env &_env;
/**
* Position and size of nitpicker view
@@ -62,7 +63,7 @@ class Nano3d::Scene
Nitpicker::Point const _pos;
Nitpicker::Area const _size;
- Nitpicker::Connection _nitpicker;
+ Nitpicker::Connection _nitpicker { _env };
struct Mapped_framebuffer
{
@@ -186,28 +187,28 @@ class Nano3d::Scene
bool _do_sync = false;
- Timer::Connection _timer;
+ Timer::Connection _timer { _env };
Genode::Attached_dataspace _input_ds { _nitpicker.input()->dataspace() };
- Input_handler *_input_handler = nullptr;
+ Input_handler *_input_handler_callback = nullptr;
- void _handle_input(unsigned)
+ void _handle_input()
{
- if (!_input_handler)
+ if (!_input_handler_callback)
return;
while (int num = _nitpicker.input()->flush()) {
auto const *ev_buf = _input_ds.local_addr();
- if (_input_handler)
- _input_handler->handle_input(ev_buf, num);
+ if (_input_handler_callback)
+ _input_handler_callback->handle_input(ev_buf, num);
}
}
- Genode::Signal_dispatcher _input_dispatcher {
- _sig_rec, *this, &Scene::_handle_input };
+ Genode::Signal_handler _input_handler {
+ _env.ep(), *this, &Scene::_handle_input };
void _swap_back_and_front_surfaces()
{
@@ -223,7 +224,7 @@ class Nano3d::Scene
_surface_front = tmp;
}
- void _handle_period(unsigned)
+ void _handle_period()
{
if (_do_sync)
return;
@@ -238,10 +239,10 @@ class Nano3d::Scene
_do_sync = true;
}
- Genode::Signal_dispatcher _periodic_dispatcher {
- _sig_rec, *this, &Scene::_handle_period };
+ Genode::Signal_handler _periodic_handler {
+ _env.ep(), *this, &Scene::_handle_period };
- void _handle_sync(unsigned)
+ void _handle_sync()
{
/* rendering of scene is not complete, yet */
if (!_do_sync)
@@ -263,42 +264,29 @@ class Nano3d::Scene
_do_sync = false;
}
- Genode::Signal_dispatcher _sync_dispatcher {
- _sig_rec, *this, &Scene::_handle_sync };
+ Genode::Signal_handler _sync_handler {
+ _env.ep(), *this, &Scene::_handle_sync };
typedef Nitpicker::Session::Command Command;
public:
- Scene(Genode::Signal_receiver &sig_rec, unsigned update_rate_ms,
+ Scene(Genode::Env &env, unsigned update_rate_ms,
Nitpicker::Point pos, Nitpicker::Area size)
:
- _sig_rec(sig_rec), _pos(pos), _size(size)
+ _env(env), _pos(pos), _size(size)
{
Nitpicker::Rect rect(_pos, _size);
_nitpicker.enqueue(_view_handle, rect);
_nitpicker.enqueue(_view_handle);
_nitpicker.execute();
- _nitpicker.input()->sigh(_input_dispatcher);
+ _nitpicker.input()->sigh(_input_handler);
- _timer.sigh(_periodic_dispatcher);
+ _timer.sigh(_periodic_handler);
_timer.trigger_periodic(1000*update_rate_ms);
- _framebuffer.framebuffer.sync_sigh(_sync_dispatcher);
- }
-
- static void dispatch_signals_loop(Genode::Signal_receiver &sig_rec)
- {
- while (1) {
-
- Genode::Signal signal = sig_rec.wait_for_signal();
-
- Genode::Signal_dispatcher_base *dispatcher =
- static_cast(signal.context());
-
- dispatcher->dispatch(signal.num());
- }
+ _framebuffer.framebuffer.sync_sigh(_sync_handler);
}
unsigned long elapsed_ms() const { return _timer.elapsed_ms(); }
@@ -306,7 +294,7 @@ class Nano3d::Scene
void input_handler(Input_handler *input_handler)
{
_framebuffer.input_mask(input_handler ? true : false);
- _input_handler = input_handler;
+ _input_handler_callback = input_handler;
}
};
diff --git a/repos/gems/src/app/cpu_load_display/main.cc b/repos/gems/src/app/cpu_load_display/main.cc
index 742fb2ce2b..24a54ce771 100644
--- a/repos/gems/src/app/cpu_load_display/main.cc
+++ b/repos/gems/src/app/cpu_load_display/main.cc
@@ -12,7 +12,7 @@
*/
/* Genode includes */
-#include
+#include
#include
#include
#include
@@ -274,14 +274,15 @@ class Cpu_load_display::Scene : public Nano3d::Scene
{
private:
+ Genode::Env &_env;
+
Nitpicker::Area const _size;
- void _handle_config(unsigned)
- {
- Genode::config()->reload();
- }
+ Genode::Attached_rom_dataspace _config { _env, "config" };
- Genode::Signal_dispatcher _config_dispatcher;
+ void _handle_config() { _config.update(); }
+
+ Genode::Signal_handler _config_handler;
Genode::Attached_rom_dataspace _trace_subjects { "trace_subjects" };
@@ -289,7 +290,7 @@ class Cpu_load_display::Scene : public Nano3d::Scene
Cpu_registry _cpu_registry;
- void _handle_trace_subjects(unsigned)
+ void _handle_trace_subjects()
{
_trace_subjects.update();
@@ -304,21 +305,22 @@ class Cpu_load_display::Scene : public Nano3d::Scene
} catch (...) { Genode::error("failed to import trace subjects"); }
}
- Genode::Signal_dispatcher _trace_subjects_dispatcher;
+ Genode::Signal_handler _trace_subjects_handler;
public:
- Scene(Genode::Signal_receiver &sig_rec, unsigned update_rate_ms,
+ Scene(Genode::Env &env, unsigned update_rate_ms,
Nitpicker::Point pos, Nitpicker::Area size)
:
- Nano3d::Scene(sig_rec, update_rate_ms, pos, size), _size(size),
- _config_dispatcher(sig_rec, *this, &Scene::_handle_config),
- _trace_subjects_dispatcher(sig_rec, *this, &Scene::_handle_trace_subjects)
+ Nano3d::Scene(env, update_rate_ms, pos, size),
+ _env(env), _size(size),
+ _config_handler(env.ep(), *this, &Scene::_handle_config),
+ _trace_subjects_handler(env.ep(), *this, &Scene::_handle_trace_subjects)
{
- Genode::config()->sigh(_config_dispatcher);
- _handle_config(0);
+ _config.sigh(_config_handler);
+ _handle_config();
- _trace_subjects.sigh(_trace_subjects_dispatcher);
+ _trace_subjects.sigh(_trace_subjects_handler);
}
private:
@@ -456,17 +458,11 @@ class Cpu_load_display::Scene : public Nano3d::Scene
};
-int main(int argc, char **argv)
+void Component::construct(Genode::Env &env)
{
- static Genode::Signal_receiver sig_rec;
-
enum { UPDATE_RATE_MS = 250 };
static Cpu_load_display::Scene
- scene(sig_rec, UPDATE_RATE_MS,
+ scene(env, UPDATE_RATE_MS,
Nitpicker::Point(0, 0), Nitpicker::Area(400, 400));
-
- scene.dispatch_signals_loop(sig_rec);
-
- return 0;
}
diff --git a/repos/gems/src/app/menu_view/main.cc b/repos/gems/src/app/menu_view/main.cc
index 82a7594c37..5252161521 100644
--- a/repos/gems/src/app/menu_view/main.cc
+++ b/repos/gems/src/app/menu_view/main.cc
@@ -24,64 +24,68 @@
struct Menu_view::Main
{
- Nitpicker::Connection nitpicker;
+ Env &_env;
- Constructible buffer;
+ Nitpicker::Connection _nitpicker { _env };
- Nitpicker::Session::View_handle view_handle = nitpicker.create_view();
+ Constructible _buffer;
- Point position;
+ Nitpicker::Session::View_handle _view_handle = _nitpicker.create_view();
+
+ Point _position;
Rect _view_geometry;
void _update_view()
{
- if (_view_geometry.p1() == position
- && _view_geometry.area() == buffer->size())
- return;
+ if (_view_geometry.p1() == _position
+ && _view_geometry.area() == _buffer->size())
+ return;
/* display view behind all others */
typedef Nitpicker::Session::Command Command;
- _view_geometry = Rect(position, buffer->size());
- nitpicker.enqueue(view_handle, _view_geometry);
- nitpicker.enqueue(view_handle);
- nitpicker.execute();
+ _view_geometry = Rect(_position, _buffer->size());
+ _nitpicker.enqueue(_view_handle, _view_geometry);
+ _nitpicker.enqueue(_view_handle);
+ _nitpicker.execute();
}
- Signal_receiver &sig_rec;
-
/**
* Function called on config change or mode change
*/
- void handle_dialog_update(unsigned);
+ void _handle_dialog_update();
- Signal_dispatcher dialog_update_dispatcher = {
- sig_rec, *this, &Main::handle_dialog_update};
+ Signal_handler _dialog_update_handler = {
+ _env.ep(), *this, &Main::_handle_dialog_update};
- Style_database styles;
+ Style_database _styles;
- Animator animator;
+ Animator _animator;
- Widget_factory widget_factory { *env()->heap(), styles, animator };
+ Heap _heap { _env.ram(), _env.rm() };
- Root_widget root_widget { widget_factory, Xml_node(""), Widget::Unique_id() };
+ Widget_factory _widget_factory { _heap, _styles, _animator };
- Attached_rom_dataspace dialog_rom { "dialog" };
+ Root_widget _root_widget { _widget_factory, Xml_node(""), Widget::Unique_id() };
- Attached_dataspace input_ds { nitpicker.input()->dataspace() };
+ Attached_rom_dataspace _dialog_rom { _env, "dialog" };
- Widget::Unique_id hovered;
+ Attached_dataspace _input_ds { _nitpicker.input()->dataspace() };
- void handle_config(unsigned);
+ Widget::Unique_id _hovered;
- Signal_dispatcher config_dispatcher = {
- sig_rec, *this, &Main::handle_config};
+ Attached_rom_dataspace _config { _env, "config" };
- void handle_input(unsigned);
+ void _handle_config();
- Signal_dispatcher input_dispatcher = {
- sig_rec, *this, &Main::handle_input};
+ Signal_handler _config_handler = {
+ _env.ep(), *this, &Main::_handle_config};
+
+ void _handle_input();
+
+ Signal_handler _input_handler = {
+ _env.ep(), *this, &Main::_handle_input};
/*
* Timer used for animating widgets
@@ -94,21 +98,23 @@ struct Menu_view::Main
void schedule() { trigger_once(Frame_timer::PERIOD*1000); }
- } timer;
+ Frame_timer(Env &env) : Timer::Connection(env) { }
- void handle_frame_timer(unsigned);
+ } _timer { _env };
- Signal_dispatcher frame_timer_dispatcher = {
- sig_rec, *this, &Main::handle_frame_timer};
+ void _handle_frame_timer();
- Genode::Reporter hover_reporter = { "hover" };
+ Signal_handler _frame_timer_handler = {
+ _env.ep(), *this, &Main::_handle_frame_timer};
- bool schedule_redraw = false;
+ Genode::Reporter _hover_reporter = { "hover" };
+
+ bool _schedule_redraw = false;
/**
* Frame of last call of 'handle_frame_timer'
*/
- unsigned last_frame = 0;
+ unsigned _last_frame = 0;
/**
* Number of frames between two redraws
@@ -120,86 +126,86 @@ struct Menu_view::Main
* period, wraps at 'REDRAW_PERIOD'. The redraw is performed when the
* counter wraps.
*/
- unsigned frame_cnt = 0;
+ unsigned _frame_cnt = 0;
- Main(Signal_receiver &sig_rec) : sig_rec(sig_rec)
+ Main(Env &env) : _env(env)
{
- dialog_rom.sigh(dialog_update_dispatcher);
- config()->sigh(config_dispatcher);
+ _dialog_rom.sigh(_dialog_update_handler);
+ _config.sigh(_config_handler);
- nitpicker.input()->sigh(input_dispatcher);
+ _nitpicker.input()->sigh(_input_handler);
- timer.sigh(frame_timer_dispatcher);
+ _timer.sigh(_frame_timer_handler);
/* apply initial configuration */
- handle_config(0);
+ _handle_config();
}
};
-void Menu_view::Main::handle_dialog_update(unsigned)
+void Menu_view::Main::_handle_dialog_update()
{
try {
- position = Decorator::point_attribute(config()->xml_node());
+ _position = Decorator::point_attribute(_config.xml());
} catch (...) { }
- dialog_rom.update();
+ _dialog_rom.update();
try {
- Xml_node dialog_xml(dialog_rom.local_addr());
+ Xml_node dialog_xml(_dialog_rom.local_addr());
- root_widget.update(dialog_xml);
- root_widget.size(root_widget.min_size());
+ _root_widget.update(dialog_xml);
+ _root_widget.size(_root_widget.min_size());
} catch (...) {
Genode::error("failed to construct widget tree");
}
- schedule_redraw = true;
+ _schedule_redraw = true;
/*
* If we have not processed a period for at least one frame, perform the
* processing immediately. This way, we avoid latencies when the dialog
* model is updated sporadically.
*/
- if (timer.curr_frame() != last_frame)
- handle_frame_timer(0);
+ if (_timer.curr_frame() != _last_frame)
+ _handle_frame_timer();
else
- timer.schedule();
+ _timer.schedule();
}
-void Menu_view::Main::handle_config(unsigned)
+void Menu_view::Main::_handle_config()
{
- config()->reload();
+ _config.update();
try {
- hover_reporter.enabled(config()->xml_node().sub_node("report")
- .attribute_value("hover", false));
+ _hover_reporter.enabled(_config.xml().sub_node("report")
+ .attribute_value("hover", false));
} catch (...) {
- hover_reporter.enabled(false);
+ _hover_reporter.enabled(false);
}
- handle_dialog_update(0);
+ _handle_dialog_update();
}
-void Menu_view::Main::handle_input(unsigned)
+void Menu_view::Main::_handle_input()
{
- nitpicker.input()->for_each_event([&] (Input::Event const &ev) {
+ _nitpicker.input()->for_each_event([&] (Input::Event const &ev) {
if (ev.absolute_motion()) {
- Point const at = Point(ev.ax(), ev.ay()) - position;
- Widget::Unique_id const new_hovered = root_widget.hovered(at);
+ Point const at = Point(ev.ax(), ev.ay()) - _position;
+ Widget::Unique_id const new_hovered = _root_widget.hovered(at);
- if (hovered != new_hovered) {
+ if (_hovered != new_hovered) {
- if (hover_reporter.enabled()) {
- Genode::Reporter::Xml_generator xml(hover_reporter, [&] () {
- root_widget.gen_hover_model(xml, at);
+ if (_hover_reporter.enabled()) {
+ Genode::Reporter::Xml_generator xml(_hover_reporter, [&] () {
+ _root_widget.gen_hover_model(xml, at);
});
}
- hovered = new_hovered;
+ _hovered = new_hovered;
}
}
@@ -209,74 +215,74 @@ void Menu_view::Main::handle_input(unsigned)
if ((ev.type() == Input::Event::FOCUS && ev.code() == 0)
|| (ev.type() == Input::Event::LEAVE)) {
- hovered = Widget::Unique_id();
+ _hovered = Widget::Unique_id();
- if (hover_reporter.enabled()) {
- Genode::Reporter::Xml_generator xml(hover_reporter, [&] () { });
+ if (_hover_reporter.enabled()) {
+ Genode::Reporter::Xml_generator xml(_hover_reporter, [&] () { });
}
}
});
}
-void Menu_view::Main::handle_frame_timer(unsigned)
+void Menu_view::Main::_handle_frame_timer()
{
- frame_cnt++;
+ _frame_cnt++;
- unsigned const curr_frame = timer.curr_frame();
+ unsigned const curr_frame = _timer.curr_frame();
- if (animator.active()) {
+ if (_animator.active()) {
- unsigned const passed_frames = curr_frame - last_frame;
+ unsigned const passed_frames = curr_frame - _last_frame;
if (passed_frames > 0) {
for (unsigned i = 0; i < passed_frames; i++)
- animator.animate();
+ _animator.animate();
- schedule_redraw = true;
+ _schedule_redraw = true;
}
}
- last_frame = curr_frame;
+ _last_frame = curr_frame;
- if (schedule_redraw && frame_cnt >= REDRAW_PERIOD) {
+ if (_schedule_redraw && _frame_cnt >= REDRAW_PERIOD) {
- frame_cnt = 0;
+ _frame_cnt = 0;
- Area const old_size = buffer.constructed() ? buffer->size() : Area();
- Area const size = root_widget.min_size();
+ Area const old_size = _buffer.constructed() ? _buffer->size() : Area();
+ Area const size = _root_widget.min_size();
- if (!buffer.constructed() || size != old_size)
- buffer.construct(nitpicker, size, *env()->ram_session());
+ if (!_buffer.constructed() || size != old_size)
+ _buffer.construct(_nitpicker, size, _env.ram());
else
- buffer->reset_surface();
+ _buffer->reset_surface();
- root_widget.size(size);
- root_widget.position(Point(0, 0));
+ _root_widget.size(size);
+ _root_widget.position(Point(0, 0));
- Surface pixel_surface = buffer->pixel_surface();
- Surface alpha_surface = buffer->alpha_surface();
+ Surface pixel_surface = _buffer->pixel_surface();
+ Surface alpha_surface = _buffer->alpha_surface();
// XXX restrict redraw to dirty regions
// don't perform a full dialog update
- root_widget.draw(pixel_surface, alpha_surface, Point(0, 0));
+ _root_widget.draw(pixel_surface, alpha_surface, Point(0, 0));
- buffer->flush_surface();
- nitpicker.framebuffer()->refresh(0, 0, buffer->size().w(), buffer->size().h());
+ _buffer->flush_surface();
+ _nitpicker.framebuffer()->refresh(0, 0, _buffer->size().w(), _buffer->size().h());
_update_view();
- schedule_redraw = false;
+ _schedule_redraw = false;
}
/*
* Deactivate timer periods when idle, activate timer when an animation is
* in progress or a redraw is pending.
*/
- bool const redraw_pending = schedule_redraw && frame_cnt != 0;
+ bool const redraw_pending = _schedule_redraw && _frame_cnt != 0;
- if (animator.active() || redraw_pending)
- timer.schedule();
+ if (_animator.active() || redraw_pending)
+ _timer.schedule();
}
@@ -285,21 +291,6 @@ void Menu_view::Main::handle_frame_timer(unsigned)
*/
extern "C" void _sigprocmask() { }
-int main(int argc, char **argv)
-{
- static Genode::Signal_receiver sig_rec;
- static Menu_view::Main application(sig_rec);
+void Libc::Component::construct(Genode::Env &env) { static Menu_view::Main main(env); }
- /* process incoming signals */
- for (;;) {
- using namespace Genode;
-
- Signal sig = sig_rec.wait_for_signal();
- Signal_dispatcher_base *dispatcher =
- dynamic_cast(sig.context());
-
- if (dispatcher)
- dispatcher->dispatch(sig.num());
- }
-}
diff --git a/repos/gems/src/app/menu_view/style_database.h b/repos/gems/src/app/menu_view/style_database.h
index 018f54e0a2..463c13e356 100644
--- a/repos/gems/src/app/menu_view/style_database.h
+++ b/repos/gems/src/app/menu_view/style_database.h
@@ -92,31 +92,13 @@ class Menu_view::Style_database
/*
* Assemble path name 'styles//