mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-07 11:27:29 +00:00
parent
76e9645787
commit
6a496087ba
@ -80,6 +80,7 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
||||
View_component &_builtin_background;
|
||||
Framebuffer::Session &_framebuffer;
|
||||
Reporter &_focus_reporter;
|
||||
Reporter &_hover_reporter;
|
||||
Focus_updater &_focus_updater;
|
||||
|
||||
protected:
|
||||
@ -132,9 +133,21 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
||||
_global_keys.apply_config(_config.xml(), _session_list);
|
||||
|
||||
session->destroy_all_views();
|
||||
_user_state.forget(*session);
|
||||
User_state::Handle_forget_result result = _user_state.forget(*session);
|
||||
|
||||
Genode::destroy(md_alloc(), session);
|
||||
|
||||
/* report hover changes */
|
||||
if (_hover_reporter.enabled() && result.hover_changed) {
|
||||
Reporter::Xml_generator xml(_hover_reporter, [&] () {
|
||||
_user_state.report_hovered_view_owner(xml, false); });
|
||||
}
|
||||
|
||||
/* report focus changes */
|
||||
if (_focus_reporter.enabled() && result.focus_changed) {
|
||||
Reporter::Xml_generator xml(_focus_reporter, [&] () {
|
||||
_user_state.report_focused_view_owner(xml, false); });
|
||||
}
|
||||
}
|
||||
|
||||
public:
|
||||
@ -148,7 +161,7 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
||||
User_state &user_state, View_component &pointer_origin,
|
||||
View_component &builtin_background, Allocator &md_alloc,
|
||||
Framebuffer::Session &framebuffer, Reporter &focus_reporter,
|
||||
Focus_updater &focus_updater)
|
||||
Reporter &hover_reporter, Focus_updater &focus_updater)
|
||||
:
|
||||
Root_component<Session_component>(&env.ep().rpc_ep(), &md_alloc),
|
||||
_env(env), _config(config), _session_list(session_list),
|
||||
@ -157,7 +170,8 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
||||
_pointer_origin(pointer_origin),
|
||||
_builtin_background(builtin_background),
|
||||
_framebuffer(framebuffer),
|
||||
_focus_reporter(focus_reporter), _focus_updater(focus_updater)
|
||||
_focus_reporter(focus_reporter), _hover_reporter(hover_reporter),
|
||||
_focus_updater(focus_updater)
|
||||
{ }
|
||||
|
||||
|
||||
@ -291,7 +305,7 @@ struct Nitpicker::Main : Focus_updater
|
||||
Root<PT> _root { _env, _config_rom, _session_list, *_domain_registry,
|
||||
_global_keys, _view_stack, _font, _user_state, _pointer_origin,
|
||||
_builtin_background, _sliced_heap, _framebuffer,
|
||||
_focus_reporter, *this };
|
||||
_focus_reporter, _hover_reporter, *this };
|
||||
|
||||
/**
|
||||
* Focus_updater interface
|
||||
|
@ -386,11 +386,13 @@ void User_state::report_last_clicked_view_owner(Xml_generator &xml) const
|
||||
}
|
||||
|
||||
|
||||
void User_state::forget(View_owner const &owner)
|
||||
User_state::Handle_forget_result User_state::forget(View_owner const &owner)
|
||||
{
|
||||
_focus.forget(owner);
|
||||
|
||||
bool const need_to_update_all_views = (&owner == _focused);
|
||||
bool const hover_changed = &owner == _hovered;
|
||||
bool const focus_changed = &owner == _focused;
|
||||
|
||||
if (&owner == _focused) _focused = nullptr;
|
||||
if (&owner == _next_focused) _next_focused = nullptr;
|
||||
@ -406,6 +408,11 @@ void User_state::forget(View_owner const &owner)
|
||||
|
||||
if (need_to_update_all_views)
|
||||
_view_stack.update_all_views();
|
||||
|
||||
return {
|
||||
.hover_changed = hover_changed,
|
||||
.focus_changed = focus_changed,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
|
@ -193,7 +193,12 @@ class Nitpicker::User_state
|
||||
/**
|
||||
* Discard all references to specified view owner
|
||||
*/
|
||||
void forget(View_owner const &);
|
||||
struct Handle_forget_result
|
||||
{
|
||||
bool const hover_changed;
|
||||
bool const focus_changed;
|
||||
};
|
||||
Handle_forget_result forget(View_owner const &);
|
||||
|
||||
void report_keystate(Xml_generator &) const;
|
||||
void report_pointer_position(Xml_generator &) const;
|
||||
|
Loading…
x
Reference in New Issue
Block a user