mirror of
https://github.com/genodelabs/genode.git
synced 2025-06-01 23:20:55 +00:00
parent
76e9645787
commit
6a496087ba
@ -80,6 +80,7 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
|||||||
View_component &_builtin_background;
|
View_component &_builtin_background;
|
||||||
Framebuffer::Session &_framebuffer;
|
Framebuffer::Session &_framebuffer;
|
||||||
Reporter &_focus_reporter;
|
Reporter &_focus_reporter;
|
||||||
|
Reporter &_hover_reporter;
|
||||||
Focus_updater &_focus_updater;
|
Focus_updater &_focus_updater;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -132,9 +133,21 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
|||||||
_global_keys.apply_config(_config.xml(), _session_list);
|
_global_keys.apply_config(_config.xml(), _session_list);
|
||||||
|
|
||||||
session->destroy_all_views();
|
session->destroy_all_views();
|
||||||
_user_state.forget(*session);
|
User_state::Handle_forget_result result = _user_state.forget(*session);
|
||||||
|
|
||||||
Genode::destroy(md_alloc(), 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:
|
public:
|
||||||
@ -148,7 +161,7 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
|||||||
User_state &user_state, View_component &pointer_origin,
|
User_state &user_state, View_component &pointer_origin,
|
||||||
View_component &builtin_background, Allocator &md_alloc,
|
View_component &builtin_background, Allocator &md_alloc,
|
||||||
Framebuffer::Session &framebuffer, Reporter &focus_reporter,
|
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),
|
Root_component<Session_component>(&env.ep().rpc_ep(), &md_alloc),
|
||||||
_env(env), _config(config), _session_list(session_list),
|
_env(env), _config(config), _session_list(session_list),
|
||||||
@ -157,7 +170,8 @@ class Nitpicker::Root : public Root_component<Session_component>,
|
|||||||
_pointer_origin(pointer_origin),
|
_pointer_origin(pointer_origin),
|
||||||
_builtin_background(builtin_background),
|
_builtin_background(builtin_background),
|
||||||
_framebuffer(framebuffer),
|
_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,
|
Root<PT> _root { _env, _config_rom, _session_list, *_domain_registry,
|
||||||
_global_keys, _view_stack, _font, _user_state, _pointer_origin,
|
_global_keys, _view_stack, _font, _user_state, _pointer_origin,
|
||||||
_builtin_background, _sliced_heap, _framebuffer,
|
_builtin_background, _sliced_heap, _framebuffer,
|
||||||
_focus_reporter, *this };
|
_focus_reporter, _hover_reporter, *this };
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Focus_updater interface
|
* 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);
|
_focus.forget(owner);
|
||||||
|
|
||||||
bool const need_to_update_all_views = (&owner == _focused);
|
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 == _focused) _focused = nullptr;
|
||||||
if (&owner == _next_focused) _next_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)
|
if (need_to_update_all_views)
|
||||||
_view_stack.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
|
* 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_keystate(Xml_generator &) const;
|
||||||
void report_pointer_position(Xml_generator &) const;
|
void report_pointer_position(Xml_generator &) const;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user