antognolli pushed a commit to branch devs/antognolli/backport.
commit d77f28bd91622bc7880231f19f9d029feb5bfa19
Author: Rafael Antognolli <[email protected]>
Date: Thu Feb 28 17:01:43 2013 -0300
Backport r83312.
Store the wayland registry globals in a list so that we can bind to them
from a
user/test program. When a custom interface (protocol extension) is used in a
wayland compositor, this allows user/test program to use that interface. For
instance, one might provide a custom wayland test protocol that give access
to
otherwise hidden/missing functionality that allows effective automated
testing
(in wayland engines). See the Weston unit test suite for an example of this
concept.
Patch by: "U. Artie Eoff" <[email protected]>
---
src/lib/ecore_wayland/Ecore_Wayland.h | 11 +++++++++++
src/lib/ecore_wayland/ecore_wl.c | 16 ++++++++++++++++
2 files changed, 27 insertions(+)
diff --git a/src/lib/ecore_wayland/Ecore_Wayland.h
b/src/lib/ecore_wayland/Ecore_Wayland.h
index 44fbc5a..d1279fe 100644
--- a/src/lib/ecore_wayland/Ecore_Wayland.h
+++ b/src/lib/ecore_wayland/Ecore_Wayland.h
@@ -33,6 +33,8 @@ extern "C" {
typedef struct _Ecore_Wl_Display Ecore_Wl_Display;
typedef struct _Ecore_Wl_Output Ecore_Wl_Output;
typedef struct _Ecore_Wl_Input Ecore_Wl_Input;
+typedef struct _Ecore_Wl_Global Ecore_Wl_Global;
+
# ifndef _ECORE_WAYLAND_WINDOW_PREDEF
typedef struct _Ecore_Wl_Window Ecore_Wl_Window;
# endif
@@ -74,6 +76,14 @@ enum _Ecore_Wl_Window_Buffer_Type
typedef enum _Ecore_Wl_Window_Type Ecore_Wl_Window_Type;
typedef enum _Ecore_Wl_Window_Buffer_Type Ecore_Wl_Window_Buffer_Type;
+struct _Ecore_Wl_Global
+{
+ unsigned int id;
+ char *interface;
+ unsigned int version;
+ struct wl_list link;
+};
+
struct _Ecore_Wl_Display
{
struct
@@ -95,6 +105,7 @@ struct _Ecore_Wl_Display
struct wl_list inputs;
struct wl_list outputs;
+ struct wl_list globals;
struct
{
diff --git a/src/lib/ecore_wayland/ecore_wl.c b/src/lib/ecore_wayland/ecore_wl.c
index 02d1db2..cc7dfd4 100644
--- a/src/lib/ecore_wayland/ecore_wl.c
+++ b/src/lib/ecore_wayland/ecore_wl.c
@@ -174,6 +174,7 @@ ecore_wl_init(const char *name)
wl_list_init(&_ecore_wl_disp->inputs);
wl_list_init(&_ecore_wl_disp->outputs);
+ wl_list_init(&_ecore_wl_disp->globals);
_ecore_wl_disp->wl.registry =
wl_display_get_registry(_ecore_wl_disp->wl.display);
@@ -393,6 +394,7 @@ _ecore_wl_shutdown(Eina_Bool close)
{
Ecore_Wl_Output *out, *tout;
Ecore_Wl_Input *in, *tin;
+ Ecore_Wl_Global *global, *tglobal;
wl_list_for_each_safe(out, tout, &_ecore_wl_disp->outputs, link)
_ecore_wl_output_del(out);
@@ -400,6 +402,13 @@ _ecore_wl_shutdown(Eina_Bool close)
wl_list_for_each_safe(in, tin, &_ecore_wl_disp->inputs, link)
_ecore_wl_input_del(in);
+ wl_list_for_each_safe(global, tglobal, &_ecore_wl_disp->globals, link)
+ {
+ wl_list_remove(&global->link);
+ free(global->interface);
+ free(global);
+ }
+
_ecore_wl_xkb_shutdown(_ecore_wl_disp);
if (_ecore_wl_disp->wl.shell)
@@ -484,11 +493,18 @@ static void
_ecore_wl_cb_handle_global(void *data, struct wl_registry *registry, unsigned
int id, const char *interface, unsigned int version __UNUSED__)
{
Ecore_Wl_Display *ewd;
+ Ecore_Wl_Global *global;
LOGFN(__FILE__, __LINE__, __FUNCTION__);
ewd = data;
+ global = malloc(sizeof(*global));
+ global->id = id;
+ global->interface = strdup(interface);
+ global->version = version;
+ wl_list_insert(ewd->globals.prev, &global->link);
+
if (!strcmp(interface, "wl_compositor"))
{
ewd->wl.compositor =
--
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_feb