diff options
| author | Drew DeVault <sir@cmpwn.com> | 2018-08-18 09:32:04 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-08-18 09:32:04 -0400 | 
| commit | d4a32800d5eb938a769d7802b23f4a0f43cadaef (patch) | |
| tree | 3e6b7b1c065ce043fc4f96a5250f88d9bf3d040c /sway/input/seat.c | |
| parent | 5c779c11f6fc2ca214f64b905086dead170ae174 (diff) | |
| parent | 07a897b3b797b99022a9dfffffc0af2ff50aea85 (diff) | |
| download | sway-d4a32800d5eb938a769d7802b23f4a0f43cadaef.tar.xz | |
Merge pull request #2460 from RyanDwyer/implement-mousedown
Implement mousedown operation
Diffstat (limited to 'sway/input/seat.c')
| -rw-r--r-- | sway/input/seat.c | 27 | 
1 files changed, 26 insertions, 1 deletions
| diff --git a/sway/input/seat.c b/sway/input/seat.c index fa41904a..9d46e760 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c @@ -954,6 +954,18 @@ struct seat_config *seat_get_config(struct sway_seat *seat) {  	return NULL;  } +void seat_begin_down(struct sway_seat *seat, struct sway_container *con, +		uint32_t button, double sx, double sy) { +	seat->operation = OP_DOWN; +	seat->op_container = con; +	seat->op_button = button; +	seat->op_ref_lx = seat->cursor->cursor->x; +	seat->op_ref_ly = seat->cursor->cursor->y; +	seat->op_ref_con_lx = sx; +	seat->op_ref_con_ly = sy; +	seat->op_moved = false; +} +  void seat_begin_move(struct sway_seat *seat, struct sway_container *con,  		uint32_t button) {  	if (!seat->cursor) { @@ -1007,6 +1019,7 @@ void seat_begin_resize_tiling(struct sway_seat *seat,  }  void seat_end_mouse_operation(struct sway_seat *seat) { +	enum sway_seat_operation operation = seat->operation;  	if (seat->operation == OP_MOVE) {  		// We "move" the container to its own location so it discovers its  		// output again. @@ -1015,7 +1028,19 @@ void seat_end_mouse_operation(struct sway_seat *seat) {  	}  	seat->operation = OP_NONE;  	seat->op_container = NULL; -	cursor_set_image(seat->cursor, "left_ptr", NULL); +	if (operation == OP_DOWN) { +		// Set the cursor's previous coords to the x/y at the start of the +		// operation, so the container change will be detected if using +		// focus_follows_mouse and the cursor moved off the original container +		// during the operation. +		seat->cursor->previous.x = seat->op_ref_lx; +		seat->cursor->previous.y = seat->op_ref_ly; +		if (seat->op_moved) { +			cursor_send_pointer_motion(seat->cursor, 0, true); +		} +	} else { +		cursor_set_image(seat->cursor, "left_ptr", NULL); +	}  }  void seat_pointer_notify_button(struct sway_seat *seat, uint32_t time_msec, | 
