Re: [PATCH weston v2] xwm: set the shell_surface's title
This patch makes XWayland often crash for me. Axel Davy Le 11/09/2013 18:20, Giulio Camuffo a écrit : add a new function pointer to the weston_shell_interface struct that shells will set accordingly. --- src/compositor.h | 2 ++ src/shell.c | 11 +-- src/xwayland/window-manager.c | 11 +++ 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/compositor.h b/src/compositor.h index 3c1b643..ead0c91 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -107,6 +107,8 @@ struct weston_shell_interface { int (*move)(struct shell_surface *shsurf, struct weston_seat *ws); int (*resize)(struct shell_surface *shsurf, struct weston_seat *ws, uint32_t edges); + void (*set_title)(struct shell_surface *shsurf, + const char *title); }; diff --git a/src/shell.c b/src/shell.c index dc15bfa..ea4315a 100644 --- a/src/shell.c +++ b/src/shell.c @@ -1595,13 +1595,19 @@ shell_surface_pong(struct wl_client *client, struct wl_resource *resource, } static void +set_title(struct shell_surface *shsurf, const char *title) +{ + free(shsurf-title); + shsurf-title = strdup(title); +} + +static void shell_surface_set_title(struct wl_client *client, struct wl_resource *resource, const char *title) { struct shell_surface *shsurf = wl_resource_get_user_data(resource); - free(shsurf-title); - shsurf-title = strdup(title); + set_title(shsurf, title); } static void @@ -4583,6 +4589,7 @@ module_init(struct weston_compositor *ec, ec-shell_interface.set_xwayland = set_xwayland; ec-shell_interface.move = surface_move; ec-shell_interface.resize = surface_resize; + ec-shell_interface.set_title = set_title; wl_list_init(shell-input_panel.surfaces); diff --git a/src/xwayland/window-manager.c b/src/xwayland/window-manager.c index f775734..b4f64d3 100644 --- a/src/xwayland/window-manager.c +++ b/src/xwayland/window-manager.c @@ -363,6 +363,8 @@ static void weston_wm_window_read_properties(struct weston_wm_window *window) { struct weston_wm *wm = window-wm; + struct weston_shell_interface *shell_interface = + wm-server-compositor-shell_interface; #define F(field) offsetof(struct weston_wm_window, field) const struct { @@ -468,6 +470,9 @@ weston_wm_window_read_properties(struct weston_wm_window *window) } free(reply); } + + if (window-shsurf window-name) + shell_interface-set_title(window-shsurf, window-name); } static void @@ -1875,6 +1880,9 @@ surface_destroy(struct wl_listener *listener, void *data) wm_log(surface for xid %d destroyed\n, window-id); + /* This should have been freed by the shell. + Don't try to use it later. */ + window-shsurf = NULL; window-surface = NULL; } @@ -2029,6 +2037,9 @@ xserver_map_shell_surface(struct weston_wm *wm, window-surface, shell_client); + if (window-name) + shell_interface-set_title(window-shsurf, window-name); + if (window-fullscreen) { window-saved_width = window-width; window-saved_height = window-height; ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH] sanity-tests: Be even more aggressive in avoiding optimization
clang optimizes the malloc away even when assert() is called. Printing the memory address should be side-effecty enough to avoid this optimization. --- tests/sanity-test.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/sanity-test.c b/tests/sanity-test.c index 46f4f85..0df2e98 100644 --- a/tests/sanity-test.c +++ b/tests/sanity-test.c @@ -25,6 +25,7 @@ #include sys/types.h #include signal.h #include unistd.h +#include stdio.h #include test-runner.h #include wayland-util.h @@ -75,6 +76,7 @@ FAIL_TEST(sanity_malloc_direct) p = malloc(10); /* memory leak */ assert(p); /* assert that we got memory, also prevents * the malloc from getting optimized away. */ + printf(Avoiding optimization %p\n, p); free(NULL); /* NULL must not be counted */ } -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 1/2] utils: Document wl_container_of
Modified this documentation to be much less verbose than before. I also added an example, used better doxygen style, and mentioned that wl_container_of is useful outside of just wl_list. --- src/wayland-util.h | 27 +++ 1 file changed, 27 insertions(+) diff --git a/src/wayland-util.h b/src/wayland-util.h index de2e464..f85c521 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -111,6 +111,33 @@ int wl_list_length(const struct wl_list *list); int wl_list_empty(const struct wl_list *list); void wl_list_insert_list(struct wl_list *list, struct wl_list *other); +/** + * Retrieves a pointer to the container of a given item. + * + * This macro allows conversion from a pointer to a contained item to its + * container. This is useful if you have a contained item like a wl_list, + * wl_listener, or wl_signal, and would like to retrieve the struct that + * contains it. + * + * To demonstrate, given a wl_list contained by a wl_resource, the wl_resource + * can be retrieved as follows: + * + * \code + * struct wl_list *some_link = ...; + * struct wl_resource *resource = NULL; + * + * resource = wl_container_of(some_link, resource, link); + * \endcode + * + * \param ptr A valid pointer to the contained item. + * + * \param sample A pointer to the type of content that the list item stores. + * Sample does not need be a valid pointer; a null pointer will suffice. + * + * \param member The named location of ptr within the sample type. + * + * \return The container for the specified pointer. + */ #ifdef __GNUC__ #define wl_container_of(ptr, sample, member) \ (__typeof__(sample))((char *)(ptr) - \ -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 2/2] wayland-server: Document wl_listener
This patch takes Kristian's comments into account, adding a demonstration and giving a more thorough idea of how wl_listener is used. --- src/wayland-server.h | 45 + 1 file changed, 45 insertions(+) diff --git a/src/wayland-server.h b/src/wayland-server.h index 67f3bdd..f345d2a 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -129,6 +129,51 @@ wl_client_get_object(struct wl_client *client, uint32_t id); void wl_client_post_no_memory(struct wl_client *client); +/** \class wl_listener + * + * \brief A single listener for Wayland signals + * + * wl_listener provides the means to listen for wl_signal notifications. Many + * Wayland objects use wl_listener for notification of significant events like + * object destruction. + * + * Clients should create wl_listener objects manually and can register them as + * listeners to signals using #wl_signal_add, assuming the signal is + * directly accessible. For opaque structs like wl_event_loop, adding a + * listener should be done through provided accessor methods. A listener can + * only listen to one signal at a time. + * + * \code + * struct wl_listener your_listener; + * your_listener.notify = your_callback_method; + * + * // Direct access + * wl_signal_add(some_object-destroy_signal, your_listener); + * + * // Accessor access + * wl_event_loop *loop = ...; + * wl_event_loop_add_destroy_listener(loop, your_listener); + * \endcode + * + * If the listener is part of a larger struct, #wl_container_of can be used + * to retrieve a pointer to it: + * + * \code + * void your_listener(struct wl_listener *listener, void *data) + * { + * struct your_data *data = NULL; + * your_data = wl_container_of(listener, data, your_member_name); + * } + * \endcode + * + * If you need to remove a listener from a signal, use #wl_list_remove. + * + * \code + * wl_list_remove(your_listener.link); + * \endcode + * + * \sa wl_signal + */ struct wl_listener { struct wl_list link; wl_notify_func_t notify; -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 0/6] More utils/wayland-server documentation
Howdy, I went ahead and added some more documentation for some utils classes, the big one being wl_list. I know I have some patches still outstanding, so I apologize if it's rude to submit another batch before the previous ones have been resolved. These patches apply regardless of whether the others are eventually accepted, so in that sense, they're independent. I've been prefixing my commits with the conventional prefix for that file (e.g. utils: for wayland-utils.*, wayland-server and so forth). Should I prefix these with doc: instead? Thanks for your feedback! Aaron Faanes (6): utils: Reference some useful methods in wl_signal's doxygen utils: Add doxygen for wayland-util.h wayland-server: Improve wording for wl_signal_get's doc doc: Include wayland-util.* for doxygen output utils: Ensure wl_list's doxygen formats properly utils: Document wl_list methods doc/doxygen/Makefile.am | 6 +++ src/wayland-server.h| 9 +++- src/wayland-util.h | 113 3 files changed, 107 insertions(+), 21 deletions(-) -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 1/6] utils: Reference some useful methods in wl_signal's doxygen
This commit adds a bit more detail on the lifecycle of a signal. --- src/wayland-server.h | 7 ++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/wayland-server.h b/src/wayland-server.h index f345d2a..2e616c1 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -185,7 +185,12 @@ struct wl_listener { * * Signals are recognized points where significant events can be observed. * Compositors as well as the server can provide signals. Observers are - * added through \ref wl_signal_add. + * wl_listener's that are added through #wl_signal_add. Signals are emitted + * using #wl_signal_emit, which will invoke all listeners until that + * listener is removed by #wl_list_remove (or whenever the signal is + * destroyed). + * + * \sa wl_listener for more information on using wl_signal */ struct wl_signal { struct wl_list listener_list; -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 2/6] utils: Add doxygen for wayland-util.h
This is needed for doxygen to generate output for macro definitions, such as wl_container_of, that are contained by this file. Classes like wl_list would be documented regardless. --- src/wayland-util.h | 5 + 1 file changed, 5 insertions(+) diff --git a/src/wayland-util.h b/src/wayland-util.h index f85c521..31a1ac2 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -20,6 +20,11 @@ * OF THIS SOFTWARE. */ +/** \file wayland-util.h + * + * \brief Utility classes, functions, and macros. + */ + #ifndef WAYLAND_UTIL_H #define WAYLAND_UTIL_H -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 3/6] wayland-server: Improve wording for wl_signal_get's doc
The old description was a bit vague; this commit hopefully improves describing what is returned. --- src/wayland-server.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/wayland-server.h b/src/wayland-server.h index 2e616c1..997e6c7 100644 --- a/src/wayland-server.h +++ b/src/wayland-server.h @@ -221,7 +221,7 @@ wl_signal_add(struct wl_signal *signal, struct wl_listener *listener) wl_list_insert(signal-listener_list.prev, listener-link); } -/** Gets the list item for the specified listener. +/** Gets the listener struct for the specified callback. * * \param signal The signal that contains the specified listener * \param notify The listener that is the target of this search -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 4/6] doc: Include wayland-util.* for doxygen output
This commit creates a shared file list that is included by both the client and the server for the XML Makefile targets, as classes within util are used by both the client and the server. --- I must admit that I'm not too familiar with why these are separated into server and client XML files. As a result, this patch is a bit of a guess. doc/doxygen/Makefile.am | 6 ++ 1 file changed, 6 insertions(+) diff --git a/doc/doxygen/Makefile.am b/doc/doxygen/Makefile.am index ec43519..0351c1e 100644 --- a/doc/doxygen/Makefile.am +++ b/doc/doxygen/Makefile.am @@ -2,11 +2,17 @@ noinst_DATA = xml/client/index.xml xml/server/index.xml dist_noinst_DATA = wayland.doxygen.in +scanned_src_files_shared = \ + $(top_srcdir)/src/wayland-util.c\ + $(top_srcdir)/src/wayland-util.h + scanned_src_files_client = \ + $(scanned_src_files_shared) \ $(top_srcdir)/src/wayland-client.c \ $(top_srcdir)/src/wayland-client.h scanned_src_files_server = \ + $(scanned_src_files_shared) \ $(top_srcdir)/src/wayland-server.c \ $(top_srcdir)/src/wayland-server.h -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 5/6] utils: Ensure wl_list's doxygen formats properly
This changes the struct foo mentions to use tt, which appears as monospaced font. This also wraps code examples with \code tags to ensure they're detected as code. The code example uses C++ style // comments. I would have preferred to use /* */ comments for consistency, but this is not possible since we're already in this type of block comment. Doxygen picks it up fine, however. This commit doesn't contain any changes in terms of wording. Most of the diff noise is due to the whitespace changes. git diff -w should help point out the real changes. --- src/wayland-util.h | 44 +--- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/src/wayland-util.h b/src/wayland-util.h index 31a1ac2..51de3f6 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -70,39 +70,45 @@ struct wl_interface { * * \brief doubly-linked list * - * The list head is of struct wl_list type, and must be initialized - * using wl_list_init(). All entries in the list must be of the same - * type. The item type must have a struct wl_list member. This - * member will be initialized by wl_list_insert(). There is no need to - * call wl_list_init() on the individual item. To query if the list is - * empty in O(1), use wl_list_empty(). + * The list head is of ttstruct wl_list/tt type, and must be initialized + * using #wl_list_init. All entries in the list must be of the same + * type. The item type must have a ttstruct wl_list/tt member. This + * member will be initialized by #wl_list_insert. There is no need to + * call #wl_list_init on the individual item. To query if the list is + * empty in O(1), use #wl_list_empty. * - * Let's call the list reference struct wl_list foo_list, the item type as - * item_t, and the item member as struct wl_list link. + * Let's call the list reference ttstruct wl_list foo_list/tt, the item type as + * ttitem_t/tt, and the item member as ttstruct wl_list link/tt. * * The following code will initialize a list: * - * struct wl_list foo_list; + * \code + * struct wl_list foo_list; * - * struct item_t { - * int foo; - * struct wl_list link; - * }; - * struct item_t item1, item2, item3; + * struct item_t { + * int foo; + * struct wl_list link; + * }; + * struct item_t item1, item2, item3; * - * wl_list_init(foo_list); - * wl_list_insert(foo_list, item1.link); Pushes item1 at the head - * wl_list_insert(foo_list, item2.link); Pushes item2 at the head - * wl_list_insert(item2.link, item3.link); Pushes item3 after item2 + * wl_list_init(foo_list); + * wl_list_insert(foo_list, item1.link); // Pushes item1 at the head + * wl_list_insert(foo_list, item2.link); // Pushes item2 at the head + * wl_list_insert(item2.link, item3.link); // Pushes item3 after item2 + * \endcode * - * The list now looks like [item2, item3, item1] + * The list now looks like tt[item2, item3, item1]/tt * * Will iterate the list in ascending order: * + * \code * item_t *item; * wl_list_for_each(item, foo_list, link) { * Do_something_with_item(item); * } + * \endcode + * + * \sa wl_container_of */ struct wl_list { struct wl_list *prev; -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
[PATCH 6/6] utils: Document wl_list methods
--- As I understand it, a wl_list can be either content-bearing node or a list head. I believe this is correct, but if it isn't (in other words, there is no distinction between list heads and content-bearing elements), then this documentation is going to be tragically incorrect. src/wayland-util.h | 64 ++ 1 file changed, 64 insertions(+) diff --git a/src/wayland-util.h b/src/wayland-util.h index 51de3f6..86d03f2 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -115,11 +115,75 @@ struct wl_list { struct wl_list *next; }; +/** Initializes a new wl_list for use as a list. + * + * There is no need to call this method for wl_list nodes that will only be used as + * elements within other lists, though there is no harm in doing so. + * + * \param list The list that will be initialized. + * + * \memberof wl_list + */ void wl_list_init(struct wl_list *list); + +/** Inserts the specified element directly after the specified list node. + * + * \param list the list that will be directly previous to \c elm + * \param elm The element that will be added after \c list + * + * \memberof wl_list + */ void wl_list_insert(struct wl_list *list, struct wl_list *elm); + +/** Removes the specified wl_list node from the list that contains it. + * + * \param elm the list to remove + * + * \memberof wl_list + */ void wl_list_remove(struct wl_list *elm); + +/** Returns the number of elements in the specified list. + * + * Prefer #wl_list_empty if you're just interested if the list is empty. + * + * \param list The list that will be queried. + * \return The number of elements in the specified list. + * + * \sa wl_list_empty + * \memberof wl_list + */ int wl_list_length(const struct wl_list *list); + +/** Queries whether the specified list is empty. + * + * This method runs in O(1). + * + * \param list The list that will be queried. + * \return \c true if the list is empty, \c false otherwise + * + * \sa wl_list_length + * \memberof wl_list + */ int wl_list_empty(const struct wl_list *list); + +/** Inserts all elements in the specified other list into \c list. + * + * All elements in \other will be added in order directly before \c list. + * + * \code + * wl_list foo; // [1, 2, 3] + * wl_list bar; // [4, 5, 6] + * + * wl_list_insert_list(foo, other); + * // foo now contains [4, 5, 6, 1, 2, 3] + * \endcode + * + * \param list The list that will be added to + * \param other The list that contains the elements to add. + * + * \memberof wl_list + */ void wl_list_insert_list(struct wl_list *list, struct wl_list *other); /** -- 1.8.3.1 ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel
Problems building Weston/demo applications on the Raspberry Pi
Hi everyone I am trying to build libwayland, Weston and the demo programs on my Raspberry Pi following the guide at http://wayland.freedesktop.org/raspberrypi.html When compiling Weston and the demo programs however, I get the attached error and no Makefile is being created. What confuses me is that the guide says that When adding --disable-wayland-compositor you can remove the dummy wayland-egl.pc pkg-config file, except that the --disable-wayland-compositor-flag is present by default in the build guide and the wayland-egl.pc file has not been mentioned before at all (i. e. does not seem to belong to the group of pkg-conf files that the guide mentions earlier). Is there something obvious I am missing? Thanks for your support! Kind regards, Silvan autoreconf: Entering directory `.' autoreconf: configure.ac: not using Gettext autoreconf: running: aclocal -I /home/pi/local/share/aclocal --force autoreconf: configure.ac: tracing autoreconf: running: libtoolize --copy --force libtoolize: putting auxiliary files in `.'. libtoolize: copying file `./ltmain.sh' libtoolize: Consider adding `AC_CONFIG_MACRO_DIR([m4])' to configure.ac and libtoolize: rerunning libtoolize, to keep the correct libtool macros in-tree. libtoolize: Consider adding `-I m4' to ACLOCAL_AMFLAGS in Makefile.am. autoreconf: running: /usr/bin/autoconf --force autoreconf: running: /usr/bin/autoheader --force autoreconf: running: automake --add-missing --copy --force-missing autoreconf: Leaving directory `.' checking for gcc... gcc checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... no checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ISO C89... none needed checking how to run the C preprocessor... gcc -E checking for grep that handles long lines and -e... /bin/grep checking for egrep... /bin/grep -E checking for ANSI C header files... yes checking for sys/types.h... yes checking for sys/stat.h... yes checking for stdlib.h... yes checking for string.h... yes checking for memory.h... yes checking for strings.h... yes checking for inttypes.h... yes checking for stdint.h... yes checking for unistd.h... yes checking minix/config.h usability... no checking minix/config.h presence... no checking for minix/config.h... no checking whether it is safe to define __EXTENSIONS__... yes checking for special C compiler options needed for large files... no checking for _FILE_OFFSET_BITS value needed for large files... 64 checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for a thread-safe mkdir -p... /bin/mkdir -p checking for gawk... no checking for mawk... mawk checking whether make sets $(MAKE)... yes checking for style of include used by make... GNU checking dependency style of gcc... gcc3 checking whether make supports nested variables... yes checking for gcc... (cached) gcc checking whether we are using the GNU C compiler... (cached) yes checking whether gcc accepts -g... (cached) yes checking for gcc option to accept ISO C89... (cached) none needed checking for a sed that does not truncate output... /bin/sed checking build system type... armv6l-unknown-linux-gnueabihf checking host system type... armv6l-unknown-linux-gnueabihf checking how to print strings... printf checking for a sed that does not truncate output... (cached) /bin/sed checking for fgrep... /bin/grep -F checking for ld used by gcc... /usr/bin/ld checking if the linker (/usr/bin/ld) is GNU ld... yes checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B checking the name lister (/usr/bin/nm -B) interface... BSD nm checking whether ln -s works... yes checking the maximum length of command line arguments... 1572864 checking whether the shell understands some XSI constructs... yes checking whether the shell understands +=... yes checking how to convert armv6l-unknown-linux-gnueabihf file names to armv6l-unknown-linux-gnueabihf format... func_convert_file_noop checking how to convert armv6l-unknown-linux-gnueabihf file names to toolchain format... func_convert_file_noop checking for /usr/bin/ld option to reload object files... -r checking for objdump... objdump checking how to recognize dependent libraries... pass_all checking for dlltool... no checking how to associate runtime and link libraries... printf %s\n checking for ar... ar checking for archiver @FILE support... @ checking for strip... strip checking for ranlib... ranlib checking command to parse /usr/bin/nm -B output from gcc object... ok checking for sysroot... no checking for mt... mt checking if mt is a manifest tool... no checking for dlfcn.h... yes checking for objdir... .libs checking if gcc supports -fno-rtti -fno-exceptions... no checking for gcc option to produce PIC... -fPIC -DPIC
Re: [PATCH 1/2] utils: Document wl_container_of
On 09/15/2013 11:09 AM, Aaron Faanes wrote: Modified this documentation to be much less verbose than before. I also added an example, used better doxygen style, and mentioned that wl_container_of is useful outside of just wl_list. --- src/wayland-util.h | 27 +++ 1 file changed, 27 insertions(+) diff --git a/src/wayland-util.h b/src/wayland-util.h index de2e464..f85c521 100644 --- a/src/wayland-util.h +++ b/src/wayland-util.h @@ -111,6 +111,33 @@ int wl_list_length(const struct wl_list *list); int wl_list_empty(const struct wl_list *list); void wl_list_insert_list(struct wl_list *list, struct wl_list *other); +/** + * Retrieves a pointer to the container of a given item. + * + * This macro allows conversion from a pointer to a contained item to its + * container. This is useful if you have a contained item like a wl_list, + * wl_listener, or wl_signal, and would like to retrieve the struct that + * contains it. + * + * To demonstrate, given a wl_list contained by a wl_resource I think you might want to add in a member called 'link' Without this information it took a bit of puzzling to figure out exactly what was going on. + * + * \code + * struct wl_list *some_link = ...; I don't know if there are any real examples with a simpler object but the doc is a little confusing by making the inner object a complex one like wl_list. Is there an example where the member is something simple like an int? ___ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel