diff options
Diffstat (limited to 'sway/input/seatop_move_tiling.c')
-rw-r--r-- | sway/input/seatop_move_tiling.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/sway/input/seatop_move_tiling.c b/sway/input/seatop_move_tiling.c index 2904792b..0a248091 100644 --- a/sway/input/seatop_move_tiling.c +++ b/sway/input/seatop_move_tiling.c | |||
@@ -206,7 +206,8 @@ static void handle_motion_postthreshold(struct sway_seat *seat) { | |||
206 | desktop_damage_box(&e->drop_box); | 206 | desktop_damage_box(&e->drop_box); |
207 | } | 207 | } |
208 | 208 | ||
209 | static void handle_motion(struct sway_seat *seat, uint32_t time_msec) { | 209 | static void handle_motion(struct sway_seat *seat, uint32_t time_msec, |
210 | double dx, double dy) { | ||
210 | struct seatop_move_tiling_event *e = seat->seatop_data; | 211 | struct seatop_move_tiling_event *e = seat->seatop_data; |
211 | if (e->threshold_reached) { | 212 | if (e->threshold_reached) { |
212 | handle_motion_postthreshold(seat); | 213 | handle_motion_postthreshold(seat); |
@@ -215,10 +216,6 @@ static void handle_motion(struct sway_seat *seat, uint32_t time_msec) { | |||
215 | } | 216 | } |
216 | } | 217 | } |
217 | 218 | ||
218 | static void handle_abort(struct sway_seat *seat) { | ||
219 | cursor_set_image(seat->cursor, "left_ptr", NULL); | ||
220 | } | ||
221 | |||
222 | static bool is_parallel(enum sway_container_layout layout, | 219 | static bool is_parallel(enum sway_container_layout layout, |
223 | enum wlr_edges edge) { | 220 | enum wlr_edges edge) { |
224 | bool layout_is_horiz = layout == L_HORIZ || layout == L_TABBED; | 221 | bool layout_is_horiz = layout == L_HORIZ || layout == L_TABBED; |
@@ -226,11 +223,17 @@ static bool is_parallel(enum sway_container_layout layout, | |||
226 | return layout_is_horiz == edge_is_horiz; | 223 | return layout_is_horiz == edge_is_horiz; |
227 | } | 224 | } |
228 | 225 | ||
229 | static void handle_finish(struct sway_seat *seat, uint32_t time_msec) { | 226 | static void handle_button(struct sway_seat *seat, uint32_t time_msec, |
227 | struct wlr_input_device *device, uint32_t button, | ||
228 | enum wlr_button_state state) { | ||
229 | if (seat->cursor->pressed_button_count != 0) { | ||
230 | return; | ||
231 | } | ||
232 | |||
230 | struct seatop_move_tiling_event *e = seat->seatop_data; | 233 | struct seatop_move_tiling_event *e = seat->seatop_data; |
231 | 234 | ||
232 | if (!e->target_node) { | 235 | if (!e->target_node) { |
233 | handle_abort(seat); | 236 | seatop_begin_default(seat); |
234 | return; | 237 | return; |
235 | } | 238 | } |
236 | 239 | ||
@@ -287,7 +290,7 @@ static void handle_finish(struct sway_seat *seat, uint32_t time_msec) { | |||
287 | arrange_workspace(new_ws); | 290 | arrange_workspace(new_ws); |
288 | } | 291 | } |
289 | 292 | ||
290 | cursor_set_image(seat->cursor, "left_ptr", NULL); | 293 | seatop_begin_default(seat); |
291 | } | 294 | } |
292 | 295 | ||
293 | static void handle_unref(struct sway_seat *seat, struct sway_container *con) { | 296 | static void handle_unref(struct sway_seat *seat, struct sway_container *con) { |
@@ -296,21 +299,20 @@ static void handle_unref(struct sway_seat *seat, struct sway_container *con) { | |||
296 | e->target_node = NULL; | 299 | e->target_node = NULL; |
297 | } | 300 | } |
298 | if (e->con == con) { // The container being moved | 301 | if (e->con == con) { // The container being moved |
299 | seatop_abort(seat); | 302 | seatop_begin_default(seat); |
300 | } | 303 | } |
301 | } | 304 | } |
302 | 305 | ||
303 | static const struct sway_seatop_impl seatop_impl = { | 306 | static const struct sway_seatop_impl seatop_impl = { |
307 | .button = handle_button, | ||
304 | .motion = handle_motion, | 308 | .motion = handle_motion, |
305 | .finish = handle_finish, | ||
306 | .abort = handle_abort, | ||
307 | .unref = handle_unref, | 309 | .unref = handle_unref, |
308 | .render = handle_render, | 310 | .render = handle_render, |
309 | }; | 311 | }; |
310 | 312 | ||
311 | void seatop_begin_move_tiling_threshold(struct sway_seat *seat, | 313 | void seatop_begin_move_tiling_threshold(struct sway_seat *seat, |
312 | struct sway_container *con, uint32_t button) { | 314 | struct sway_container *con) { |
313 | seatop_abort(seat); | 315 | seatop_end(seat); |
314 | 316 | ||
315 | struct seatop_move_tiling_event *e = | 317 | struct seatop_move_tiling_event *e = |
316 | calloc(1, sizeof(struct seatop_move_tiling_event)); | 318 | calloc(1, sizeof(struct seatop_move_tiling_event)); |
@@ -323,14 +325,13 @@ void seatop_begin_move_tiling_threshold(struct sway_seat *seat, | |||
323 | 325 | ||
324 | seat->seatop_impl = &seatop_impl; | 326 | seat->seatop_impl = &seatop_impl; |
325 | seat->seatop_data = e; | 327 | seat->seatop_data = e; |
326 | seat->seatop_button = button; | ||
327 | 328 | ||
328 | container_raise_floating(con); | 329 | container_raise_floating(con); |
329 | } | 330 | } |
330 | 331 | ||
331 | void seatop_begin_move_tiling(struct sway_seat *seat, | 332 | void seatop_begin_move_tiling(struct sway_seat *seat, |
332 | struct sway_container *con, uint32_t button) { | 333 | struct sway_container *con) { |
333 | seatop_begin_move_tiling_threshold(seat, con, button); | 334 | seatop_begin_move_tiling_threshold(seat, con); |
334 | struct seatop_move_tiling_event *e = seat->seatop_data; | 335 | struct seatop_move_tiling_event *e = seat->seatop_data; |
335 | if (e) { | 336 | if (e) { |
336 | e->threshold_reached = true; | 337 | e->threshold_reached = true; |