From 236f26f62e56cef8278d88f6111720b738d4a85f Mon Sep 17 00:00:00 2001 From: "S. Christoffer Eliesen" Date: Mon, 16 Nov 2015 00:35:25 +0100 Subject: output: Support multiple adjacent outputs. When querying for an adjacent output we now need an absolute position in order to know which adjacent output that matches. (The position is either the current mouse position or the center of the currently focused container, depending on context.) If two outputs have one edge each that at least partially align with each other they now count as adjacent. Seamless mouse is affected by this and now properly moves and positions itself between outputs with "uneven" placement (as long as they have at least some part of the edge adjacent to each other). When focusing or moving a container in a specified direction the center of the current focused container decides where to look for an adjacent output. So if e.g. an output has two adjacent outputs to the right and a "focus right" command is issued then it's the placement of the currently focused container that decides which output actually gets focused. Also, if an output has at least one output adjacent in some direction but the entire edge is not covered (ie. it has "holes" with no outputs), then the algorithm will choose the output that is closest to the currently focused container (this does not apply to seamless mouse, the pointer will just stop at the edge in that case). --- include/output.h | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) (limited to 'include/output.h') diff --git a/include/output.h b/include/output.h index 10ff0596..1307ead8 100644 --- a/include/output.h +++ b/include/output.h @@ -4,7 +4,16 @@ #include "container.h" #include "focus.h" -swayc_t *output_by_name(const char* name); -swayc_t *swayc_adjacent_output(swayc_t *output, enum movement_direction dir); +// Position is absolute coordinates on the edge where the adjacent output +// should be searched for. +swayc_t *output_by_name(const char* name, const struct wlc_point *abs_pos); +swayc_t *swayc_adjacent_output(swayc_t *output, enum movement_direction dir, const struct wlc_point *abs_pos, bool pick_closest); + +// Place absolute coordinates for given container into given wlc_point. +void get_absolute_position(swayc_t *container, struct wlc_point *point); + +// Place absolute coordinates for the center point of given container into +// given wlc_point. +void get_absolute_center_position(swayc_t *container, struct wlc_point *point); #endif -- cgit v1.2.3