Commit graph

9444 commits

Author SHA1 Message Date
kohnish
6184c553f3 Revert "include: split out non-exported prototypes to dix_priv.h"
This reverts commit f17bc7e24d.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
e2162fa52c Revert "dix: unexport AddScreen() and AddGPUScreen()"
This reverts commit 27b83c4cd0.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
7a09e1b625 Revert "os: unexport command line args handling functions"
This reverts commit 389b528203.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
c4c7bd27db Revert "mi: unexport miPointerWarpCursor()"
This reverts commit 6c04f94f3b.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
02ea810b80 Revert "dix: unexport global variables"
This reverts commit 040e41c7e9.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
1c9b55a1e5 Revert "os: unexport ddx callbacks"
This reverts commit e5c8b664d3.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
f613d5306e Revert "dix: unexport fields from opaque.h not used by modules/drivers"
This reverts commit 06b599edb6.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
7679bc0c82 Revert "mi: make miRecolorCursor() static"
This reverts commit 6dbb957922.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
7e3166b2cb Revert "mi: unexport mieqInit()"
This reverts commit 5ac361cce9.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
abbddbfdfb Revert "mi: unexport mieqEnqueue()"
This reverts commit 9dd280607f.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
a030c71a43 Revert "mi: unexport mieqProcessInputEvents()"
This reverts commit 9aa23b6abd.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
3014873fd7 Revert "mi: unexport mieqAddCallbackOnDrained()"
This reverts commit 269d54c48f.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
623286fc3e Revert "mi: unexport miWindowExposures()"
This reverts commit e424f49cdb.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
0d6dce5af3 Revert "mi: unexport miSourceValidate()"
This reverts commit 191cca0905.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
kohnish
9b14b47ff3 Revert "mi: unexport SetInstalledmiColormap() macro"
This reverts commit aae9bd3f62.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2102>
2026-02-08 11:57:52 -08:00
Yixue Wang
6bf6a9bff2 xwayland: wrong expecting_event
According to

https://wayland.app/protocols/wayland#wl_seat:event:capabilities

Compositor might send capabilities when its capabilities change.
Decrease expecting_event here without any check might cause a
negative expecting_count.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2123>
2026-01-28 16:28:59 +08:00
Liu Heng
e673a4bda0 xwayland: prevent X11 get enter event when pointer is over Wayland client
In Wayland, mouse coordinates are not updated after all x11 clients have left,
causing the mouse information to remain at the position left by the last x11
client. However, if CheckMotion is called at this point for other reasons
(such as window mapped, reactive, etc.), xwayland might continue to send enter
events to x11 clients, even if the mouse is actually on a Wayland client.

This MR introduces and checks pointer_enter_count to determine if the mouse
has left an x11 client and is now on a Wayland client. When it's confirmed
that the mouse is no longer on an x11 client but on a Wayland client,
returning TRUE in sprite_check_lost_focus causes XYToWindow to return to the
root window, preventing further enter events from being sent to x11 clients.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2112>
2026-01-20 10:02:36 +08:00
Olivier Fourdan
5a78e5f1e9 xwayland: Clean-up stray newlines
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2121>
2026-01-15 14:34:27 +01:00
Olivier Fourdan
904cdb0d11 xwayland: Expand tab characters
Over time, some sneaky tab characters have found their way in the
Xwayland code, even though they were not allowed:

  https://www.x.org/wiki/CodingStyle/

Simply expand the tabs to get rid of these...

Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2121>
2026-01-15 14:34:27 +01:00
Olivier Fourdan
37f59e1a4d xwayland: Avoid premature surface commit running rootfull
When running rootful, i.e. as a regular Wayland client, Xwayland needs
to wait for the initial configure event before posting its initial
buffer and commit the surface.

Not doing so may cause mutter to log a warning when Xwayland is started
rootful:

 | Buggy client (org.freedesktop.Xwayland) committed initial non-empty
 | content without acknowledging configuration, working around.

Or running rootful with libdecor:

 | Client provided invalid window geometry for xdg_surface#nn
 | (org.freedesktop.Xwayland - Wnn (Xwayland on :nn)). Working around.
 |
 | Buggy client (org.freedesktop.Xwayland) committed initial non-empty
 | content without acknowledging configuration, working around.

This is actually mutter being nice, as this should be treated as a
protocol error and Xwayland would be terminated.

To avoid the issue, we need to hold on attaching a buffer and committing
the surface until we actually get the first configure event from the
compositor.

That, however, only applies to rootful mode, so we can leave the default
code path for rootless untouched.

Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1853
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>

v2: commit the surface after attaching the first buffer on configure
event only for the initial configure (Michel Dänzer).
v3: return early in present flip if we didn't get the initial configure
event (Michel Dänzer).

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2110>
2026-01-12 10:00:02 +01:00
Michel Dänzer
44dea3a8bd xwayland: Adjust RandR emulation for rotation
Need to use the extents of the output in screen cordinates, instead of
the canonical mode size.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:20 +00:00
Michel Dänzer
d339284006 xwayland: Add emulated modes larger than the logical mode
Up to the native mode, as reported by the wl_output protocol.

This ensures that fullscreen apps can always use the native mode.

Also ensure the root window is large enough for the output at its
current position with the native mode.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:20 +00:00
Michel Dänzer
dcfba8a9bd xwayland: Clear ConstrainCursorHarder in xwl_screen_init_output
In the rootless case, Xwayland receives pointer motion events only while
the pointer is over one of its Wayland surfaces, so there's no need for
constraining them to RandR boundaries.

This also avoids them getting spuriously constrained when using RandR
emulation for modes larger than the default one.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:20 +00:00
Michel Dänzer
288dcb3128 xwayland: Add RandR mode for the native resolution if it fits in logical
Always add it as the first mode, which makes it considered the preferred
mode per the RandR protocol.

Mark the logical mode as currently set.

v2:
* Drop change in xwl_window_should_enable_viewport which seems
  unnecessary and coult result in a crash. (Olivier Fourdan)
* Use 'native' instead of 'actual'.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:17 +00:00
Michel Dänzer
4ea088f9e2 xwayland: Do not assume the first RandR mode is the logical mode
It currently always is, it won't be with the next commit though.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:16 +00:00
Michel Dänzer
e4da0673f7 xwayland: Set output mode size as reported by the wl_output protocol
This means xwl_output->mode_width/height can be non-0 also with
rootless, so need to check for rootful explicitly in
xwl_output_find_mode.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:16 +00:00
Michel Dänzer
a1be2542e0 xwayland: Refactor output_get_logical_mode/extents helpers
Preparation for later changes.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:15 +00:00
Michel Dänzer
ce67045211 xwayland: Use logical_ prefix for logical coordinate system values
Inspired by
https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/878 .

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:15 +00:00
Michel Dänzer
1a3c5e7827 xwayland: Sort xwl_output_fake_modes entries
Makes the list of modes tidier e.g. in xrandr output.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:14 +00:00
Michel Dänzer
bf6cbf244f xwayland: Use separate comment for each xwl_output_fake_modes line
Preparation for next commit.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2095>
2026-01-06 16:23:13 +00:00
Matthieu Herrb
772cb30448 Fix drmModeCreatePropertyBlob() length parameter after f894801fa2
Fixes: f894801fa ("xfree86: modesetting: don't use VLA")
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2011>
2026-01-04 15:39:33 -08:00
Liu Heng
7fb5e00ad8 xwayland: Fix incorrect pointer coordinates in enter events
Xwayland was sending incorrect pointer coordinates to X clients on
pointer enter events.

This was caused by calling CheckMotion() with a NULL event, which
prevented the pointer sprite hot coordinates from being updated
properly.

Fix this by constructing a proper DeviceEvent of type ET_Enter in
pointer_handle_enter, initializing it with the current timestamp
and EVENT_SOURCE_FOCUS, and passing it to CheckMotion() instead
of NULL.

This ensures the pointer sprite coordinates are correctly updated
when the pointer enters a window.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2113>
2025-12-16 10:51:34 +08:00
kohnish
0060b91b49 Revert "dix: unexport dixLookupProperty()"
This reverts commit fb697dd644.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2101>
2025-11-17 21:33:26 +01:00
Takashi Yano
3b39aebf98 Fix mach64 driver crash
Due to lack of iopl(3), mach64 driver crashes when ior(BUS_CNTL) is
called. Since BUS_CNTL is out of the range 0x0000-0x03ff, ioperm(0,
1024, 1) is not sufficient and the ior() causes access violation.
This patch reintroduce iopl(3) call in the function hwEnableIO().

Addresses: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1110521
Fixes: a0f738a673 ("Fixed ioperm calls in hwEnableIO")
Signed-off-by: Takashi Yano <takashi.yano@nifty.ne.jp>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2052>
2025-10-25 20:34:53 +00:00
Michel Dänzer
6f31791945 xwayland: Ignore non-InputOutput children in window_get_client_toplevel
InputOnly windows aren't relevant here.

E.g. mutter-x11-frames uses GTK4, which creates a 1x1 InputOnly child
window, which previously prevented this code from working as intended.

v2: (Olivier Fourdan)
* Rename output_child -> input_output_child.
* Add comment in get_single_input_output_child explaining why we return
  NULL if input_output_child is already non-NULL.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2069>
2025-10-10 08:26:49 +00:00
Michel Dänzer
105b5f2402 xwayland: Add heuristic for WM windows based on reparenting
If the WM client reparents a window, mark the new parent as a WM window.

This helps with current mutter, where decoration windows are created by
a separate mutter-x11-frames client instead of the WM client. There
might be other compositors doing something similar now or in the future.

v2:
* Skip the whole unwrap-and-call-down dance in xwl_reparent_window if
  xwl_screen->ReparentWindow is NULL.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2069>
2025-10-10 08:26:49 +00:00
Michel Dänzer
66984ab8ae xwayland: Take viewport scale into account for the input region
This is necessary because the input region is specified in surface
coordinates.

Fixes: a4ed100c0c ("xwayland: Set wl_surface input region:)
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2071>
2025-10-08 08:03:38 +00:00
Alan Coopersmith
d9389873d6 Strip trailing whitespace from source files
Performed with: `git ls-files | xargs perl -i -p -e 's{[ \t]+$}{}'`

`git diff -w` & `git diff -b` show no diffs from this change

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2074>
2025-10-05 11:56:48 -07:00
Alan Coopersmith
5210495f7d xfree86: Fix -Wdiscarded-qualifiers warnings in SPARC Sbus probe code
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2070>
2025-10-03 10:55:17 -07:00
Alan Coopersmith
c62cd2feaa xfree86: add missing headers to build sun_init.c on Solaris/SPARC
Fixes: 0f715b4ca ("xfree86: os-support: move hidden Solaris-specific symbols out of public header")
Fixes: e2fa0d2ae ("fix including <sys/mman.h>")

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2070>
2025-10-03 10:55:17 -07:00
Alan Coopersmith
908f0a488d xfree86: fix meson build on 64-bit Solaris/SPARC systems
For cpu_family(), meson returns "sparc" for 32-bit sparc,
and "sparc64" for 64-bit sparc, regardless of the OS in use.

For cpu(), meson returns values like "sun4v" on Solaris/SPARC,
and doesn't promise stability of the values, or portability across
OS'es, unlike cpu_family().

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2070>
2025-10-03 10:55:17 -07:00
Mikhail Dmitrichenko
b096785df4 xwayland: Fix search of duplicate lease names
Commit d36f66f15d ("Check for duplicate output names") would walk the
list of existing outputs and leases to check that no other existing
output has the same name.

The change however, inadvertently reused the regular screen outputs when
searching the leased names.

Fix this by using the lease name, not the regular output names that we
already checked just above.

Found by SAST tool Svace.

Fixes: d36f66f15d - xwayland: Check for duplicate output names
Closes: https://gitlab.freedesktop.org/xorg/xserver/-/issues/1843
Reviewed-by Olivier Fourdan <ofourdan@redhat.com>

Signed-off-by: Mikhail Dmitrichenko <m.dmitrichenko222@gmail.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2063>
2025-09-18 09:55:47 +00:00
Nicolas Guichard
bcc0587ab9 xwayland: Fix minimum wl_compositor protocol version
Commit 54f8fc4090 introduced the use of
wl_surface::set_buffer_scale, which is only available starting with
version 3 of the wl_compositor protocol. Because we already prefer
version 4 when available, this went unnoticed but broke versions 1, 2
and 3 when reaching the wl_surface::set_buffer_scale call.

This restores functionality for version 3 and properly document that
versions 1 and 2 are not supported anymore.

Signed-off-by: Nicolas Guichard <nicolas.guichard@kdab.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1862>
2025-09-18 11:40:44 +02:00
Ian Forbes
afc8b781d8 xwayland: Try harder to find a top-level for root grabs
The commit referenced below partially resolved an issue with grabs being made
on the root window. Unfortunately it assumes that the application uses
the same client for all windows. VMware Workstation uses nested windows
for each VM, each of which runs its own process with this own client.
Theses windows are managed by the GUI which is the top level for the
application and maps the windows based on which tab is selected.

Because the VM windows issue a grab on the root window and don't share
the same client as the GUI, grabs don't work properly with global shortcut
inhibition being completely broken.

Getting the parent top-level of the nested windows fixes this issue.

Fixes: c7730cfe55 ("xwayland: Translate keyboard grabs on the root window")
Signed-off-by: Ian Forbes <ian.forbes@broadcom.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2016>
2025-09-12 07:47:39 +00:00
Alan Coopersmith
b858cb5ccd Revert "dix: unexport cursor refcounting functions"
This reverts commit 4aadbeb8aa.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2058>
2025-09-06 17:01:39 +00:00
Alan Coopersmith
774da7dfc0 Revert "dix: unexport NewCurrentScreen()"
This reverts commit bd3c252710.

Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2058>
2025-09-06 17:01:37 +00:00
Alan Coopersmith
cc7b0b7681 modesetting: fix modesetting symbol test when glx is disabled
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2056>
2025-08-30 10:01:32 -07:00
Alan Coopersmith
48acd1ae78 xwayland: fix builds with xace disabled
CI meson-disable-options builds were failing with:
../hw/xwayland/xwayland-screen.c: In function ‘xwl_close_screen’:
../hw/xwayland/xwayland-screen.c:246:5: error: implicit declaration of
 function ‘XaceDeleteCallback’; did you mean ‘DeleteCallback’?
 [-Werror=implicit-function-declaration]
  246 |     XaceDeleteCallback(XACE_PROPERTY_ACCESS, xwl_access_property_callback, screen);
      |     ^~~~~~~~~~~~~~~~~~
      |     DeleteCallback

../hw/xwayland/xwayland-screen.c:246:24: error: ‘XACE_PROPERTY_ACCESS’
 undeclared (first use in this function)
  246 |     XaceDeleteCallback(XACE_PROPERTY_ACCESS, xwl_access_property_callback, screen);
      |                        ^~~~~~~~~~~~~~~~~~~~

../hw/xwayland/xwayland-screen.c: In function ‘xwl_screen_init’:
../hw/xwayland/xwayland-screen.c:1174:5: error: implicit declaration of
 function ‘XaceRegisterCallback’ [-Werror=implicit-function-declaration]
 1174 |     XaceRegisterCallback(XACE_PROPERTY_ACCESS, xwl_access_property_callback, pScreen);
      |     ^~~~~~~~~~~~~~~~~~~~

../hw/xwayland/xwayland-screen.c:1174:26: error: ‘XACE_PROPERTY_ACCESS’
 undeclared (first use in this function)
 1174 |     XaceRegisterCallback(XACE_PROPERTY_ACCESS, xwl_access_property_callback, pScreen);
      |                          ^~~~~~~~~~~~~~~~~~~~

Fixes: a07c2cda9 ("xwayland: Add an XACE property access handler")
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2056>
2025-08-30 10:01:32 -07:00
Alan Coopersmith
ec14ecf751 modesetting: Fix builds with pciaccess or udev_kms disabled
CI meson-disable-options builds were failing with:
../hw/xfree86/drivers/modesetting/driver.c:127:5: error: ‘ms_device_match’
 undeclared here (not in a function)
  127 |     ms_device_match,
      |     ^~~~~~~~~~~~~~~
../hw/xfree86/drivers/modesetting/driver.c: In function ‘ms_get_drm_master_fd’:
../hw/xfree86/drivers/modesetting/driver.c:1179:19: error: variable ‘pEnt’
 set but not used [-Werror=unused-but-set-variable]
 1179 |     EntityInfoPtr pEnt;
      |                   ^~~~
../hw/xfree86/drivers/modesetting/driver.c: At top level:
../hw/xfree86/drivers/modesetting/driver.c:84:13: error: ‘ms_pci_probe’
 used but never defined [-Werror]
   84 | static Bool ms_pci_probe(DriverPtr driver,
      |             ^~~~~~~~~~~~
../hw/xfree86/drivers/modesetting/driver.c:313:1: error: ‘probe_hw_pci’
 defined but not used [-Werror=unused-function]
  313 | probe_hw_pci(const char *dev, struct pci_device *pdev)
      | ^~~~~~~~~~~~

Fixes: a72bdf170 ("modesetting: rewrite probing based on fbdev.")
Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2056>
2025-08-30 10:01:32 -07:00
Alan Coopersmith
d03c84b57f xfree86: Fix builds with gcc -Wpedantic
../hw/xfree86/loader/loadmod.c:85:33: warning: ISO C forbids empty
 initializer braces before C23 [-Wpedantic]
   85 | static int ModuleDuplicated[] = { };
      |                                 ^
../hw/xfree86/loader/loadmod.c:85:12: error: zero or negative size array
 ‘ModuleDuplicated’
   85 | static int ModuleDuplicated[] = { };
      |            ^~~~~~~~~~~~~~~~

Signed-off-by: Alan Coopersmith <alan.coopersmith@oracle.com>
Part-of: <https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/2054>
2025-08-23 15:38:40 +00:00