diff options
-rw-r--r-- | sway/handlers.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index 1c4e044a..cb42196f 100644 --- a/sway/handlers.c +++ b/sway/handlers.c | |||
@@ -362,6 +362,37 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct | |||
362 | }; | 362 | }; |
363 | wlc_view_set_geometry(view->handle, 0, &geometry); | 363 | wlc_view_set_geometry(view->handle, 0, &geometry); |
364 | changed_floating = true; | 364 | changed_floating = true; |
365 | } else { | ||
366 | swayc_t *init_view = pointer_state.tiling.init_view; | ||
367 | if (view != init_view && view->type == C_VIEW) { | ||
368 | changed_tiling = true; | ||
369 | int i, j; | ||
370 | for (i = 0; i < view->parent->children->length; i++) { | ||
371 | if (view->parent->children->items[i] == view) { | ||
372 | for (j = 0; j < init_view->parent->children->length; j++) { | ||
373 | if (init_view->parent->children->items[j] == init_view) { | ||
374 | double temp_w = view->width; | ||
375 | double temp_h = view->height; | ||
376 | view->width = init_view->width; | ||
377 | view->height = init_view->height; | ||
378 | init_view->width = temp_w; | ||
379 | init_view->height = temp_h; | ||
380 | |||
381 | init_view->parent->children->items[j] = view; | ||
382 | view->parent->children->items[i] = init_view; | ||
383 | |||
384 | swayc_t *temp = view->parent; | ||
385 | view->parent = init_view->parent; | ||
386 | init_view->parent = temp; | ||
387 | |||
388 | arrange_windows(&root_container, -1, -1); | ||
389 | break; | ||
390 | } | ||
391 | } | ||
392 | break; | ||
393 | } | ||
394 | } | ||
395 | } | ||
365 | } | 396 | } |
366 | } else if (pointer_state.floating.resize && view) { | 397 | } else if (pointer_state.floating.resize && view) { |
367 | changed_floating = resize_floating(prev_pos); | 398 | changed_floating = resize_floating(prev_pos); |
@@ -430,6 +461,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w | |||
430 | return (pointer_state.floating.drag || pointer_state.floating.resize); | 461 | return (pointer_state.floating.drag || pointer_state.floating.resize); |
431 | } else { | 462 | } else { |
432 | if (modifiers->mods & config->floating_mod) { | 463 | if (modifiers->mods & config->floating_mod) { |
464 | pointer_state.floating.drag = pointer_state.l_held; | ||
433 | pointer_state.tiling.resize = pointer_state.r_held; | 465 | pointer_state.tiling.resize = pointer_state.r_held; |
434 | pointer_state.tiling.init_view = pointer; | 466 | pointer_state.tiling.init_view = pointer; |
435 | // Dont want pointer sent when resizing | 467 | // Dont want pointer sent when resizing |
@@ -442,6 +474,7 @@ static bool handle_pointer_button(wlc_handle view, uint32_t time, const struct w | |||
442 | if (button == M_LEFT_CLICK) { | 474 | if (button == M_LEFT_CLICK) { |
443 | pointer_state.l_held = false; | 475 | pointer_state.l_held = false; |
444 | pointer_state.floating.drag = false; | 476 | pointer_state.floating.drag = false; |
477 | pointer_state.tiling.init_view = NULL; | ||
445 | } | 478 | } |
446 | if (button == M_RIGHT_CLICK) { | 479 | if (button == M_RIGHT_CLICK) { |
447 | pointer_state.r_held = false; | 480 | pointer_state.r_held = false; |