Add interactive.c

This commit is contained in:
Johan Malm 2020-05-29 21:27:34 +01:00
parent d28465dfc3
commit 3b7e2c9e09
5 changed files with 30 additions and 26 deletions

View file

@ -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);

20
src/interactive.c Normal file
View file

@ -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;
}

View file

@ -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')

View file

@ -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;
}

View file

@ -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)