diff --git a/repos/gems/run/sculpt.run b/repos/gems/run/sculpt.run index ddbe5e97a8..091d9ed1bf 100644 --- a/repos/gems/run/sculpt.run +++ b/repos/gems/run/sculpt.run @@ -73,8 +73,6 @@ install_config { - @@ -416,8 +414,6 @@ install_config { - - diff --git a/repos/gems/run/sculpt/nitpicker.config b/repos/gems/run/sculpt/nitpicker.config index 3225b159de..1ac91f9301 100644 --- a/repos/gems/run/sculpt/nitpicker.config +++ b/repos/gems/run/sculpt/nitpicker.config @@ -1,6 +1,6 @@ - + diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index 8b00fc276f..386f4e3f6b 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -68,14 +68,16 @@ struct Sculpt::Main : Input_event_handler, Registry _child_states { }; - Constructible _gui { }; + Gui::Connection _gui { _env, "input" }; + + Gui::Root _gui_root { _env, _heap, *this }; Signal_handler
_input_handler { _env.ep(), *this, &Main::_handle_input }; void _handle_input() { - _gui->input()->for_each_event([&] (Input::Event const &ev) { + _gui.input()->for_each_event([&] (Input::Event const &ev) { handle_input_event(ev); }); } @@ -984,44 +986,6 @@ struct Sculpt::Main : Input_event_handler, _fb_drv_config.try_generate_manually_managed(); } - Attached_rom_dataspace _gui_displays { _env, "displays" }; - - Signal_handler
_gui_displays_handler { - _env.ep(), *this, &Main::_handle_gui_displays }; - - void _handle_gui_displays() - { - _gui_displays.update(); - - if (!_gui_displays.xml().has_sub_node("display")) - return; - - if (_gui.constructed()) - return; - - /* - * Since the nitpicker GUI server has successfully issued the first - * 'displays' report, there is a good chance that the framebuffer - * driver is running. This is a good time to activate the GUI. - */ - _gui.construct(_env, "input"); - _gui->input()->sigh(_input_handler); - _gui->mode_sigh(_gui_mode_handler); - - /* - * Adjust GUI parameters to initial GUI mode - */ - _handle_gui_mode(); - - /* - * Avoid 'Constructible' because it requires the definition - * of 'Gui::Session_component'. - */ - static Gui::Root gui_nitpicker(_env, _heap, *this); - - generate_runtime_config(); - } - void _handle_window_layout(); template @@ -1065,7 +1029,8 @@ struct Sculpt::Main : Input_event_handler, _manual_deploy_rom.sigh(_manual_deploy_handler); _runtime_state_rom.sigh(_runtime_state_handler); _runtime_config_rom.sigh(_runtime_config_handler); - _gui_displays.sigh(_gui_displays_handler); + _gui.input()->sigh(_input_handler); + _gui.mode_sigh(_gui_mode_handler); /* * Subscribe to reports @@ -1087,6 +1052,7 @@ struct Sculpt::Main : Input_event_handler, /* * Import initial report content */ + _handle_gui_mode(); _storage.handle_storage_devices_update(); _deploy.handle_deploy(); _handle_pci_devices(); @@ -1137,9 +1103,6 @@ void Sculpt::Main::_handle_window_layout() unsigned const log_min_w = 400; - if (!_gui.constructed()) - return; - typedef String<128> Label; Label const inspect_label ("runtime -> leitzentrale -> inspect"), @@ -1168,7 +1131,11 @@ void Sculpt::Main::_handle_window_layout() if (panel_height == 0) return; - Framebuffer::Mode const mode = _gui->mode(); + Framebuffer::Mode const mode = _gui.mode(); + + /* suppress intermediate boot-time states before the framebuffer driver is up */ + if (mode.area.count() <= 1) + return; /* area reserved for the panel */ Rect const panel(Point(0, 0), Area(mode.area.w(), panel_height)); @@ -1334,10 +1301,7 @@ void Sculpt::Main::_handle_window_layout() void Sculpt::Main::_handle_gui_mode() { - if (!_gui.constructed()) - return; - - Framebuffer::Mode const mode = _gui->mode(); + Framebuffer::Mode const mode = _gui.mode(); _handle_window_layout();