diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-07-20 09:28:22 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-07-22 23:10:19 +1000 |
commit | ff445cc85597ee6bfae01f03d3c246e2326f3981 (patch) | |
tree | 53c720bc54733d1660bffddf87291c887667d093 /sway/desktop/xdg_shell.c | |
parent | Use wlr_keyboard_get_modifiers (diff) | |
download | sway-ff445cc85597ee6bfae01f03d3c246e2326f3981.tar.gz sway-ff445cc85597ee6bfae01f03d3c246e2326f3981.tar.zst sway-ff445cc85597ee6bfae01f03d3c246e2326f3981.zip |
Implement xdg shell request_move and request_resize events
Also does a few other related things:
* Now uses enum wlr_edges instead of our own enum resize_edge
* Now uses wlr_xcursor_get_resize_name and removes our own
find_resize_edge_name
* Renames drag to move for consistency
Diffstat (limited to 'sway/desktop/xdg_shell.c')
-rw-r--r-- | sway/desktop/xdg_shell.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c index 98c16faf..d6c3a9a7 100644 --- a/sway/desktop/xdg_shell.c +++ b/sway/desktop/xdg_shell.c | |||
@@ -1,4 +1,9 @@ | |||
1 | #define _POSIX_C_SOURCE 199309L | 1 | #define _POSIX_C_SOURCE 199309L |
2 | #ifdef __linux__ | ||
3 | #include <linux/input-event-codes.h> | ||
4 | #elif __FreeBSD__ | ||
5 | #include <dev/evdev/input-event-codes.h> | ||
6 | #endif | ||
2 | #include <stdbool.h> | 7 | #include <stdbool.h> |
3 | #include <stdlib.h> | 8 | #include <stdlib.h> |
4 | #include <wayland-server.h> | 9 | #include <wayland-server.h> |
@@ -248,6 +253,24 @@ static void handle_request_fullscreen(struct wl_listener *listener, void *data) | |||
248 | transaction_commit_dirty(); | 253 | transaction_commit_dirty(); |
249 | } | 254 | } |
250 | 255 | ||
256 | static void handle_request_move(struct wl_listener *listener, void *data) { | ||
257 | struct sway_xdg_shell_view *xdg_shell_view = | ||
258 | wl_container_of(listener, xdg_shell_view, request_move); | ||
259 | struct sway_view *view = &xdg_shell_view->view; | ||
260 | struct wlr_xdg_toplevel_move_event *e = data; | ||
261 | struct sway_seat *seat = e->seat->seat->data; | ||
262 | seat_begin_move(seat, view->swayc); | ||
263 | } | ||
264 | |||
265 | static void handle_request_resize(struct wl_listener *listener, void *data) { | ||
266 | struct sway_xdg_shell_view *xdg_shell_view = | ||
267 | wl_container_of(listener, xdg_shell_view, request_resize); | ||
268 | struct sway_view *view = &xdg_shell_view->view; | ||
269 | struct wlr_xdg_toplevel_resize_event *e = data; | ||
270 | struct sway_seat *seat = e->seat->seat->data; | ||
271 | seat_begin_resize(seat, view->swayc, BTN_LEFT, e->edges); | ||
272 | } | ||
273 | |||
251 | static void handle_unmap(struct wl_listener *listener, void *data) { | 274 | static void handle_unmap(struct wl_listener *listener, void *data) { |
252 | struct sway_xdg_shell_view *xdg_shell_view = | 275 | struct sway_xdg_shell_view *xdg_shell_view = |
253 | wl_container_of(listener, xdg_shell_view, unmap); | 276 | wl_container_of(listener, xdg_shell_view, unmap); |
@@ -262,6 +285,8 @@ static void handle_unmap(struct wl_listener *listener, void *data) { | |||
262 | wl_list_remove(&xdg_shell_view->commit.link); | 285 | wl_list_remove(&xdg_shell_view->commit.link); |
263 | wl_list_remove(&xdg_shell_view->new_popup.link); | 286 | wl_list_remove(&xdg_shell_view->new_popup.link); |
264 | wl_list_remove(&xdg_shell_view->request_fullscreen.link); | 287 | wl_list_remove(&xdg_shell_view->request_fullscreen.link); |
288 | wl_list_remove(&xdg_shell_view->request_move.link); | ||
289 | wl_list_remove(&xdg_shell_view->request_resize.link); | ||
265 | } | 290 | } |
266 | 291 | ||
267 | static void handle_map(struct wl_listener *listener, void *data) { | 292 | static void handle_map(struct wl_listener *listener, void *data) { |
@@ -299,6 +324,14 @@ static void handle_map(struct wl_listener *listener, void *data) { | |||
299 | xdg_shell_view->request_fullscreen.notify = handle_request_fullscreen; | 324 | xdg_shell_view->request_fullscreen.notify = handle_request_fullscreen; |
300 | wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, | 325 | wl_signal_add(&xdg_surface->toplevel->events.request_fullscreen, |
301 | &xdg_shell_view->request_fullscreen); | 326 | &xdg_shell_view->request_fullscreen); |
327 | |||
328 | xdg_shell_view->request_move.notify = handle_request_move; | ||
329 | wl_signal_add(&xdg_surface->toplevel->events.request_move, | ||
330 | &xdg_shell_view->request_move); | ||
331 | |||
332 | xdg_shell_view->request_resize.notify = handle_request_resize; | ||
333 | wl_signal_add(&xdg_surface->toplevel->events.request_resize, | ||
334 | &xdg_shell_view->request_resize); | ||
302 | } | 335 | } |
303 | 336 | ||
304 | static void handle_destroy(struct wl_listener *listener, void *data) { | 337 | static void handle_destroy(struct wl_listener *listener, void *data) { |