Sync up with the latest wayland developments.

This commit makes the qtwayland module compatible with
wayland sha1 677c5180e67be18b7a0867fafb7f205b57a6e9ff.

Change-Id: I5af0510034b7e4a038313b80f1f6e0b18fa48eb3
Reviewed-by: Jørgen Lind <jorgen.lind@nokia.com>
Reviewed-by: Laszlo Agocs <laszlo.p.agocs@nokia.com>
Reviewed-by: Samuel Rødal <samuel.rodal@nokia.com>
This commit is contained in:
Hannu Lyytinen 2012-04-18 23:14:47 +03:00 committed by Samuel Rødal
parent e009b62037
commit d4884fa940
4 changed files with 22 additions and 15 deletions

View File

@ -244,11 +244,9 @@ void Compositor::bindCompositor(wl_client *client, void *compositorData, uint32_
wl_client_add_object(client, &wl_compositor_interface, &compositorInterface, id, compositorData); wl_client_add_object(client, &wl_compositor_interface, &compositorInterface, id, compositorData);
} }
static void unregisterResourceCallback(wl_listener *listener, static void unregisterResourceCallback(wl_listener *listener, void *data)
wl_resource *resource,
uint32_t time)
{ {
Q_UNUSED(time); struct wl_resource *resource = reinterpret_cast<struct wl_resource *>(data);
wl_list_remove(&resource->link); wl_list_remove(&resource->link);
delete listener; delete listener;
} }
@ -258,9 +256,9 @@ void registerResource(wl_list *list, wl_resource *resource)
wl_list_insert(list, &resource->link); wl_list_insert(list, &resource->link);
wl_listener *listener = new wl_listener; wl_listener *listener = new wl_listener;
listener->func = unregisterResourceCallback; listener->notify = unregisterResourceCallback;
wl_list_insert(&resource->destroy_listener_list, &listener->link); wl_signal_add(&resource->destroy_signal, listener);
} }
QVector<Surface *> Compositor::surfaces() const QVector<Surface *> Compositor::surfaces() const
@ -268,6 +266,11 @@ QVector<Surface *> Compositor::surfaces() const
return m_surfaces; return m_surfaces;
} }
uint32_t Compositor::nextSerial()
{
return wl_display_next_serial(m_display);
}
void Compositor::addSurface(Surface *surface) void Compositor::addSurface(Surface *surface)
{ {
m_surfaces << surface; m_surfaces << surface;

View File

@ -69,6 +69,7 @@ public:
int fileDescriptor() const { return m_fd; } int fileDescriptor() const { return m_fd; }
void dispatchEvents(int timeout = 0); void dispatchEvents(int timeout = 0);
uint32_t nextSerial();
uint32_t time() { return ++m_time; } uint32_t time() { return ++m_time; }
static void setOutputGeometry(void *compositor, const QList<QVariant> &parameters); static void setOutputGeometry(void *compositor, const QList<QVariant> &parameters);

View File

@ -95,7 +95,7 @@ static wl_surface *resolveSurface(const QVariant &v)
void Compositor::setKeyboardFocus(void *data, const QList<QVariant> &parameters) void Compositor::setKeyboardFocus(void *data, const QList<QVariant> &parameters)
{ {
Compositor *compositor = static_cast<Compositor *>(data); Compositor *compositor = static_cast<Compositor *>(data);
wl_input_device_set_keyboard_focus(&compositor->m_input, resolveSurface(parameters.first()), compositor->time()); wl_input_device_set_keyboard_focus(&compositor->m_input, resolveSurface(parameters.first()));
} }
void Compositor::sendMousePress(void *data, const QList<QVariant> &parameters) void Compositor::sendMousePress(void *data, const QList<QVariant> &parameters)
@ -106,9 +106,10 @@ void Compositor::sendMousePress(void *data, const QList<QVariant> &parameters)
return; return;
QPoint pos = parameters.last().toPoint(); QPoint pos = parameters.last().toPoint();
wl_input_device_set_pointer_focus(&compositor->m_input, surface, compositor->time(), pos.x(), pos.y()); wl_input_device_set_pointer_focus(&compositor->m_input, surface, pos.x(), pos.y());
wl_input_device_send_motion(compositor->m_input.pointer_focus_resource, compositor->time(), pos.x(), pos.y()); wl_input_device_send_motion(compositor->m_input.pointer_focus_resource, compositor->time(), pos.x(), pos.y());
wl_input_device_send_button(compositor->m_input.pointer_focus_resource, compositor->time(), 0x110, 1); wl_input_device_send_button(compositor->m_input.pointer_focus_resource,
compositor->nextSerial(), compositor->time(), 0x110, 1);
} }
void Compositor::sendMouseRelease(void *data, const QList<QVariant> &parameters) void Compositor::sendMouseRelease(void *data, const QList<QVariant> &parameters)
@ -118,7 +119,8 @@ void Compositor::sendMouseRelease(void *data, const QList<QVariant> &parameters)
if (!surface) if (!surface)
return; return;
wl_input_device_send_button(compositor->m_input.pointer_focus_resource, compositor->time(), 0x110, 0); wl_input_device_send_button(compositor->m_input.pointer_focus_resource,
compositor->nextSerial(), compositor->time(), 0x110, 0);
} }
void Compositor::sendKeyPress(void *data, const QList<QVariant> &parameters) void Compositor::sendKeyPress(void *data, const QList<QVariant> &parameters)
@ -129,7 +131,8 @@ void Compositor::sendKeyPress(void *data, const QList<QVariant> &parameters)
return; return;
QPoint pos = parameters.last().toPoint(); QPoint pos = parameters.last().toPoint();
wl_input_device_send_key(compositor->m_input.keyboard_focus_resource, compositor->time(), parameters.last().toUInt() - 8, 1); wl_input_device_send_key(compositor->m_input.keyboard_focus_resource,
compositor->nextSerial(), compositor->time(), parameters.last().toUInt() - 8, 1);
} }
void Compositor::sendKeyRelease(void *data, const QList<QVariant> &parameters) void Compositor::sendKeyRelease(void *data, const QList<QVariant> &parameters)
@ -139,7 +142,8 @@ void Compositor::sendKeyRelease(void *data, const QList<QVariant> &parameters)
if (!surface) if (!surface)
return; return;
wl_input_device_send_key(compositor->m_input.keyboard_focus_resource, compositor->time(), parameters.last().toUInt() - 8, 0); wl_input_device_send_key(compositor->m_input.keyboard_focus_resource,
compositor->nextSerial(), compositor->time(), parameters.last().toUInt() - 8, 0);
} }
} }

View File

@ -53,8 +53,7 @@ void destroy_surface(wl_resource *resource)
static void surface_destroy(wl_client *, wl_resource *surfaceResource) static void surface_destroy(wl_client *, wl_resource *surfaceResource)
{ {
Surface *surface = static_cast<Surface *>(surfaceResource->data); wl_resource_destroy(surfaceResource);
wl_resource_destroy(surfaceResource, surface->compositor()->time());
} }
void surface_attach(wl_client *client, wl_resource *surfaceResource, void surface_attach(wl_client *client, wl_resource *surfaceResource,
@ -99,7 +98,7 @@ void surface_damage(wl_client *client, wl_resource *surfaceResource,
wl_resource *frameCallback; wl_resource *frameCallback;
wl_list_for_each(frameCallback, &surface->m_frameCallbackList, link) { wl_list_for_each(frameCallback, &surface->m_frameCallbackList, link) {
wl_callback_send_done(frameCallback, surface->m_compositor->time()); wl_callback_send_done(frameCallback, surface->m_compositor->time());
wl_resource_destroy(frameCallback, surface->m_compositor->time()); wl_resource_destroy(frameCallback);
} }
wl_list_init(&surface->m_frameCallbackList); wl_list_init(&surface->m_frameCallbackList);