diff --git a/repos/gems/src/app/sculpt_manager/main.cc b/repos/gems/src/app/sculpt_manager/main.cc index c6b862b628..e59bf6ba3c 100644 --- a/repos/gems/src/app/sculpt_manager/main.cc +++ b/repos/gems/src/app/sculpt_manager/main.cc @@ -507,6 +507,11 @@ struct Sculpt::Main : Input_event_handler, bool settings_available() const override { return _settings.interactive_settings_available(); } + bool system_available() const override + { + return _storage._sculpt_partition.valid() && !_prepare_in_progress(); + } + /** * Dialog interface */ @@ -838,6 +843,10 @@ struct Sculpt::Main : Input_event_handler, { _download_queue.reset(); _storage.use(target); + + /* hide system panel button and system dialog when "un-using" */ + _panel_menu_view.generate(); + _handle_window_layout(); } void _reset_storage_dialog_operation() @@ -1590,16 +1599,18 @@ void Sculpt::Main::_handle_window_layout() gen_window(win, Rect(log_p1, log_p2)); }); int system_right_xpos = 0; - _with_window(window_list, system_view_label, [&] (Xml_node win) { - Area const size = win_size(win); - Point const pos = _system_visible - ? Point(0, avail.y1()) - : Point(-size.w(), avail.y1()); - gen_window(win, Rect(pos, size)); + if (system_available()) { + _with_window(window_list, system_view_label, [&] (Xml_node win) { + Area const size = win_size(win); + Point const pos = _system_visible + ? Point(0, avail.y1()) + : Point(-size.w(), avail.y1()); + gen_window(win, Rect(pos, size)); - if (_system_visible) - system_right_xpos = size.w(); - }); + if (_system_visible) + system_right_xpos = size.w(); + }); + } _with_window(window_list, settings_view_label, [&] (Xml_node win) { Area const size = win_size(win); @@ -1958,6 +1969,7 @@ void Sculpt::Main::_handle_runtime_state() /* trigger update and deploy */ reconfigure_runtime = true; + _panel_menu_view.generate(); /* show "System" button */ } } diff --git a/repos/gems/src/app/sculpt_manager/view/panel_dialog.cc b/repos/gems/src/app/sculpt_manager/view/panel_dialog.cc index f70129ba2a..cc3fad289a 100644 --- a/repos/gems/src/app/sculpt_manager/view/panel_dialog.cc +++ b/repos/gems/src/app/sculpt_manager/view/panel_dialog.cc @@ -21,10 +21,10 @@ void Panel_dialog::generate(Xml_generator &xml) const xml.node("frame", [&] () { xml.attribute("style", "unimportant"); - if (_state.settings_available()) { - gen_named_node(xml, "float", "left", [&] () { - xml.attribute("west", true); - xml.node("hbox", [&] () { + gen_named_node(xml, "float", "left", [&] () { + xml.attribute("west", true); + xml.node("hbox", [&] () { + if (_state.system_available()) { xml.node("button", [&] () { _item.gen_button_attr(xml, "system"); if (_state.system_visible()) @@ -33,6 +33,8 @@ void Panel_dialog::generate(Xml_generator &xml) const xml.attribute("text", "System"); }); }); + } + if (_state.settings_available()) { xml.node("button", [&] () { _item.gen_button_attr(xml, "settings"); if (_state.settings_visible()) @@ -41,9 +43,9 @@ void Panel_dialog::generate(Xml_generator &xml) const xml.attribute("text", "Settings"); }); }); - }); + } }); - } + }); gen_named_node(xml, "float", "center", [&] () { xml.node("hbox", [&] () { diff --git a/repos/gems/src/app/sculpt_manager/view/panel_dialog.h b/repos/gems/src/app/sculpt_manager/view/panel_dialog.h index 7c1ad5e056..e330272b41 100644 --- a/repos/gems/src/app/sculpt_manager/view/panel_dialog.h +++ b/repos/gems/src/app/sculpt_manager/view/panel_dialog.h @@ -37,6 +37,7 @@ struct Sculpt::Panel_dialog : Dialog virtual bool settings_visible() const = 0; virtual bool network_visible() const = 0; virtual bool inspect_tab_visible() const = 0; + virtual bool system_available() const = 0; virtual bool settings_available() const = 0; };