1. 16 Oct, 2019 2 commits
    • Simon Ser's avatar
      tests: add a test for wl_global_remove · 4162863c
      Simon Ser authored
      This test makes sure that after wl_global_remove:
      * The global_remove event is sent to existing clients
      * Binding to the removed global still works
      * A new client will not see the removed global advertised
      Signed-off-by: Simon Ser's avatarSimon Ser <contact@emersion.fr>
    • Simon Ser's avatar
      server: add wl_global_remove · 39852f11
      Simon Ser authored
      This commit adds a new wl_global_remove function that just sends a global
      remove event without destroying it. See [1] for details.
      Removing a global is racy, because clients have no way to acknowledge they
      received the removal event.
      It's possible to mitigate the issue by sending the removal event, waiting a
      little and then destructing the global for real. The "wait a little" part is
      compositor policy.
      [1]: #10Signed-off-by: Simon Ser's avatarSimon Ser <contact@emersion.fr>
  2. 14 Oct, 2019 1 commit
  3. 27 Sep, 2019 1 commit
    • Simon Ser's avatar
      server: add wl_global_set_user_data · d5055ad9
      Simon Ser authored
      When implementing a workaround for [1], one needs to accept a global to be
      bound even though it has become stale.
      Often, a global's user data is free'd when the global needs to be destroyed.
      Being able to set the global's user data (e.g. to NULL) can help preventing a
      (The alternative is to make the compositor responsible for keeping track of
      stale user data objects via e.g. refcounting.)
      [1]: #10Signed-off-by: Simon Ser's avatarSimon Ser <contact@emersion.fr>
  4. 17 Sep, 2019 1 commit
  5. 11 Sep, 2019 1 commit
  6. 10 Sep, 2019 4 commits
  7. 06 Sep, 2019 6 commits
  8. 05 Sep, 2019 1 commit
  9. 26 Aug, 2019 1 commit
    • Liu Wenlong's avatar
      server: Fix fake "Address already in use" error · 152c9ed9
      Liu Wenlong authored
      In the current workflow, socket file will be deleted if it already exists.
      However, if the socket file is a symbolic link and the file that it refers
      to doesn't exist, we will got "Address already in use" because bind()
      thinks the socket file exists and won't create it.
      Now, use lstat() to determine whether the socket file exists.
      Signed-off-by: Liu Wenlong's avatarLiu Wenlong <liuwl.fnst@cn.fujitsu.com>
  10. 17 Aug, 2019 1 commit
    • Drew DeVault's avatar
      Improve description of wl_surface · 17e49ba8
      Drew DeVault authored
      The original text makes some assumptions about surfaces which may not be
      true and fails to capture some details which are important to the
      essential traits of a wl_surface.
  11. 05 Aug, 2019 1 commit
  12. 30 Jul, 2019 1 commit
    • Drew DeVault's avatar
      Document unusual wl_registry.bind new_id behavior · a2f1343b
      Drew DeVault authored
      When wayland-scanner encounters a new_id field with no corresponding
      interface name defined, instead of emitting a function whose signature
      lines up with the usual case (a uint32_t ID), it adds the interface name
      as a string and the version number so that the interface can be
      identified from the protcol message.
      Without docs, this was previously left for the interprid wire protocol
      implementor (e.g. me an hour ago) to discover when Wayland clients send
      them apparently bogus messages.
      I would have preferred if a different primitive type were used here
      (e.g. typed_new_id) to reflect the fact that the wire protocol is
      different, but I felt it unwise to add a new primitive to wayland.xml in
  13. 29 Jul, 2019 1 commit
    • Jonas Ådahl's avatar
      proxy: Add API to tag proxy objects · 493ab79b
      Jonas Ådahl authored
      When an application and a toolkit share the same Wayland connection,
      it will receive events with each others objects. For example if the
      toolkit manages a set of surfaces, and the application another set, if
      both the toolkit and application listen to pointer focus events,
      they'll receive focus events for each others surfaces.
      In order for the toolkit and application layers to identify whether a
      surface is managed by itself or not, it cannot only rely on retrieving
      the proxy user data, without going through all it's own proxy objects
      finding whether it's one of them.
      By adding the ability to "tag" a proxy object, the toolkit and
      application can use the tag to identify what the user data pointer
      points to something known.
      To create a tag, the recommended way is to define a statically allocated
      constant char array containing some descriptive string. The tag will be
      the pointer to the non-const pointer to the beginning of the array.
      For example, to identify whether a focus event is for a surface managed
      by the code in question:
      	static const char *my_tag = "my tag";
      	static void
      	pointer_enter(void *data,
      		      struct wl_pointer *wl_pointer,
      		      uint32_t serial,
      		      struct wl_surface *surface,
      		      wl_fixed_t surface_x,
      		      wl_fixed_t surface_y)
      		struct window *window;
      		const char * const *tag;
      		tag = wl_proxy_get_tag((struct wl_proxy *) surface);
      		if (tag != &my_tag)
      		window = wl_surface_get_user_data(surface);
      	static void
      	init_window_surface(struct window *window)
      		struct wl_surface *surface;
      		surface = wl_compositor_create_surface(compositor);
      		wl_surface_set_user_data(surface, window);
      		wl_proxy_set_tag((struct wl_proxy *) surface,
      Signed-off-by: Jonas Ådahl's avatarJonas Ådahl <jadahl@gmail.com>
  14. 21 Jul, 2019 1 commit
  15. 09 Jul, 2019 2 commits
    • Manuel Stoeckl's avatar
      connection: do not abort when dup(fd) fails · 9d63c9ff
      Manuel Stoeckl authored
      Instead, cleanly exit wl_closure_marshal and let the caller handler
      the error. For wayland-client, the sole calling function will call
      wl_abort() anyway. For wayland-server, the calling function will
      cleanly shutdown the client.
      This change ensures that compositors run with low file descriptor
      limits or internal leaks need not crash suddenly (and sometimes
      far from the problem) when space runs out.
      Signed-off-by: default avatarManuel Stoeckl <code@mstoeckl.com>
    • Scott Anderson's avatar
      wayland.xml: Make releases for multiple 'wl_surface.attach' undefined · a2817833
      Scott Anderson authored
      Fixes #46
      The way wl_buffer is specified makes this situation inherently racy,
      meaning there is no way this can be done unambiguously. Current real
      compositor implementations already have differing behaviour for this, so
      any client relying on it was already broken, if any such client exists.
      This specifically only singles out wl_buffer.release as being undefined;
      every other aspect of it should still be valid. This is so existing and
      correct uses of multiple attaches are still valid, where a
      "static"/immutable wl_buffer is being used (i.e. they don't care about
      the release event).
      Signed-off-by: Scott Anderson's avatarScott Anderson <scott.anderson@collabora.com>
  16. 05 Jul, 2019 1 commit
  17. 05 Jun, 2019 2 commits
  18. 31 May, 2019 1 commit
    • orbea's avatar
      Add a missing -pthread to fix compile with slibtool. · 2485a5c2
      orbea authored
      When compiling wayland with slibtool instead of GNU libtool
      it will fail building libtest_runner with an undefined
      reference to pthread_join@@GLIBC_2.2.5. This is because
      -pthread (Or -lpthread) is missing from display_test. If its
      added the build succeeds as expected with slibtool and
      continues to work with libtool. Its likely that libtool is
      hiding this failure by silently adding the missing flag which
      is not uncommon...
      Exposed in commit aa51a833.
      Fixes #91Signed-off-by: orbea's avatarorbea <orbea@riseup.net>
  19. 02 May, 2019 3 commits
    • Antonio Borneo's avatar
      log: remove "%m" from format strings by using strerror(errno) · 294ed97e
      Antonio Borneo authored
      The printf() format specifier "%m" is a glibc extension to print
      the string returned by strerror(errno). While supported by other
      libraries (e.g. uClibc and musl), it is not widely portable.
      In Wayland code the format string is often passed to a logging
      function that calls other syscalls before the conversion of "%m"
      takes place. If one of such syscall modifies the value in errno,
      the conversion of "%m" will incorrectly report the error string
      corresponding to the new value of errno.
      Remove all the occurrences of the specifier "%m" in Wayland code
      by using directly the string returned by strerror(errno).
      Signed-off-by: Antonio Borneo's avatarAntonio Borneo <borneo.antonio@gmail.com>
    • Manuel Stoeckl's avatar
      tests: Verify that wayland_scanner can catch bad identifiers · 6db761d1
      Manuel Stoeckl authored
      The test runs wayland_scanner on a set of XML protocol files which
      have malformed element names, and confirms that an error is produced
      and indicates the correct line.
      Copyright notifications are not included in the test files, as
      they are not code; of course, the project license still applies.
      Signed-off-by: default avatarManuel Stoeckl <code@mstoeckl.com>
    • Manuel Stoeckl's avatar
      scanner: error when element names will not compile · 6ce4bbb3
      Manuel Stoeckl authored
      This change checks that the "name" fields of the various structures in
      a Wayland protocol XML file will be converted into C identifiers that
      can be successfully compiled.
      For names which will be inserted as the prefix of an identifier
      enforce a match with [_a-zA-Z][_0-9a-zA-Z]* . For types only inserted
      as the suffix of an identifier (enum, entry), enforce a format of
      [_0-9a-zA-Z]+ .
      Unicode characters (and escape sequences like \u0394) are not allowed,
      because most older and some newer C compilers do not support them by
      For sake of simplicity, this patch does not check for collisions
      with reserved words or standard library names.
      Signed-off-by: default avatarManuel Stoeckl <code@mstoeckl.com>
  20. 27 Apr, 2019 1 commit
  21. 19 Apr, 2019 2 commits
  22. 12 Apr, 2019 1 commit
  23. 11 Apr, 2019 2 commits
  24. 08 Apr, 2019 1 commit
  25. 06 Apr, 2019 1 commit