summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar Luminarys <kizunanohikari@gmail.com>2015-08-22 01:02:54 -0500
committerLibravatar Luminarys <kizunanohikari@gmail.com>2015-08-22 01:03:18 -0500
commitc0b68aa6fca132c431a7ed1aaa59444bd2c2657d (patch)
treeb446198afb8d5ea2d9e32e5953c9e1d4cf445485
parentRefactored resizing functions into resize.c (diff)
downloadsway-c0b68aa6fca132c431a7ed1aaa59444bd2c2657d.tar.gz
sway-c0b68aa6fca132c431a7ed1aaa59444bd2c2657d.tar.zst
sway-c0b68aa6fca132c431a7ed1aaa59444bd2c2657d.zip
Added in bspwm like view swapping
-rw-r--r--sway/handlers.c33
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;