mirror of
https://github.com/labwc/labwc.git
synced 2026-04-06 07:15:40 -04:00
Add interactive.c
This commit is contained in:
parent
d28465dfc3
commit
3b7e2c9e09
5 changed files with 30 additions and 26 deletions
|
|
@ -161,8 +161,9 @@ struct view *view_at(struct server *server, double lx, double ly,
|
||||||
struct wlr_surface **surface, double *sx, double *sy,
|
struct wlr_surface **surface, double *sx, double *sy,
|
||||||
int *view_area);
|
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);
|
uint32_t edges);
|
||||||
|
|
||||||
void server_new_input(struct wl_listener *listener, void *data);
|
void server_new_input(struct wl_listener *listener, void *data);
|
||||||
void seat_request_cursor(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);
|
void seat_request_set_selection(struct wl_listener *listener, void *data);
|
||||||
|
|
|
||||||
20
src/interactive.c
Normal file
20
src/interactive.c
Normal 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -1,11 +1,12 @@
|
||||||
labwc_sources = files(
|
labwc_sources = files(
|
||||||
|
'deco.c',
|
||||||
|
'interactive.c',
|
||||||
'main.c',
|
'main.c',
|
||||||
'server.c',
|
|
||||||
'output.c',
|
'output.c',
|
||||||
|
'server.c',
|
||||||
'view.c',
|
'view.c',
|
||||||
'xdg.c',
|
'xdg.c',
|
||||||
'xwl.c',
|
'xwl.c',
|
||||||
'deco.c',
|
|
||||||
)
|
)
|
||||||
|
|
||||||
subdir('debug')
|
subdir('debug')
|
||||||
|
|
|
||||||
24
src/server.c
24
src/server.c
|
|
@ -3,24 +3,6 @@
|
||||||
#define MIN_VIEW_WIDTH (100)
|
#define MIN_VIEW_WIDTH (100)
|
||||||
#define MIN_VIEW_HEIGHT (60)
|
#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)
|
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;
|
break;
|
||||||
case XKB_KEY_F6:
|
case XKB_KEY_F6:
|
||||||
begin_interactive(view_front_toplevel(server),
|
interactive_begin(view_front_toplevel(server),
|
||||||
TINYWL_CURSOR_MOVE, 0);
|
TINYWL_CURSOR_MOVE, 0);
|
||||||
break;
|
break;
|
||||||
case XKB_KEY_F12:
|
case XKB_KEY_F12:
|
||||||
|
|
@ -403,10 +385,10 @@ void server_cursor_button(struct wl_listener *listener, void *data)
|
||||||
view_focus(view);
|
view_focus(view);
|
||||||
switch (view_area) {
|
switch (view_area) {
|
||||||
case LAB_DECO_PART_TOP:
|
case LAB_DECO_PART_TOP:
|
||||||
begin_interactive(view, TINYWL_CURSOR_MOVE, 0);
|
interactive_begin(view, TINYWL_CURSOR_MOVE, 0);
|
||||||
break;
|
break;
|
||||||
case LAB_DECO_PART_LEFT:
|
case LAB_DECO_PART_LEFT:
|
||||||
begin_interactive(view, TINYWL_CURSOR_RESIZE,
|
interactive_begin(view, TINYWL_CURSOR_RESIZE,
|
||||||
WLR_EDGE_LEFT);
|
WLR_EDGE_LEFT);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
* client, to prevent the client from requesting this whenever they
|
||||||
* want. */
|
* want. */
|
||||||
struct view *view = wl_container_of(listener, view, request_move);
|
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)
|
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. */
|
* want. */
|
||||||
struct wlr_xdg_toplevel_resize_event *event = data;
|
struct wlr_xdg_toplevel_resize_event *event = data;
|
||||||
struct view *view = wl_container_of(listener, view, request_resize);
|
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)
|
void xdg_surface_new(struct wl_listener *listener, void *data)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue