This is the first step towards deprecating wl_resource as a transparent
structure.  In the future, wl_resource will be an opaque pointer type and
client code will not have access to its memebers.

---
 src/wayland-server.c | 39 +++++++++++++++++++++++++++++++++++++++
 src/wayland-server.h | 27 +++++++++++++++++++++++++--
 src/wayland-util.h   |  7 +++++++
 3 files changed, 71 insertions(+), 2 deletions(-)

diff --git a/src/wayland-server.c b/src/wayland-server.c
index dcb4435..5a6bccb 100644
--- a/src/wayland-server.c
+++ b/src/wayland-server.c
@@ -440,6 +440,45 @@ wl_resource_destroy(struct wl_resource *resource)
        }
 }
 
+WL_EXPORT struct wl_list *
+wl_resource_get_link(struct wl_resource *resource)
+{
+       return &resource->link;
+}
+
+WL_EXPORT struct wl_client *
+wl_resource_get_client(struct wl_resource *resource)
+{
+       return resource->client;
+}
+
+WL_EXPORT void *
+wl_resource_get_user_data(struct wl_resource *resource)
+{
+       return resource->data;
+}
+
+WL_EXPORT void
+wl_resource_set_destructor(struct wl_resource *resource,
+                          wl_resource_destroy_func_t destroy)
+{
+       resource->destroy = destroy;
+}
+
+WL_EXPORT void
+wl_resource_add_destroy_listener(struct wl_resource *resource,
+                                struct wl_listener * listener)
+{
+       wl_signal_add(&resource->destroy_signal, listener);
+}
+
+WL_EXPORT struct wl_listener *
+wl_resource_get_destroy_listener(struct wl_resource *resource,
+                                wl_notify_func_t notify)
+{
+       return wl_signal_get(&resource->destroy_signal, notify);
+}
+
 WL_EXPORT void
 wl_client_add_destroy_listener(struct wl_client *client,
                               struct wl_listener *listener)
diff --git a/src/wayland-server.h b/src/wayland-server.h
index 38b8303..2c6efc9 100644
--- a/src/wayland-server.h
+++ b/src/wayland-server.h
@@ -181,9 +181,17 @@ wl_signal_emit(struct wl_signal *signal, void *data)
                l->notify(l, data);
 }
 
+typedef void (*wl_resource_destroy_func_t)(struct wl_resource *resource);
+
+/* The wl_resource structure has be deprecated as a transparent structure.
+ * While wl_resource will still exist, it will, in the future, be an opaque
+ * pointer.  Instead of accessing wl_resource directly, it should be created by
+ * wl_client_add_object and wl_client_new_object and only accessed by the
+ * accessor functions provided.
+ */
 struct wl_resource {
        struct wl_object object;
-       void (*destroy)(struct wl_resource *resource);
+       wl_resource_destroy_func_t destroy;
        struct wl_list link;
        struct wl_signal destroy_signal;
        struct wl_client *client;
@@ -417,13 +425,28 @@ void wl_resource_post_no_memory(struct wl_resource 
*resource);
 
 uint32_t
 wl_client_add_resource(struct wl_client *client,
-                      struct wl_resource *resource);
+                      struct wl_resource *resource) WL_DEPRECATED;
 
 struct wl_display *
 wl_client_get_display(struct wl_client *client);
 
 void
 wl_resource_destroy(struct wl_resource *resource);
+struct wl_list *
+wl_resource_get_link(struct wl_resource *resource);
+struct wl_client *
+wl_resource_get_client(struct wl_resource *resource);
+void *
+wl_resource_get_user_data(struct wl_resource *resource);
+void
+wl_resource_set_destructor(struct wl_resource *resource,
+                          wl_resource_destroy_func_t destroy);
+void
+wl_resource_add_destroy_listener(struct wl_resource *resource,
+                                struct wl_listener * listener);
+struct wl_listener *
+wl_resource_get_destroy_listener(struct wl_resource *resource,
+                                wl_notify_func_t notify);
 
 void
 wl_seat_init(struct wl_seat *seat);
diff --git a/src/wayland-util.h b/src/wayland-util.h
index 257a5d1..d01304c 100644
--- a/src/wayland-util.h
+++ b/src/wayland-util.h
@@ -39,6 +39,13 @@ extern "C" {
 #define WL_EXPORT
 #endif
 
+/* Deprecated attribute */
+#if defined(__GNUC__) && __GNUC__ >= 4
+#define WL_DEPRECATED __attribute__ ((deprecated))
+#else
+#define WL_DEPRECATED
+#endif
+
 struct wl_message {
        const char *name;
        const char *signature;
-- 
1.8.1.4

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to