Commit Graph

1900 Commits

Author SHA1 Message Date
George Kiagiadakis 8f9e87ff47 compositor: update the surface size when there is a size change without a buffer attach
This fixes at least the case where you want to do wl_viewport.set_destination
to resize the surface but without attaching new content in it.
2014-06-19 10:04:18 -07:00
Srivardhan Hebbar ba2a36d5c5 weston: Fix memleak issue in compositor.c
Based on a previous patch by Hardening <rdp.effort@gmail.com>.

Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
2014-06-18 17:14:40 -07:00
Thierry Reding 6ac60c1791 compositor-wayland: Fix compiler warning
sizeof returns size_t, for which the correct printf specifier is %zu.
Fixes the following warning when building for ARMv7.

	src/compositor-wayland.c: In function 'wayland_output_get_shm_buffer':
	src/compositor-wayland.c:260:3: warning: format '%ld' expects argument of type 'long int', but argument 2 has type 'unsigned int' [-Wformat=]
	   weston_log("could not zalloc %ld memory for sb: %m\n", sizeof *sb);
	   ^

Signed-off-by: Thierry Reding <treding@nvidia.com>
2014-06-18 17:14:40 -07:00
Jonny Lamb f8bfd0581b animation: ensure repaints are always scheduled during animations
Animations are run off the repaint cycle so if there's nothing to
repaint, an animation will stop running. This is usually not a problem
as each frame function of an animation causes something to change and
therefore a repaint to happen. This patch helps detect when the
animation isn't in said case and triggers a repaint to keep the
animation running.

This problem was found by using weston_move_scale_run() to move a view
onscreen from completely off. The very first time the animation frame
function was called the progress wasn't enough to move it into
view. The compositor saw there was nothing to repaint and stopped
doing anything else. When something else (like a pointer move) forced
a redraw, the view's position was very much onscreen and jumped into
view in an ugly way.
2014-06-18 17:14:40 -07:00
Jonny Lamb 91f80f24b4 animation: fix move scale animation
Both weston_move_scale_run() and weston_slide_run() were broken in
commit 3a869019. Commit a4a6f161 fixed and explained the problem for
weston_slide_run() but weston_move_scale_run() remained broken.

To fix weston_move_scale_run(), weston_view_animation_run() is also
required. It was removed when _run() was split into two functions
_create() and _run() in commit f5cc2b56, but _run() was not added in
this commit.
2014-06-18 17:14:39 -07:00
George Kiagiadakis ed04d38f6a compositor: unmap subsurface views before destroying the subsurfaces
This is to avoid recursing into weston_compositor_build_view_list()
and therefore fix crashing when destroying a stack of visible subsurfaces
due to weston_compositor_build_view_list() being called recursively
and corrupting the lists it works on.

https://bugs.freedesktop.org/show_bug.cgi?id=79684
2014-06-18 11:22:27 -07:00
Jonas Ådahl 26714b4718 libinput: Use floating point instead of fixed point numbers
Also update configure.ac to require libinput 0.3 when enabled, as it is
the version where double replaced li_fixed_t.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2014-06-09 22:46:45 +02:00
Jonny Lamb a55f139d3c compositor: raise errors when bad scale or transform values are used 2014-06-03 09:19:20 +03:00
Hardening 6d1d1121a5 Use FreeRDP buildin functions to get scancodes
This patch make use of the functions available in FreeRDP to retrieve
the scancode to inject.
2014-06-02 15:17:08 +02:00
Hardening ea2aa13ceb Add more keyboards for the RDP compositor
This patch complements the table that contains matches between RDP
and xkb keyboard layouts. We now handle variants too.
2014-06-02 15:16:59 +02:00
U. Artie Eoff a1e887bd46 comp-wayland: use safe foreach when destroying outputs
wl_list_for_each dereference's output to increment the
next iteration of the loop.  However, output is free'd
inside the loop resulting in a dereference to free'd
memory.

Use wl_list_for_each_safe instead, which is designed to
handle this kind of pattern.

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
Reviewed-by: Thierry Reding <thierry.reding@gmail.com>
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2014-05-23 09:57:02 +03:00
Pekka Paalanen 588bee10de compositor: add --no-config command line option
Useful for unit tests. If Weston finds a weston.ini during unit tests,
it will load it and all the modules it asks for. We need a way to
prevent loading arbitrary modules from the command line.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2014-05-09 15:00:01 -07:00
U. Artie Eoff 24713f679b libinput-seat: literal values for WESTON_LIBINPUT_LOG_PRIORITY
Only accept specific literal values from the environment variable
WESTON_LIBINPUT_LOG_PRIORITY... "debug", "info", or "error".

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-05-09 14:26:19 -07:00
Ander Conselvan de Oliveira 2d13fde9c7 vaapi-recorder: Don't loop trying to write on out of space condition
The error handling for the function that writes the encoded frame on
the disk was bogus, always assuming the buffer supplied to the encoder
was too small. That would cause a bigger buffer to be allocated and
another attempt to encode the frame was done. In the case of a failure
to write to disk (due to ENOSPC, for instance) that would cause an
endless loop.

Possibly-related-to: https://bugs.freedesktop.org/show_bug.cgi?id=69330
2014-05-09 14:12:38 -07:00
Pekka Paalanen 2d0f8b77eb rpi: build fix for compute_rects debug
See 918f2dd4cf

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
2014-05-09 14:10:29 -07:00
U. Artie Eoff d8d4701864 compositor-wayland: avoid possible NULL deref in handle_keymap
If data is NULL, then we jumped to error which attempts to
dereference data.  Instead, just close(fd) and return when
data is NULL.

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-05-06 15:41:02 -07:00
U. Artie Eoff 67072d03d3 compositor-wayland: assign the correct mode
Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-05-06 15:40:59 -07:00
U. Artie Eoff 8cbd8f3390 compositor-wayland: free output before returning
Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-05-06 15:40:55 -07:00
Neil Roberts 6c3b01f81e Apply the zoom transformation before the output transformation
The zoom translation is just a scale and a translate. The translation
is calculated based on the coordinates of the pointer which are in
global space. Previously the calculated translation was transformed by
the output transformation so that when the zoom transform is applied
after the output transform then it will be correct. However if we just
apply the zoom transformation first then we get the same result
without the zoom code having to be aware of the output transformation.

This also fixes weston_output_transform_coordinate which was applying
the output and zoom transforms in the wrong order.

https://bugs.freedesktop.org/show_bug.cgi?id=78211
2014-05-06 15:36:55 -07:00
Ander Conselvan de Oliveira 2ef1cd177e compositor-drm: Don't use vaapi recorder with unsupported formats
We only support recording with GBM_FORMAT_XRGB888 format, so don't try
to record if the output has a differnt format.

https://bugs.freedesktop.org/show_bug.cgi?id=78199
2014-05-06 15:34:33 -07:00
Neil Roberts f37f82ccf9 drm: Don't use the cursor overlay if the scale doesn't match
If the scale for the cursor surface doesn't match that of the output
then we shouldn't use the cursor overlay because otherwise it will be
drawn at the wrong size. This problem is particularly noticable with
multiple pointers because it randomly alternates between drawing one
cursor or the other at a larger size depending on which one gets put
in the cursor overlay.
2014-05-01 13:47:12 -07:00
Neil Roberts eb5a200807 Take into account the zoom when applying the output transform
When converting output-relative coordinates (such as from an input
event) to global coordinates it now takes into account the zoom
transform. Previously this would only work for the primary pointer
because the transform doesn't affect the primary pointer position due
to that way zoom follows the mouse. Touch events and multiple pointers
were not working correctly.

https://bugs.freedesktop.org/show_bug.cgi?id=68620
2014-05-01 09:07:51 -07:00
Jasper St. Pierre ac985be8ce compositor: Remove the edges parameter from send_configure
send_configure was originally modelled after
wl_shell_surface::send_configure, which takes these arguments. However,
the X WM and xdg_surface::configure variants don't use these arguments.

We already store the resize edges for a surface while it's being
resized, so just use the saved state in the wl_shell_surface variant.
2014-04-30 20:53:15 -07:00
Jasper St. Pierre d67b52a501 compositor: Fix the documentation for surface->configure
It's called on commit, not on attach. Additionally, correct the
interface name to be wl_surface, not surface.
2014-04-30 20:48:55 -07:00
Andrew Wedgbury bc51ad6afd screen-share: Don't unset server environment variables
There is no need to unset WAYLAND_DISPLAY and WAYLAND_SOCKET when screen-share
launches the fullscreen shell server. This was done originally in case the
launched server decided to use the wayland backend based on the presence of
these. However, we pass a command line argument telling it to use the RDP
backend, which overrides the automatic backend selection based on the
environment.

Keeping these environment variables allows the launched fullscreen shell server
to know the original server's display name, which it may need in order to show
a configuration UI.

Signed-off-by: Andrew Wedgbury <andrew.wedgbury@realvnc.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
2014-04-30 16:54:31 -07:00
Kristian Høgsberg e5c1ae9368 xwayland: Set decoration margin for xwayland windows 2014-04-30 16:28:41 -07:00
Kristian Høgsberg 9a14b8f4fa launcher-util: Initialize kb_mode also when weston-launch sets up tty
We need a valid kb_mode to restore to in case weston-launch dies and
weston has to clean up the tty.  We don't get a chance to read out the
kb mode before weston-launch changes it, but it's safe to assume that it's
always K_UNICODE.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=77455
2014-04-30 10:40:39 -07:00
Neil Roberts 1e40a7ec7a Simply the matrix calculation for zooming
In order to apply the zoom transformation to the output matrix, Weston was
doing the following:

• Create a temporary matrix to hold the translation
• Invert the translation matrix using weston_matrix_invert into
  another temporary matrix
• Scale that matrix by the scale factor
• Multiply the current matrix with the temporary matrix

Using weston_matrix_invert to invert a translation matrix is over the top.
Instead we can just negate the values we pass to weston_matrix_translate.
Matrix multiplication is associative so creating a temporary matrix to hold the
scale and translation transform should be equivalent to just applying them
directly to the output matrix.
2014-04-25 15:18:37 -07:00
Ander Conselvan de Oliveira a7caef964b input: Fix errors due to initializing input before creating outputs
Make sure that we don't map a device to an invalid output pointer and
intead remap devices when an output is created.

v2: fix the error with libinput too.
2014-04-25 15:04:04 -07:00
Ander Conselvan de Oliveira ae826cead7 evdev: Fix assertion error for unplugged output with paired touchscreen
If the output a touchscreen is paired to is unplugged, events coming
from it should be ignored. Commit 17bccaed introduced logic for that
in evdev_flush_pending_damage(). However, the break statements it
introduced would cause the assertion after the switch statement to
fail.

That function has the odd behavior that goto's are used to skip the
assertion after the switch statement and jump to the hunk of code that
marks the event as processed. Only in the case where the event type has
an invalid value the assertion should trigger. So this patch fixes the
problem by moving the assertion into the default case of the switch
and replacing the goto statements with break ones.

https://bugs.freedesktop.org/show_bug.cgi?id=73950
2014-04-25 15:03:46 -07:00
Ander Conselvan de Oliveira 6c975faaa9 evdev: Discard events from a touchscreen paired with an unplugged output
Commit 17bccaed intended to make the events coming from a touchscreen
paired with an unplugged output to be discarded, while an unpaired one
would just choose a different output. However, the logic was inverted
causing the opposite to happen.

Later in commit 161c6c56, the default behavior was changed to map an
output to a default output if the one specified via udev is not
present. This change is reverted by this patch.

v2: undo the change from commit 161c6c56.

v3: deal with libinput too.
2014-04-25 14:55:28 -07:00
Ander Conselvan de Oliveira f957dfb1de libinput: Don't process touch events for devices without a valid output
That would be the case of a touch screen mapped to an output that was
unplugged.
2014-04-25 14:55:08 -07:00
Jason Ekstrand 4283370e01 pixman-renderer: Use width/height_from_buffer for buffer transforms
This fixes an issue in the pixman renderer where it would not render
surfaces correctly if both wl_viewport and wl_surface.set_buffer_transform
were used.

Reviewed-by: Pekka Paalanen <ppaalanen@gmail.com>
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2014-04-25 14:40:11 -07:00
Jason Ekstrand d0cebc36fb Use the correct width/height when transforming surfaces with viewports.
Previously, because of the wrong width/height,
weston_surface_to_buffer_* would return the wrong values when
wl_viewport was used in combination with wl_surface.set_buffer_transform.

Reviewed-by: Pekka Paalanen <ppaalanen@gmail.com>
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2014-04-25 13:24:57 -07:00
Bryce W. Harrington bfd74f40f3 Check zalloc return for out of memory situation
Most zalloc calls in weston are checked, this fixes a handful that were
being ignored.  As found by `grep -EIsr "[^x]zalloc\(" . -A1`

Signed-off-by: Bryce Harrington <b.harrington@samsung.com>
2014-04-25 13:19:51 -07:00
Jonas Ådahl 1679f232e5 libinput: Forward frame events to clients
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=77353

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2014-04-21 16:03:28 -07:00
Hardening e57d1f211d Check malloc result
This patch checks malloc was successfull and release resources if it
wasn't.
2014-04-21 15:43:49 -07:00
John Kåre Alsaker 791324cc06 gl-renderer: Remove gl_renderer_interface from gl-renderer.h
The rationale here is, that this line would create an instance of
gl_renderer_interface in every compilation unit that included
gl-renderer.h. This is not necessary, and it can actually be harmful by
masking the real exported gl_renderer_interface symbol, if you added
another compilation unit to gl-renderer.so, causing a runtime failure in
loading it.

gl-renderer.c already creates the exported symbol.
2014-04-21 15:43:05 -07:00
U. Artie Eoff f4ad19a177 seat: don't break in notify_output_create
If more than one input device maps to the new output, then we need
to map all devices to that output... not just the first device.

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

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-04-21 14:38:14 -07:00
U. Artie Eoff 161c6c5694 input: fix input device map to output if it doesn't exist.
If an input device wants to map to an output that does not
exist, then just map it to the first output.

Also, if a device is mapped to an output that gets unplugged then
it gets default mapped to the first output in the output destroy
listener.  However, the original output destroy listener needs to
be removed before adding the new listener for the first output,
otherwise the list gets corrupted.

Later if the other output is plugged back in, we remap the device
to it.  In that case, we should remove the destroy listener for
the first output.

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

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-04-21 14:37:16 -07:00
U. Artie Eoff cd9e54537a libinput-device: break after LIBINPUT_EVENT_TOUCH_UP
We need to break after handling LIBINPUT_EVENT_TOUCH_UP otherwise
we fall into the default case and end up logging that the event
is unknown and then return the wrong "handled" result.

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

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-04-21 14:35:46 -07:00
U. Artie Eoff c81c4241d9 libinput-seat: allow setting libinput log priority in weston
Look for WESTON_LIBINPUT_LOG_PRIORITY environment variable.  If
it exists then use it to set the libinput log priority.
Otherwise, don't set the priority and get whatever libinput's
default priority is.

Setting WESTON_LIBINPUT_LOG_PRIORITY=0 allows us to log which
input devices are detected at Weston startup and makes it a
little more consistent with Weston's original evdev input setup
log messages... and useful for debugging and testing.

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-04-21 14:35:33 -07:00
U. Artie Eoff 71db0fd117 libinput-seat: redirect libinput log to weston log
https://bugs.freedesktop.org/show_bug.cgi?id=77578

Signed-off-by: U. Artie Eoff <ullysses.a.eoff@intel.com>
2014-04-21 14:34:19 -07:00
Ander Conselvan de Oliveira 4ade0e4a29 compositor-drm: Fix crash when setting up seat constrained by an output
Commit 58e15865 changed the parameters for udev_get_seat_by_name() to
receive a struct udev_input. However, when this gets called from
create_output_from_connector() during initialization, the input struct
is not yet initialized, leading to a crash. Previously, that function
would take only a pointer to the compositor.

This patch fixes the crash by initializing input before creating any
outputs.

Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=77503
2014-04-21 14:34:06 -07:00
Ander Conselvan de Oliveira a4a6f16129 animation: Fix input panel slide animation
The position for the slide animation was calculated assuming the value
of the spring was always between 0.0 and 1.0. Commit 3a869019 broke
that assumption, and the result was that the panel would be positioned
at an invisible part of screen. Since there would be no output repaints
scheduled, the result of the animation would only be seen if something
else triggered a repaint (such as a mouse cursor movement).

This patch changes the values for the slide animation's spring to range
between 0.0 and 1.0, thus fixing the position of the panel and the lack
of scheduled repaints problem.

https://bugs.freedesktop.org/show_bug.cgi?id=77347
2014-04-16 22:33:46 -07:00
Ander Conselvan de Oliveira f5cc2b560f animation: Split spring setup out of weston_view_animation_run()
All the animations override at least one parameter of the spring that
is set during the creation of the animation. Some need to do the whole
setup again.

This patch changes the initialization of a view animation to a three
step process. First, the animation is created. Then the caller sets up
the spring and calls weston_view_animation_run() to apply the effect of
the animation for the first animation frame.
2014-04-16 22:33:44 -07:00
Ander Conselvan de Oliveira a61b949eb8 compositor-drm: Pass the right stride to the vaapi recorder
It takes the stride in bytes, not pixels. The bug was hidden when using
va intel-driver 1.2.1 because it would ignore the stride from user and
set the surface state in a wrong way.

https://bugs.freedesktop.org/show_bug.cgi?id=77495
2014-04-16 22:24:04 -07:00
Jason Ekstrand c107306db7 gl-renderer: Fix a typo in the output_set_border description
Signed-off-by: Jason Ekstrand <jason@jlekstrand.net>
2014-04-11 09:59:26 -07:00
Andrew Wedgbury 9cd661e746 Make sure config.h is included before any system headers
There was an issue recently in screen-share.c where config.h was not
being included, resulting in the wrong definition for off_t being used on
32 bit systems. I checked and I don't think this problem is happening
elsewhere, but to help avoid this sort of problem in the future, I went
through and made sure that config.h is included first whenever system
headers are included.

The config.h header should be included before any system headers, failing
to do this can result in the wrong type sizes being defined on certain
systems, e.g. off_t from sys/types.h

Signed-off-by: Andrew Wedgbury <andrew.wedgbury@realvnc.com>
2014-04-07 10:22:28 -07:00
Manuel Bachmann 9c4ab6612f Fix on-the-fly transparency changes in pixman-renderer
This fixes :
- leaking the mask used to simulate transparency ;
- code style (definitions moved up, use of brackets) ;
- applying an opaque region when transparency is
 wanted (shound not happen).

Signed-off-by: Manuel Bachmann <manuel.bachmann@open.eurogiciel.org>
2014-04-07 09:34:00 -07:00