Interfaces to objects

Bill Spitzak spitzak at gmail.com
Mon Aug 11 16:10:35 PDT 2014


On 08/11/2014 03:03 PM, Jasper St. Pierre wrote:

> wl_shell does exist. It's a global object that is bound by the client,
> using wl_registry.bind. It's as real as any other object.

What I meant was that the wl_registry::global event with the wl_shell 
api was not sent if the compositor does not implement the 
wl_shell_surface api. This makes it impossible to bind an id to the 
wl_shell surface api.

Since there is no id that can be used in the wire protocol to get the 
wl_shell::get_shell_surface request, it is as though the wl_shell object 
does not exist.

> Even if wl_shell exists, that does not mean that all wl_surfaces are
> also wl_shell_surfaces. Cursor surfaces are also wl_surfaces, and those
> are not wl_shell_surfaces. Subsurfaces are also wl_surfaces, and those
> are not wl_shell_surfaces.

What exactly happens if you call wl_shell::get_shell_surface with one of 
these? It does not do a round trip so it cannot fail.

> Why are additional objects more expensive?

Creation and destruction sends requests over the wire protocol. To avoid 
this you must keep them around after first creating them, rather than 
creating them when needed.

> Why would you need cross-platform data structures, and why do you
> believe that the internals of the data structure has anything to do with
> the wire format? Multiple toolkits and Wayland compositors exist, and
> they all have entirely different internal data structures. They all
> collaborate fine.

For utility functions that are used by more than one toolkit.


More information about the wayland-devel mailing list