AC_PREREQ([2.64])
AC_INIT([wayland-fits],
- [0.1.0],
+ [0.2.0],
[https://github.com/01org/wayland-fits/issues],
[wayland-fits],
[https://github.com/01org/wayland-fits])
# Required minimum versions for dependencies
m4_define([check_req_version], [0.9.8])
-# m4_define([pixman1_req_version], [0.29.3])
-m4_define([wayland_req_version], [1.0.6])
-m4_define([weston_req_version], [1.0.6])
+m4_define([wayland_req_version], [1.2.0])
+m4_define([weston_req_version], [1.2.0])
m4_define([efl_req_version], [1.7.6])
m4_define([gtk_req_version], [3.8.0])
m4_define([boost_req_version], [1.49.0])
[
AC_DEFINE(HAVE_WESTON, 1, [Support for Weston extensions])
have_weston="yes"
- PKG_CHECK_MODULES([WESTON_SDK1],
- [
- weston >= 1.0.6
- weston < 1.0.90
- ],
- [
- AC_DEFINE(HAVE_WESTON_SDK1, 1, [Support for Weston 1.0 extensions])
- have_weston_sdk1="yes"
- ],
- [have_weston_sdk1="no"]
- )
- PKG_CHECK_MODULES([WESTON_SDK2],
- [
- weston >= 1.0.90
- weston < 1.1.90
- ],
- [
- AC_DEFINE(HAVE_WESTON_SDK2, 1, [Support for Weston 1.1 extensions])
- have_weston_sdk2="yes"
- ],
- [have_weston_sdk2="no"]
- )
- PKG_CHECK_MODULES([WESTON_SDK3],
- [
- weston >= 1.1.90
- ],
- [
- AC_DEFINE(HAVE_WESTON_SDK3, 1, [Support for Weston 1.2 extensions])
- have_weston_sdk3="yes"
- ],
- [have_weston_sdk3="no"]
- )
],
[have_weston="no"]
)
-Wno-unused-variable \
-Wno-unknown-pragmas \
-Wno-parentheses \
- -Wno-deprecated-declarations \
-std=gnu++0x
endif
extern "C" {
-#if defined(HAVE_WESTON_SDK1)
-WL_EXPORT int
-module_init(struct weston_compositor *compositor)
-#elif defined(HAVE_WESTON_SDK2)
-WL_EXPORT int
-module_init(struct weston_compositor *compositor,
- int *argc, char *argv[], const char *config_file)
-#else // defined(HAVE_WESTON_SDK3)
WL_EXPORT int
module_init(struct weston_compositor *compositor,
int *argc, char *argv[])
-#endif
{
struct wl_listener *listener(new struct wl_listener);
if (initialized_) return;
assert(
- wl_display_add_global(
+ wl_global_create(
Globals::display(),
- &wfits_input_interface,
+ &wfits_input_interface, 1,
NULL,
InputInterface::bind
)
}
/*static*/
-void InputInterface::bind(struct wl_client *wl_client, void *data, uint32_t version, uint32_t id)
+void InputInterface::bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
{
ActiveKeys *keys(new ActiveKeys);
- struct wl_resource *resource = wl_client_add_object(
- wl_client, &wfits_input_interface,
- &InputInterface::implementation, id, keys
+ struct wl_resource *resource = wl_resource_create(
+ client, &wfits_input_interface, 1, id
);
- resource->destroy = InputInterface::unbind;
+ if (not resource) {
+ wl_client_post_no_memory(client);
+ return;
+ }
+
+ wl_resource_set_implementation(
+ resource, &InputInterface::implementation, keys, &InputInterface::unbind
+ );
}
/*static*/
void InputInterface::unbind(struct wl_resource *resource)
{
- ActiveKeys *keys(static_cast<ActiveKeys*>(resource->data));
+ ActiveKeys *keys = static_cast<ActiveKeys*>(
+ wl_resource_get_user_data(resource)
+ );
foreach (uint32_t key, *keys) {
InputInterface::keySend(key, 0);
}
delete keys;
-
- /* FIXME: Don't delete wl_resource in Wayland 1.2. They are now
- * managed by the wayland server.
- * However, for Wayland < 1.2 we should delete them... but for now
- * just let it leak until we have time to fix this (i.e. do a
- * compile time version check) :-/.
- */
-// delete resource;
}
/*static*/
void InputInterface::keySend(struct wl_client *wl_client,
struct wl_resource *resource, uint32_t key, uint32_t state)
{
- ActiveKeys *keys(static_cast<ActiveKeys*>(resource->data));
+ ActiveKeys *keys = static_cast<ActiveKeys*>(
+ wl_resource_get_user_data(resource)
+ );
InputInterface::keySend(key, state);
if (initialized_) return;
assert(
- wl_display_add_global(
+ wl_global_create(
Globals::display(),
- &wfits_query_interface,
+ &wfits_query_interface, 1,
NULL, QueryInterface::bind
)
);
/*static*/
void QueryInterface::bind(struct wl_client *client, void *data, uint32_t version, uint32_t id)
{
- wl_client_add_object(
- client, &wfits_query_interface,
- &QueryInterface::implementation, id, data
+ struct wl_resource *resource = wl_resource_create(
+ client, &wfits_query_interface, 1, id
+ );
+
+ if (not resource) {
+ wl_client_post_no_memory(client);
+ return;
+ }
+
+ wl_resource_set_implementation(
+ resource, &QueryInterface::implementation, data, NULL
);
}
/*static*/
void QueryInterface::surfaceGeometry(struct wl_client *client, struct wl_resource *resource,
- struct wl_resource *surface_resource, uint32_t result_id)
+ struct wl_resource *surface_resource, uint32_t id)
{
- struct wl_resource result;
- struct weston_surface *surface =
- static_cast<struct weston_surface*>(surface_resource->data);
-
- result.object.interface = &wfits_query_result_interface;
- result.object.id = result_id;
- result.destroy = NULL;
- result.client = client;
- result.data = NULL;
+ struct wl_resource *result = wl_resource_create(
+ client, &wfits_query_result_interface, 1, id
+ );
- wl_client_add_resource(client, &result);
+ struct weston_surface *surface = static_cast<struct weston_surface*>(
+ wl_resource_get_user_data(surface_resource)
+ );
wfits_query_result_send_surface_geometry(
- &result,
+ result,
wl_fixed_from_double(surface->geometry.x),
wl_fixed_from_double(surface->geometry.y),
surface->geometry.width,
surface->geometry.height
);
- wl_resource_destroy(&result);
}
/*static*/
void QueryInterface::globalPointerPosition(struct wl_client *client,
struct wl_resource *resource,
- uint32_t result_id)
+ uint32_t id)
{
- struct wl_resource result;
- struct weston_seat *seat(Globals::seat());
+ struct wl_resource *result = wl_resource_create(
+ client, &wfits_query_result_interface, 1, id
+ );
+
wl_fixed_t cx, cy;
Globals::pointerXY(&cx, &cy);
- result.object.interface = &wfits_query_result_interface;
- result.object.id = result_id;
- result.destroy = NULL;
- result.client = client;
- result.data = NULL;
-
- wl_client_add_resource(client, &result);
- wfits_query_result_send_global_pointer_position(&result, cx, cy);
- wl_resource_destroy(&result);
+ wfits_query_result_send_global_pointer_position(result, cx, cy);
}
} // namespace weston
void Globals::pointerXY(wl_fixed_t *x, wl_fixed_t *y)
{
struct weston_seat *seat(Globals::seat());
-#if defined(HAVE_WESTON_SDK3)
+
*x = seat->pointer->x;
*y = seat->pointer->y;
-#else
- *x = seat->pointer.x;
- *y = seat->pointer.y;
-#endif
}
bool Globals::isHeadless()
#ifndef __WESTON_WFITS_H__
#define __WESTON_WFITS_H__
-#include <wayland-server.h>
-
-/**
- * Weston SDK 1.0.x workaround for
- * https://bugs.freedesktop.org/show_bug.cgi?id=63485
- **/
-extern "C" {
-#define private configure_private
#include <weston/compositor.h>
-#undef private
-}
#include "extensions/protocol/wayland-fits-server-protocol.h"