Hook to zwp-text-input-unstable-v3
This commit is contained in:
parent
a3f8043afa
commit
c6dc63cf82
3 changed files with 85 additions and 17 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,3 +1,5 @@
|
||||||
wayland
|
wayland
|
||||||
xdg-shell-client-protocol.h
|
xdg-shell-client-protocol.h
|
||||||
xdg-shell-protocol.c
|
xdg-shell-protocol.c
|
||||||
|
zwp-text-input-unstable-v3-client-protocol.c
|
||||||
|
zwp-text-input-unstable-v3-protocol.h
|
||||||
|
|
|
||||||
8
Makefile
8
Makefile
|
|
@ -1,9 +1,13 @@
|
||||||
INTERFACEDIR:=$(shell pkg-config --variable=pkgdatadir wayland-protocols)
|
INTERFACEDIR:=$(shell pkg-config --variable=pkgdatadir wayland-protocols)
|
||||||
CFLAGS=-Wall -Wextra -Og -ggdb3 -Wno-unused-but-set-variable -Wno-unused-parameter
|
CFLAGS=-Wall -Wextra -Og -ggdb3 -Wno-unused-but-set-variable -Wno-unused-parameter
|
||||||
LIBS=-lwayland-client -lwayland-egl -lEGL -lOpenGL -lxkbcommon
|
LIBS=-lwayland-client -lwayland-egl -lEGL -lOpenGL -lxkbcommon
|
||||||
wayland: wayland.c xdg-shell-protocol.c xdg-shell-client-protocol.h
|
wayland: wayland.c xdg-shell-protocol.c xdg-shell-client-protocol.h zwp-text-input-unstable-v3-client-protocol.c zwp-text-input-unstable-v3-protocol.h
|
||||||
gcc $(CFLAGS) $(LIBS) wayland.c xdg-shell-protocol.c -o wayland
|
gcc $(CFLAGS) $(LIBS) wayland.c xdg-shell-protocol.c zwp-text-input-unstable-v3-client-protocol.c -o wayland
|
||||||
xdg-shell-protocol.c:
|
xdg-shell-protocol.c:
|
||||||
wayland-scanner private-code $(INTERFACEDIR)/stable/xdg-shell/xdg-shell.xml xdg-shell-protocol.c
|
wayland-scanner private-code $(INTERFACEDIR)/stable/xdg-shell/xdg-shell.xml xdg-shell-protocol.c
|
||||||
xdg-shell-client-protocol.h:
|
xdg-shell-client-protocol.h:
|
||||||
wayland-scanner client-header $(INTERFACEDIR)/stable/xdg-shell/xdg-shell.xml xdg-shell-client-protocol.h
|
wayland-scanner client-header $(INTERFACEDIR)/stable/xdg-shell/xdg-shell.xml xdg-shell-client-protocol.h
|
||||||
|
zwp-text-input-unstable-v3-client-protocol.c:
|
||||||
|
wayland-scanner private-code $(INTERFACEDIR)/unstable/text-input/text-input-unstable-v3.xml zwp-text-input-unstable-v3-client-protocol.c
|
||||||
|
zwp-text-input-unstable-v3-protocol.h:
|
||||||
|
wayland-scanner client-header $(INTERFACEDIR)/unstable/text-input/text-input-unstable-v3.xml zwp-text-input-unstable-v3-protocol.h
|
||||||
|
|
|
||||||
92
wayland.c
92
wayland.c
|
|
@ -11,6 +11,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
// Generated header using wayland-scanner
|
// Generated header using wayland-scanner
|
||||||
#include "xdg-shell-client-protocol.h"
|
#include "xdg-shell-client-protocol.h"
|
||||||
|
#include "zwp-text-input-unstable-v3-protocol.h"
|
||||||
|
|
||||||
struct wl_compositor *compositor = NULL;
|
struct wl_compositor *compositor = NULL;
|
||||||
struct wl_registry *registry = NULL;
|
struct wl_registry *registry = NULL;
|
||||||
|
|
@ -25,6 +26,11 @@ struct wl_seat *wl_seat = NULL;
|
||||||
struct wl_keyboard *wl_keyboard = NULL;
|
struct wl_keyboard *wl_keyboard = NULL;
|
||||||
struct wl_pointer *wl_pointer = NULL;
|
struct wl_pointer *wl_pointer = NULL;
|
||||||
|
|
||||||
|
/* ZWP text input extension */
|
||||||
|
struct zwp_text_input_v3 *zwp_text_input_v3 = NULL;
|
||||||
|
struct zwp_text_input_manager_v3 *zwp_text_input_manager_v3 = NULL;
|
||||||
|
|
||||||
|
|
||||||
/* XKB library */
|
/* XKB library */
|
||||||
struct xkb_context *xkb_context = NULL;
|
struct xkb_context *xkb_context = NULL;
|
||||||
struct xkb_state *xkb_state = NULL;
|
struct xkb_state *xkb_state = NULL;
|
||||||
|
|
@ -57,8 +63,7 @@ char *egl_s(int code)
|
||||||
void registry_handle_global( void *data, struct wl_registry *registry,
|
void registry_handle_global( void *data, struct wl_registry *registry,
|
||||||
uint32_t name, const char *interface, uint32_t version)
|
uint32_t name, const char *interface, uint32_t version)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Wayland interface: '%s', version: %d, name: %d\n",
|
fprintf(stdout, "Wayland interface: '%s', version: %d, name: %d\n", interface, version, name);
|
||||||
interface, version, name);
|
|
||||||
if (!strcmp(interface, wl_compositor_interface.name))
|
if (!strcmp(interface, wl_compositor_interface.name))
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Registering compositor...\n");
|
fprintf(stdout, "Registering compositor...\n");
|
||||||
|
|
@ -69,19 +74,59 @@ void registry_handle_global( void *data, struct wl_registry *registry,
|
||||||
fprintf(stdout, "Registering XDG WM base interface...\n");
|
fprintf(stdout, "Registering XDG WM base interface...\n");
|
||||||
wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1);
|
wm_base = wl_registry_bind(registry, name, &xdg_wm_base_interface, 1);
|
||||||
}
|
}
|
||||||
/* NOTE: Since wl_seat v5, pointer events are grouped into "frames", which do not appear to be useful for non-touch applications and
|
/* NOTE: Since wl_seat v5, pointer events are grouped into "frames", which do not appear to be useful for non-touch
|
||||||
also create more events which are more complicated to dispatch. */
|
applications and also create more events which are more complicated to dispatch. */
|
||||||
if (!strcmp(interface, wl_seat_interface.name))
|
if (!strcmp(interface, wl_seat_interface.name))
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Registering WL seat interface...\n");
|
fprintf(stdout, "Registering WL seat interface...\n");
|
||||||
wl_seat = wl_registry_bind(registry, name, &wl_seat_interface, 9);
|
wl_seat = wl_registry_bind(registry, name, &wl_seat_interface, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!strcmp(interface, zwp_text_input_manager_v3_interface.name))
|
||||||
|
{
|
||||||
|
zwp_text_input_manager_v3 = wl_registry_bind(registry, name, &zwp_text_input_manager_v3_interface, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void zwp_text_input_v3_enter_callback(void *data, struct zwp_text_input_v3 *text_input, struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "ZWP text input v3 enter callback\n");
|
||||||
|
zwp_text_input_v3 = text_input;
|
||||||
|
zwp_text_input_v3_enable(zwp_text_input_v3);
|
||||||
|
zwp_text_input_v3_commit(zwp_text_input_v3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void zwp_text_input_v3_leave_callback(void *data, struct zwp_text_input_v3 *text_input, struct wl_surface *surface)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "ZWP text input v3 leave callback\n");
|
||||||
|
zwp_text_input_v3_disable(zwp_text_input_v3);
|
||||||
|
zwp_text_input_v3_commit(zwp_text_input_v3);
|
||||||
|
}
|
||||||
|
|
||||||
|
void zwp_text_input_v3_preedit_string_callback(void *data, struct zwp_text_input_v3 *text_input, const char *text, int32_t cursor_begin, int32_t cursor_end)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "ZWP text input v3 preedit string callback\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void zwp_text_input_v3_commit_string_callback(void *data, struct zwp_text_input_v3 *text_input, const char *text)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "ZWP text input v3 commit string callback\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void zwp_text_input_v3_delete_surrounding_text_callback(void *data, struct zwp_text_input_v3 *text_input, uint32_t before_length, uint32_t after_length)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "ZWP text input v3 delete surrounding text callback\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void zwp_text_input_v3_done_callback(void *data, struct zwp_text_input_v3 *text_input, uint32_t surface)
|
||||||
|
{
|
||||||
|
fprintf(stdout, "ZWP text input v3 done callback\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void registry_handle_global_remove(void *data, struct wl_registry *registry,
|
void registry_handle_global_remove(void *data, struct wl_registry *registry,
|
||||||
uint32_t name)
|
uint32_t name)
|
||||||
{
|
{
|
||||||
// This space deliberately left blank
|
// This space deliberately left blank
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct wl_registry_listener
|
static const struct wl_registry_listener
|
||||||
|
|
@ -175,52 +220,52 @@ void repeat_info_callback(void *data, struct wl_keyboard *kb, int rate, int dela
|
||||||
|
|
||||||
void pointer_enter_callback(void *data, struct wl_pointer *pointer, uint serial, struct wl_surface *surface, wl_fixed_t x, wl_fixed_t y)
|
void pointer_enter_callback(void *data, struct wl_pointer *pointer, uint serial, struct wl_surface *surface, wl_fixed_t x, wl_fixed_t y)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer entered WL surface on coordinates %d %d\n", x, y);
|
//fprintf(stdout, "Pointer entered WL surface on coordinates %d %d\n", x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pointer_leave_callback(void *data, struct wl_pointer *pointer, uint serial, struct wl_surface *surface)
|
void pointer_leave_callback(void *data, struct wl_pointer *pointer, uint serial, struct wl_surface *surface)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer left WL surface\n");
|
//fprintf(stdout, "Pointer left WL surface\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void pointer_motion_callback(void *data, struct wl_pointer *pointer, uint time, wl_fixed_t x, wl_fixed_t y)
|
void pointer_motion_callback(void *data, struct wl_pointer *pointer, uint time, wl_fixed_t x, wl_fixed_t y)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer moved to %d %d\n", x, y);
|
//fprintf(stdout, "Pointer moved to %d %d\n", x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pointer_button_callback(void *data, struct wl_pointer *pointer, uint serial, uint time, uint button, uint state)
|
void pointer_button_callback(void *data, struct wl_pointer *pointer, uint serial, uint time, uint button, uint state)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer button %d changed state\n", button);
|
//fprintf(stdout, "Pointer button %d changed state\n", button);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pointer_axis_callback(void *data, struct wl_pointer *pointer, uint time, uint axis, wl_fixed_t value)
|
void pointer_axis_callback(void *data, struct wl_pointer *pointer, uint time, uint axis, wl_fixed_t value)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer scroll on axis %d value %d\n", axis, value);
|
//fprintf(stdout, "Pointer scroll on axis %d value %d\n", axis, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: *some* events are logically grouped together. The frame event marks the boundary between groups of them. More info: https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_pointer */
|
/* NOTE: *some* events are logically grouped together. The frame event marks the boundary between groups of them. More info: https://wayland.freedesktop.org/docs/html/apa.html#protocol-spec-wl_pointer */
|
||||||
|
|
||||||
void pointer_frame_callback(void *data, struct wl_pointer *frame)
|
void pointer_frame_callback(void *data, struct wl_pointer *frame)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer frame ended\n");
|
//fprintf(stdout, "Pointer frame ended\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* NOTE: This event is also used to group pointer events together. It specifies info about all events in its frame */
|
/* NOTE: This event is also used to group pointer events together. It specifies info about all events in its frame */
|
||||||
void pointer_axis_source_callback(void *data, struct wl_pointer *pointer, uint axis_source)
|
void pointer_axis_source_callback(void *data, struct wl_pointer *pointer, uint axis_source)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer axis source: %d\n", axis_source);
|
//fprintf(stdout, "Pointer axis source: %d\n", axis_source);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Optional event to implement kinetic scrolling */
|
/* Optional event to implement kinetic scrolling */
|
||||||
void pointer_axis_stop_callback(void *data, struct wl_pointer *pointer, uint time, uint axis)
|
void pointer_axis_stop_callback(void *data, struct wl_pointer *pointer, uint time, uint axis)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer axis stopped: %d\n", axis);
|
//fprintf(stdout, "Pointer axis stopped: %d\n", axis);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Optional event. Carries discrete scroll info after an 'axis' event */
|
/* Optional event. Carries discrete scroll info after an 'axis' event */
|
||||||
void pointer_axis_discrete_callback(void *data, struct wl_pointer *pointer, uint axis, int discrete)
|
void pointer_axis_discrete_callback(void *data, struct wl_pointer *pointer, uint axis, int discrete)
|
||||||
{
|
{
|
||||||
fprintf(stdout, "Pointer axis discrete step: %d\n", discrete);
|
//fprintf(stdout, "Pointer axis discrete step: %d\n", discrete);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main()
|
int main()
|
||||||
|
|
@ -275,6 +320,23 @@ int main()
|
||||||
fprintf(stderr, "Could not get XKB keyboard\n");
|
fprintf(stderr, "Could not get XKB keyboard\n");
|
||||||
if (!(wl_pointer = wl_seat_get_pointer(wl_seat)))
|
if (!(wl_pointer = wl_seat_get_pointer(wl_seat)))
|
||||||
fprintf(stderr, "Could not get WL pointer\n");
|
fprintf(stderr, "Could not get WL pointer\n");
|
||||||
|
|
||||||
|
if (!zwp_text_input_manager_v3)
|
||||||
|
fprintf(stderr, "Could not get ZWP text input manager\n");
|
||||||
|
else if (!(zwp_text_input_v3 = zwp_text_input_manager_v3_get_text_input(zwp_text_input_manager_v3, wl_seat)))
|
||||||
|
fprintf(stderr, "Could not get ZWP text input handle\n");
|
||||||
|
|
||||||
|
const struct zwp_text_input_v3_listener zwp_text_input_v3_listener = {
|
||||||
|
.enter = zwp_text_input_v3_enter_callback,
|
||||||
|
.leave = zwp_text_input_v3_leave_callback,
|
||||||
|
.preedit_string = zwp_text_input_v3_preedit_string_callback,
|
||||||
|
.commit_string = zwp_text_input_v3_commit_string_callback,
|
||||||
|
.delete_surrounding_text = zwp_text_input_v3_delete_surrounding_text_callback,
|
||||||
|
.done = zwp_text_input_v3_done_callback
|
||||||
|
};
|
||||||
|
|
||||||
|
if (zwp_text_input_v3_add_listener(zwp_text_input_v3, &zwp_text_input_v3_listener, NULL))
|
||||||
|
fprintf(stderr, "Could not add ZWP text input callback\n");
|
||||||
|
|
||||||
const struct wl_seat_listener wl_seat_listener = {
|
const struct wl_seat_listener wl_seat_listener = {
|
||||||
.capabilities = wl_seat_capabilities_callback
|
.capabilities = wl_seat_capabilities_callback
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue