diff options
author | Luminarys <kizunanohikari@gmail.com> | 2015-08-18 13:52:57 -0500 |
---|---|---|
committer | Luminarys <kizunanohikari@gmail.com> | 2015-08-18 13:53:06 -0500 |
commit | 01c6caced600921eecb00767347caef1b9a282a0 (patch) | |
tree | cd9ec0bcaf5df2fb567ae3f324fdbc8ca59d74ac /sway | |
parent | ef2f3d31155bb2e962a93e5a068858b502f3544c (diff) | |
download | sway-01c6caced600921eecb00767347caef1b9a282a0.tar.xz |
Added in proper focus handling for floating windows
Diffstat (limited to 'sway')
-rw-r--r-- | sway/handlers.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index ec2b123e..b2ead56c 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -57,20 +57,25 @@ swayc_t *container_under_pointer(void) { } // if workspace, search floating if (lookup->type == C_WORKSPACE) { - len = lookup->floating->length; - for (i = 0; i < len; ++i) { + i = len = lookup->floating->length; + bool got_floating = false; + while (--i > -1) { + sway_log(L_DEBUG, "Checking index %d of floating items", i); if (pointer_test(lookup->floating->items[i], &mouse_origin)) { + sway_log(L_DEBUG, "Got hit for floatin on %d", i); lookup = lookup->floating->items[i]; + got_floating = true; break; } } - if (i < len) { + if (got_floating) { continue; } } // search children len = lookup->children->length; for (i = 0; i < len; ++i) { + sway_log(L_DEBUG, "Checking index %d of standard children", i); if (pointer_test(lookup->children->items[i], &mouse_origin)) { lookup = lookup->children->items[i]; break; @@ -441,6 +446,17 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w } swayc_t *pointer = container_under_pointer(); set_focused_container(pointer); + if (pointer->is_floating) { + int i; + for (i = 0; i < pointer->parent->floating->length; i++) { + if (pointer->parent->floating->items[i] == pointer) { + list_del(pointer->parent->floating, i); + list_add(pointer->parent->floating, pointer); + break; + } + } + arrange_windows(pointer->parent, -1, -1); + } return (pointer && pointer != focused); } else { sway_log(L_DEBUG, "Mouse button %u released", button); |