mirror of
https://gitlab.freedesktop.org/wayland/wayland.git
synced 2026-04-21 06:46:33 -04:00
Add keyboard input, move input device creation to compositor.
This commit is contained in:
parent
ec8ef722e9
commit
cddc0ad502
5 changed files with 88 additions and 40 deletions
59
wayland.c
59
wayland.c
|
|
@ -511,27 +511,6 @@ static const struct wl_interface display_interface = {
|
|||
ARRAY_LENGTH(display_events), display_events,
|
||||
};
|
||||
|
||||
static const char input_device_file[] =
|
||||
"/dev/input/by-id/usb-Apple__Inc._Apple_Internal_Keyboard_._Trackpad-event-mouse";
|
||||
|
||||
static void
|
||||
wl_display_create_input_devices(struct wl_display *display)
|
||||
{
|
||||
const char *path;
|
||||
|
||||
path = getenv("WAYLAND_POINTER");
|
||||
if (path == NULL)
|
||||
path = input_device_file;
|
||||
|
||||
display->pointer = wl_input_device_create(display, path, 1);
|
||||
|
||||
if (display->pointer != NULL)
|
||||
wl_display_add_object(display, display->pointer);
|
||||
|
||||
display->pointer_x = 100;
|
||||
display->pointer_y = 100;
|
||||
}
|
||||
|
||||
static struct wl_display *
|
||||
wl_display_create(void)
|
||||
{
|
||||
|
|
@ -551,7 +530,8 @@ wl_display_create(void)
|
|||
wl_list_init(&display->client_list);
|
||||
wl_list_init(&display->global_list);
|
||||
|
||||
wl_display_create_input_devices(display);
|
||||
display->pointer_x = 100;
|
||||
display->pointer_y = 100;
|
||||
|
||||
display->client_id_range = 256; /* Gah, arbitrary... */
|
||||
|
||||
|
|
@ -604,10 +584,11 @@ wl_display_send_event(struct wl_display *display, uint32_t *data, size_t size)
|
|||
}
|
||||
}
|
||||
|
||||
#define WL_POINTER_MOTION 0
|
||||
#define WL_POINTER_BUTTON 1
|
||||
#define WL_INPUT_MOTION 0
|
||||
#define WL_INPUT_BUTTON 1
|
||||
#define WL_INPUT_KEY 2
|
||||
|
||||
void
|
||||
WL_EXPORT void
|
||||
wl_display_post_relative_event(struct wl_display *display,
|
||||
struct wl_object *source, int dx, int dy)
|
||||
{
|
||||
|
|
@ -622,14 +603,14 @@ wl_display_post_relative_event(struct wl_display *display,
|
|||
display->pointer_x, display->pointer_y);
|
||||
|
||||
p[0] = source->id;
|
||||
p[1] = (sizeof p << 16) | WL_POINTER_MOTION;
|
||||
p[1] = (sizeof p << 16) | WL_INPUT_MOTION;
|
||||
p[2] = display->pointer_x;
|
||||
p[3] = display->pointer_y;
|
||||
|
||||
wl_display_send_event(display, p, sizeof p);
|
||||
}
|
||||
|
||||
void
|
||||
WL_EXPORT void
|
||||
wl_display_post_absolute_event(struct wl_display *display,
|
||||
struct wl_object *source, int x, int y)
|
||||
{
|
||||
|
|
@ -644,27 +625,45 @@ wl_display_post_absolute_event(struct wl_display *display,
|
|||
display->pointer_x, display->pointer_y);
|
||||
|
||||
p[0] = source->id;
|
||||
p[1] = (sizeof p << 16) | WL_POINTER_MOTION;
|
||||
p[1] = (sizeof p << 16) | WL_INPUT_MOTION;
|
||||
p[2] = display->pointer_x;
|
||||
p[3] = display->pointer_y;
|
||||
|
||||
wl_display_send_event(display, p, sizeof p);
|
||||
}
|
||||
|
||||
void
|
||||
WL_EXPORT void
|
||||
wl_display_post_button_event(struct wl_display *display,
|
||||
struct wl_object *source, int button, int state)
|
||||
{
|
||||
uint32_t p[4];
|
||||
|
||||
p[0] = source->id;
|
||||
p[1] = (sizeof p << 16) | WL_POINTER_BUTTON;
|
||||
p[1] = (sizeof p << 16) | WL_INPUT_BUTTON;
|
||||
p[2] = button;
|
||||
p[3] = state;
|
||||
|
||||
wl_display_send_event(display, p, sizeof p);
|
||||
}
|
||||
|
||||
WL_EXPORT void
|
||||
wl_display_post_key_event(struct wl_display *display,
|
||||
struct wl_object *source, int key, int state)
|
||||
{
|
||||
const struct wl_compositor_interface *interface;
|
||||
uint32_t p[4];
|
||||
|
||||
interface = display->compositor->interface;
|
||||
interface->notify_key(display->compositor, source, key, state);
|
||||
|
||||
p[0] = source->id;
|
||||
p[1] = (sizeof p << 16) | WL_INPUT_KEY;
|
||||
p[2] = key;
|
||||
p[3] = state;
|
||||
|
||||
wl_display_send_event(display, p, sizeof p);
|
||||
}
|
||||
|
||||
void
|
||||
wl_display_set_compositor(struct wl_display *display,
|
||||
struct wl_compositor *compositor)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue