diff options
Diffstat (limited to 'sway/input/seat.c')
-rw-r--r-- | sway/input/seat.c | 47 |
1 files changed, 26 insertions, 21 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c index 2c9a85c4..2d355275 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c | |||
@@ -365,7 +365,7 @@ static void handle_start_drag(struct wl_listener *listener, void *data) { | |||
365 | wl_list_insert(&root->drag_icons, &icon->link); | 365 | wl_list_insert(&root->drag_icons, &icon->link); |
366 | 366 | ||
367 | drag_icon_update_position(icon); | 367 | drag_icon_update_position(icon); |
368 | seatop_abort(seat); | 368 | seatop_begin_default(seat); |
369 | } | 369 | } |
370 | 370 | ||
371 | static void handle_request_set_selection(struct wl_listener *listener, | 371 | static void handle_request_set_selection(struct wl_listener *listener, |
@@ -461,6 +461,8 @@ struct sway_seat *seat_create(const char *seat_name) { | |||
461 | 461 | ||
462 | wl_list_insert(&server.input->seats, &seat->link); | 462 | wl_list_insert(&server.input->seats, &seat->link); |
463 | 463 | ||
464 | seatop_begin_default(seat); | ||
465 | |||
464 | return seat; | 466 | return seat; |
465 | } | 467 | } |
466 | 468 | ||
@@ -1175,7 +1177,6 @@ struct seat_config *seat_get_config_by_name(const char *name) { | |||
1175 | 1177 | ||
1176 | void seat_pointer_notify_button(struct sway_seat *seat, uint32_t time_msec, | 1178 | void seat_pointer_notify_button(struct sway_seat *seat, uint32_t time_msec, |
1177 | uint32_t button, enum wlr_button_state state) { | 1179 | uint32_t button, enum wlr_button_state state) { |
1178 | seat->last_button = button; | ||
1179 | seat->last_button_serial = wlr_seat_pointer_notify_button(seat->wlr_seat, | 1180 | seat->last_button_serial = wlr_seat_pointer_notify_button(seat->wlr_seat, |
1180 | time_msec, button, state); | 1181 | time_msec, button, state); |
1181 | } | 1182 | } |
@@ -1206,12 +1207,8 @@ void seat_consider_warp_to_focus(struct sway_seat *seat) { | |||
1206 | } | 1207 | } |
1207 | } | 1208 | } |
1208 | 1209 | ||
1209 | bool seat_doing_seatop(struct sway_seat *seat) { | ||
1210 | return seat->seatop_impl != NULL; | ||
1211 | } | ||
1212 | |||
1213 | void seatop_unref(struct sway_seat *seat, struct sway_container *con) { | 1210 | void seatop_unref(struct sway_seat *seat, struct sway_container *con) { |
1214 | if (seat->seatop_impl && seat->seatop_impl->unref) { | 1211 | if (seat->seatop_impl->unref) { |
1215 | seat->seatop_impl->unref(seat, con); | 1212 | seat->seatop_impl->unref(seat, con); |
1216 | } | 1213 | } |
1217 | } | 1214 | } |
@@ -1219,29 +1216,33 @@ void seatop_unref(struct sway_seat *seat, struct sway_container *con) { | |||
1219 | void seatop_button(struct sway_seat *seat, uint32_t time_msec, | 1216 | void seatop_button(struct sway_seat *seat, uint32_t time_msec, |
1220 | struct wlr_input_device *device, uint32_t button, | 1217 | struct wlr_input_device *device, uint32_t button, |
1221 | enum wlr_button_state state) { | 1218 | enum wlr_button_state state) { |
1222 | if (seat->seatop_impl && seat->seatop_impl->button) { | 1219 | if (seat->seatop_impl->button) { |
1223 | seat->seatop_impl->button(seat, time_msec, device, button, state); | 1220 | seat->seatop_impl->button(seat, time_msec, device, button, state); |
1224 | } | 1221 | } |
1225 | } | 1222 | } |
1226 | 1223 | ||
1227 | void seatop_motion(struct sway_seat *seat, uint32_t time_msec) { | 1224 | void seatop_motion(struct sway_seat *seat, uint32_t time_msec, |
1228 | if (seat->seatop_impl && seat->seatop_impl->motion) { | 1225 | double dx, double dy) { |
1229 | seat->seatop_impl->motion(seat, time_msec); | 1226 | if (seat->seatop_impl->motion) { |
1227 | seat->seatop_impl->motion(seat, time_msec, dx, dy); | ||
1230 | } | 1228 | } |
1231 | } | 1229 | } |
1232 | 1230 | ||
1233 | void seatop_finish(struct sway_seat *seat, uint32_t time_msec) { | 1231 | void seatop_axis(struct sway_seat *seat, struct wlr_event_pointer_axis *event) { |
1234 | if (seat->seatop_impl && seat->seatop_impl->finish) { | 1232 | if (seat->seatop_impl->axis) { |
1235 | seat->seatop_impl->finish(seat, time_msec); | 1233 | seat->seatop_impl->axis(seat, event); |
1236 | } | 1234 | } |
1237 | free(seat->seatop_data); | ||
1238 | seat->seatop_data = NULL; | ||
1239 | seat->seatop_impl = NULL; | ||
1240 | } | 1235 | } |
1241 | 1236 | ||
1242 | void seatop_abort(struct sway_seat *seat) { | 1237 | void seatop_rebase(struct sway_seat *seat, uint32_t time_msec) { |
1243 | if (seat->seatop_impl && seat->seatop_impl->abort) { | 1238 | if (seat->seatop_impl->rebase) { |
1244 | seat->seatop_impl->abort(seat); | 1239 | seat->seatop_impl->rebase(seat, time_msec); |
1240 | } | ||
1241 | } | ||
1242 | |||
1243 | void seatop_end(struct sway_seat *seat) { | ||
1244 | if (seat->seatop_impl && seat->seatop_impl->end) { | ||
1245 | seat->seatop_impl->end(seat); | ||
1245 | } | 1246 | } |
1246 | free(seat->seatop_data); | 1247 | free(seat->seatop_data); |
1247 | seat->seatop_data = NULL; | 1248 | seat->seatop_data = NULL; |
@@ -1250,7 +1251,11 @@ void seatop_abort(struct sway_seat *seat) { | |||
1250 | 1251 | ||
1251 | void seatop_render(struct sway_seat *seat, struct sway_output *output, | 1252 | void seatop_render(struct sway_seat *seat, struct sway_output *output, |
1252 | pixman_region32_t *damage) { | 1253 | pixman_region32_t *damage) { |
1253 | if (seat->seatop_impl && seat->seatop_impl->render) { | 1254 | if (seat->seatop_impl->render) { |
1254 | seat->seatop_impl->render(seat, output, damage); | 1255 | seat->seatop_impl->render(seat, output, damage); |
1255 | } | 1256 | } |
1256 | } | 1257 | } |
1258 | |||
1259 | bool seatop_allows_set_cursor(struct sway_seat *seat) { | ||
1260 | return seat->seatop_impl->allow_set_cursor; | ||
1261 | } | ||