mirror of
https://github.com/genodelabs/genode.git
synced 2025-04-19 16:41:26 +00:00
window layouter: respond to decorator margins
This commit is contained in:
parent
54045771c7
commit
44e6870e4e
repos
gems
libports/run
@ -137,17 +137,18 @@ append config {
|
||||
<provides> <service name="Report"/> <service name="ROM"/> </provides>
|
||||
<config verbose="no">
|
||||
<rom>
|
||||
<policy label="decorator_config -> xray" report="xray_trigger -> xray"/>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request" />
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="status_bar -> focus" report="nitpicker -> focus"/>
|
||||
<policy label="launcher -> focus" report="nitpicker -> focus"/>
|
||||
<policy label="xray_trigger -> hover" report="nitpicker -> hover"/>
|
||||
<policy label="decorator_config -> xray" report="xray_trigger -> xray"/>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request" />
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="status_bar -> focus" report="nitpicker -> focus"/>
|
||||
<policy label="launcher -> focus" report="nitpicker -> focus"/>
|
||||
<policy label="xray_trigger -> hover" report="nitpicker -> hover"/>
|
||||
<policy label="layouter -> decorator_margins" report="decorator -> decorator_margins"/>
|
||||
</rom>
|
||||
</config>
|
||||
</start>
|
||||
|
@ -77,15 +77,16 @@ append config {
|
||||
</provides>
|
||||
<config>
|
||||
<rom>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request"/>
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="mixer_gui_qt -> channel_list" report="mixer -> channel_list"/>
|
||||
<policy label="mixer -> channel_list" report="mixer_gui_qt -> channel_list"/>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request"/>
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="layouter -> decorator_margins" report="decorator -> decorator_margins"/>
|
||||
<policy label="mixer_gui_qt -> channel_list" report="mixer -> channel_list"/>
|
||||
<policy label="mixer -> channel_list" report="mixer_gui_qt -> channel_list"/>
|
||||
</rom>
|
||||
</config>
|
||||
</start>
|
||||
|
@ -125,13 +125,14 @@ append config {
|
||||
</provides>
|
||||
<config>
|
||||
<rom>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request"/>
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request"/>
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="layouter -> decorator_margins" report="decorator -> decorator_margins"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
</rom>
|
||||
</config>
|
||||
</start>
|
||||
|
@ -224,6 +224,23 @@ struct Floating_window_layouter::Main : Operations
|
||||
Attached_rom_dataspace hover { "hover" };
|
||||
|
||||
|
||||
/**
|
||||
* Respond to decorator-margins information reported by the decorator
|
||||
*/
|
||||
Attached_rom_dataspace decorator_margins { "decorator_margins" };
|
||||
|
||||
void handle_decorator_margins_update(unsigned)
|
||||
{
|
||||
decorator_margins.update();
|
||||
|
||||
/* respond to change by adapting the maximized window geometry */
|
||||
handle_mode_change(0);
|
||||
}
|
||||
|
||||
Signal_dispatcher<Main> decorator_margins_dispatcher = {
|
||||
sig_rec, *this, &Main::handle_decorator_margins_update };
|
||||
|
||||
|
||||
/**
|
||||
* Install handler for responding to user input
|
||||
*/
|
||||
@ -245,14 +262,23 @@ struct Floating_window_layouter::Main : Operations
|
||||
{
|
||||
/* determine maximized window geometry */
|
||||
Framebuffer::Mode const mode = nitpicker.mode();
|
||||
|
||||
/*
|
||||
* XXX obtain decorator constraints dynamically
|
||||
*/
|
||||
enum { PAD_LEFT = 4, PAD_RIGHT = 4, PAD_TOP = 20, PAD_BOTTOM = 4 };
|
||||
maximized_window_geometry = Rect(Point(PAD_LEFT, PAD_TOP),
|
||||
Area(mode.width() - PAD_LEFT - PAD_RIGHT,
|
||||
mode.height() - PAD_TOP - PAD_BOTTOM));
|
||||
|
||||
/* read decorator margins from the decorator's report */
|
||||
unsigned top = 0, bottom = 0, left = 0, right = 0;
|
||||
try {
|
||||
Xml_node const margins_xml(decorator_margins.local_addr<char>());
|
||||
Xml_node const floating_xml = margins_xml.sub_node("floating");
|
||||
|
||||
top = attribute(floating_xml, "top", 0UL);
|
||||
bottom = attribute(floating_xml, "bottom", 0UL);
|
||||
left = attribute(floating_xml, "left", 0UL);
|
||||
right = attribute(floating_xml, "right", 0UL);
|
||||
|
||||
} catch (...) { };
|
||||
|
||||
maximized_window_geometry = Rect(Point(left, top),
|
||||
Area(mode.width() - left - right,
|
||||
mode.height() - top - bottom));
|
||||
}
|
||||
|
||||
Signal_dispatcher<Main> mode_change_dispatcher = {
|
||||
@ -289,7 +315,9 @@ struct Floating_window_layouter::Main : Operations
|
||||
|
||||
window_list.sigh(window_list_dispatcher);
|
||||
focus_request.sigh(focus_request_dispatcher);
|
||||
|
||||
hover.sigh(hover_dispatcher);
|
||||
decorator_margins.sigh(decorator_margins_dispatcher);
|
||||
input.sigh(input_dispatcher);
|
||||
|
||||
window_layout_reporter.enabled(true);
|
||||
|
@ -97,14 +97,15 @@ proc qt5_start_nodes { feature_arg } {
|
||||
</provides>
|
||||
<config>
|
||||
<rom>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request"/>
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="clipboard -> focus" report="nitpicker -> focus"/>
|
||||
<policy label="layouter -> window_list" report="wm -> window_list"/>
|
||||
<policy label="layouter -> focus_request" report="wm -> focus_request"/>
|
||||
<policy label="decorator -> window_layout" report="layouter -> window_layout"/>
|
||||
<policy label="wm -> resize_request" report="layouter -> resize_request"/>
|
||||
<policy label="decorator -> pointer" report="wm -> pointer"/>
|
||||
<policy label="layouter -> hover" report="decorator -> hover"/>
|
||||
<policy label="wm -> focus" report="layouter -> focus"/>
|
||||
<policy label="clipboard -> focus" report="nitpicker -> focus"/>
|
||||
<policy label="layouter -> decorator_margins" report="decorator -> decorator_margins"/>
|
||||
</rom>
|
||||
</config>
|
||||
</start>
|
||||
|
Loading…
x
Reference in New Issue
Block a user