diff options
author | Joseph Mingrone <jrm@ftfl.ca> | 2016-12-11 19:03:29 -0400 |
---|---|---|
committer | Jérémie Courrèges-Anglas <jca@wxcvbn.org> | 2016-12-12 18:44:19 +0100 |
commit | 5318f014451620f32a264d01f620562e973f3a64 (patch) | |
tree | 60ca7a6d55d31a4c5d6d64a97c25a282fcf3838d /src/split.c | |
parent | 31d4ca8f900d0d8db2a3ac6123c3c445cfa6346a (diff) | |
download | ratpoison-5318f014451620f32a264d01f620562e973f3a64.zip |
Update screen-aware focus* commands after changes to support XRandR
This is an update to Pedro Silva's patch, so that it applies against the
xrandr branch. That patch introduced four new functions, frame_*_abs,
which report a frame's left, right, top, and bottom coordinates offset by
it's screen arrangement. This allows the use of the focus* commands as
additional screen navigation tools, and has the added benefit of making the
find_frame_* functions clearer.
Diffstat (limited to 'src/split.c')
-rw-r--r-- | src/split.c | 44 |
1 files changed, 24 insertions, 20 deletions
diff --git a/src/split.c b/src/split.c index 5f74777..7042a55 100644 --- a/src/split.c +++ b/src/split.c @@ -997,15 +997,16 @@ show_frame_message (char *msg) rp_frame * find_frame_up (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->y == cur->y + cur->height) + list_for_each_entry (cur, &s->frames, node) { - if (frame->x >= cur->x && frame->x < cur->x + cur->width) - return cur; + if (frame_top_abs (frame) == frame_bottom_abs (cur)) + if (frame_right_abs (frame) >= frame_left_abs (cur) && frame_left_abs (frame) <= frame_right_abs (cur)) + return cur; } } @@ -1015,15 +1016,16 @@ find_frame_up (rp_frame *frame) rp_frame * find_frame_down (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->y + frame->height == cur->y) + list_for_each_entry (cur, &s->frames, node) { - if (frame->x >= cur->x && frame->x < cur->x + cur->width) - return cur; + if (frame_bottom_abs (frame) == frame_top_abs (cur)) + if (frame_right_abs (frame) >= frame_left_abs (cur) && frame_left_abs (frame) <= frame_right_abs (cur)) + return cur; } } @@ -1033,15 +1035,16 @@ find_frame_down (rp_frame *frame) rp_frame * find_frame_left (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->x == cur->x + cur->width) + list_for_each_entry (cur, &s->frames, node) { - if (frame->y >= cur->y && frame->y < cur->y + cur->height) - return cur; + if (frame_left_abs (frame) == frame_right_abs (cur)) + if (frame_top_abs (frame) >= frame_top_abs (cur) && frame_top_abs (frame) < frame_bottom_abs (cur)) + return cur; } } @@ -1051,15 +1054,16 @@ find_frame_left (rp_frame *frame) rp_frame * find_frame_right (rp_frame *frame) { - rp_screen *s = frames_screen (frame); + rp_screen *s; rp_frame *cur; - list_for_each_entry (cur, &s->frames, node) + list_for_each_entry (s, &rp_screens, node) { - if (frame->x + frame->width == cur->x) + list_for_each_entry (cur, &s->frames, node) { - if (frame->y >= cur->y && frame->y < cur->y + cur->height) - return cur; + if (frame_right_abs (frame) == frame_left_abs (cur)) + if (frame_top_abs (frame) >= frame_top_abs (cur) && frame_top_abs (frame) < frame_bottom_abs (cur)) + return cur; } } |