summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2012-10-11client: Discard proxies with no implementation at dispatch timenextKristian Høgsberg1-2/+3
We need to queue up events even if a proxy doesn't have an implementation (listener). In case of server created new objects, the client haven't had a chance to set the listener when the first events to the new object come in. So now we always queue up events and discard them at dispatch time if they don't have a listener at that point.
2012-10-11client: Don't forget to init and destroy mutexKristian Høgsberg1-0/+2
These chunks were dropped at some point, thanks to David Herrmann for spotting the omission.
2012-10-11connection: Print object id for new-id arguments in deubug outputKristian Høgsberg1-2/+1
We can't use the same behaviour in both the client and the server. In the client this is a wl_proxy pointer in the server it's a pointer to the uint32_t object id. This doesn't fix the problem, but it's a slightly more useful default, since we typically use WAYLAND_DEBUG on the client.
2012-10-11client: Fix double locking bugAnder Conselvan de Oliveira2-6/+2
The function wl_proxy_create_for_id() would try to acquire the display lock, but the only call path leading to it would call it with the lock already acquired. This patch removes the attempt to acquire the lock and makes the function static. It was exported before because client had to create proxy's manually when the server sent a new object id, but since commit 9de9e39f [1] this is no longer necessary. [1] commit 9de9e39f87adfce1ea9755e394928756254c0ba2 Author: Kristian Høgsberg <krh@bitplanet.net> Date: Thu Jun 28 22:01:58 2012 -0400 Allocate client proxy automatically for new objects v2: Change the right function. Previous patch changed wl_proxy_create() instead of wl_proxy_create_for_id().
2012-10-11protocol: clarify multiple wl_surface.attachPekka Paalanen1-1/+3
Explicitly say what happens with the wl_buffer.release event, if you attach several wl_buffers without a commit in between. Reported-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-11data-device: Don't fake an attach event on drag icon surfaceAnder Conselvan de Oliveira1-10/+2
Emit a new drag icon signal instead and let the compositor handle the unmapping of the icon surface.
2012-10-11protocol: fix clarification of input region on drags and pointersPekka Paalanen1-7/+11
The previous clarification did not follow the current implementation in Weston, where when a surface stops being a cursor or an icon, it becomes a plain unmapped surface again. Rewrite the related paragraphs, and fix some typos while at it. For start drag, make it explicit of which surface argument we are talking about. v2: Make the input region undefined when the use ends. Most likely no-one will re-use these surfaces for anything else than the same use case, so leave some slack for the implementations to avoid useless work on resetting the regions. Reported-by: Ander Conselvan de Oliveira <conselvan2@gmail.com> Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10protocol: elaborate on wl_bufferPekka Paalanen1-1/+17
Spell out exactly when a client may re-use a wl_buffer or its backing storage. Mention the optimization for GL-compositor with wl_shm-clients. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10protocol: wl_surface.frame needs wl_surface.commitPekka Paalanen1-1/+11
Clarify, when frame request takes effect. Explain when to send/receive the callback. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10protocol: clarify input region on drags and pointersPekka Paalanen1-4/+16
Drag icon and cursor surfaces must never receive input, so their input region is always empty. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10protocol: double-buffered state for wl_surfacePekka Paalanen1-23/+98
This change breaks the protocol. The current protocol is racy in that updates to surface content and surface state (e.g. damage, input and opaque regions) are not guaranteed to happen at the same time. Due to protocol buffering and handling practices, the issues are very hard to trigger. Committing damage to a surface at arbitrary times makes it hard to track when the wl_buffer is being read by the server, and when it is safe to overwrite (the case of wl_shm with a single buffer reused constantly). This protocol change introduces the concept of double-buffered state. Such state is accumulated and cached in the server, unused, until the final commit request. The surface will receive its new content and apply its new state atomically. A wl_surface.commit request is added to the protocol. This is thought to be more clear, than having wl_surface.attach committing implicitly, and then having another request to commit without attaching, as would be required for a GL app that wants to change e.g. input region without redrawing. When these changes are implemented, clients do not have to worry about ordering damage vs. input region vs. attach vs. ... anymore. Clients set the state in any order they want, and kick it all in with a commit. The interactions between wl_surface.attach, (wl_surface.commit,) wl_buffer.release, and wl_buffer.destroy have been undocumented. Only careful inspection of the compositor code has told when a wl_buffer is free for re-use, especially for wl_shm and wrt. wl_surface.damage. Try to clarify how it all should work, and what happens if the wl_buffer gets destroyed. An additional minor fix: allow NULL argument to wl_surface.set_opaque_region. The wording in the documentation already implied that a nil region is allowed. Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
2012-10-10Fix typecheck in case of multiple instances of type meta dataKristian Høgsberg1-1/+15
In most cases the pointer equality test is sufficient. However, in some cases, depending on how things are split across shared objects, we can end up with multiple instances of the interface metadata constants. So if the pointers match, the interfaces are equal, if they don't match we have to compare the interface names.
2012-10-10doc: Update drag and drop section and add info about selectionsAnder Conselvan de Oliveira1-160/+99
Replace the outdated section about drag and drop support with a rewritten section covering the data source/offer mechanism and wl_data_device, explaining how selection and drag ang drop works.
2012-10-10connection: Move object lookup out of wl_connection_demarshal()Kristian Høgsberg4-38/+74
On the client side where we queue up multiple events before dispatching, we need to look up the receiving proxy and argument proxies immediately before calling the handler. Between queueing up multiple events and eventually invoking the handler, previous handlers may have destroyed some of the proxies.
2012-10-10Split the global registry into its own wl_registry objectKristian Høgsberg4-162/+72
The only way to make the global object listener interface thread safe is to make it its own interface and make different listeners different wl_proxies. The core of the problem is the callback we do when a global show up or disappears, which we can't do with a lock held. On the other hand we can't iterate the global list or the listener list without a lock held as new globals or listeners may come and go during the iteration. Making a copy of the list under the lock and then iterating after dropping the lock wont work either. In case of the listener list, once we drop the lock another thread may unregister a listener and destroy the callbackk data, which means that when we eventually call that listener we'll pass it free memory and break everything. We did already solve the thread-safe callback problem, however. It's what we do for all protocol events. So we can just make the global registry functionality its own new interface and give each thread its own proxy. That way, the thread will do its own callbacks (with no locks held) and destroy the proxy when it's no longer interested in wl_registry events.
2012-10-10scanner: Generate client stubs for wl_display requestsKristian Høgsberg3-52/+0
We used to special case this because of the untyped new-id argument in the bind request. Now that the scanner can handle that, we can remove the special case. Switching to the generated stubs does bring an API change since we now also take the interface version that the client expects as an argument. Previously we would take this from the interface struct, but the application may implement a lower version than what the interface struct provides. To make sure we don't try to dispatch event the client doesn't implement handlers for, we have to use a client supplied version number.
2012-10-10scanner: Send interface name and version for types new_id argsKristian Høgsberg2-21/+48
This makes the scanner generate the code and meta data to send the interface name and version when we pass a typeless new_id. This way, the generic factory mechanism provided by wl_display.bind can be provided by any interface.
2012-10-10client: Add wl_event_queue for multi-thread dispatchingKristian Høgsberg2-35/+123
This introduces wl_event_queue, which is what will make multi-threaded wayland clients possible and useful. The driving use case is that of a GL rendering thread that renders and calls eglSwapBuffer independently of a "main thread" that owns the wl_display and handles input events and everything else. In general, the EGL and GL APIs have a threading model that requires the wayland client library to be usable from several threads. Finally, the current callback model gets into trouble even in a single threaded scenario: if we have to block in eglSwapBuffers, we may end up doing unrelated callbacks from within EGL. The wl_event_queue mechanism lets the application (or middleware such as EGL or toolkits) assign a proxy to an event queue. Only events from objects associated with the queue will be put in the queue, and conversely, events from objects associated with the queue will not be queue up anywhere else. The wl_display struct has a built-in event queue, which is considered the main and default event queue. New proxies are associated with the same queue as the object that created them (either the object that a request with a new-id argument was sent to or the object that sent an event with a new-id argument). A proxy can be moved to a different event queue by calling wl_proxy_set_queue(). A subsystem, such as EGL, will then create its own event queue and associate the objects it expects to receive events from with that queue. If EGL needs to block and wait for a certain event, it can keep dispatching event from its queue until that events comes in. This wont call out to unrelated code with an EGL lock held. Similarly, we don't risk the main thread handling an event from an EGL object and then calling into EGL from a different thread without the lock held.
2012-10-10client: Make wl_display thread safeKristian Høgsberg1-4/+42
Not all entry points are thread safe: global listeners and global lookup is still only main thread.
2012-10-10client: Split event handling into demarshal and dispatch stepsKristian Høgsberg2-20/+49
This lets us demarshal with a mutex held and then do dispatching after releasing the mutex.
2012-10-10Change filedescriptor API to be thread safeKristian Høgsberg9-253/+152
The update callback for the file descriptors was always a bit awkward and un-intuitive. The idea was that whenever the protocol code needed to write data to the fd it would call the 'update' function. This function would adjust the mainloop so that it polls for POLLOUT on the fd so we can eventually flush the data to the socket. The problem is that in multi-threaded applications, any thread can issue a request, which writes data to the output buffer and thus triggers the update callback. Thus, we'll be calling out with the display mutex held and may call from any thread. The solution is to eliminate the udpate callback and just require that the application or server flushes all connection buffers before blocking. This turns out to be a simpler API, although we now require clients to deal with EAGAIN and non-blocking writes. It also saves a few syscalls, since the socket will be writable most of the time and most writes will complete, so we avoid changing epoll to poll for POLLOUT, then write and then change it back for each write.
2012-10-09Ensure cursor_data.c is included in distribution tarballsthreadsMatt Roper4-2/+3
Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
2012-10-09connection: Add missing free from error pathRob Bradford1-0/+1
On the error codepath that errors out on ENOMEM we should free the allocated closure. Signed-off-by: Rob Bradford <rob@linux.intel.com>
2012-10-09xcursor: Fix allocation based on string lengthRob Bradford1-1/+1
strlen() doesn't include the terminating NUL. Therefore when allocating a block of memory to hold something equivalent to the length of the string we must increment to take the NUL byte into consideration. Signed-off-by: Rob Bradford <rob@linux.intel.com>
2012-10-09wayland: Fix typosTiago Vignatti1-3/+3
My vim spell checker is able to find typos of xml files after adding "syn spell toplevel" to ~/.vim/after/syntax/xml.vim aah, and Wayland is capital letter :) Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-10-09doc: Remove Shared Object Cache sectionTiago Vignatti1-55/+0
We don't support anything like that yet. Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-10-09doc: Auto-generate Protocol/Interfaces section insteadTiago Vignatti3-128/+66
Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-10-09doc: Improve Wire Format sectionTiago Vignatti1-5/+17
Fixed the wayland socket name and added documentation for fixed format. Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-10-01connection: Drop unused static closuresKristian Høgsberg1-1/+0
2012-09-26man: fix compilation without xsltprocDavid Herrmann1-5/+9
We really shouldn't add the man-pages when HAVE_XSLTPROC is not true so move it into the if-clause. But declare the automake-variables outside of the if-clause to avoid automake complaints. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-25man: add man-page infrastructureDavid Herrmann5-1/+137
This adds a man-page infrastructure based on Docbook XML files. This allows us to integrate the man-pages into the publican books later. An example page for wl_display_connect() (with an alias wl_display_connect_to_fd()) is also added. Feel free to add more man-pages. Function calls are put in man3 and overview pages into man7. All pages (including aliases) have to be added to the Makefile. Docbook does generate aliases automatically from the additional names that were put in the XML file. However, a small SED script is needed to fixup the include-paths in the generated troff files. If someone knows how to avoid that (or even install them gzip'ped), please fix it up. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-25protocol: Fix typoTiago Vignatti1-1/+1
Signed-off-by: Tiago Vignatti <tiago.vignatti@intel.com>
2012-09-13Fix typo (ratio, not ration)Diego Viola1-1/+1
Signed-off-by: Diego Viola <diego.viola@gmail.com>
2012-09-12event-loop: export wl_event_loop_dispatch_idle()David Herrmann2-3/+4
When integrating the wayland event-loop into another event-loop, we currently have no chance of checking whether there are pending idle sources that have to be called. This patch exports the "dispatch_idle_sources()" call so other event loops can call this before going to sleep. This is what wl_event_loop_dispatch() currently does so we simply allow external event-loops to do the same now. To avoid breaking existing applications, we keep the call to dispatch_idle_sources() in wl_event_loop_dispatch() for now. However, if we want we can remove this later and require every application to call this manually. This needs to be discussed, but the overhead is negligible so we will probably leave it as it is. This finally allows to fully integrate the wayland-server API into existing event-loops without any nasty workarounds. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-10wayland-server: return new ID in wl_client_add_resource()David Herrmann2-5/+9
wl_client_add_resource() used to return no error even though the new resource wasn't added to the client. This currently makes it very easy to DOS weston by simply posting thousands of "create_surface" requests with an invalid ID. Weston simply assumes the wl_client_add_resource() request succeeds but will never destroy the surface again as the "destroy" signal is never called (because the surface isn't linked into the wl_map). This change makes wl_client_add_resource() return the new ID of the added object and 0 on failure. Servers (like weston) can now correctly immediately destroy the surface when this call fails instead of leaving the surface around and producing memory-leaks. Instead of returning -1 on failure and 0 on success, I made it return the new ID as this seems more appropriate. We can directly use it when calling it with new_id==0. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-10event-loop: remove dead codeDavid Herrmann1-2/+2
There is really no need to increment "n" if we never read the value. The do-while() loop overwrites the value before it is read the first time. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
2012-09-10cursor: add cursor.pcf and extraction programPhilipp Brüschweiler2-0/+531
2012-09-10cursor: Add a default cursor themePhilipp Brüschweiler2-1/+618
This theme is loaded when the specified cursor theme can not be found. These cursors are extracted from the xorg sources and transformed into raw ARGB data by a small helper program (commited separately).
2012-08-29tests: Quiet warningKristian Høgsberg1-1/+2
2012-08-29tests: ensure sanity leak check tests pass when leak checks are disabled.U. Artie Eoff2-1/+13
This finalizes Robert Bradfords patch to allow NO_ASSERT_LEAK_CHECK environment variable to disable leak checks in unit tests. Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2012-08-29tests: Allow disabling leak checking assertions by envRob Bradford1-2/+4
Some code coverage tools trigger these assertions when run against the test suite since they don't free all their memory.
2012-08-16Add wl_shm_buffer_create()Kristian Høgsberg2-1/+50
2012-08-16client: Add wl_display_connect_to_fd() functionKristian Høgsberg2-27/+45
This lets us connect a display to an already existing socket fd.
2012-08-16protocol: Fix typo.Scott Moreau1-1/+1
2012-08-14socket-test: don't try to be clever, fail if no XDG_RUNTIME_DIR is setPhilipp Brüschweiler1-11/+10
Not only setenv(), also putenv() allocates memory on my system (glibc 2.16.0). Just fail with a clear message if XDG_RUNTIME_DIR is not set. https://bugs.freedesktop.org/show_bug.cgi?id=52618
2012-08-13Add support for X cursor themes.Christopher Michael1-1/+1
This patch adds a few more directories to search for xcursor themes. Along with the weston patch, this adds the ability to configure weston to use an X11 cursor theme. Previously, wayland cursor would just look in the icons and pixmaps directories for cursor images to load. This adds the ability to also search in the x cursors directory.
2012-08-13Fix grammar in the rendering section.Christopher Michael1-1/+1
Upon reading some docs, I found a small grammar mistake in the rendering section. This patch fixes that.
2012-08-03connection: zero out string paddingKristian Høgsberg1-3/+5
We don't want to send random data to the client and this also keeps valgrind happy.
2012-07-31protocol: Remove "repeat" from "key_state"Andre Heider1-2/+0
This is unused and apparently was never implemented.
2012-07-26Don't skip the first directory entry when reading cursors.Dima Ryazanov1-1/+0
I end up missing the "bottom_right_corner" cursor.