Implement floating_modifier and mouse operations for floating views

This implements the following:

* `floating_modifier` configuration directive
* Drag a floating window by its title bar
* Hold mod + drag a floating window from anywhere
* Resize a floating view by dragging the border
* Resize a floating view by holding mod and right clicking anywhere on
the view
* Resize a floating view and keep aspect ratio by holding shift while
resizing using either method
* Mouse cursor turns into resize when hovering floating border or corner
This commit is contained in:
Ryan Dwyer 2018-07-18 16:13:28 +10:00
parent 27f65b94ae
commit 9fbe13b9be
11 changed files with 395 additions and 17 deletions

View file

@ -34,6 +34,8 @@ struct sway_drag_icon {
struct wl_listener destroy;
};
enum resize_edge;
struct sway_seat {
struct wlr_seat *wlr_seat;
struct sway_cursor *cursor;
@ -52,6 +54,20 @@ struct sway_seat {
int32_t touch_id;
double touch_x, touch_y;
// Operations (drag and resize)
enum {
OP_NONE,
OP_DRAG,
OP_RESIZE,
} operation;
struct sway_container *op_container;
enum resize_edge op_resize_edge;
uint32_t op_button;
bool op_resize_preserve_ratio;
double op_ref_lx, op_ref_ly; // cursor's x/y at start of op
double op_ref_width, op_ref_height; // container's size at start of op
double op_ref_con_lx, op_ref_con_ly; // container's x/y at start of op
struct wl_listener focus_destroy;
struct wl_listener new_container;
struct wl_listener new_drag_icon;