diff options
author | Drew DeVault <sir@cmpwn.com> | 2015-08-18 19:25:16 -0400 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2015-08-18 19:25:16 -0400 |
commit | ab5805ca6eacb77494b09b1b20d278141dfa7093 (patch) | |
tree | 251a7291b6daf626a34288042dc0a69659cce36e /sway | |
parent | e6d83206bdea32481c49c20daadf437e7a46cc60 (diff) | |
parent | ab43927a470f46271ae98faa4e1cfe3a936c6c9d (diff) |
Merge pull request #74 from Luminarys/master
Added in proper floating window resizing
Diffstat (limited to 'sway')
-rw-r--r-- | sway/handlers.c | 25 | ||||
-rw-r--r-- | sway/layout.c | 2 |
2 files changed, 22 insertions, 5 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index 9b96a5cf..c20f3ca0 100644 --- a/sway/handlers.c +++ b/sway/handlers.c @@ -337,6 +337,7 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct } // Do checks to determine if proper keys are being held swayc_t *view = active_workspace->focused; + uint32_t edge = 0; if (m1_held && view) { if (view->is_floating) { while (keys_pressed[i++]) { @@ -344,7 +345,6 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct int dx = mouse_origin.x - prev_pos.x; int dy = mouse_origin.y - prev_pos.y; sway_log(L_DEBUG, "Moving from px: %d to cx: %d and from py: %d to cy: %d", prev_pos.x, mouse_origin.x, prev_pos.y, mouse_origin.y); - sway_log(L_DEBUG, "Moving: dx: %d, dy: %d", dx, dy); view->x += dx; view->y += dy; @@ -360,31 +360,35 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct int dx = mouse_origin.x - prev_pos.x; int dy = mouse_origin.y - prev_pos.y; sway_log(L_DEBUG, "Moving from px: %d to cx: %d and from py: %d to cy: %d", prev_pos.x, mouse_origin.x, prev_pos.y, mouse_origin.y); - sway_log(L_INFO, "Moving: dx: %d, dy: %d", dx, dy); // Move and resize the view based on the dx/dy and mouse position int midway_x = view->x + view->width/2; int midway_y = view->y + view->height/2; + if (dx < 0) { changed_floating = true; if (mouse_origin.x > midway_x) { sway_log(L_INFO, "Downsizing view to the left"); view->width += dx; + edge += WLC_RESIZE_EDGE_RIGHT; } else { sway_log(L_INFO, "Upsizing view to the left"); view->x += dx; view->width -= dx; + edge += WLC_RESIZE_EDGE_LEFT; } } else if (dx > 0){ changed_floating = true; if (mouse_origin.x > midway_x) { sway_log(L_INFO, "Upsizing to the right"); view->width += dx; + edge += WLC_RESIZE_EDGE_RIGHT; } else { sway_log(L_INFO, "Downsizing to the right"); view->x += dx; view->width -= dx; + edge += WLC_RESIZE_EDGE_LEFT; } } @@ -393,20 +397,25 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct if (mouse_origin.y > midway_y) { sway_log(L_INFO, "Downsizing view to the top"); view->height += dy; + edge += WLC_RESIZE_EDGE_BOTTOM; } else { sway_log(L_INFO, "Upsizing the view to the top"); view->y += dy; view->height -= dy; + edge += WLC_RESIZE_EDGE_TOP; } } else if (dy > 0) { changed_floating = true; if (mouse_origin.y > midway_y) { sway_log(L_INFO, "Upsizing to the bottom"); view->height += dy; + edge += WLC_RESIZE_EDGE_BOTTOM; } else { + edge = WLC_RESIZE_EDGE_BOTTOM; sway_log(L_INFO, "Downsizing to the bottom"); view->y += dy; view->height -= dy; + edge += WLC_RESIZE_EDGE_TOP; } } break; @@ -424,7 +433,17 @@ static bool handle_pointer_motion(wlc_handle handle, uint32_t time, const struct prev_handle = handle; prev_pos = mouse_origin; if (changed_floating) { - arrange_windows(view, -1, -1); + struct wlc_geometry geometry = { + .origin = { + .x = view->x, + .y = view->y + }, + .size = { + .w = view->width, + .h = view->height + } + }; + wlc_view_set_geometry(view->handle, edge, &geometry); return true; } return false; diff --git a/sway/layout.c b/sway/layout.c index 7cb9186a..2f8027a8 100644 --- a/sway/layout.c +++ b/sway/layout.c @@ -237,8 +237,6 @@ void arrange_windows(swayc_t *container, int width, int height) { wlc_view_bring_to_front(view->handle); } else { wlc_view_set_geometry(view->handle, 0, &geometry); - view->width = width; - view->height = height; // Bring the views to the front in order of the list, the list // will be kept up to date so that more recently focused views // have higher indexes |