mirror of
https://github.com/swaywm/sway.git
synced 2025-11-09 13:29:49 -05:00
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:
parent
27f65b94ae
commit
9fbe13b9be
11 changed files with 395 additions and 17 deletions
|
|
@ -106,7 +106,7 @@ sway_cmd cmd_exit;
|
|||
sway_cmd cmd_floating;
|
||||
sway_cmd cmd_floating_maximum_size;
|
||||
sway_cmd cmd_floating_minimum_size;
|
||||
sway_cmd cmd_floating_mod;
|
||||
sway_cmd cmd_floating_modifier;
|
||||
sway_cmd cmd_floating_scroll;
|
||||
sway_cmd cmd_focus;
|
||||
sway_cmd cmd_focus_follows_mouse;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -304,6 +304,12 @@ bool container_is_floating(struct sway_container *container);
|
|||
*/
|
||||
void container_get_box(struct sway_container *container, struct wlr_box *box);
|
||||
|
||||
/**
|
||||
* Move a floating container by the specified amount.
|
||||
*/
|
||||
void container_floating_translate(struct sway_container *con,
|
||||
double x_amount, double y_amount);
|
||||
|
||||
/**
|
||||
* Move a floating container to a new layout-local position.
|
||||
*/
|
||||
|
|
@ -318,4 +324,10 @@ void container_set_dirty(struct sway_container *container);
|
|||
|
||||
bool container_has_urgent_child(struct sway_container *container);
|
||||
|
||||
/**
|
||||
* If the container is involved in a drag or resize operation via a mouse, this
|
||||
* ends the operation.
|
||||
*/
|
||||
void container_end_mouse_operation(struct sway_container *container);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -14,10 +14,11 @@ enum movement_direction {
|
|||
};
|
||||
|
||||
enum resize_edge {
|
||||
RESIZE_EDGE_LEFT,
|
||||
RESIZE_EDGE_RIGHT,
|
||||
RESIZE_EDGE_TOP,
|
||||
RESIZE_EDGE_BOTTOM,
|
||||
RESIZE_EDGE_NONE = 0,
|
||||
RESIZE_EDGE_LEFT = 1,
|
||||
RESIZE_EDGE_RIGHT = 2,
|
||||
RESIZE_EDGE_TOP = 4,
|
||||
RESIZE_EDGE_BOTTOM = 8,
|
||||
};
|
||||
|
||||
struct sway_container;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue