Migrate from wl_input_device to wl_seat
Change-Id: I0d218c32478c2acce4d7012bdb26b0cde50ee633 Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
parent
5e002bc961
commit
ab9a05f213
@ -197,10 +197,14 @@ Compositor::Compositor()
|
||||
|
||||
wl_display_add_socket(m_display, 0);
|
||||
|
||||
wl_input_device_init(&m_input);
|
||||
wl_seat_init(&m_seat);
|
||||
wl_pointer_init(&m_pointer);
|
||||
wl_seat_set_pointer(&m_seat, &m_pointer);
|
||||
wl_keyboard_init(&m_keyboard);
|
||||
wl_seat_set_keyboard(&m_seat, &m_keyboard);
|
||||
|
||||
wl_display_add_global(m_display, &wl_compositor_interface, this, bindCompositor);
|
||||
wl_display_add_global(m_display, &wl_input_device_interface, this, bindInput);
|
||||
wl_display_add_global(m_display, &wl_seat_interface, this, bindSeat);
|
||||
wl_display_add_global(m_display, &wl_output_interface, this, bindOutput);
|
||||
wl_display_add_global(m_display, &wl_shell_interface, this, bindShell);
|
||||
|
||||
@ -212,6 +216,8 @@ Compositor::Compositor()
|
||||
|
||||
Compositor::~Compositor()
|
||||
{
|
||||
wl_pointer_release(&m_pointer);
|
||||
wl_keyboard_release(&m_keyboard);
|
||||
wl_display_destroy(m_display);
|
||||
}
|
||||
|
||||
|
@ -87,10 +87,14 @@ public:
|
||||
|
||||
private:
|
||||
static void bindCompositor(wl_client *client, void *data, uint32_t version, uint32_t id);
|
||||
static void bindInput(wl_client *client, void *data, uint32_t version, uint32_t id);
|
||||
static void bindSeat(wl_client *client, void *data, uint32_t version, uint32_t id);
|
||||
static void bindOutput(wl_client *client, void *data, uint32_t version, uint32_t id);
|
||||
static void bindShell(wl_client *client, void *data, uint32_t version, uint32_t id);
|
||||
|
||||
static void get_pointer(wl_client *client, wl_resource *resource, uint32_t id);
|
||||
static void get_keyboard(wl_client *client, wl_resource *resource, uint32_t id);
|
||||
static void get_touch(wl_client *client, wl_resource *resource, uint32_t id);
|
||||
|
||||
static void destroyInputResource(wl_resource *resource);
|
||||
|
||||
void initShm();
|
||||
@ -108,7 +112,9 @@ private:
|
||||
wl_list m_outputResources;
|
||||
uint32_t m_time;
|
||||
|
||||
wl_input_device m_input;
|
||||
wl_seat m_seat;
|
||||
wl_pointer m_pointer;
|
||||
wl_keyboard m_keyboard;
|
||||
QVector<Surface *> m_surfaces;
|
||||
};
|
||||
|
||||
|
@ -47,22 +47,29 @@ namespace Impl {
|
||||
void Compositor::destroyInputResource(wl_resource *resource)
|
||||
{
|
||||
Compositor *compositor = static_cast<Compositor *>(resource->data);
|
||||
wl_input_device *input = &compositor->m_input;
|
||||
wl_keyboard *keyboard = &compositor->m_keyboard;
|
||||
wl_pointer *pointer = &compositor->m_pointer;
|
||||
|
||||
if (input->keyboard_focus_resource == resource)
|
||||
input->keyboard_focus_resource = 0;
|
||||
if (input->pointer_focus_resource == resource)
|
||||
input->pointer_focus_resource = 0;
|
||||
if (keyboard->focus_resource == resource)
|
||||
keyboard->focus_resource = 0;
|
||||
if (pointer->focus_resource == resource)
|
||||
pointer->focus_resource = 0;
|
||||
|
||||
wl_list_remove(&resource->link);
|
||||
|
||||
free(resource);
|
||||
}
|
||||
|
||||
void input_device_attach(wl_client *client,
|
||||
wl_resource *device_resource,
|
||||
uint32_t time,
|
||||
wl_resource *buffer_resource, int32_t x, int32_t y)
|
||||
static void destroyInputDevice(wl_resource *resource)
|
||||
{
|
||||
wl_list_remove(&resource->link);
|
||||
free(resource);
|
||||
}
|
||||
|
||||
void pointer_attach(wl_client *client,
|
||||
wl_resource *device_resource,
|
||||
uint32_t time,
|
||||
wl_resource *buffer_resource, int32_t x, int32_t y)
|
||||
{
|
||||
Q_UNUSED(client);
|
||||
Q_UNUSED(device_resource);
|
||||
@ -71,18 +78,64 @@ void input_device_attach(wl_client *client,
|
||||
Q_UNUSED(QPoint(x, y));
|
||||
}
|
||||
|
||||
void Compositor::bindInput(wl_client *client, void *compositorData, uint32_t version, uint32_t id)
|
||||
void Compositor::get_pointer(wl_client *client,
|
||||
wl_resource *resource,
|
||||
uint32_t id)
|
||||
{
|
||||
static const struct wl_input_device_interface inputDeviceInterface = {
|
||||
input_device_attach,
|
||||
static const struct wl_pointer_interface pointer_interface = {
|
||||
pointer_attach
|
||||
};
|
||||
Compositor *compositor = static_cast<Compositor *>(resource->data);
|
||||
wl_pointer *pointer = &compositor->m_pointer;
|
||||
wl_resource *clientResource = wl_client_add_object(client,
|
||||
&wl_pointer_interface,
|
||||
&pointer_interface,
|
||||
id,
|
||||
pointer);
|
||||
wl_list_insert(&pointer->resource_list, &clientResource->link);
|
||||
clientResource->destroy = destroyInputDevice;
|
||||
}
|
||||
|
||||
void Compositor::get_keyboard(wl_client *client,
|
||||
wl_resource *resource,
|
||||
uint32_t id)
|
||||
{
|
||||
Compositor *compositor = static_cast<Compositor *>(resource->data);
|
||||
wl_keyboard *keyboard = &compositor->m_keyboard;
|
||||
wl_resource *clientResource = wl_client_add_object(client,
|
||||
&wl_keyboard_interface,
|
||||
0,
|
||||
id,
|
||||
keyboard);
|
||||
wl_list_insert(&keyboard->resource_list, &clientResource->link);
|
||||
clientResource->destroy = destroyInputDevice;
|
||||
}
|
||||
|
||||
void Compositor::get_touch(wl_client *client,
|
||||
wl_resource *resource,
|
||||
uint32_t id)
|
||||
{
|
||||
Q_UNUSED(client);
|
||||
Q_UNUSED(resource);
|
||||
Q_UNUSED(id);
|
||||
}
|
||||
|
||||
void Compositor::bindSeat(wl_client *client, void *compositorData, uint32_t version, uint32_t id)
|
||||
{
|
||||
static const struct wl_seat_interface seatInterface = {
|
||||
get_pointer,
|
||||
get_keyboard,
|
||||
get_touch
|
||||
};
|
||||
|
||||
Q_UNUSED(version);
|
||||
wl_resource *resource = wl_client_add_object(client, &wl_input_device_interface, &inputDeviceInterface, id, compositorData);
|
||||
wl_resource *resource = wl_client_add_object(client, &wl_seat_interface, &seatInterface, id, compositorData);
|
||||
resource->destroy = destroyInputResource;
|
||||
|
||||
Compositor *compositor = static_cast<Compositor *>(compositorData);
|
||||
wl_list_insert(&compositor->m_input.resource_list, &resource->link);
|
||||
wl_list_insert(&compositor->m_seat.base_resource_list, &resource->link);
|
||||
|
||||
wl_seat_send_capabilities(resource, WL_SEAT_CAPABILITY_POINTER | WL_SEAT_CAPABILITY_KEYBOARD);
|
||||
}
|
||||
|
||||
static wl_surface *resolveSurface(const QVariant &v)
|
||||
@ -95,7 +148,7 @@ static wl_surface *resolveSurface(const QVariant &v)
|
||||
void Compositor::setKeyboardFocus(void *data, const QList<QVariant> ¶meters)
|
||||
{
|
||||
Compositor *compositor = static_cast<Compositor *>(data);
|
||||
wl_input_device_set_keyboard_focus(&compositor->m_input, resolveSurface(parameters.first()));
|
||||
wl_keyboard_set_focus(&compositor->m_keyboard, resolveSurface(parameters.first()));
|
||||
}
|
||||
|
||||
void Compositor::sendMousePress(void *data, const QList<QVariant> ¶meters)
|
||||
@ -106,12 +159,12 @@ void Compositor::sendMousePress(void *data, const QList<QVariant> ¶meters)
|
||||
return;
|
||||
|
||||
QPoint pos = parameters.last().toPoint();
|
||||
wl_input_device_set_pointer_focus(&compositor->m_input, surface,
|
||||
wl_fixed_from_int(pos.x()), wl_fixed_from_int(pos.y()));
|
||||
wl_input_device_send_motion(compositor->m_input.pointer_focus_resource, compositor->time(),
|
||||
wl_fixed_from_double(pos.x()), wl_fixed_from_double(pos.y()));
|
||||
wl_input_device_send_button(compositor->m_input.pointer_focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), 0x110, 1);
|
||||
wl_pointer_set_focus(&compositor->m_pointer, surface,
|
||||
wl_fixed_from_int(pos.x()), wl_fixed_from_int(pos.y()));
|
||||
wl_pointer_send_motion(compositor->m_pointer.focus_resource, compositor->time(),
|
||||
wl_fixed_from_double(pos.x()), wl_fixed_from_double(pos.y()));
|
||||
wl_pointer_send_button(compositor->m_pointer.focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), 0x110, 1);
|
||||
}
|
||||
|
||||
void Compositor::sendMouseRelease(void *data, const QList<QVariant> ¶meters)
|
||||
@ -121,8 +174,8 @@ void Compositor::sendMouseRelease(void *data, const QList<QVariant> ¶meters)
|
||||
if (!surface)
|
||||
return;
|
||||
|
||||
wl_input_device_send_button(compositor->m_input.pointer_focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), 0x110, 0);
|
||||
wl_pointer_send_button(compositor->m_pointer.focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), 0x110, 0);
|
||||
}
|
||||
|
||||
void Compositor::sendKeyPress(void *data, const QList<QVariant> ¶meters)
|
||||
@ -132,9 +185,8 @@ void Compositor::sendKeyPress(void *data, const QList<QVariant> ¶meters)
|
||||
if (!surface)
|
||||
return;
|
||||
|
||||
QPoint pos = parameters.last().toPoint();
|
||||
wl_input_device_send_key(compositor->m_input.keyboard_focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), parameters.last().toUInt() - 8, 1);
|
||||
wl_keyboard_send_key(compositor->m_keyboard.focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), parameters.last().toUInt() - 8, 1);
|
||||
}
|
||||
|
||||
void Compositor::sendKeyRelease(void *data, const QList<QVariant> ¶meters)
|
||||
@ -144,9 +196,8 @@ void Compositor::sendKeyRelease(void *data, const QList<QVariant> ¶meters)
|
||||
if (!surface)
|
||||
return;
|
||||
|
||||
wl_input_device_send_key(compositor->m_input.keyboard_focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), parameters.last().toUInt() - 8, 0);
|
||||
wl_keyboard_send_key(compositor->m_keyboard.focus_resource,
|
||||
compositor->nextSerial(), compositor->time(), parameters.last().toUInt() - 8, 0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user