commit 01c6caced600921eecb00767347caef1b9a282a0
parent ef2f3d31155bb2e962a93e5a068858b502f3544c
Author: Luminarys <kizunanohikari@gmail.com>
Date: Tue, 18 Aug 2015 13:52:57 -0500
Added in proper focus handling for floating windows
Diffstat:
1 file changed, 19 insertions(+), 3 deletions(-)
diff --git 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);