Commit Graph

18269 Commits

Author SHA1 Message Date
Peter Hutterer e6a94d4f9d Clean up the .gitignore file
Now that we're only building with meson, all the detritus should be
exclusively in the build directory, with the exception of the detritus
left by various editors (and ctags).
2024-01-12 00:50:24 +00:00
Michel Dänzer e5a3f3e84d glamor: Fall back for mixed depth 24/32 in glamor_set_alu
For ALUs which may leave the alpha channel at values other than 1.0.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1615

v2:
* List safe ALUs instead of unsafe ones
2024-01-11 10:03:10 +00:00
Michel Dänzer 8f66c15694 glamor: Make glamor_set_alu take a DrawablePtr
Preparation for the following commit, no functional change intended.
2024-01-11 10:03:10 +00:00
Olivier Fourdan 4805d901c3 xwayland: Add the output name for fullscreen rootful
This adds a new command line option "-output" to specify on which output
Xwayland should be starting fullscreen when rootful.

That allows to run multiple instances of Xwayland rootful fullscreen on
multiple outputs.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan 87ca6dcb43 xwayland: Check for the screen output name for fullscreen
When putting the (root) window fullscreen, first search for an output
with the specified name, if any.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan 2e317e0242 xwayland: Check for fullscreen on output name change
At startup, the names of the Wayland outputs are not yet known,
therefore we cannot rely on those when running fullscreen rootful.

Make sure to check the fullscreen state once the Wayland output name
changes.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan 01e31f5d95 xwayland: Add an output name for fullscreen
Add a output name to the xwl_screen.

This is preparation work for fullscreen rootful on a specific output,
no functional change.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan d99e98ad68 xwayland: Add a function to search for xwl_output by name
Add a convenient function to search for an xwl_output based on its
XRandR name.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan 0fede76cc3 xwayland: Do not update the outputs when rootful
When running rootful, we do not need to apply the output changes, these
are there just to track the names and show up as disconnected in XRandR.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan 060f1f1154 xwayland: Always create the XrandR CRTCs
When running rootful, Xwayland would simply skip the creation of the CRTC
for the "real" outputs.

Instead, create the CRTC regardless of all outputs in rootful mode, but
mark them as disconnected when running rootful.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan f0124485e1 xwayland: Use the output serial for the fixed output
The fixed output is called "XWAYLAND0", yet if the compositor does not
support Wayland output names, the "real" output names may collide with
the fixed output name.

Use the same output serial as with the (default) real output names to
avoid reusing the same names.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan a6bbc9663d xwayland: Use simpler initialization syntax
Use the simpler form `{ 0 }` instead of `{ '\0', }` for the
initialization of the output name buffer.

No functional change.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Olivier Fourdan e1e3bef7f8 xwayland: Use a helper function for fullscreen update
Move the code which may update the fullscreen state of the rootful
window to a dedicated helper function.

No functional change.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Acked-by: Michel Dänzer <mdaenzer@redhat.com>
2024-01-11 08:45:33 +00:00
Michel Dänzer 777c3e0000 xwayland: Return NULL from xwl_window_buffer_get_available
If there's no available window buffer.

This allows keeping xwl_window_buffer->damage_region empty for a newly
allocated xwl_window_buffer in xwl_window_buffers_get_pixmap, instead
of first populating it in xwl_window_buffer_add_damage_region and then
emptying it again.
2024-01-10 17:31:42 +00:00
Michel Dänzer 6779ec5bf6 xwayland: Use window pixmap as a window buffer
Assuming the same number of window buffers, this results in one less
pixmap per toplevel window, saving pixmap storage.

v2:
* Preserve xwl_window_buffer_get_available behaviour (Olivier Fourdan)
v3:
* Leave RegionEmpty call where it was in xwl_window_buffers_get_pixmap,
  so it takes effect for a newly allocated struct xwl_window_buffer.
* Consolidate xwl_window_buffer->pixmap assignment in the same place.
2024-01-10 17:31:42 +00:00
Michel Dänzer 2b577c2e3b xwayland: Drop xwl_window_buffers_recycle
Use xwl_window_buffers_dispose instead. The pixmaps will need to be
re-created anyway, so keeping around the xwl_window_buffers doesn't
buy much. And dropping this makes the next commit simpler.

Also fold xwl_window_buffer_destroy_pixmap into its only remaining
caller,  xwl_window_buffer_maybe_dispose.

v2: (Olivier Fourdan)
* Fix up indentation in xwl_window_set_window_pixmap
* Leave xwl_window_buffer_destroy_pixmap helper
2024-01-10 17:31:42 +00:00
Michel Dänzer 2879032ecc xwayland: Rename helper to xwl_window_buffer_maybe_dispose
To make it clearer that it doesn't always dispose of the
xwl_window_buffer, only if the reference count drops to 0.
2024-01-10 17:31:42 +00:00
Michel Dänzer 114f060de5 xwayland: Make copy_pixmap_area return void
GetScratchGC can't really fail without a bug elsewhere. Just FatalError
in that case, so we'd get a bug report if it ever happens, instead of
trying to limp along.
2024-01-10 17:31:42 +00:00
Michel Dänzer d1bbf82d72 glamor: Don't override source alpha to 1.0 if it's used for blending
It caused an incorrect result of the blend operation.

Use glColorMask to prevent non-1.0 alpha channel values in a depth 32
pixmap backing an effective depth 24 window. For blending operations,
the expectation is that the destination drawable contains valid pixel
values, so the alpha channel should already be 1.0.

Fixes: d1f142891e ("glamor: Ignore destination alpha as necessary for composite operation")
Issue: https://gitlab.gnome.org/GNOME/mutter/-/issues/3104
2024-01-10 08:56:26 +00:00
Peter Hutterer de0031eefd dix: initialize the XTest sendEventsProc for all devices
XTest requests lets the client specify a device ID, only if none
is specified do we fall back to the XTEST special device.
As of commit
  aa4074251 input: Add new hook DeviceSendEventsProc for XTEST
regular devices are no longer able to send XTest events because they
have no sendEventsProc set.

This caused issue #1574 and the crash was fixed with commit
  e820030de xtest: Check whether there is a sendEventsProc to call
but we still cannot send XTest events through a specific device.

Fix this by defaulting every device to the XTest send function and
punting it to the DDX (i.e. Xwayland) to override the devices as
necessary.

Fixes e820030de2
Fixes aa4074251f
2024-01-09 00:45:31 +00:00
Peter Hutterer 7f7adfdef8 xwayland: override the XTest sendEventsProc for all devices
Otherwise only XTest events on the XTest device get handled, XTest
requests on real devices are still processed as normal events.
2024-01-09 00:45:31 +00:00
Peter Hutterer 37ef3adaed test: drop the unncessary unit_defines from meson.build
Let's set unit_c_args directly instead of having two variables for the
same thing.
2024-01-09 09:49:54 +10:00
Peter Hutterer 79e3d44558 meson.build: re-enable the protocol unit tests
Accidentally disabled when the meson variables shifted around.

Fixes d231ce2d9c
2024-01-09 09:49:54 +10:00
Peter Hutterer 9f3b64f3e6 test: speed up the XISelectEvents test
It's fine to test up to 1000 masks but we don't need to test every
single value. Let's increase by a "random" increment to make this test
pass faster.
2024-01-09 09:49:54 +10:00
Peter Hutterer d0b0137a95 Two whitespace fixes 2024-01-09 09:49:54 +10:00
Peter Hutterer 0a9f223eec dix: factor out the duplicate the RemoveDevice code paths
This is the same loop twice, once over inputInfo.devices and once over
inputInfo.off_devices, let's make both the same.
2024-01-09 09:49:54 +10:00
Peter Hutterer e44e9262df test: fix the touch tests to no longer leak
Instead of hardcoded TouchRec/ValuatorRec init the devices with the
matching functions and go from there. This allows us to clean them
up later, removing the various leaks that stop asan from being happy.
2024-01-09 09:49:54 +10:00
Peter Hutterer b6931f2f5f test: fix the xtest device test to show the dependency
These two tests were dependent on each other, the second test relied on
the xtest devices created in the first test. Let's move the bits that
are shared out into the main function instead to illustrate this better.

This lets us add a call to CloseDownDevices() that will remove the leaks
in this set of tests.
2024-01-09 09:49:54 +10:00
Peter Hutterer 2cee5fb36c test: fix various leaks in the tests 2024-01-09 09:49:54 +10:00
Peter Hutterer 373cd80081 dix: use valuator_mask_free() to free the last touches vmask
No functional effect since that one is just a free() call anyway.
2024-01-09 09:49:54 +10:00
Peter Hutterer 7aba2514b2 dix: don't allow for devices with 0 axes
This just makes the existing behavior explicit, previously we relied on
a malloc(numAxes * ...) to return NULL to error out.
2024-01-09 09:49:54 +10:00
Luke Dashjr 5f48efa2bd Xvfb: Support up to 13 mouse buttons
Signed-off-by: Luke Dashjr <luke-jr+git@utopios.org>
2024-01-08 11:16:11 +00:00
Olivier Fourdan 7fdef970c4 build: Switch to meson 0.56
And replace the deprecated meson API accordingly.

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
2024-01-08 10:38:05 +00:00
Sam James 515b240a24 meson: add option for systemd_notify
Without this, systemd will be used if installed on the system automagically,
which is a problem if the built e.g. Xwayland is going to be used on a non-systemd
machine.

Bug: https://bugs.gentoo.org/908254
Signed-off-by: Sam James <sam@gentoo.org>
2024-01-08 01:23:55 +00:00
Michel Dänzer d757aabd50 ci: Prevent duplicate pipelines for MRs
Do not create a pipeline for $CI_PIPELINE_SOURCE == 'push' if
$CI_OPEN_MERGE_REQUESTS is set, which means there are open MRs using
the branch as the source.
2024-01-08 01:11:21 +00:00
Dongwon Kim 995e60a919 modesetting: Correct coordinate info of dirty clips for front-buffer flushing
A clip should represent the area that is covering the current FB associated
with the CRTC. So making sure each input rect covers any area in the FB is
the first thing to do. If that is the case, the size and coordinates should
be adjusted based on the partial area in the FB the each rect covers. The size
elements need to be truncated if the rect's size exceeds FB's for the CRTC.
Then offsets should be applied to coordinates if the CRTC's offsets aren't 0.
And coordinate transposing and inversion are needed in case the rotated image
is assigned to the FB.

Signed-off-by: Dongwon Kim <dongwon.kim@intel.com>
2024-01-04 17:51:30 +00:00
Izumi Tsutsui f2b019d2b3 fb: Fix 1bpp Xservers on "whitePixel=0, blackPixel=1" VRAMs
Closes: #1057
2024-01-03 19:43:16 +00:00
Izumi Tsutsui 15624bb5bc Revert "xfree86: Remove -flippixels"
This reverts commit d1c00c859c except
hw/xfree86/common/xf86str.h that was not used by -flipPixels option.
2024-01-03 19:43:16 +00:00
xurui 3268a83ae1 xwayland: Use do-while loop
Signed-off-by: xurui <xurui@kylinos.cn>
2024-01-03 16:36:20 +08:00
Peter Hutterer 37539cb0bf Xi: require a pointer and keyboard device for XIAttachToMaster
If we remove a master device and specify which other master devices
attached slaves should be returned to, enforce that those two are
indeeed a pointer and a keyboard.

Otherwise we can try to attach the keyboards to pointers and vice versa,
leading to possible crashes later.
2024-01-03 05:34:40 +00:00
Chia-Lin Kao (AceLan) f59871587e hw/xfree86: re-calculate the clock and refresh rate
xserver fails to generate useable resolutions with 90Hz framerate
panels(encounter the same issue with 3 different 2.5k resolution
panels). All the resolutions shown by xrandr lead to blank screen except
the one written in EDID.
Ville Syrjälä from Intel provides a method to calculate the preferred
clock and refresh rate from the existing resolution table and this
works for the issue.

v2. xf86ModeVRefresh might return 0, need to check it before use it.
v3. reported by Markus on launchpad that the issue is not devided by 0,
it's the "preferred" being accessed unconditionally.
BugLink: https://launchpad.net/bugs/1999852

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1388
Signed-off-by: Chia-Lin Kao (AceLan) <acelan.kao@canonical.com>
2023-12-22 05:02:05 +00:00
Ville Syrjälä 2bf0f9e113 glamor: Enable dmabuf_capable by default on Intel hardware
With the potential modeset vs. modifiers issue covered by
commit 899c87af1f ("modesetting: unflip before any setcrtc() calls")
we can safely enable modifiers by default, at least on Intel
hardware where we know that things work properly.

I suppose the one open question is whether everything will work
correctly with wonky multi-GPU setups? I don't have one to test
myself.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
2023-12-19 02:52:26 +02:00
Alexander Volkov 62fec48a6b dpms: Add support for DPMSInfoNotify event from DPMS 1.2 (xorgproto)
This allows applications to respond to changes of power level
of a monitor, e.g. an application may stop rendering and related
calculations when the monitor is off.

Related bug: https://bugs.freedesktop.org/57120

Signed-off-by: Alexander Volkov <avolkov@astralinux.ru>
2023-12-18 16:35:51 +03:00
Olivier Fourdan 1bf4d60acd xwayland: Pass the correct oeffis device types
Xwayland uses OEFFIS_DEVICE_ALL_DEVICES to get all possible device types
enabled.

Be more selective and specify explicitly keyboard and pointer instead of
relying on what "all devices" translates to in the stack.

See-also: https://gitlab.gnome.org/GNOME/mutter/-/issues/3194
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
2023-12-18 08:26:06 +00:00
Zoltán Böszörményi 0df31f068d Use log lines prefixed with human readable time
Fixes: #399
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
2023-12-17 19:37:03 +00:00
Alex Richardson cb8938e3d3 record: Support architectures with sizeof(void*) > sizeof(long)
I was seeing SIGBUS errors when running TigerVNC inside the record code
because the offsets into the memory buffer were not sufficiently aligned
to use the RecordSetRec (alignof(void*)). The current code ensures that
all offsets are aligned to sizeof(unsigned long), but that may not be
sufficient to load/store a pointer. Architectures where this is not true
include Arm Morello which has 16-byte pointers and 8-byte longs.
2023-12-17 19:30:52 +00:00
Alexander Volkov f1bd82552b ephyr: Send RRCrtcChangeNotify events on resize
After resizing Xephyr's window RRGetCrtcInfo returns the changed size,
but the RRCrtcChangeNotify event is not sent.
Call RRGetInfo(pScreen, TRUE) to update the current mode and send
notifications to clients.
2023-12-17 19:21:55 +00:00
Twaik Yont 43a7bb3c92 xvfb: Use RROutputSetPhysicalSize to set physical size of display
Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1532
Signed-off-by: Twaik Yont <twaikyont@gmail.com>
2023-12-17 19:09:18 +00:00
Michael Wyraz 818130bb12 Removing the code that deletes an existing monitor in RRMonitorAdd
In commit 7e1f86d4 monitor support was added to randr. At this time it seemed to be reasonable not to have
more than one (virtual) monitor on a particular physical display. The code was never changed since.

Nowadays, extremely large displays exists (4k displays, ultra-wide displays). In some use cases it makes sense to
split these large physical displays into multiple virtual monitors. An example are ultra-wide screens that can be
split into 2 monitors. The change in this commit makes this work.

Besides that, removing a monitor in a function that is called "RRMonitorAdd" is bad practice and causes
unexpected behaviour.
2023-12-17 18:55:50 +00:00
msizanoen1 e2eeaab2a4 glamor: Use render node for glamor device path where possible
On certain system deployments, /dev/dri/card* nodes aren't directly
accessible to the currently logged in user, but the display server only
access it by asking systemd-logind to open the device for it. This
causes the X server to fail when trying to re-open the card* device
directly, causing all use of DRI3 to fail.

Fix this by using the render device path instead where possible.
2023-12-17 17:45:06 +00:00