window layouter: respond to decorator margins

This commit is contained in:
Norman Feske 2016-02-01 12:39:33 +01:00
parent 54045771c7
commit 44e6870e4e
5 changed files with 75 additions and 43 deletions

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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);

View File

@ -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>