From 752ddc153ebe1dbe93e4fcd725890470ada3b00a Mon Sep 17 00:00:00 2001 From: Norman Feske Date: Mon, 1 Feb 2016 12:06:45 +0100 Subject: [PATCH] window layouter: respond to nitpicker mode changes --- .../src/app/floating_window_layouter/main.cc | 34 +++++++++++-------- .../src/app/floating_window_layouter/window.h | 4 +-- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/repos/gems/src/app/floating_window_layouter/main.cc b/repos/gems/src/app/floating_window_layouter/main.cc index cfa4a08ad..df9a48bd1 100644 --- a/repos/gems/src/app/floating_window_layouter/main.cc +++ b/repos/gems/src/app/floating_window_layouter/main.cc @@ -241,6 +241,24 @@ struct Floating_window_layouter::Main : Operations Rect maximized_window_geometry; + void handle_mode_change(unsigned) + { + /* 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)); + } + + Signal_dispatcher
mode_change_dispatcher = { + sig_rec, *this, &Main::handle_mode_change }; + + Input::Session_client input { nitpicker.input_session() }; Attached_dataspace input_ds { input.dataspace() }; @@ -266,24 +284,12 @@ struct Floating_window_layouter::Main : Operations */ Main(Signal_receiver &sig_rec) : sig_rec(sig_rec) { - /* 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)); + nitpicker.mode_sigh(mode_change_dispatcher); + handle_mode_change(0); window_list.sigh(window_list_dispatcher); - focus_request.sigh(focus_request_dispatcher); - hover.sigh(hover_dispatcher); - input.sigh(input_dispatcher); window_layout_reporter.enabled(true); diff --git a/repos/gems/src/app/floating_window_layouter/window.h b/repos/gems/src/app/floating_window_layouter/window.h index 0a10ee46c..78607aca0 100644 --- a/repos/gems/src/app/floating_window_layouter/window.h +++ b/repos/gems/src/app/floating_window_layouter/window.h @@ -86,7 +86,7 @@ class Floating_window_layouter::Window : public List::Element */ Rect _unmaximized_geometry; - Rect const _maximized_geometry; + Rect const &_maximized_geometry; /** * Window may be partially transparent @@ -176,7 +176,7 @@ class Floating_window_layouter::Window : public List::Element public: - Window(Window_id id, Rect maximized_geometry) + Window(Window_id id, Rect &maximized_geometry) : _id(id), _maximized_geometry(maximized_geometry) { }