Commit Graph

2169 Commits

Author SHA1 Message Date
Enrico Weigelt, metux IT consult
ea8e66245e (submit/vrr-driver-api) dix: add generic Xinerama capable VRR infrastructure
We don't have a standard protocol for enabling VRR yet, but some time ago an
ad-hoc had been made in the amdgpu driver (later also copied to modsetting),
which works by client setting the _VARIABLE_REFRESH window property.

The way it's currently done - driver is highjacking the X_ChangeProperty and
X_DeleteProperty request handlers - is pretty fragile, and is also a violation
of layers: drivers never should be twisted with core protocol details. (And in
the future, this should be done by some suitable extension).

Another problem is Xinerama: when it's enabled, this only works on the first
screen - the others won't ever see this signal, no matter on which one(s) the
Window is physically placed (for the wire protocol, all windows are on screen 0,
unless the client explicitly creates them on another one)

This commit adds a generic Screen proc for telling the DDX, whether the VRR mode
shall be changed (for now, it's only DISABLED and ENABLED). Drivers can hook into
here in order to receive this signal, w/o having to highjack any core request
handlers. Catching the property change is now entirely done in the DIX.

The (non-standard) status qou of (ab)using window properties is kept, but it's
now also easy to add a new signaling mechanism, in case a standard is agreed on.

Yet a quite naive implementation (eg. not acting on moving windows between screens),
but enough to fix the most pressing problems supporting extra screens in general,
as well as stopping the highjacking of core request handlers by drivers.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:15 +01:00
Enrico Weigelt, metux IT consult
75bf85bb36 (!1682) os: log: drop now meaningless XLOG_FLUSH option
Since we're not indirectly writing via FILE anymore, this option has
become meaningless: it meant flushing out our in-process buffer to
the kernel, but we're now doing direct write() calls anyways.

xf86 still accepts the "flush" config file flag for backwards compatibility,
but it hasn't any practical meaning anymore.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
57ce720511 (!1714) dix: add per-screen pixmap destructor mechanism
Right now, extension specific pixmap destruction procedures are implemented
by wrapping the ScreenRec's DestroyPixmap() proc pointer: the extensions are
storing the original pointer in their private data and putting in their own one.
On each call, their proc restores the original one, calls it, and switches back
again. When multiple extensions doing so, they're forming a kind of daisy chain.
(the same is done for lots of other procs)

While that approach is looking nice and elegant on the drawing board, it's
complicated, dangerous like a chainsaw and makes debugging hard, leading to
pretty blurred API borders.

It's even getting worse: the proc also has to do ref counting, and only destroy
the pixmap if refconter reaching zero - that's all done in the individual screen
drivers. Therefore, all extensions must check for refcnt == 1, in order to know
when to really act.

This commit introduces a simple approach for letting extension hook into the
pixmap destruction safely, w/o having to care much about side effects with
the call chain. Extensions now can simply register their destructor proc
(and an opaque pointer) and get called back - w/o ever having to mess with
the ScreenRec's internal structures.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
07dc61c736 (!1714) dix: add per-screen close notify hook
Right now, extension specific actions on screen closing implemented by wrapping
the ScreenRec's PositionWindow() proc pointer: the extensions are storing the
original pointer in their private data and putting in their own one. On each
call, their proc restores the original one, calls it, and switches back again.
When multiple extensions doing so, they're forming a kind of daisy chain.
(the same is done for lots of other procs)

While that approach is looking nice and elegant on the drawing board, it's
complicated, dangerous like a chainsaw and makes debugging hard, leading to
pretty blurred API borders.

This commit introduces a simple approach for letting extension hook into the
screen closing path safely, w/o having to care much about side effects with
the call chain. Extensions now can simply register their hook proc (and an
opaque pointer) and get called back - w/o ever having to mess with the
ScreenRec's internal structures. These hooks are called before the original
vector (usually handled by DDX/screen driver directly) is called.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
6de58372f9 (!1714) dix: add per-screen window position notify hook
Right now, extension specific actions on window positioning are implemented
by wrapping the ScreenRec's PositionWindow() proc pointer: the extensions are
storing the original pointer in their private data and putting in their own one.
On each call, their proc restores the original one, calls it, and switches back
again. When multiple extensions doing so, they're forming a kind of daisy chain.
(the same is done for lots of other procs)

While that approach is looking nice and elegant on the drawing board, it's
complicated, dangerous like a chainsaw and makes debugging hard, leading to
pretty blurred API borders.

This commit introduces a simple approach for letting extension hook into the
window positioning path safely, w/o having to care much about side effects
with the call chain. Extensions now can simply register their hook proc
(and an opaque pointer) and get called back - w/o ever having to mess with
the ScreenRec's internal structures. These hooks are called before the original
vector (usually handled by DDX/screen driver directly) is called.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
7fbcf0d58a (!1714) dix: add per-screen window destructor hook
Right now, extension specific window destruction procedures are implemented
by wrapping the ScreenRec's DestroyWindow() proc pointer: the extensions are
storing the original pointer in their private data and putting in their own one.
On each call, their proc restores the original one, calls it, and switches back
again. When multiple extensions doing so, they're forming a kind of daisy chain.
(the same is done for lots of other procs)

While that approach is looking nice and elegant on the drawing board, it's
complicated, dangerous like a chainsaw and makes debugging hard, leading to
pretty blurred API borders.

This commit introduces a simple approach for letting extension hook into the
window destruction safely, w/o having to care much about side effects with
the call chain. Extensions now can simply register their destructor proc
(and an opaque pointer) and get called back - w/o ever having to mess with
the ScreenRec's internal structures.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
4420e80f65 (!1799) xkb: unexport XkbCopyControls()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
0a25c20375 (!1799) xkb: unexport XkbDeviceApplyKeymap()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
c61e4ae089 (!1799) xkb: unexport XkbSendNewKeyboardNotify()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
5de69649de (!1799) xkb: unexport XkbApplyVirtualModChanges()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
6293c10f57 (!1799) xkb: unexport XkbApplyCompatMapToKey()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
169cbb84e4 (!1799) xkb: unexport XkbKeyTypesForCoreSymbols()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
14b17a7fde (!1799) xkb: unexport XkbChangeTypesOfKey()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
52f181fae7 (!1799) xkb: unexport XkbFreeInfo()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
2f18c683f9 (!1799) xkb: unexport XkbChangeKeycodeRange()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
960bce8029 (!1799) xkb: unexport XkbConvertCase()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
7c5bc6e862 (!1799) xkb: unexport XkbLookupNamedGeometry()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
fdc36b90f3 (!1799) xkb: unexport XkbDisableComputedAutoRepeats()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
cf3846e218 (!1799) xkb: unexport XkbEnableDisableControls()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
2622792720 (!1799) xkb: unexport XkbProcessKeyboardEvent()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
fc26919b13 (!1799) xkb: unexport XkbHandleActions()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
ecb95ee968 (!1799) xkb: unexport XkbHandleBell()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
e587a7d139 (!1799) xkb: unexport XkbStateChangedFlags()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
248c8e3584 (!1799) xkb: unexport XkbCheckIndicatorMaps()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
4d32acf7c3 (!1799) xkb: unexport XkbCheckSecondaryEffects()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
2d4acb7118 (!1799) xkb: unexport XkbComputeDerivedState()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
d8f661b11c (!1799) xkb: unexport XkbIndicatorsToUpdate()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
b044e0fba5 (!1799) xkb: unexport XkbUpdateAllDeviceIndicators()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
4e9a3fa195 (!1799) xkb: unexport XkbUpdateIndicators()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
c3151e9fb2 (!1799) xkb: unexport XkbSetIndicators()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
29bfd34cde (!1799) xkb: unexport XkbUpdateActions()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
4fe259c797 (!1799) xkb: unexport XkbUpdateDescActions()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
16d784396b (!1799) xkb: unexport XkbResizeKeyActions()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:14 +01:00
Enrico Weigelt, metux IT consult
f57f2d5a56 (!1799) xkb: unexport XkbResizeKeySyms()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
cbe7a9792b (!1799) xkb: unexport XkbAdjustGroup()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
aafcec7f3b (!1799) xkb: unexport XkbVirtualModsToReal()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
6ee84eed45 (!1799) xkb: unexport XkbMaskForVMask()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
03dff4f013 (!1799) xkb: unexport XkbSetActionKeyMods()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
1093143fb1 (!1799) xkb: unexport XkbFreeComponentNames()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
659eafd6c3 (!1799) xkb: unexport XkbResizeKeyType()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
d877b423f4 (!1799) xkb: unexport XkbCopyKeyTypes()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
ae424242d8 (!1799) xkb: unexport XkbAllocControls()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
fe06b192d8 (!1799) xkb: unexport XkbAllocNames()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
9d02c7dfe5 (!1799) xkb: unexport XkbAllocCompatMap()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
c6e29c3022 (!1799) xkb: unexport XkbAllocIndicatorMaps()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
5ce5932938 (!1799) xkb: unexport XkbAllocKeyboard()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
48ad383827 (!1799) xkb: unexport XkbFreeNames()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
457cc04d99 (!1799) xkb: unexport XkbFreeCompatMap()
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
35ded05c13 (!1799) xkb: unexport XkbSetExtension
Not used by any drivers, so no need to keep it exported.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00
Enrico Weigelt, metux IT consult
d48e90c650 (!1799) xkb: unexport XkbInitPrivates()
This isn't supposed to be called by drivers, so unexport it.

Signed-off-by: Enrico Weigelt, metux IT consult <info@metux.net>
2026-02-02 17:35:13 +01:00