Commit Graph

7605 Commits

Author SHA1 Message Date
Marius Vlad
365f445eab kiosk-shell: Embed keyboard focus activation code
Just like desktop-shell, we shouldn't be dependent on having a keyboard
be present in order to activate a window/surface.

This adds a libweston helper to retrieve the first available seat, and
to use it in order to avoid going over the seat list.

We also encapsulate the activation of the surface in one place, and use
it on surface removal, when the surface has been committed, or for
touch/pointer events. With it we also deal with the keyboard focus and
shell activation in one place.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-12 15:22:50 +02:00
Manuel Stoeckl
742a0232b0 gl-renderer: add support for (a|x)bgr16161616f shm formats
These formats will be eventually be useful for color managed clients
using wl_shm that wish to submit buffers encoding high dynamic range
images.

While the minimum requirement for linearly filterable half float
textures is GL ES 2.0 + GL_OES_texture_half_float_linear, to keep
the code simple, this commit only enables the new formats when
the requirements for color management (notably including GL ES 3.0
and GL_EXT_color_buffer_half_float) are available.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2021-11-06 23:52:58 -04:00
Marius Vlad
5b357a4bbb backend-rdp: Correctly tear down the RDP back-end
This fixes the tear-down and the destroying part in case RDP back-end
couldn't be initialized. The first issue is the rdp_output which will
not be created in some circumstances (can't open the socket for
instance) and requires a guard check, and secondly, the
rdp_head being created above of that, wasn't removed and tripped an
assert when destroying the compositor instance.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-03 10:33:21 +02:00
Marius Vlad
5699dbaae7 desktop-shell: Don't crash on when attemping to switch
Attempting to perform a switch on a surface (already) closed will trip
the assert in activate(), so check if we have a weston_desktop_surface
before trying to activate it.

Fixes #543

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-03 10:10:58 +02:00
Marius Vlad
b5dbb7a7ab kiosk-shell: Allow to retrieve surface labels
Nothing special, but allows scene-graph to display surface labels.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:32:55 +02:00
Marius Vlad
2be09373b4 desktop-shell, kiosk-shell: Migrate helpers to create a view to shell-utils
Incidentally fixes #553

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:32:24 +02:00
Marius Vlad
d98c7e86fb shared/shell-utils: Create common helpers functions for shells
Group common functions found in both kiosk-shell and deskop-shell to
a shared utils file.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:29:50 +02:00
Marius Vlad
d6ccc8b025 libweston: Rename weston_view_activate() to weston_view_activate_input()
This way, we try to differentiate between input focus and window/surface
activation.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:04:33 +02:00
Marius Vlad
f3584cf995 desktop-shell: Remove keyboard_focus_listener
We no longer make use of the keyboard_focus_listener so remove it
entirely.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
Suggested-by: Derek Foreman <derek.foreman@collabora.com>
2021-11-02 19:04:33 +02:00
Marius Vlad
f12697bb3e desktop-shell: Embed keyboard focus handle code when activating
We shouldn't be constrained by having a keyboard plugged-in, so avoid
activating/de-activating the window/surface in the keyboard focus
handler and embed it straight into the window activation part.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:04:33 +02:00
Marius Vlad
ab39e1d76d desktop-shell: Rename gain/lose keyboard focus to activate/de-activate
This way it better reflects that it handles activation rather that input
focus.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:04:33 +02:00
Marius Vlad
05bef4c18a desktop-shell: Remove no-op de-activation of the xdg top-level surface
The shsurf is calloc'ed so the surface count is always 0.  Not only
that but the surface is not set as active by default, so there's no
need to de-activate it.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-02 19:04:33 +02:00
Marius Vlad
11bc0d0428 kiosk-shell: Swap green with blue for the background-color
Fix a trivial typo, where the green channel was swapped with the blue
channel, resulting in rbg instead of rgb.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-11-01 19:57:32 +02:00
Emmanuel Gil Peyrot
d4a208c2b1 pipewire: Drop support for 0.2 API
According to repology.org, all relevant distributions now ship
pipewire 0.3, so we can drop the pretty ugly #if/#else code that was
added to support both at compile-time.

Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
2021-10-27 09:18:51 +00:00
Manuel Stoeckl
c7fbc97120 gl-renderer: add support for (a|x)bgr2101010 shm formats
Adding these formats makes it possible for clients using wl_shm to
submit buffers with 10 bits per pixel, and thus (if Weston is
configured with an xrgb2101010 frame buffer) display more precise
colors on some computer monitors.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2021-10-27 09:02:07 +00:00
Marek Vasut
b02149e43b screen-share: Add option to start screen sharing on weston startup
Currently the screen sharing has to be manually started after weston has
started by pressing Ctrl+Alt+S on a keyboard. Add new bool config option
to the screen-share section which permits starting the screen sharing of
all outputs on weston start up. This is useful e.g. for doing screen
mirroring between two devices over network.

Signed-off-by: Marek Vasut <marex@denx.de>
2021-10-27 08:52:17 +00:00
Derek Foreman
c00aba6893 xwayland: Fix copy and paste error
This leg of the if/else ladder is a duplicate of the previous conditional.

It appears to have been intended to log enter events, but we already
handle those earlier. The drop event is already logged as well,
so let's just discard this branch entirely.

Fixes #552

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2021-10-25 17:24:41 -05:00
Manuel Stoeckl
3208ee42cd backend-wayland: clean up wayland_input structs
The struct wayland_input objects tracking the outer compositor's
wl_seats are now properly destroyed when the wayland backend is.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2021-10-20 00:25:43 -04:00
Manuel Stoeckl
ac20d4a293 backend-wayland: replace a nested wl_display_roundtrip call
The wl_display_roundtrip call was originally introduced to let the
display_add_seat function wait until a wl_seat.name event was received.

This change replaces the wl_display_roundtrip call with an
asynchronous, nonrecursive equivalent. Now a wl_display.sync callback
is used to delay the final steps of adding a seat until one protocol
roundtrip has occured/the name has been received.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2021-10-18 19:21:25 -04:00
Marius Vlad
43ec334c77 gitlab-ci: Use the same name as for check-commits
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-18 15:51:16 +03:00
Marius Vlad
15a552b671 gitlab-ci: Check merge request for allowing edits
Ensures that users tick allow collabration to make rebasing possible
from maintainers, and fast forward merge requests.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-18 15:27:28 +03:00
Emmanuel Gil Peyrot
152405b8f9 simple-touch: Exit on xdg_toplevel::close
This makes it possible to close this client without using a terminal,
especially useful on a phone.

Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
2021-10-15 16:52:08 +00:00
Emmanuel Gil Peyrot
b596342e37 simple-touch: Remove unused include
Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
2021-10-15 16:52:08 +00:00
Emmanuel Gil Peyrot
b94219adeb simple-touch: Use true/false instead of 1/0 for bool type
Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
2021-10-15 16:52:08 +00:00
Takuro Ashie
5ff978a52b weston-keyboard: Enable to set as overlay panel
input-method-v1 protocol provides two surface type for the input
panel, `toplevel` and `overlay`. But there is no example for the later
one. This change enables to set weston-keyboard as overlay panel by the
environment variable `WESTON_KEYBOARD_SURFACE_TYPE=overlay` to
demonstrate this feature. In Addition, add weston.ini option
`overlay-keyboard` to set it.

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
2021-10-14 21:17:07 +09:00
Takuro Ashie
beff0bd0f9 desktop-shell: Fix wrong initial position of input panel
When the surface type of input panel is set as an overlay panel, it's
expected to be shown at near the input cursor. But the current
implementation shows it at center-bottom on the desktop at first then
move it to the correct position while typing.

Signed-off-by: Takuro Ashie <ashie@clear-code.com>
2021-10-14 21:17:07 +09:00
Marius Vlad
eb53d7c156 multi-resource: Convert to xdg-shell
Convert remaining wl_shell client to xdg-shell.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-14 09:28:04 +00:00
Marius Vlad
539c5a6c95 simple-touch: Convert to xdg-shell
wl_shell is officially deprecated so remove support for it and
instead add support for xdg-shell.  With it, we've further:

- moved out the buffer handling into its own a distinct structure in
  case we might want to do multi-buffer rendering
- perform a redraw after we have receiving the initial configure event,
  as to draw to working area where to user can use it for receving touch
  events

Additionally we are setting an appid in case one might want to use it in
tandem with kiosk-shell as to be able to place it on a
distinct/different output.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-14 09:28:04 +00:00
Marius Vlad
4a0f94cefa simple-egl: Bail out if xdg-shell was not found
We only support xdg-shell in simple-egl, so make it obvious.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-14 09:28:04 +00:00
Marius Vlad
a7392c855d desktop-shell: Clear out missing listeners
The keyboard focus listener, caps changed and pointer focus listener
were missing when destroying the seat. These are necessary to avoid
using weston_desktop object even if it was destroyed, which happens due
to a focus out event and ultimately handled by the keyboard focus notify
callback.

Once the seats are destroyed (and implictly the focus handlers) we're
safe to destroy weston_desktop object as well.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-14 09:06:44 +00:00
Marius Vlad
c114fd6ef6 desktop-shell: Keep track of seats
This properly tracks the seats and with it, destroys them before
destroying weston_desktop object.

Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-14 09:06:44 +00:00
Derek Foreman
60ab03640a compositor: Allow disabling default flight recorders
Add a command line option to disable the default flight recorders
so we can save a little bit of CPU and memory on systems where
this isn't necessary.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
Signed-off-by: Marius Vlad <marius.vlad@collabora.com>
2021-10-05 12:19:19 +03:00
Jonas Ådahl
56958aa6e9 desktop-shell: Damage subsurfaces when minimizing
Fixes an issue where subsurface extending outside of the main surface
wasn't damaged when minimized resulting in left-over content.

Signed-off-by: Jonas Ådahl <jadahl@gmail.com>
2021-10-01 12:03:11 +02:00
Derek Foreman
0b51b02c5e gl-renderer: Don't re-import dmabufs
My reading of the GL spec is that a dmabuf becomes a sibling to the
EGLImage created from it, and that all updates to the dmabuf will be
propagated to the EGLImage.

A rebind is still required every time the dmabuf content changes,
but this should be satisfied by gl_renderer_attach(), which does
a rebind when the buffer is commit.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2021-09-29 15:20:30 +00:00
Derek Foreman
b47e2cc902 gl-renderer: Add EGL_IMAGE_PRESERVED_KHR to our attributes
So, turns out the GL implementation is allowed to destroy EGLImage
sources if this isn't set. Apparently none we've ever been tested on do
this, but it looks like we should be setting this anyway.

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2021-09-29 15:20:30 +00:00
Derek Foreman
b6c891774e launcher-logind: Try the user's primary session if not in a session
If we're not in a session we can fall back to sd_uid_get_display() to
find the user's primary session.

This allows launching weston from an ssh session or as a systemd
user service if a viable session is available.

It also more closely follows how libseat finds the session. The libseat
launcher can already do these things, so this change makes these
features common to both launchers.

Based on a patch by Sjoerd Simons <sjoerd.simons@collabora.com>

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2021-09-29 14:30:50 +00:00
nerdopolis
d2a320d53e Fix TTY switching after failed failed repaint with legacy mode set.
Reported in !179 adding weston_output_repaint_failed resets the output

Co-authored-by: Daniel Stone
Co-authored-by: Julius Krah
Signed-off-by: n3rdopolis <bluescreen_avenger@verizon.net>
2021-09-29 12:17:58 +00:00
Derek Foreman
a822afaaef input: fix keyboard focus crash
If two or more clients were running and the one that was focused when
weston itself lost keyboard focus was killed, weston would crash.

This is because commit 85d55540cb changed the way we handle saved keyboard
focus when we lose focus, and did so in such a way that the saved keyboard
focus listener could be removed from the surface destroy signal list
during the emit of the surface destroy signal. This corrupted the list
and led to a NULL pointer dereference.

Fix this by using a boolean flag to determine whether we should obey the
saved keyboard focus. We can set this safely in cases where
removing the listener would cause a crash.

Fixes #138

Signed-off-by: Derek Foreman <derek.foreman@collabora.com>
2021-09-28 11:42:04 +03:00
Pekka Paalanen
645df9556d ci: bump test timeouts
This is prompted by the spurious CI failure
https://gitlab.freedesktop.org/wayland/weston/-/jobs/13891809
saying:

31/36 output-damage                          TIMEOUT        122.52s   8 subtests passed
32/36 output-transforms                      TIMEOUT        122.52s   16 subtests passed
33/36 subsurface                             TIMEOUT        122.52s
34/36 xwayland                               TIMEOUT        122.51s
35/36 ivi-shell-app                          TIMEOUT        122.51s
ERROR: Job failed: execution took longer than 5m0s seconds

That is hitting both kinds of timeouts at the same time: the per-test
timeouts, and the CI job total timeout.

That run seems to have had a particularly ill fortune, as a simple retry
finished the same job in 2 minutes, and the longest running test took
only 24 seconds.

Nevertheless, by Daniel Stone's suggestion let's bump both timeouts:

- the per-test timeout to 120 seconds, which with the multiplier in CI
  goes up to 8 minutes

- the job timeout for all build related jobs to 15 minutes

The timeout for tests_standalone is not bumped as we are not adding
significant amounts of new tests there.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2021-09-22 16:29:05 +03:00
Manuel Stoeckl
8a7f1e2bc0 pixman-renderer: track Pixman formats in pixel format table
Adds a Pixman format field to the pixel format table, and
adjusts the shm format handling code in the Pixman renderer
to use this table.

Pixman formats have been registered only for specific 565, 8888,
and 2101010 layouts, as these have corresponding DRM format codes
and are commonly used.

Signed-off-by: Manuel Stoeckl <code@mstoeckl.com>
2021-09-15 15:00:29 +03:00
Simon Ser
448f05e82d ci: use seatd-launch
Instead of manually waiting for the seatd socket to come up, use
seatd-launch.

Add /usr/local/bin to PATH to avoid having to specify the whole
path to seatd-launch.

Signed-off-by: Simon Ser <contact@emersion.fr>
2021-09-14 16:19:45 +02:00
Simon Ser
3e53a8d478 ci: export ASAN_OPTIONS
This allows splitting the `meson test` command on multiple lines.

Signed-off-by: Simon Ser <contact@emersion.fr>
2021-09-14 16:19:45 +02:00
Simon Ser
eb347687e7 ci: upgrade seatd to 0.6
This upgrades seatd to the latest version.

Examples are disabled by default. Man pages are already disabled
by auto_features=disabled. Other build options have been renamed.

Signed-off-by: Simon Ser <contact@emersion.fr>
2021-09-14 16:19:44 +02:00
Dennis Tsiang
a2a8d382e3 gl-renderer: Don't require buffer age when using partial update
EGL_KHR_partial_update can be implemented independently of
EGL_EXT_buffer_age so we handle each case seperately.

Signed-off-by: Ben Davis <ben.davis@arm.com>
Signed-off-by: Dennis Tsiang <dennis.tsiang@arm.com>
2021-09-07 15:20:25 +00:00
Pekka Paalanen
2ec15ebf3f libweston: fix crash on never used output's tear-down
weston_output_enable() initializes the list, but weston_output_release()
maybe be called even if the output was never enabled, triggering the
assert due to uninitialized (actually NULL) list head.

This can be triggered with a bad weston.ini, for example using an
invalid output transform value.

Check in weston_output_disable() instead, but because it too may be
called for non-enabled output, only if it was actually enabled.

Fixes: 1a4f87dec5
	"libweston: introduce weston_paint_node"

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
2021-09-07 16:42:34 +03:00
Leandro Ribeiro
0750ceae6c drm-formats: remove create() and destroy() from the API
Since commit "drm-formats: save result of intersection in the first
array", every block of code where weston_drm_format_array_create() and
destroy() are being called could use init() and fini() instead.

Remove these two functions from the API to make it leaner. This patch
also modifies the code that depends on these functions to use init() and
fini().

Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Reviewed-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
2021-09-06 12:52:37 +00:00
Leandro Ribeiro
c51d4ad9c8 drm-formats: save result of intersection in the first array
In the current API, we have some set operations: join, intersect and
subtract. Both join and subtract receives two DRM format arrays and save
the result in the first one.

For the intersection we have a slightly different approach, what makes
the API weird. We don't save the result in the arguments, instead we
return a new array with the result.

Modify weston_drm_format_array_intersect() in order to make it similar
to the other two set operations.

Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
Reviewed-by: Alexandros Frantzis <alexandros.frantzis@collabora.com>
2021-09-06 12:52:37 +00:00
yj1231.heo
ec0b717d77 fullscreen-shell : fullscreen-shell doesn't support the screenshooter
wet_shell_init() of fulscreen-shell has been missing to create a
screenshooter.

 . adding a screenshooter_create() on wel_shell_init() for
 fullscreen-shell.
 . adding a dep_libexe_weston to meson.build to use the screenshooter

Signed-off-by: yj1231.heo <yj1231.heo@samsung.com>
2021-08-17 03:59:18 +00:00
Leandro Ribeiro
d259bbeccd ci: replace kvmconfig with kvm_guest.config
Remove the following warning:

WARNING: 'make kvmconfig' will be removed after Linux 5.10
Please use 'make kvm_guest.config' instead.

Signed-off-by: Leandro Ribeiro <leandro.ribeiro@collabora.com>
2021-08-13 10:53:26 -03:00
Daniel Stone
ec1ce9fc26 ci: Add clang build jobs
Signed-off-by: Daniel Stone <daniels@collabora.com>
2021-08-03 18:42:25 +01:00