diff --git a/repos/gems/include/gems/local_reporter.h b/repos/gems/include/gems/local_reporter.h index 2f54102c02..75268fcaa0 100644 --- a/repos/gems/include/gems/local_reporter.h +++ b/repos/gems/include/gems/local_reporter.h @@ -19,33 +19,40 @@ #include #include -struct Local_reporter +class Local_reporter { - Report::Session_client _session; + private: - Genode::Attached_dataspace _ds; + Local_reporter(Local_reporter const &); + Local_reporter &operator = (Local_reporter const &); - char const *_name; + Report::Session_client _session; - Local_reporter(Genode::Region_map &rm, char const *name, - Genode::Capability session_cap) - : - _session(session_cap), _ds(rm, _session.dataspace()), _name(name) - { } + Genode::Attached_dataspace _ds; - struct Xml_generator : public Genode::Xml_generator - { - template - Xml_generator(Local_reporter &reporter, FUNC const &func) + char const *_name; + + public: + + Local_reporter(Genode::Region_map &rm, char const *name, + Genode::Capability session_cap) : - Genode::Xml_generator(reporter._ds.local_addr(), - reporter._ds.size(), - reporter._name, - func) + _session(session_cap), _ds(rm, _session.dataspace()), _name(name) + { } + + struct Xml_generator : public Genode::Xml_generator { - reporter._session.submit(used()); - } - }; + template + Xml_generator(Local_reporter &reporter, FUNC const &func) + : + Genode::Xml_generator(reporter._ds.local_addr(), + reporter._ds.size(), + reporter._name, + func) + { + reporter._session.submit(used()); + } + }; }; #endif /* _INCLUDE__GEMS__LOCAL_REPORTER_H_ */ diff --git a/repos/gems/src/server/wm/decorator_nitpicker.h b/repos/gems/src/server/wm/decorator_nitpicker.h index 34f7cc146e..b04367594c 100644 --- a/repos/gems/src/server/wm/decorator_nitpicker.h +++ b/repos/gems/src/server/wm/decorator_nitpicker.h @@ -36,6 +36,7 @@ namespace Wm { class Main; using Genode::Attached_ram_dataspace; using Genode::Signal_handler; using Genode::Reporter; + using Genode::Interface; } @@ -47,7 +48,7 @@ namespace Wm { } -struct Wm::Decorator_content_callback +struct Wm::Decorator_content_callback : Interface { virtual void content_geometry(Window_registry::Id win_id, Rect rect) = 0; @@ -81,7 +82,7 @@ class Wm::Decorator_content_registry { } }; - List _list; + List _list { }; Allocator &_entry_alloc; Entry const &_lookup(Nitpicker::Session::View_handle view_handle) const @@ -149,8 +150,11 @@ class Wm::Decorator_content_registry struct Wm::Decorator_nitpicker_session : Genode::Rpc_object, - List::Element + private List::Element { + friend class List; + using List::Element::next; + typedef Nitpicker::View_capability View_capability; typedef Nitpicker::Session::View_handle View_handle; @@ -162,7 +166,7 @@ struct Wm::Decorator_nitpicker_session : Genode::Rpc_object, Nitpicker::Connection _nitpicker_session { _env, "decorator" }; - Genode::Signal_context_capability _mode_sigh; + Genode::Signal_context_capability _mode_sigh { }; typedef Nitpicker::Session::Command_buffer Command_buffer; diff --git a/repos/gems/src/server/wm/layouter_nitpicker.h b/repos/gems/src/server/wm/layouter_nitpicker.h index 9659670ee9..59f12ee191 100644 --- a/repos/gems/src/server/wm/layouter_nitpicker.h +++ b/repos/gems/src/server/wm/layouter_nitpicker.h @@ -37,7 +37,7 @@ struct Wm::Layouter_nitpicker_session : Genode::Rpc_object */ Nitpicker::Connection _mode_sigh_nitpicker; - Genode::Signal_context_capability _mode_sigh; + Genode::Signal_context_capability _mode_sigh { }; Attached_ram_dataspace _command_ds; diff --git a/repos/gems/src/server/wm/nitpicker.h b/repos/gems/src/server/wm/nitpicker.h index 660bf47ba4..e3d79bf0ee 100644 --- a/repos/gems/src/server/wm/nitpicker.h +++ b/repos/gems/src/server/wm/nitpicker.h @@ -51,6 +51,7 @@ namespace Wm { using Genode::Signal_transmitter; using Genode::Reporter; using Genode::Capability; + using Genode::Interface; } namespace Wm { namespace Nitpicker { @@ -81,19 +82,24 @@ namespace Wm { namespace Nitpicker { * clicks into an already focused window should be of no interest to the * layouter. So we hide them from the layouter. */ -struct Wm::Nitpicker::Click_handler +struct Wm::Nitpicker::Click_handler : Interface { virtual void handle_click(Point pos) = 0; virtual void handle_enter(Point pos) = 0; }; -struct Nitpicker::View { GENODE_RPC_INTERFACE(); }; +struct Nitpicker::View : Genode::Interface { GENODE_RPC_INTERFACE(); }; -class Wm::Nitpicker::View : public Genode::Weak_object, +class Wm::Nitpicker::View : private Genode::Weak_object, public Genode::Rpc_object< ::Nitpicker::View> { + private: + + friend class Genode::Weak_ptr; + friend class Genode::Locked_ptr; + protected: typedef Genode::String<100> Title; @@ -102,12 +108,12 @@ class Wm::Nitpicker::View : public Genode::Weak_object, Session_label _session_label; Nitpicker::Session_client &_real_nitpicker; - View_handle _real_handle; - Title _title; - Rect _geometry; - Point _buffer_offset; - Weak_ptr _neighbor_ptr; - bool _neighbor_behind; + View_handle _real_handle { }; + Title _title { }; + Rect _geometry { }; + Point _buffer_offset { }; + Weak_ptr _neighbor_ptr { }; + bool _neighbor_behind { }; bool _has_alpha; View(Nitpicker::Session_client &real_nitpicker, @@ -165,6 +171,9 @@ class Wm::Nitpicker::View : public Genode::Weak_object, _real_nitpicker.destroy_view(_real_handle); } + using Genode::Weak_object::weak_ptr; + using Genode::Weak_object::lock_for_destruction; + Point virtual_position() const { return _geometry.p1(); } virtual bool belongs_to_win_id(Window_registry::Id id) const = 0; @@ -194,7 +203,7 @@ class Wm::Nitpicker::View : public Genode::Weak_object, virtual Point input_anchor_position() const = 0; - virtual void stack(Weak_ptr neighbor_ptr, bool behind) { } + virtual void stack(Weak_ptr, bool) { } View_handle real_handle() const { return _real_handle; } @@ -218,11 +227,13 @@ class Wm::Nitpicker::View : public Genode::Weak_object, class Wm::Nitpicker::Top_level_view : public View, - public List::Element + private List::Element { private: - Window_registry::Id _win_id; + friend class List; + + Window_registry::Id _win_id { }; Window_registry &_window_registry; @@ -230,11 +241,11 @@ class Wm::Nitpicker::Top_level_view : public View, * Geometry of window-content view, which corresponds to the location * of the window content as known by the decorator. */ - Rect _content_geometry; + Rect _content_geometry { }; bool _resizeable = false; - Title _window_title; + Title _window_title { }; Session_label _session_label; typedef Nitpicker::Session::Command Command; @@ -259,6 +270,8 @@ class Wm::Nitpicker::Top_level_view : public View, View::lock_for_destruction(); } + using List::Element::next; + void _propagate_view_geometry() override { } void geometry(Rect geometry) override @@ -337,10 +350,12 @@ class Wm::Nitpicker::Top_level_view : public View, class Wm::Nitpicker::Child_view : public View, - public List::Element + private List::Element { private: + friend class List; + Weak_ptr mutable _parent; public: @@ -360,6 +375,8 @@ class Wm::Nitpicker::Child_view : public View, View::lock_for_destruction(); } + using List::Element::next; + void _propagate_view_geometry() override { _real_nitpicker.enqueue(_real_handle, _geometry); @@ -418,7 +435,7 @@ class Wm::Nitpicker::Child_view : public View, }; -struct Wm::Nitpicker::Session_control_fn +struct Wm::Nitpicker::Session_control_fn : Interface { virtual void session_control(char const *selector, Session::Session_control) = 0; @@ -426,10 +443,12 @@ struct Wm::Nitpicker::Session_control_fn class Wm::Nitpicker::Session_component : public Rpc_object, - public List::Element + private List::Element { private: + friend class List; + typedef Nitpicker::Session::View_handle View_handle; Genode::Env &_env; @@ -442,13 +461,13 @@ class Wm::Nitpicker::Session_component : public Rpc_object, Session_control_fn &_session_control_fn; Tslab _top_level_view_alloc; Tslab _child_view_alloc; - List _top_level_views; - List _child_views; + List _top_level_views { }; + List _child_views { }; Input::Session_component _input_session { _env, _ram }; Input::Session_capability _input_session_cap; Click_handler &_click_handler; - Signal_context_capability _mode_sigh; - Area _requested_size; + Signal_context_capability _mode_sigh { }; + Area _requested_size { }; bool _resize_requested = false; bool _has_alpha = false; Point const _initial_pointer_pos { -1, -1 }; @@ -744,6 +763,8 @@ class Wm::Nitpicker::Session_component : public Rpc_object, _env.ep().dissolve(_input_session); } + using List::Element::next; + void upgrade(char const *args) { size_t const ram_quota = Arg_string::find_arg(args, "ram_quota").ulong_value(0); @@ -986,6 +1007,12 @@ class Wm::Nitpicker::Root : public Genode::Rpc_object _sessions; + List _sessions { }; Layouter_nitpicker_session *_layouter_session = nullptr; - List _decorator_sessions; + List _decorator_sessions { }; /** * Nitpicker session used to perform session-control operations @@ -1104,7 +1131,7 @@ class Wm::Nitpicker::Root : public Genode::Rpc_object