summaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2018-04-10Add nvidia-release-notes filenvidia_head_rebase-4.0Miguel A. Vico1-0/+27
Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com>
2018-04-10compositor: Process stream attach requests with wl_eglstream_controllerMiguel A. Vico5-54/+217
So far, the EGLStream implementation of the Wayland client-side driver has been using wl_surface_attach + commit in order to make the server create its stream endpoint and attach a consumer to it. However, no actual buffer would be actually shared between client and server, which goes against many of the assumptions behind wl_surface_attach + commit. This has caused different interaction issues in the past. In order to properly resolve this once and for all, a new wl_eglstream_controller protocol has been added which will let clients request the compositor to create its stream. This change adds the required code for weston to create a wl_eglstream_controller global and process attach_eglstream_consumer requests. [mvicomoya: - Dynamically load libnvidia-egl-wayland.so.1 instead linking against it - add a copy of wayland-eglstream-controller protocol, and generate the server header at build time] Signed-off-by: Ashutosh Agarwal <asagarwal@nvidia.com> Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com>
2018-04-10simple-egl: Do not set EGL up until XDG setup is completeMiguel A. Vico1-32/+35
There is nothing that prohibits the underlying EGL_PLATFORM_WAYLAND implementation to attach a buffer or commit surfaces right after the Wayland EGLSurface has been created. Since XDG Shell v6 imposes that no buffer attachments or surface commits must be done before a configure is complete, Wayland clients shouldn't start setting EGL up until XDG setup is complete. Related bug: https://bugs.freedesktop.org/show_bug.cgi?id=98731 Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com>
2018-04-10compositor-drm: Add support for EGLDevice+EGLOutputMiguel A. Vico5-78/+217
As previously stated, EGLDevice and EGLOutput will provide means to access native device objects and different portions of display control hardware respectively. Whenever EGL_EXT_device_drm extension is present, EGLDevice can be used to enumerate and access DRM KMS devices, and EGLOutputLayer to enumerate and access DRM KMS crtcs and planes. By using EGLStreams and attaching an EGLOutputLayer consumer (representing a DRM KMS crtc or plane) to it, compositor-drm can produce final composition frames and present them on a DRM device. This change adds required logic to support presentation through EGLDevice+EGLOutput+EGLStream. Whether GBM or EGLDevice should be used can be controlled by --use-egldevice backend argument. Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> Reviewed-by: Andy Ritger <aritger@nvidia.com> Reviewed-by: Adam Cheney <acheney@nvidia.com> Reviewed-by: James Jones <jajones@nvidia.com>
2018-04-10compositor-drm: Gracefully handle vblank and flip invalid timestampsMiguel A. Vico1-3/+25
Instant query for vblank timestamp may always fail, resulting in never scheduling a full repaint in drm_output_start_repaint_loop(). Additionally, timestamp provided in page_flip_handler() may also be invalid. This change makes both drm_output_start_repaint_loop() and page_flip_handler() to schedule a full repaint in any of the situations above. Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> Reviewed-by: Andy Ritger <aritger@nvidia.com>
2018-04-10gl-renderer: Add EGL client support for EGLStream frame presentationMiguel A. Vico2-1/+187
By attaching a GLTexture consumer to a stream, a producer (wayland EGL client) could feed frames to a texture, which in turn can be used by a compositor to prepare the final frame to be presented. This change adds required logic to support presentation approach described above. Note that some unpublished EGL extensions were needed: - EGL_NV_stream_attrib: https://github.com/aritger/eglstreams-kms-example/blob/master/proposed-extensions/EGL_NV_stream_attrib.txt - EGL_WL_wayland_eglstream: https://github.com/aritger/eglstreams-kms-example/blob/master/proposed-extensions/EGL_WL_wayland_eglstream.txt Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> Reviewed-by: Adam Cheney <acheney@nvidia.com> Reviewed-by: James Jones <jajones@nvidia.com>
2018-04-10gl-renderer: Add support for EGLDevice composited frame presentationMiguel A. Vico3-3/+315
EGLDevice provides means to enumerate native devices, and then create an EGL display connection from them. Similarly, EGLOutput will provide means to access different portions of display control hardware associated with an EGLDevice. For instance, EGLOutputLayer represents a portion of display control hardware that accepts an image as input and processes it for presentation on a display device. EGLStream implements a mechanism to communicate frame producers and frame consumers. By attaching an EGLOutputLayer consumer to a stream, a producer will be able to present frames on a display device. Thus, a compositor could produce frames and feed them to an EGLOutputLayer through an EGLStream for presentation on a display device. This change adds required logic to support presentation approach described above. Note that some unpublished EGL extensions were needed: - EGL_NV_stream_attrib: https://github.com/aritger/eglstreams-kms-example/blob/master/proposed-extensions/EGL_NV_stream_attrib.txt - EGL_EXT_stream_acquire_mode: https://github.com/aritger/eglstreams-kms-example/blob/master/proposed-extensions/EGL_EXT_stream_acquire_mode.txt - EGL_NV_output_drm_flip_event: https://github.com/aritger/eglstreams-kms-example/blob/master/proposed-extensions/EGL_NV_output_drm_flip_event.txt Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> Reviewed-by: Andy Ritger <aritger@nvidia.com> Reviewed-by: Adam Cheney <acheney@nvidia.com> Reviewed-by: James Jones <jajones@nvidia.com>
2018-04-10gl-renderer: Add EGLDevice enumeration supportMiguel A. Vico2-1/+96
EGLDevice provides means to enumerate native devices. In preparation for follow-on changes to support frame presentation through EGLDevice+EGLOutput, this change adds both gl_renderer_get_devices() and gl_renderer_get_drm_device_file() functions which will help to enumerate EGLDevices and match them to DRM devices. Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com> Reviewed-by: Andy Ritger <aritger@nvidia.com> Reviewed-by: Adam Cheney <acheney@nvidia.com> Reviewed-by: James Jones <jajones@nvidia.com>
2018-04-09configure.ac: bump to version 4.0.0 for the official releaseDerek Foreman1-2/+2
2018-04-05terminal: Fix unintended fallthrough to cursor restoreDaniel Stone1-0/+1
ef57a9b788 added support for window operations such as reporting the title in escape mode. It implemented this by which-window-op case, inside the existing which-escape-code case. Whilst it would break out of the former window-op case, it never broke out of the latter escape-code case. This would lead to window ops (such as reporting title) falling through to restoring the saved cursor position. This doesn't seem at all right, and also fixes a warning with GCC 8. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2018-04-02configure.ac: bump to version 3.0.93 for the RC1 releaseDerek Foreman1-1/+1
2018-04-02Partially revert "xwm: Add icon support to the frame" and friendsDerek Foreman1-86/+2
This (partially) reverts commit bef761796c2ada6344d227142af4a0f40b9760dd. This (partially) reverts commit 4d1cd36c9ea041688f92cd8981e43b5fe3b52409. This (partially) reverts commit 44fc1be913ab2faad0414f50e51d58310302d065. This (partially) reverts commit 6b58ea8c43ac81e519bd418efbf24687a5d731b8. The new xwm icon code has proven to be leaky and incomplete, and while we have patches under consideration to fix the rest of its known problems they still require changes and review cycles. Currently the known leaks have been squashed, but it still picks wrong sized icons and does no scaling, which can lead to very strange rendering. At window close time the wrong sized icon appears above the window during fade out. This patch reverts the mostly solid bits and keeps the unfinished bits behind in favor of a simpler revert than removing the whole thing. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Acked-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
2018-03-28Revert "xwm: do not include shadow in input region"Derek Foreman1-34/+0
This reverts commit 332d1892bbb380b32ff1c9f99d20184b447535dd. And re-introduces the bug it was intended to fix, see: https://lists.freedesktop.org/archives/wayland-devel/2017-December/036402.html Reverting this because it causes harm to all xwayland clients - the input region no longer gets adjusted when resizing windows. start an xterm, resize it larger, you can no longer interact with the new area of the window (including the server side decor).
2018-03-28xwm: Fix two more icon related memory leaksDerek Foreman1-0/+5
Hopefully sort the last leaks introduced in commit 6b58ea8c The window could be destroyed before it had a frame but after it had an icon (I could trigger this with firefox), and the window could be assigned an icon twice before it had a frame (I could trigger this with terminology). The latter leak was Reported-by: Scott Moreau <oreaus@gmail.com> Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-28ivi-shell: remove dead assignments in layer transitionEmre Ucan1-5/+4
Signed-off-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-28compositor: initialize ret in repaint_timer_handlerEmre Ucan1-1/+1
If output_list of compositor is empty, value of ret is read without initialization. Signed-off-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-28gl-renderer: set num_images after import_simple_dmabufEmre Ucan1-0/+1
we have to set num_images after import_simple_dmabuf call. Otherwise, egl_images will not be correctly referenced in gl_renderer_attach_dmabuf. (Found by clang source code analyzer) Signed-off-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-28input: fix use-after-free issue at pointer_cancelEmre Ucan1-12/+0
If the constraint is an one-shot constraint, constraint is freed in disable_pointer_constraint function. Therefore, we should not try to read freed memory at "switch (constraint->lifetime)" statement. The removed code is anyway superfluous. Because surface destroy signal is only removed, when constraint is an one-shot constraint. (Found by clang source code analyzer) Signed-off-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-28hmi-controller: remove dead assignments in add_launchersEmre Ucan1-4/+0
assigned values of x, y, ret and layout_surface are never read. (Found by clang source code analyzer) Signed-off-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-28compositor-drm: remove dead assigment in drm_fb_create_dumbEmre Ucan1-2/+0
ret is overwritten by drmModeAddFB2 call (Found by clang source code analyzer) Signed-off-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-27xwm: Fix memory leakScott Moreau1-2/+19
A memory leak introduced by 6b58ea8c led to me finding a bigger leak, which is xwm was calling frame_create() without calling frame_destroy(). This meant that the associated icon_surface was not being destroyed, leaving the destroy handler for it broken. Here we fix this by calling frame_destroy() when the window is destroyed and free the reply in the icon_surface destroy handler. Reviewed-by: Derek Foreman <derekf@osg.samsung.com> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-20Revert "xwm: Fix memory leak"Pekka Paalanen1-2/+0
This reverts commit d2cb711d813e750b1e303e6200c027fd27a21f8e. I missed the call to cairo_image_surface_create_for_data() which assumes the data will remain present until the cairo surface is destroyed. It seems the existence of data depends on the reply not being freed. This will need a more involved fix. Sorry, I noticed this just seconds after I pushed the patch. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-20xwm: Fix memory leakScott Moreau1-0/+2
Fix memory leak introduced by 6b58ea8c. weston_wm_handle_icon() was calling xcb_get_property_reply() without freeing the reply. Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-19configure.ac: bump to version 3.0.92 for the beta releaseDerek Foreman1-1/+1
2018-03-19simple-dmabuf-drm: use appropriately sized buffer (freedreno)Guido Günther1-3/+5
Use stride instead of width for buffer calculation. [Derek Foreman edited the commit log and removed the leftover initialization of 'size'] Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2018-03-19simple-dmabuf-drm: Always define ALIGNGuido Günther1-1/+1
Other backends might want to use it. Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2018-03-19Fix an uninitialized variableDima Ryazanov1-0/+1
"has_discrete" gets set to true in if/else if, but gets left unset otherwise. So let's initialize it to false. (This was caught by valgrind.) Signed-off-by: Dima Ryazanov <dima@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-19simple-dmabuf-drm: use getopt_longGuido Günther1-24/+27
Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-19simple-dmabuf-drm: use opt bitmask instead of is_immediateGuido Günther1-6/+6
Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-19Allow simple-dmabuf-drm to pass y_inverted flagGuido Günther1-8/+23
This allows to check if ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT is interpreted correctly by the compositor. We introduce an OPT_* bitmask to hold this flag and possible future command line flags. Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16.gitignore weston-simple-dmabuf-drmGuido Günther1-1/+1
Got renamed in f9dec67990a54afe14d4d2db694bf696ae418bcd Signed-off-by: Guido Günther <agx@sigxcpu.org> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16weston: Add a help string for --xwaylandDima Ryazanov1-0/+1
Signed-off-by: Dima Ryazanov <dima@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16simple-dmabuf-drm: use vfunc for drm_device_destroyGuido Günther1-7/+17
Remove ifdef clutter and makes sure it's only called for the active backend. Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16simpla-dmabuf-drm: Use more weston like coding styleGuido Günther1-10/+10
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16simple-dmabuf-drm: allow multiple backendsGuido Günther3-35/+47
This allows to enable freedreno and intel backends at the same time building the prerequisites for adding further ones. [Pekka: fix configure.ac if statements] Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16configure.ac: fix have_dbus if dbus support is disabledMichael Tretter1-0/+1
If dbus support is explicitly disabled, $have_dbus should be no, but was empty. systemd-login support depends on dbus, but the check does not trigger correctly, if $have_dbus is empty. Signed-off-by: Michael Tretter <m.tretter@pengutronix.de> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16compositor: do not free output region twice in weston_output_set_transform()Ilia Bozhinov1-3/+0
This is already done when weston_output_init_geometry() is called. Actually this is a fix for 8564a0d, because without this patch, the compositor sometimes crashes when setting output transform Signed-off-by: Ilia Bozhinov <ammen99@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-16build: honour libinput header locationJan Engelhardt1-1/+4
Add the respective CFLAGS to the build, otherwise it will error out as seen below. src/libinput-seat.c:30:22: fatal error: libinput.h: No such file or directory v2: add the CFLAGS only as needed, suggested by Pekka Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Cc: Jan Engelhardt <jengelh@inai.de> [Emil Velikov: polish commit message, v2] Signed-off-by: Emil Velikov <emil.velikov@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-15libweston/compositor: Place timeline recording after checking if stamp is validMarius Vlad1-2/+3
The timestamp could be either NULL if there's no mode set, or 0 when output gets awaken. It either crashes weston or we get vblanks at [0, 0] for that output. Signed-off-by: Marius Vlad <marius-cristian.vlad@nxp.com> CC: Pekka Paalanen <pekka.paalanen@collabora.co.uk> [Pekka: note, most start_repaint_loop pass in current time, not 0] Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-14libweston-desktop/xdg-shell-v6: Fix crash when surface has buffer at creationDerek Foreman1-2/+1
When a surface has a buffer at creation time we send an error, which results in a disconnection and all resources being destroyed. Since we send that error and return before performing the configure_list init weston_desktop_xdg_surface_destroy() will walk an uninitialized list and dereference a NULL pointer. Initializing the list earlier prevents this from happening. Signed-off-by: Derek Foreman <derekf@osg.samsung.com> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
2018-03-12clients: consolidate timer code part 2Pekka Paalanen3-87/+24
Continue moving bits to use toytimer instead of carelessly open-coded equivalent. Many of the copies were flawed against the race mentioned in toytimer_fire(). This patch handles window.c's key repeat, confine demo, and desktop-shell panel clock. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Derek Foreman <derekf@osg.samsung.com> Acked-by: Daniel Stone <daniels@collabora.com>
2018-03-12clients: consolidate timer code part 1Pekka Paalanen3-78/+135
There are multiple copies for the timerfd handling code, and I need a timer in one more app. Consolidate all the timerfd code into window.c to reduce the duplication. Many of the copies were also flawed against the race mentioned in toytimer_fire(). This patch handles clickdot and window.c's tooltip timer and cursor timer. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Derek Foreman <derekf@osg.samsung.com> Acked-by: Daniel Stone <daniels@collabora.com>
2018-03-09compositor-wayland: Ignore pointer enter on destroyed surfaceDaniel Stone1-0/+7
Due to race conditions, it is (vanishingly unlikely but) possible to receive a wl_pointer.enter event referring to a wl_surface we have just destroyed. If this happens, wl_surface will be NULL. Detect this, clear out our focus, and return. Other pointer and keyboard events are robust against destroyed surfaces. Signed-off-by: Daniel Stone <daniels@collabora.com> Cc: Pekka Paalanen <pekka.paalanen@collabora.co.uk> [Pekka: remove call to input_set_cursor()] Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-09input: never set keyboard focus without wl_resourcePekka Paalanen1-1/+9
Do not attempt to set keyboard focus to a surface that has no wl_resource. The destroy listener hangs off the wl_resource, so if that is not present, nothing will clean up the pointer when the weston_surface gets destroyed and it goes stale. As keyboard_focus_resource_destroyed() sets the focus to NULL, this patch should be enough to guarantee that the keyboard focus surface will always have a wl_resource. I have confirmed the added branch in weston_keyboard_set_focus() can be hit, but doing so is hard. My test case has weston/x11 with two outputs, and weston/wayland --sprawl running on top of that, then closing the parent compositor output windows one by one. Sometimes it hits, often it does not. Having the window closing animation enabled may help to hit it. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Daniel Stone <daniels@collabora.com>
2018-03-09compositor-wayland: handle wl_keyboard.enter(NULL)Pekka Paalanen1-0/+8
Destroying an output (wl_surface) can race against the parent compositor sending wl_keyboard.enter. When this race is lost, wayland-backend receives wl_keyboard.enter with a NULL wl_surface for the surface it just destroyed. Handle this case by ignoring such enter events. Since it is theoretically possible to follow enter with key events, drop those too. The modifiers event is sent before enter, so we cannot drop that on the same condition. wl_keyboard.leave handler seems to already handle the NULL focus case, but there is a question if the notify_keyboard_focus_out() call should be avoided. This patch fixes a hard to reproduce crash. I was running weston/x11 with two outputs, and weston/wayland --sprawl inside that, then closing the parent compositor windows one by one. Sometimes it would trigger this crash. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Daniel Stone <daniels@collabora.com>
2018-03-06autoconf: Remove configure line forgotten in ↵Emmanuel Gil Peyrot1-1/+0
bb707dc0fe331c9af112a0552b7aa6fde755dd83 Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-03-01gl-renderer: Create a high priority contextChris Wilson1-2/+34
EGL_IMG_context_priority allows the client to request that their rendering be considered high priority. For ourselves, this is important as we are interactive and any delay in our rendering causes input-output jitter; a less than smooth user interactive. So if the driver supports setting the context priority, try and create our EGLContext as high priority. The driver may reject our request due to system restrictions, in which case it will fallback to normal priority, but if successful it will reschedule our rendering and all of its dependencies to execute earlier, especially important when the GPU is being hogged by background clients. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Reviewed-by: Daniel Stone <daniels@collabora.com> Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-02-27compositor-drm: Remove no_addfb2 handlingDaniel Stone1-33/+14
If AddFB2 ever fails for any reason, we fall back to legacy AddFB, which doesn't support the same swathe of formats, or multi-planar formats, or modifiers. This can happen with arbitrary client buffers, condemning us to the fallback forever more. Remove this, at the cost of an unnecessary ioctl for users on old kernels without AddFB2; unfortunately, we cannot detect the complete absence of the ioctl, as the return here is -EINVAL rather than -ENOTTY. A check for whether or not the format is valid has been replaced with an assert, as its callers either check that the format is non-zero, return a FourCC format code from GBM, or use a static FourCC format. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-02-27compositor-drm: Rename region variableDaniel Stone1-5/+6
Make it a bit more clear what the purpose of the variable is. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2018-02-27compositor-drm: Don't need safe view-list traversalDaniel Stone1-2/+2
Nothing in this loop reorders views within the compositor's view_list. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>