Commit Graph

2353 Commits

Author SHA1 Message Date
Benoit Gschwind
830b7882f1 compositor-wayland: split wayland_output_create_for_config
The splitting intend to separate configuration parsing from output
setup.

Introduces struct weston_wayland_backend_output_config.

Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
[Pekka: squashed "wayland-backend: define output configuration
structure" into this.]
[Pekka: fix fullscreen output scale back to 1.]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-04 15:40:56 +03:00
Benoit Gschwind
244ff799fb compositor-wayland: move config parsing in create_cursor
Move configuration parsing from create_cursor to backend_init. Use newer
configuration structure to initialize the cursor in create_cursor.

Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-04 15:40:56 +03:00
Benoit Gschwind
3a49b51f8e compositor-wayland: use new config struture to create backend
Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-04 15:40:56 +03:00
Benoit Gschwind
079b626919 compositor-wayland: fix memory leak of display_name
Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-04 15:40:56 +03:00
Benoit Gschwind
37a6807905 compositor-wayland: create a basic config structure to use in new init API
Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-04 15:40:56 +03:00
Daniel Stone
d62004efca libinput: Remove unused static values
default_seat and default_seat_name are not used anywhere in this file.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2016-05-04 17:16:39 +08:00
Quentin Glidic
63225cf252 weston.pc: Properly specify Requires.private
We include wayland-server.h, pixman.h and xkbcommon.h in compositor.h,
but they are not required for linking if the plugin doesn’t use them.

Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Daniel Stone <daniels@collabora.com>
2016-05-04 10:14:11 +01:00
Quentin Glidic
5c20195e7a compositor.h: Add shell_interface.get_output_work_area
This will allow plugins to be aware of e.g. panels, to avoid covering
them with other surfaces.

Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-03 15:45:24 +03:00
Bryce Harrington
aa258985e9 x11: Fix incorrect output counting logic
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
2016-05-03 01:34:23 -07:00
Benoit Gschwind
e16acabf7a x11: port the x11 backend to the new init api
Use a "well" defined structure to configure x11-backend and move configuration
file parsing inside the weston compositor code.

Enforce destruction of all backend config objects after initialization.
Since the backend config struct versioning implies that there we expect
potential future descrepancy between main's definition of the config
object and the backend's, don't allow the backend to hang onto the
config object outside the initialization scope.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Benoit Gschwind <gschwind@gnu-log.net>
Tested-by: Benoit Gschwind <gschwind@gnu-log.net>
2016-05-03 01:24:28 -07:00
Benoit Gschwind
2da6d0cf69 headless-backend: fix leak of transform configuration
Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
[Pekka: fixed the mispelling in subject]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-05-02 12:00:25 +03:00
Yong Bakos
4c72e29f99 compositor: Hyphenate compound adjective surface-local
See https://lists.freedesktop.org/archives/wayland-devel/2016-April/028249.html.

Signed-off-by: Yong Bakos <ybakos@humanoriented.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2016-04-29 16:33:14 -07:00
Benoit Gschwind
934e89a749 fbdev-backend: refactor configuration API
Implement a "well" defined API to configure the fbdev backend.
Following and according to discussion about libweston API

The output transform configuration is moved into weston and added to the
fbdev configuration structure.

Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
[Pekka: squashed two patches and rebased.]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-29 14:15:01 +03:00
Pekka Paalanen
e5b5659240 compositor-fbdev: make copy of the device string
Ensuring that the pointer to the device path stays valid gets harder and
harder with migrating to the libweston-style config handling. Therefore,
make a copy of the string, private to struct fbdev_output.

Now the pointer passed in to fbdev_output_create() could be freed right
after the call returns.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Reviewed-by: Benoit Gschwind <gschwind@gnu-log.net>
2016-04-29 14:14:47 +03:00
Derek Foreman
c06389a105 linux-dmabuf: Keep checking planes even if the first doesn't support lseek
If we break; when lseek fails we can fail to do some legitimate tests
on remaining planes in a multi-plane buffer.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2016-04-26 11:02:06 +03:00
Benoit Gschwind
bd57310c11 compositor-rdp: refactor configuration API
Implement a "well" defined API to configure the rdp backend.
Following according to discution about libweston API.

Signed-off-by: Benoit Gschwind <gschwind@gnu-log.net>
Reviewed-by: David FORT <rdp.effort@gmail.com>
[Pekka: added missing headers to Makefile.am]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-25 16:36:44 +03:00
Jonas Ådahl
ed6014a9e4 input: Don't try to send axis_source when there are no resources
The focus_client pointer may be NULL here if the focused client has no
pointer resources. To avoid a crash, NULL check focus client before
proceeding to send the events.

https://bugs.freedesktop.org/show_bug.cgi?id=94899

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mike Blumenkrantz <zmike@osg.samsung.com>
2016-04-22 10:31:28 +08:00
Jonas Ådahl
8b6c9fcd4e data-device: Update current action even if source version is old
If the version of the source object is old enough to not have
wl_data_source.set_actions() the current action would never be updated
since source->set_actions would never be set.

To fix this, instead of checking whether source->set_actions before
proceeding with updating the current action, just always update the
action when we know all parts are valid dnd data device objects.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mike Blumenkrantz <zmike@osg.samsung.com>
Reviewed-by: Carlos Garnacho <carlosg@gnome.org>
2016-04-22 10:31:21 +08:00
Benoit Gschwind
3c53094e24 headless: port the headless backend to the new init api
refactor configuration API of headless-backend

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>

v6:
  - Define version number in the header
  - Don't use leading underscores in header guards
  - Add stub config_init_to_defaults()
  - Allocate config on stack
  - Drop unused display_name parameter
  - Add error message when config is invalid
  - Install compositor-headless.h and list it in headless-backend sources
v5:
  - Update to current trunk
  - Fixed typo 'struct weston_wayland_backend_config'
  - Dropped unused variables
  - Dropped weston_headless_backend_config_create() in favor of
    directly zalloc'ing the object
  - Dropped weston_headless_backend_load() in favor of the more
    generalized load_backend_new().
  - Dropped typedef from header
  - Restored use of 'backend_init' entry point
  - Backend_init() takes a base weston_backend_config object
  - Renamed 'param' to 'config' in a few places for consistency
  - Renamed 'headless_options' variable to 'options for consistency
  - Version the base struct
  - Free config on error
  - Don't free config during backend_init normal operations
  - Adjust header ordering
  - Make header guard naming consistent with other headers
  - Light reformatting for code style and consistency with other
    backend config patches

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
[Pekka: rebased to apply before drm and x11 backends]
[Pekka: squashed in the headless part of "Enforce destruction of all
backend config objects after initialization"]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-18 14:44:39 +03:00
Bryce Harrington
98ab08bef8 main: document load_backend_new()
Split from the patch "Enforce destruction of all backend config objects
after initialization".

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-18 14:33:04 +03:00
Bryce Harrington
6ca25b3faa Revert 'main: Remove unused function load_backend_new()'
This reverts commit 5ffbfffaf7.

Restore load_backend_new() for use with libweston backend configuration.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-18 14:08:33 +03:00
Bryce Harrington
20b66c3004 compositor: Version the backend configuration structures
With this struct versioning, it is possible to add new options without
breaking the ABI, as long as all additions are made to the end of a
struct and nothing existing is modified or removed.  When things are
added, the structure's size will increase, and we'll use this size as
our minor version number.  If existing things need to be changed, then
the major version, struct_version, is incremented to indicate the ABI
break.

From our call sites in main these major and minor version will be
recorded as struct_version and struct_size.  Each backend will then
verify these against its own assumptions.  So long as the backend's
struct is equal or larger than what was passed in and the major versions
are equal, we're good; but if it is larger, then this is a fatal error.

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>

v6:
 - Document refs for alternatives/assumptions for backend configs
v5:
 - Move the header changes to a pre-requisite patch from the drm backend

Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
[Pekka: bring back the archive links Bryce looked up.]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-18 13:37:41 +03:00
Bryce Harrington
e9b8a2b853 compositor: Drop unneeded create_output callback
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-18 12:03:53 +03:00
Bryce Harrington
b993998a08 drm: Spelling fix in comment
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
2016-04-18 11:59:13 +03:00
Friedrich, Eugen (ADITG/SW1)
265aeb316b systemd: take over sockets created by systemd
Systemd provides a feature of socket-based activation, details in [1]
This commit adds an implementation to check if sockets were provided by
systemd and adds this as an additional socket to wayland display.
before adding sockets are checked for the correctness:
only AF_UNIX of type SOCK_STREAM are accepted

This is usefull for early rendering use-cases where weston and
early-rendering-application can be started parallel.

[1] https://www.freedesktop.org/software/systemd/man/systemd.socket.html

Signed-off-by: Eugen Friedrich <efriedrich@de.adit-jv.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-04-06 14:12:02 +03:00
Pekka Paalanen
87953b7e62 compositor: remove input_loop
Remove the input event loop.

After "compositor-x11: stop using input_loop", the input event loop is
completely unused.

The code was also broken because it did not account for multiple outputs
with independent repaint cycles.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2016-03-24 16:51:20 +02:00
Pekka Paalanen
157109b6d5 compositor-x11: stop using input_loop
X11 is the only backend that still used the input event loop.

This patch is an identical rewrite of
6deb09ef8a which was then reverted in
3bebe6461a for reasons unrecorded. This
patch is also the revert of 22ba60e514.

Originally input devices were moved into their own event loop in
7ea10864c2 and the reason for that is
explained in 7dbf5e2ea7.

The idea behind the input event loop was that it would be beneficial to
process and relay input events to clients just once during an output
repaint cycle, because clients cannot update the image on screen any
faster anyway. All input events also carry a timestamp, so we didn't
lose any timing information. This was supposed to save power by reducing
the process wake-ups and context switches. There was also a mention of
reducing lag.

However, the concept of an output repaint loop does not really work out
when you have several outputs, but the input devices are not exclusive
to a certain output.

The logic for driving the input event loop in Weston core was written to
assume a single output. When you have multiple outputs with independent
repaint cycles, the input event loop handling becomes fairly random, one
output freezes input while another output thaws it, etc.

The DRM backend stopped using the input event loop when it started using
the libinput input backend, which became the default in
3f5e906268, and the old code was finally
ripped out in 823ad33ef3.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2016-03-24 15:43:44 +02:00
Giulio Camuffo
90a6fc659f input: use doubles in the interfaces to notify of input events
This patch is a further step in the wl_fixed_t internal sanitization.
It changes the notify_* functions to take doubles instead of wl_fixed_t
but does not change how these are stored in the various input structs
yet, except for weston_pointer_axis_event.
However this already allows to remove all wl_fixed_t usage in places
like the libinput or the x11 backend.

Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-03-23 14:05:09 +02:00
Miguel A. Vico
fcf4b6c0ae compositor-drm: Renaming of gbm fields
In preparation for follow-on changes to support frame presentation
through EGLDevice+EGLOutput, this change includes the following:
  - Rename drm_backend::format   to gbm_format
  - Rename drm_output::format    to gbm_format
  - Rename drm_output::surface   to gbm_surface
  - Rename drm_output::cursor_bo to gbm_cursor_bo

Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com>
Reviewed-by: Andy Ritger <aritger@nvidia.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
[Pekka: trivial rebase out of the series]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-03-22 14:22:42 +02:00
Miguel A. Vico
cc3a192b44 gl-renderer: Implement & use check_extension
Using strstr(3) for checking for extensions is an error-prone mechanism
as extension names can be prefixes of other extension names (see
https://www.opengl.org/registry/doc/rules.html#using).

This change implements the check_extension() function to properly check
for an extension and replaces all usages of strstr(3).

Signed-off-by: Miguel A Vico Moya <mvicomoya@nvidia.com>
Reviewed-by: Andy Ritger <aritger@nvidia.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
[Pekka: move 'bool' to the same line with 'static']
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-03-22 13:54:02 +02:00
Quentin Glidic
aab1d36883 input: Implement wl_seat.release
Avoid a crash because listener is NULL.

Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Reviewed-By: David Fort <contact@hardening-consulting.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-03-17 14:47:29 +02:00
comic fans
7a5c562d1a compositor-drm: fix memcmp using a bad pointer in drm_outout_choose_initial_mode
current_mode is already the pointer, taking the address of it is wrong.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=94562
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
[Pekka: rewrote the patch]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-03-17 14:29:27 +02:00
Pekka Paalanen
b00c79b587 protocol: migrate to stable presentation-time.xml
Remove the unstable presentation_timing.xml file, and use
presentation-time.xml from wayland-protocols instead to generate all the
Presentation extension bindings.

The following renames are done according to the XML changes:
- generated header includes
- enum constants and macros prefixed with WP_
- interface symbol names prefixed with wp_
- protocol API calls prefixed with wp_

Clients use wp_presentation_interface.name rather than hardcoding the
global interface name: presentation-shm, weston-info, presentation-test.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
[Pekka: updated wayland-protocols dependency to 1.2]
2016-03-07 13:29:27 +02:00
Chris Michael
7e7f793174 libinput-device: Remove unnecessary function call
When we handle keyboard key events, we already retrieve the key state
at the top of this function, so there is no real need to call the same
libinput function again as we can just reuse the 'key_state' variable
that we have above.

Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-02-26 15:30:16 +02:00
Christopher Michael
e1719c7891 libinput-device: Remove unnecessary function call
When we handle pointer button events, we already retrieve the button
state at the top of this function, so there is no real need to call
the same function again as we can just reuse the 'button_state'
variable that we have above.

Signed-off-by: Chris Michael <cpmichael@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2016-02-19 18:30:40 -08:00
Derek Foreman
6c19b69fcc compositor-drm: the cursor plane only supports ARGB
Keep XRGB apps out of the cursor plane, only ARGB is supported.

This prevents programs like weston-simple-shm from landing in the cursor
plane and being misrendered.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2016-02-09 13:07:22 -08:00
Derek Foreman
b0427569fd compositor-drm: update internal cursor plane location when disabling cursor
When the cursor plane is disabled the kernel can lose its location.
If we don't update our internal idea of where the plane is at that time,
the next time we set a cursor it can show up at 0,0.

This can show up when an application is put in the cursor plane, removed
from the plane, then put back at the same location.  It might show up at
0,0 when it's reinstated.

We now use INT32_MIN as a location for disabled cursors so enabling the
plane will always cause an update.

Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
2016-02-09 13:04:31 -08:00
Marek Chalupa
345b4f5b11 compositor-x11: send pointer frame after axis event
clients that implement pointer interface of version 5
wait for the frame event, so without it the scrolling
does not work (GTK+ clients do not scroll now for example).
Xcb axis events are discrete, so it's fine to send
frame after every single axis event

Signed-off-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2016-02-09 13:01:56 -08:00
Bryce Harrington
2c40d1d30e input: Fix crash when touchscreen generates out of screen coordinate
With change 61ed7b6b, global touch coordinates are being passed to the
touch grab.  However, touch->grab is undefined in certain circumstances
such as when the touch screen raises an axis X value larger than the
maximum expected.  Move the check for this condition earlier, before our
first use of the pointer.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=92736

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2016-02-02 10:36:44 -08:00
Carlos Garnacho
4061e2b67e data-device: Check harder for selection/non-wayland sources
We're not always dealing with weston_data_sources that have a
wl_resource, or data_sources that belong to drag-and-drop. Check
harder for these on the drag-and-drop code paths triggered from
common code.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
2016-02-01 13:22:34 -08:00
Carlos Garnacho
15902bf47a clipboard: zalloc the clipboard_source
The wrapped weston_data_source struct has new fields which were left
uninitialized, so its access is unreliable.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com
Tested-by: Derek Foreman <derekf@osg.samsung.com>
2016-02-01 13:22:30 -08:00
Derek Foreman
8efa31b289 input: Don't try to send pointer frames if no focus_client
Prevents a segfault when mousing into clients that don't get_pointer
like weston-simple-shm and weston-simple-damage.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Marek Chalupa <mchqwerty@gmail.com>
2016-02-01 22:29:36 +08:00
Carlos Garnacho
b288988e83 data-device: Implement compositor-chosen actions
Set up a keyboard grab during drag-and-drop, so we can translate
modifiers into preferred actions. The compositor chosen action
is stored in the current weston_data_source in order to make it
accessible to the source/offer at the time of calculating the new
action, but would conceptually be part of weston_drag.

The mapping has been made similar to what GTK+/QT usually do, the
shift key defaults to "move" and ctrl defaults to "copy".

Changes since v2:
  - Use enum types and values for the compositor action. Fix
    code formatting issues.

Changes since v1:
  - Handle the keyboard grab being cancelled. Initialize new
    wl_data_source fields.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2016-01-19 12:34:36 +08:00
Carlos Garnacho
9c93179023 data-device: Implement DnD actions
The policy in weston in order to determine the chosen DnD action is
deliberately simple, and is probably the minimals that any compositor
should be doing here.

Besides honoring the set_actions requests on both wl_data_source and
wl_data_offer, weston now will emit the newly added "action" events
notifying both source and dest of the chosen action.

The "dnd" client has been updated too (although minimally), so it
notifies the compositor of a "move" action on both sides.

Changes since v8:
  - Add back wl_data_offer.source_actions emission, gone during last
    code shuffling. Fix nits found in review.

Changes since v7:
  - Fixes spotted during review. Add client-side version checks.
    Implement .action emission as specified in protocol patch v11.

Changes since v6:
  - Emit errors as defined in DnD actions patch v10.

Changes since v5:
  - Use enum types and values for not-a-bitfield stored values.
    handle errors when finding unexpected dnd_actions values.

Changes since v4:
  - Added compositor-side version checks. Spaces vs tabs fixes.
    Fixed resource versioning. Initialized new weston_data_source/offer
    fields.

Changes since v3:
  - Put data_source.action to use in the dnd client, now updates
    the dnd surface like data_source.target events do.

Changes since v2:
  - Split from DnD progress notification changes.

Changes since v1:
  - Updated to v2 of DnD actions protocol changes, implement
    wl_data_offer.source_actions.
  - Fixed coding style issues.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
Reviewed-by: Michael Catanzaro <mcatanzaro@igalia.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2016-01-19 12:34:35 +08:00
Carlos Garnacho
78d4bf9a3e data-device: Implement DnD progress notification
Weston now sends wl_data_source.dnd_drop_performed and .dnd_finished in
order to notify about the different phases of DnD.

wl_data_source.cancelled is also used as mentioned in the docs, being
emitted also on DnD when the operation is meant to fail (eg. source
and dest didn't agree on a mimetype).

The dnd demo is also fixed so the struct dnd_drag isn't leaked.

https://bugs.freedesktop.org/show_bug.cgi?id=91943
https://bugs.freedesktop.org/show_bug.cgi?id=91944

Changes since v6:
  - Add client-side version checks. Minor code shuffling.

Changes since v5:
  - Dissociate source and offer after cancel. Updated to
    apply on top of c9f8f8a7f.

Changes since v4:
  - Make wl_data_offer.finish with the wrong state an error.

Changes since v3:
  - Fixed wl_data_source.dnd_finished vs cancelled emission on
    when interoperating with version < 3 drag destinations.

Changes since v2:
  - Handle wl_data_offer.finish. Fixed commit log inconsistencies.
    Added version checks. Spaces vs tabs fixes. Fixed resource
    versioning.

Changes since v1:
  - Updated to protocol v2.

Signed-off-by: Carlos Garnacho <carlosg@gnome.org>
Reviewed-by: Michael Catanzaro <mcatanzaro@igalia.com>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2016-01-19 12:34:35 +08:00
Peter Hutterer
87743e9303 Support axis source, axis discrete, frame and axis stop events
[jonas: only send focus wl_pointer.frame if resource supports it]

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2016-01-19 12:33:26 +08:00
Peter Hutterer
89b6a4931e Add a weston_pointer_axis_event
Use an event struct to pass axis events around. This helps dealing with the
upcoming axis discrete changes.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2016-01-19 10:53:16 +08:00
Peter Hutterer
60fb1c4ce8 compositor-rdp: update link to wheel delta explanation
The previous one is a 404 now.

Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
2016-01-19 10:53:16 +08:00
Bryce Harrington
ea8fb94337 gl-renderer: Fix comment typo 2016-01-13 18:48:56 -08:00
cpaul@redhat.com
c9f8f8a7f4 compositor: create_data_source(): Fix potential crash on OOM
Noticed this while working on primary selection, in the event we run out
of memory when trying to create a new data source, there's a chance
we'll fail on wl_resource_create() and crash from source->resource being
set to NULL.

Signed-off-by: Lyude <cpaul@redhat.com>
Reviewed-by: Marek Chalupa <mchqwerty@gmail.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2016-01-13 14:44:13 -08:00
Bryce Harrington
89324ce888 compositor: Make types consistent for bitshifting unsigned ints 2016-01-12 11:40:38 -08:00
Bryce Harrington
18e4573cea compositor: Verify that the maximum number of outputs is not exceeded
output_id_pool is defined as a uint32_t, thus ffs() provides a range of
1-32 available id numbers.  When the 33rd output is enabled, Weston will
set the ID to (unsigned)(-1) and thus lead to some unexpected
behaviors.

I'm not sure what the best way to handle this error would be since this
is in an initialization routine, but at least let's document the
potential error condition with an assert().
2016-01-12 11:40:38 -08:00
Bryce Harrington
3f650b8c58 compositor: Document how views and surfaces are mapped to outputs 2016-01-12 11:40:38 -08:00
Bob Ham
91880f1e9e compositor-{drm, fbdev, rpi}: Make VT switching configurable
Add a new boolean weston.ini option, "vt-switching" to enable or
disable Ctrl-Alt-Fn key combinations.

Signed-off-by: Bob Ham <bob.ham@collabora.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>

(Derek Foreman changed the prototype for switch_vt_binding to
have a weston_keyboard * instead of weston_seat *.  The pointer
wasn't used, so this is just a warning fix.)
2016-01-12 09:21:28 -06:00
Emmanuel Gil Peyrot
bc35fdaed1 gl-renderer: Add support for a few YUV dmabuf formats
Namely the single-planar YUYV, the two-planar NV12, and the
three-planar YUV420, using the shaders already present in Weston.

Signed-off-by: Emmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>

Maniphest Tasks: T13

Differential Revision: https://phabricator.freedesktop.org/D334
2016-01-11 13:30:01 -06:00
Emmanuel Gil Peyrot
b8053505f4 gl-renderer: introduce a new struct dmabuf_image
This struct serves as renderer data for linux-dmabuf buffers, and can
contain multiple struct egl_image, simplifying this latter in the
common non-dmabuf case.

Signed-off-by: Emmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>

Differential Revision: https://phabricator.freedesktop.org/D333
2016-01-11 13:23:52 -06:00
Bryce Harrington
c9626a38c4 compositor: Document routines relating to idle behavior
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-12-22 14:57:43 -08:00
Bryce Harrington
c2be85777e compositor: Fix a couple comment typos
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-12-22 14:36:48 +02:00
Giulio Camuffo
f05d18f3ee xwm: let the shells decide the position of X windows
The xwm used to automatically send to Xwayland the position of X windows
when that changed, using the x,y of the primary view of the surface.
This works fine for the desktop shell but less so for others.
This patch adds a 'send_position' vfunc to the weston_shell_client that
the shell will call when it wants to let Xwayland know what the position
of a window is.
The logic used by the desktop-shell for that is exactly the same the xwm
used to have.
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: David Fort <contact@hardening-consulting.com>
2015-12-18 11:48:25 -06:00
Sjoerd Simons
c112e0c5bc compositor-fbdev: Drop intermediate shadow buffer
Currently the fbdev compositor has its own shadow buffer when rendering
with pixman, causing the following copies to occur:

[pixman shadow buffer] -> [fbdev shadow buffer] -> [fbdev hardware]

As the pixman render already does all output translation when
compositing the intermediate shadow buffer really isn't needed, so drop
it.

As a side-effect this fixes updating the fbdev hardware for outputs not
starting at 0x0.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: David FORT <contact@hardening-consulting.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Tested-by: Derek Foreman <derekf@osg.samsung.com>
2015-12-18 11:42:14 -06:00
Derek Foreman
748c695ef9 compositor-wayland: Add touch support
Adds support for touch devices to the wayland backend.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2015-12-08 13:04:50 -06:00
Derek Foreman
3cc004a650 input: Add notify_touch_cancel()
We already have notify_touch(), notify_touch_frame().  We need
notify_touch_cancel() to implement touch in the weston wayland backend
properly.

Reviewed-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
2015-12-08 13:04:46 -06:00
Derek Foreman
cfce7d0b11 compositor-wayland: Properly release input resources when caps change
We should use wl_*_release when available instead of destroy, and we
should update weston's internal input tracking with weston_seat_releases

Reviewed-by: Daniel Stone <daniels@collabora.com>
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
2015-12-08 13:04:41 -06:00
Chris Michael
2ec5f2a633 cosmetic: Remove use of C++ style comments
Patch updated to remove dead lines as suggested by Daniel Stone

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2015-12-03 15:28:53 -08:00
Derek Foreman
9973967138 compositor: Add doxygen for weston_surface_to_buffer_rect()
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-12-03 16:38:11 -06:00
Derek Foreman
152254be0d compositor: Add damage_buffer
Add an implementation of wl_surface.damage_buffer, similar to
wl_surface.damage except it uses buffer co-ordinates.

Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
2015-12-03 09:45:32 -06:00
Emmanuel Gil Peyrot
c399692b8e linux-dmabuf: Move the attributes part of linux_dmabuf_buffer into its own struct
This allows renderers to use that struct to create their own dmabufs,
in case they can’t import the one provided by the client directly but
know how to convert it into a format they can render.

Signed-off-by: Emmanuel Gil Peyrot <emmanuel.peyrot@collabora.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Reviewed-by: Daniel Stone <daniels@collabora.com>

Differential Revision: https://phabricator.freedesktop.org/D332
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2015-12-02 16:50:15 -06:00
Chris Michael
6207b6af09 compositor: Remove unused weston_surface_to_buffer function
The function 'weston_surface_to_buffer' is unused by compositor and
clients inside weston, so it should be safe to remove this function

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-12-01 16:19:07 -06:00
Derek Foreman
e2e15acc06 compositor: change rounding in weston_surface_to_buffer_rect()
Rounding both corners of the rectangle down can result in a 0
width/height rectangle before passing to weston_transformed_rect.

This showed up as missing damage in weston-simple-damage (the
bouncing ball would leave green trails when --use-viewport was
used)

Reviewed-by: Daniel Stone <daniels@collabora.co.uk>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
2015-12-01 16:12:51 -06:00
Chris Michael
5ffbfffaf7 main: Remove unused function load_backend_new()
This function is unused throughout the entire weston source tree, so
remove it. It seems that the "load_backend" function is the one
currently being used

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2015-11-30 14:55:24 -06:00
Derek Foreman
1909c10825 compositor, input: Don't use MIN() macro for new resource versions
libwayland-server protects us from invalid serial numbers by
posting an error already.

MIN() is for clients when selecting interface versions.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-27 17:01:14 -06:00
Pekka Paalanen
7eaed40b37 compositor-drm: fix hw cursor positioning
Fix a regression introduced by be428b3825
which accidentally removed the global-to-output space conversion.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Cc: Derek Foreman <derekf@osg.samsung.com>
Cc: Daniel Stone <daniels@collabora.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Tested-by: Derek Foreman <derekf@osg.samsung.com>
2015-11-27 09:38:09 -06:00
Chris Michael
062edf2b4c compositor: Fix comment of subsurface_commit_to_cache function
commit 57388e44e5 accidentally changed the comment in
compositor.c::subsurface_commit_to_cache

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2015-11-26 14:24:16 -06:00
Derek Foreman
57e92ed768 compositor: ignore useless surface_damage
If we pass negative height or width on to pixman we get error messages
in the log.

Also, if width or height is 0, there's no damage, so we can early return
for that too.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-26 09:32:43 -06:00
Derek Foreman
be428b3825 compositor-drm: Use view transform in cursor plane setup
Make sure a view's transform is viable for a cursor plane and
then actually apply it before setting the cursor plane location.

Now if a subsurface ends up in the cursor plane, the plane will be
properly positioned.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
2015-11-24 12:03:38 -06:00
Chris Michael
6172c38ef4 compositor.h: Remove unused variable from weston_seat structure
This variable may have been used previously when evdev.c was used
however that functionality seems to have been consumed by libinput, so
there is no need for this variable in the weston_seat structure anymore.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-11-23 23:47:04 -08:00
Chris Michael
51baeb2840 compositor: Remove extra blank line
Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-11-23 19:28:41 -08:00
Derek Foreman
bc9a61cc23 compositor: Move weston_matrix_transform_region to compositor.c and export it
We're going to use this to replace much of the other transform code so
it's no longer just relevant to pixman-renderer.c

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
[Pekka: add the warning about matrix restrictions]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-20 15:27:55 +02:00
Jason Ekstrand
52c476ac8d pixman-renderer: Use output->matrix for region transformations and enable output zoom
Tested-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
[Pekka: added the comment for the function]
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-20 15:27:55 +02:00
Derek Foreman
9774679680 gl-renderer: Make texture_used a bool instead of an int
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-20 15:27:55 +02:00
Derek Foreman
4c11fe777a gl-renderer: Use a bool for needs_full_upload
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-20 15:27:55 +02:00
Derek Foreman
060cf11f23 compositor: Change "touched" to bool
Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-20 15:27:55 +02:00
Jonas Ådahl
2cbf293b05 input: Keep per client pointer resources in their own structs
Keep all per client wl_pointer resources in a new struct called
'weston_pointer_client'. When focus changes, instead of moving a list
of resources between different lists, just change the focused pointer
client.

The intention with this is to make it easier to add wl_pointer
extensions that share the same focus as the corresponding wl_pointer.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-11-20 11:52:19 +08:00
Jonas Ådahl
8283c343ec input: Don't send wl_pointer.motion if position didn't change
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
2015-11-20 11:52:19 +08:00
Jonas Ådahl
d2510105a6 input: Make pointer grab motion callbacks take an event struct
Instead of only passing absolute pointer coordinates, effectively
loosing motion event data, pass a struct that can potentially contain
different types of motion events, currently being absolute and relative.

A helper function to get resulting absolute coordinates was added for
when previous callbacks simply used the (x, y) coordinates.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2015-11-20 11:44:56 +08:00
Jonas Ådahl
cf1efd2ab7 Rename screenshooter protocol to weston_screenshooter
Due to the effort of moving a way from non-prefixed protocols, rename
the weston specific screenshooter protocol to weston_screenshooter.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mariusz Ceier <mceier+wayland@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-19 15:07:24 +02:00
Jonas Ådahl
b57f472c84 Use input method protocol from wayland-protocols
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mariusz Ceier <mceier+wayland@gmail.com>
Reviewed-by: Jan Arne Petersen <janarne@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-19 13:17:59 +02:00
Jonas Ådahl
3bcba347a2 Use text input protocol from wayland-protocols
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mariusz Ceier <mceier+wayland@gmail.com>
Reviewed-by: Jan Arne Petersen <janarne@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-19 13:07:10 +02:00
Jonas Ådahl
57e48f023c Use linux-dmabuf protocol from wayland-protocols
Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mariusz Ceier <mceier+wayland@gmail.com>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-19 12:58:58 +02:00
Jonas Ådahl
496adb3bb3 Use fullscreen-shell.xml from wayland-protocols
Use the fullscreen-shell protocol XML from the wayland-protocols
installation, and remove the one we provide ourself.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-by: Mariusz Ceier <mceier+wayland@gmail.com>
Acked-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2015-11-19 12:50:56 +02:00
Derek Foreman
4bcc54d1a5 compositor-wayland: Change focus to a bool instead of an int
Also rename focus to has_focus to be slightly less confusing.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-11-16 13:01:43 -08:00
Chris Michael
4a7ce1f66d compositor-drm: pass NULL to mmap() instead of 0 as the address
mmap() function expects to be passed a void pointer as the address
here. Passing NULL is technically more correct than passing 0.

Signed-off-by: Chris Michael <cp.michael@samsung.com>
Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
2015-11-12 10:21:58 -06:00
Derek Foreman
6d556374b8 compositor-drm: fall back to EGL visual_id 0 if no others work
commit e76f185 stopped using visuals with "native visual id" == 0

This broke some systems, so we now try 0 as a worst case fallback if
everything else has failed.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-11-07 13:37:36 -08:00
Jonas Ådahl
0336ca0cc5 input: Pass axis events through pointer grab interfaces
Don't only send motions and buttons but also axis events through the
pointer grab interface.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
Reviewed-By: Derek Foreman <derekf@osg.samsung.com>
2015-11-02 14:30:16 +08:00
Shinya Saito
2071f1fbbf Provide damage region for screen recording on Raspberry Pi
When trying to do sceen recording using the screenshooter, no screen data
was ever processed because the rpi-renderer never set the previous frames
damage area.

Update the rpi-renderer to copy the necessary data.

Signed-off-by: Shinya Saito <ssaito@igel.co.jp>
Signed-off-by: Tomohito Esaki <etom@igel.co.jp>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-10-29 13:59:03 -07:00
Bryce Harrington
32c3211e38 compositor: Disallow negative geometries in backend output configs
Signed-off-by: Bryce Harrington <bryce@osg.samsung.com>
Reviewed-by: Giulio Camuffo <giuliocamuffo@gmail.com>
2015-10-29 13:52:22 -07:00
Giulio Camuffo
43008c7620 main: stub the functions to load the backends with the new config system
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-10-23 15:23:40 -07:00
Giulio Camuffo
93daabbc71 compositor: pass the backend config struct to the backends init function
Add new configuration argument to the backend_init() function, which
will replace the current argc, argv, and config arguments.
After each backend is converted individually the unused parameters
will be removed.

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-10-23 15:23:37 -07:00
Giulio Camuffo
e3c0d8af43 compositor: introduce structs to handle backends configuration
This commit introduces the structs weston_backend_config and
weston_backend_output_config, to prepare for the new config
system for the backends.

Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-10-23 15:23:32 -07:00
Derek Foreman
fa41eec4f7 weston-launch: Remove unused event source
vt_source is never added to an event loop in this launcher, but
it's potentially removed.

Let's just remove the variable entirely.

Signed-off-by: Derek Foreman <derekf@osg.samsung.com>
Reviewed-by: Bryce Harrington <bryce@osg.samsung.com>
2015-10-23 12:34:11 -07:00