From 3b7e2c9e09fb394421efd6442929b32b55a914ec Mon Sep 17 00:00:00 2001 From: Johan Malm Date: Fri, 29 May 2020 21:27:34 +0100 Subject: [PATCH] Add interactive.c --- include/labwc.h | 3 ++- src/interactive.c | 20 ++++++++++++++++++++ src/meson.build | 5 +++-- src/server.c | 24 +++--------------------- src/xdg.c | 4 ++-- 5 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 src/interactive.c diff --git a/include/labwc.h b/include/labwc.h index 5823dd45..a8382613 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -161,8 +161,9 @@ struct view *view_at(struct server *server, double lx, double ly, struct wlr_surface **surface, double *sx, double *sy, int *view_area); -void begin_interactive(struct view *view, enum cursor_mode mode, +void interactive_begin(struct view *view, enum cursor_mode mode, uint32_t edges); + void server_new_input(struct wl_listener *listener, void *data); void seat_request_cursor(struct wl_listener *listener, void *data); void seat_request_set_selection(struct wl_listener *listener, void *data); diff --git a/src/interactive.c b/src/interactive.c new file mode 100644 index 00000000..7022ead9 --- /dev/null +++ b/src/interactive.c @@ -0,0 +1,20 @@ +#include "labwc.h" + +void interactive_begin(struct view *view, enum cursor_mode mode, uint32_t edges) +{ + /* + * This function sets up an interactive move or resize operation, where + * the compositor stops propegating pointer events to clients and + * instead consumes them itself, to move or resize windows. + */ + struct server *server = view->server; + server->grabbed_view = view; + server->cursor_mode = mode; + + /* Remember view and cursor positions at start of move/resize */ + server->grab_x = server->cursor->x; + server->grab_y = server->cursor->y; + server->grab_box = view_geometry(view); + server->resize_edges = edges; +} + diff --git a/src/meson.build b/src/meson.build index 36fc8a26..1f1aa33a 100644 --- a/src/meson.build +++ b/src/meson.build @@ -1,11 +1,12 @@ labwc_sources = files( + 'deco.c', + 'interactive.c', 'main.c', - 'server.c', 'output.c', + 'server.c', 'view.c', 'xdg.c', 'xwl.c', - 'deco.c', ) subdir('debug') diff --git a/src/server.c b/src/server.c index ae4706b2..69a2f490 100644 --- a/src/server.c +++ b/src/server.c @@ -3,24 +3,6 @@ #define MIN_VIEW_WIDTH (100) #define MIN_VIEW_HEIGHT (60) -void begin_interactive(struct view *view, enum cursor_mode mode, uint32_t edges) -{ - /* - * This function sets up an interactive move or resize operation, where - * the compositor stops propegating pointer events to clients and - * instead consumes them itself, to move or resize windows. - */ - struct server *server = view->server; - server->grabbed_view = view; - server->cursor_mode = mode; - - /* Remember view and cursor positions at start of move/resize */ - server->grab_x = server->cursor->x; - server->grab_y = server->cursor->y; - server->grab_box = view_geometry(view); - server->resize_edges = edges; -} - static void keyboard_handle_modifiers(struct wl_listener *listener, void *data) { /* @@ -65,7 +47,7 @@ static bool handle_keybinding(struct server *server, xkb_keysym_t sym) } break; case XKB_KEY_F6: - begin_interactive(view_front_toplevel(server), + interactive_begin(view_front_toplevel(server), TINYWL_CURSOR_MOVE, 0); break; case XKB_KEY_F12: @@ -403,10 +385,10 @@ void server_cursor_button(struct wl_listener *listener, void *data) view_focus(view); switch (view_area) { case LAB_DECO_PART_TOP: - begin_interactive(view, TINYWL_CURSOR_MOVE, 0); + interactive_begin(view, TINYWL_CURSOR_MOVE, 0); break; case LAB_DECO_PART_LEFT: - begin_interactive(view, TINYWL_CURSOR_RESIZE, + interactive_begin(view, TINYWL_CURSOR_RESIZE, WLR_EDGE_LEFT); break; } diff --git a/src/xdg.c b/src/xdg.c index 39310d4f..267a8e16 100644 --- a/src/xdg.c +++ b/src/xdg.c @@ -81,7 +81,7 @@ void xdg_toplevel_request_move(struct wl_listener *listener, void *data) * client, to prevent the client from requesting this whenever they * want. */ struct view *view = wl_container_of(listener, view, request_move); - begin_interactive(view, TINYWL_CURSOR_MOVE, 0); + interactive_begin(view, TINYWL_CURSOR_MOVE, 0); } void xdg_toplevel_request_resize(struct wl_listener *listener, void *data) @@ -95,7 +95,7 @@ void xdg_toplevel_request_resize(struct wl_listener *listener, void *data) * want. */ struct wlr_xdg_toplevel_resize_event *event = data; struct view *view = wl_container_of(listener, view, request_resize); - begin_interactive(view, TINYWL_CURSOR_RESIZE, event->edges); + interactive_begin(view, TINYWL_CURSOR_RESIZE, event->edges); } void xdg_surface_new(struct wl_listener *listener, void *data) -- 2.52.0