Update to xserver 1.19.6. bug fix release

This commit is contained in:
matthieu 2018-02-18 17:16:37 +00:00
parent b406e94aae
commit 857585fc69
33 changed files with 714 additions and 133 deletions

View File

@ -1,3 +1,484 @@
commit ebfb06b11955a6c32500b7086be912ab96b753a7
Author: Adam Jackson <ajax@redhat.com>
Date: Wed Dec 20 14:23:57 2017 -0500
xserver 1.19.6
Signed-off-by: Adam Jackson <ajax@redhat.com>
commit 91c42093b248fc61a23cd1f48fec451fa29e122c
Author: Thomas Hellstrom <thellstrom@vmware.com>
Date: Tue Sep 26 17:28:12 2017 -0700
glx: Duplicate relevant fbconfigs for compositing visuals
Previously, before GLX_OML_swap_method was fixed, both the X server and
client ignored the swapMethod fbconfig value, which meant that, if the dri
driver thought it exposed more than one swapMethod, it actually just
exported a duplicated set of fbconfigs. When fixing GLX_OML_swap_method
and restricting the choice for built-in visuals to a single swap method
that meant we didn't have that many fbconfigs to choose from when pairing
the compositing visual with an fbconfig, resulting in the fbconfig paired
with the compositing visual becoming too restrictive for some applications,
(at least for kwin). This problem would also happen if the dri driver
only exposed a single swap method to begin with.
So, to make sure the compositing visual gets a good enough fbconfig,
duplicate fbconfigs that are suitable for compositing visuals and make
sure these duplicated fbconfigs can be used only by compositing visuals.
For duplicated fbconfigs not paired with a compositing visual, construct
new compositing visuals, making compositing clients able to choose visuals
/ fbconfig more adapted to their needs.
This is in some sense equivalent to adding a new "TRUECOLOR_COMPOSITING"
GLX visualtype.
Fixes: 4486d199bd3b ("glx: Fix visual fbconfig matching with respect to
swap method")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=102806
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Tested-By: Nick Sarnie <commendsarnex@gmail.com>
Tested-by: Fredrik Höglund <fredrik@kde.org>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit f84e59a4f474d22860bac8aec2947798a86db69b)
commit 22b0880df680aee95e21bb8f93d6dd7d3434c681
Author: Thomas Hellstrom <thellstrom@vmware.com>
Date: Wed Sep 6 16:27:54 2017 +0200
glx: Fix visual fbconfig matching with respect to swap method
For the built in visuals, we'd typically select the "best" fbconfig
without considering the swap method. If the client then requests a
specific swap method, say GLX_SWAP_COPY_OML, it may well happen that the
first fbconfig matching requirements would have been paired with the 32-bit
compositing visual, and the client would render a potentially transparent
window.
Fix this so that we try to match fbconfigs with the same swap method to all
built-in visuals. That would guarantee that selecting a specific swap-
method would not influence the chance of getting a compositing visual.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 4486d199bd3bcb5b2b8ad9bc54eb11604d9bd653)
commit 1726badd61358e644b96f7c561ba239a68d87ba6
Author: Thomas Hellstrom <thellstrom@vmware.com>
Date: Wed Sep 6 16:27:53 2017 +0200
glx: Work around a GLX_OML swap method in older dri drivers
The swapMethod config member would typically contain an arbitrary value
on older dri drivers. Fix this so that if we detect an illegal value,
return GLX_SWAP_UNDEFINED_OML.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 0fc26310d5b09213c65f50bde444a1758172b016)
commit c64bd21d7a732b6b8de0f8f636e93b1d1bb46135
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Jan 19 17:20:49 2017 -0500
glx: Move Composite's synthetic visuals to a different select group
Should you find yourself using a 16bpp display while also using a
compositor, you poor soul, you may find that your GLX applications
behave strangely; in particular, glxgears will be transparent. This is
because it clears to (0,0,0,0) which is transparent if you honor alpha,
and it will choose the synthetic visual because it has the most
available r/g/b bits.
To avoid this, bump synthetic visuals to a higher (less-preferred)
select group. Unless the client explicitly asks for non-zero alpha bits,
this will prefer any rgb565 visual ahead of the argb8888 visual.
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit ea483af99a6351323afe00a0b630cd63310efdb1)
commit 4c64b20a629287472908ae82a05844feed209dd9
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Jan 19 17:20:49 2017 -0500
glx: Send GLX_VISUAL_SELECT_GROUP_SGIX attribute for visuals
We already send this for fbconfigs. Mesa happens to implement
glXChooseVisual relative to the fbconfig data, but that might not be
true of NVIDIA's libGL.
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 43efaa6e4fd903229dc9c508da4177ad4bbdd4d8)
commit 0a73e7bf10d5a9373be5f057fd583c8a5e8e511f
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Jul 27 16:02:28 2017 -0400
composite: Make compIsAlternateVisual safe even if Composite is off
As of ea483af9 we're calling this unconditionally from the GLX code so
the synthetic visual is in a lower select group. If Composite has been
disabled then GetCompScreen() will return NULL, and this would crash.
Rather than force the caller to check first, just always return FALSE if
Composite is disabled (which is correct, since none of the visuals will
be synthetic in that case).
Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Aaron Plattner <aplattner@nvidia.com>
(cherry picked from commit f80119120c487581ac050ce741808f7c8f438f35)
commit 06d1c83d04a53f506ae3c8c3c86df5ae779b9ca9
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Jan 19 17:20:49 2017 -0500
composite: Export compIsAlternateVisual
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit ef2345aaa28461a76f77c65240ce5facc180f98e)
commit c70d8e5585ddcd3c9f5b4adac15eca1f9178d3c5
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Jan 19 17:20:49 2017 -0500
composite: Remove a misleading comment
This comment is above compIsAlternateVisual, which used to be the only
thing determining whether implicit redirect was needed. It's not anymore
due to the redirection exception list. That job is now performed by
compImplicitRedirect, whose code is self-explanitory.
Reviewed-by: Eric Anholt <eric@anholt.net>
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit bccbaf7c113b1300071601879002682ebbe8b1c1)
commit dbf97534de61539873717b8e0fcc03f1be6362f8
Author: Tomasz Śniatowski <kailoran@gmail.com>
Date: Wed Dec 6 12:16:17 2017 +0100
os: Fix strtok/free crash in ComputeLocalClient
Don't reuse cmd for strtok output to ensure the proper pointer is
freed afterwards.
The code incorrectly assumed the pointer returned by strtok(cmd, ":")
would always point to cmd. However, strtok(str, sep) != str if str
begins with sep. This caused an invalid-free crash when running
a program under X with a name beginning with a colon.
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=104123
Signed-off-by: Tomasz Śniatowski <kailoran@gmail.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit 6883ae43eb72fe4e2651c1dca209563323fad2db)
commit 072dff82817bc02bb4bdb2dad594e6090586bf58
Author: Olivier Fourdan <ofourdan@redhat.com>
Date: Tue Dec 5 09:59:06 2017 +0100
dix: avoid deferencing NULL PtrCtrl
PtrCtrl really makes sense for relative pointing device only, absolute
devices such as touch devices do not have any PtrCtrl set.
In some cases, if the client issues a XGetPointerControl() immediatlely
after a ChangeMasterDeviceClasses() copied the touch device to the VCP,
a NULL pointer dereference will occur leading to a crash of Xwayland.
Check whether the PtrCtrl is not NULL in ProcGetPointerControl() and
return the default control values otherwise, to avoid the NULL pointer
dereference.
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1519533
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
(cherry picked from commit 9f7a9be13d6449c00c86d3035374f4f543654b3f)
commit f9a55653721980e3921083015ffb39f777606828
Author: Olivier Fourdan <ofourdan@redhat.com>
Date: Wed Sep 27 18:01:01 2017 +0200
xwayland: Fix non-argb cursor conversion
From the bug: "What happens if bits->width is less than 8? :)"
Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=103012
Signed-off-by: Olivier Fourdan <ofourdan@redhat.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
(cherry picked from commit 97ac59b1ed3624f7c04e54dd3e3dadfa46a8f170)
commit b832dac751f81d803d33df7c4dd929f77a69c7b0
Author: Adam Jackson <ajax@redhat.com>
Date: Tue Nov 14 15:15:01 2017 -0500
glx: Fix glXQueryContext for GLX_FBCONFIG_ID and GLX_RENDER_TYPE (v2)
Just never filled in, oops. Seems to have gone unnoticed because
normally glXQueryContext simply returns the values filled in by the
client library when the context was created. The only path by which you
normally get to a GLXQueryContext request is glXImportContext, and then
only if the context is already indirect.
However, that's a statement about Mesa's libGL (and anything else that
inherited that bit of the SGI SI more or less intact). Nothing prevents
a mischeivous client from issuing that request of a direct context, and
if they did we'd be in trouble because we never bothered to preserve the
associated fbconfig in the context state, so we'd crash looking up
GLX_VISUAL_ID_EXT. So let's fix that too.
v2: Fixed missing preservation of the config in DRI2 (Eric Anholt)
Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
(cherry picked from commit 5d667df6ea1634191a26f9a7c26bc883701d62b0)
commit ee64427c6c5b22514b4d427fb9cee11b8239baea
Author: Daniel Martin <consume.noise@gmail.com>
Date: Mon Nov 20 10:47:38 2017 +0100
os/xdmcp: Honour -once when session is dead
Terminate a dead session when -once was passed. Don't restart it.
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Walter Harms <wharms@bfs.de>
(cherry picked from commit 918afeecbc63d70413e222efdb2ac4cfb16eae9e)
commit 5c00e693631475679c1c2504e03177652ec7de28
Author: Michel Dänzer <michel.daenzer@amd.com>
Date: Mon Oct 2 11:33:43 2017 +0200
present: Only send PresentCompleteNotify events to the presenting client
We were sending the events to all clients listening for them on the
window. But clients can get confused by events from another client, and
I can't imagine any case where receiving events from other clients would
be required.
v2:
* Also restrict events sent to additional windows to the presenting
client
* Don't shorten line lengths
Reviewed-by: Keith Packard <keithp@keithp.com>
(cherry picked from commit 559954aaa8d811a22cf918cc16a7d618e12201a0)
commit a4bd27bdc8e3569ffa67c1105a2e5cdf0f3de683
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Thu Nov 9 10:21:19 2017 +0100
randr: rrGetScreenResources: initialize memory
Similarly to bb766ef11227bd8c71ac65845d1930edd0eda40d, ensure that the
extra padding is set to 0.
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
(cherry picked from commit fb5ee77b91a93e27801006be8ee34d27984e7fa6)
commit ece2e82ebf597ffda44b4753aa5cb7f5e1d97480
Author: Adam Jackson <ajax@redhat.com>
Date: Tue Nov 14 15:59:35 2017 -0500
glx: Only flush indirect contexts in MakeCurrent (v2)
If the context is direct none of the GL commands were issued by this
process, the server couldn't flush them even if it wanted to.
v2: Fix embarassingly obvious boolean inversion (Michel Dänzer)
Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit 307c124d6bcfe26057767b2c0990dc9ac66b9c93)
commit d1a2a2757977bf2f241fd254be821bf96910b587
Author: Hector Martin <marcan@marcan.st>
Date: Wed Nov 15 03:12:31 2017 +0900
edid: fix off-by-one error in CEA mode numbering
The CEA extension short video descriptors contain the VIC, which starts
at 1, not 0.
Reviewed-by: Adam Jackson <ajax@redhat.com>
Signed-off-by: Hector Martin <marcan@marcan.st>
(cherry picked from commit 68556d74b49e99d3490166c446079f7d5de26ca4)
commit b3fa60edc412e4c52bc6fa0346217eed0ebc98e3
Author: Adam Jackson <ajax@redhat.com>
Date: Mon Nov 6 16:07:41 2017 -0500
glx: Fix typos that break GLX_ARB_context_flush_control
The trailing \n are just wrong here, __glXEnableExtension wants a string
without them.
Signed-off-by: Adam Jackson <ajax@redhat.com>
Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
(cherry picked from commit fd0eafb18426da14601d5c0d0a50092c49a7aff8)
commit c010bcb8c36b2ca0bba1b80c9bde63ff89e42ed4
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Nov 4 23:06:29 2017 +0100
randr: ProcRRGetOutputInfo: initialize memory
Running Xephyr under valgrind reveals that we're sending some
uninitialized memory over the wire (particularly, the leftover padding
that comes from rounding extraLen to the next 32-bit multiple).
Solve by calloc()ing the memory instead of malloc()ing (the alternative
would be to memset just the padding, but I'm not sure it's more
convenient.)
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit bb766ef11227bd8c71ac65845d1930edd0eda40d)
commit c328570644e3b4dfaf840d057883a4db31976da7
Author: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
Date: Sat Nov 4 23:06:27 2017 +0100
xkb: initialize tsyms
This fixes some “Conditional jump depends on uninitialized value(s)”
errors spotted by valgrind.
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
Signed-off-by: Giuseppe Bilotta <giuseppe.bilotta@gmail.com>
(cherry picked from commit b2167015043a458e9cf93b827b43eb5b7c552ce9)
commit c39de5f7358634eb2fea66041e3a3465e8cf6e13
Author: Eric Anholt <eric@anholt.net>
Date: Tue Oct 31 12:22:31 2017 -0700
xkb: Print the xkbcomp path being executed when we fail to compile.
I don't know how many times I've had a broken server due to a bad
directory to xkbcomp, and only finding the whole path has shown me
where I went wrong.
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 30f4d440ebc3517fdcc1d3c6a422a8fbf3af1f23)
commit 5a5b6d6cca469521daa6ac9087f3589b7489ab55
Author: Peter Hutterer <peter.hutterer@who-t.net>
Date: Tue Sep 26 15:21:59 2017 +1000
config/udev: consider ID_INPUT_FOO=0 as 'unset'
Historically we didn't need to care about this case but more devices are
having invalid types set and they cannot be unset with a hwdb entry (which
doesn't handle the empty string). Allow for "0" to mean "unset" because
anything else would be crazy anyway.
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
(cherry picked from commit 5aad81445c8c3d6b7b30d503cfe26027fa482870)
commit 8817747c8587d75c14e00069e8f26e3edb671013
Author: Daniel Martin <consume.noise@gmail.com>
Date: Fri Oct 27 16:11:55 2017 +0200
test: signal-logging: Fix looping signed number tests
unsigned_tests[] was used to compute the amount of signed numbers to
test.
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
(cherry picked from commit 15a32ee5d1fffa171bb05af9a0e5b472e4af1488)
commit e663998fa8bb77bb753abed1e0c12922d4ce1669
Author: Daniel Martin <consume.noise@gmail.com>
Date: Fri Oct 27 16:11:54 2017 +0200
test: input: Fix used uninitialized warning in dix_event_to_core
input.c: In function dix_event_to_core:
../include/inputstr.h:61:55: warning: *((void *)&ev+80) is used uninitialized in this function [-Wuninitialized]
#define SetBit(ptr, bit) (((BYTE *) (ptr))[(bit)>>3] |= (1 << ((bit) & 7)))
^~
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
(cherry picked from commit 0bcc65f2bf479c6a74ac70bb5b5181d6834dded6)
commit e8530b872aa4b1648bba7fb3dddaf9abf70100ed
Author: Daniel Martin <consume.noise@gmail.com>
Date: Fri Oct 27 16:11:53 2017 +0200
modesetting: Fix potential buffer overflow
If one misconfigures a ZaphodHeads value (more than 20 characters
without a delimiter), we get an overflow of our buffer. Use
xstrtokenize() instead of writing/fixing our own tokenizer.
Signed-off-by: Daniel Martin <consume.noise@gmail.com>
Reviewed-by: Eric Engestrom <eric.engestrom@imgtec.com>
(cherry picked from commit 04a305121fbc08ecc2ef345ee7155d6087a43fd1)
commit 4ef1aef0fbbf47c937cf421f0180cc18fc23a03e
Author: Alex Goins <agoins@nvidia.com>
Date: Tue Oct 24 18:39:13 2017 -0700
ramdac: Check ScreenPriv != NULL in xf86ScreenSetCursor()
Similar to change cba5a10f, xf86ScreenSetCursor() would dereference ScreenPriv
without NULL checking it. If Option "SWCursor" is specified, ScreenPriv == NULL.
Without this fix, it is observed that setting Option "SWCursor" "on" on the
modesetting driver in a PRIME configuration will segfault the server.
It is important to return success rather than failure in the instance that
ScreenPriv == NULL and pCurs == NullCursor, because otherwise xf86SetCursor()
can fall into infinite recursion: xf86SetCursor(pCurs) calls
xf86ScreenSetCursor(pCurs), and if FALSE, calls xf86SetCursor(NullCursor). If
xf86ScreenSetCursor(NullCursor) returns FALSE, it calls
xf86SetCursor(NullCursor) again and this repeats forever.
Signed-off-by: Alex Goins <agoins@nvidia.com>
Reviewed-by: Dave Airlie <airlied@redhat.com>
(cherry picked from commit 68d95e759f8b6ebca6bd52e69e6bc34cc174f8ca)
commit cd5076a50c0274512bd2ce2c8ecf56c3517d0266
Author: Nikolay Martynov <mar.kolya@gmail.com>
Date: Wed Sep 13 23:23:13 2017 -0400
XShmGetImage: fix censoring
It looks like offsets calculated during image censoring are wrong.
This results in black (empty) images returns.
This fix is very similar to 6c6f09aac7f1d1367a042087b7681c7fdf1d1e0f
that was applied to XGetImage
Visually this fixes chromium/firefox window sharing in multiscreen
configurations - without this patch most of the windows on 'secodnary'
screens are black.
This also should fix https://bugs.freedesktop.org/show_bug.cgi?id=101730.
Signed-off-by: Nikolay Martynov <mar.kolya@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit 885636b7d42b3c7b151fc386d358184db004ce45)
commit a6776111b24f7211c08c7497466f5d9351d0756c
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Jun 8 16:23:12 2017 -0400
xfixes: Remove the CursorCurrent array
We're not wrapping all the ways a cursor can be destroyed, so this array
ends up with stale data. Rather than try harder to wrap more code paths,
just look up the cursor when we need it.
Signed-off-by: Adam Jackson <ajax@redhat.com>
(cherry picked from commit aa6651f83c698e8cc40de61aad36c73ca7a6adcf)
commit b96e982e3a43513549636850186ff80a82190f64
Author: Adam Jackson <ajax@redhat.com>
Date: Thu Oct 12 12:32:31 2017 -0400

View File

@ -650,9 +650,8 @@ ProcShmGetImage(ClientPtr client)
wBorderWidth((WindowPtr) pDraw) + (int) pDraw->height)
return BadMatch;
visual = wVisual(((WindowPtr) pDraw));
pVisibleRegion = NotClippedByChildren((WindowPtr) pDraw);
if (pVisibleRegion)
RegionTranslate(pVisibleRegion, -pDraw->x, -pDraw->y);
if (pDraw->type == DRAWABLE_WINDOW)
pVisibleRegion = &((WindowPtr) pDraw)->borderClip;
}
else {
if (stuff->x < 0 ||
@ -715,9 +714,6 @@ ProcShmGetImage(ClientPtr client)
}
}
if (pVisibleRegion)
RegionDestroy(pVisibleRegion);
if (client->swapped) {
swaps(&xgi.sequenceNumber);
swapl(&xgi.length);

View File

@ -39,6 +39,8 @@ extern _X_EXPORT Bool CompositeRegisterImplicitRedirectionException(ScreenPtr pS
VisualID parentVisual,
VisualID winVisual);
extern _X_EXPORT Bool compIsAlternateVisual(ScreenPtr pScreen, XID visual);
extern _X_EXPORT RESTYPE CompositeClientWindowType;
#endif /* _COMPOSITEEXT_H_ */

View File

@ -320,18 +320,13 @@ compClipNotify(WindowPtr pWin, int dx, int dy)
}
}
/*
* Returns TRUE if the window needs server-provided automatic redirect,
* which is true if the child and parent aren't both regular or ARGB visuals
*/
static Bool
Bool
compIsAlternateVisual(ScreenPtr pScreen, XID visual)
{
CompScreenPtr cs = GetCompScreen(pScreen);
int i;
for (i = 0; i < cs->numAlternateVisuals; i++)
for (i = 0; cs && i < cs->numAlternateVisuals; i++)
if (cs->alternateVisuals[i] == visual)
return TRUE;
return FALSE;

View File

@ -134,7 +134,8 @@ device_added(struct udev_device *udev_device)
}
#endif
if (!udev_device_get_property_value(udev_device, "ID_INPUT")) {
value = udev_device_get_property_value(udev_device, "ID_INPUT");
if (value && !strcmp(value, "0")) {
LogMessageVerb(X_INFO, 10,
"config/udev: ignoring device %s without "
"property ID_INPUT set\n", path);
@ -237,38 +238,36 @@ device_added(struct udev_device *udev_device)
else if (!strcmp(key, "ID_VENDOR")) {
LOG_PROPERTY(path, key, value);
attrs.vendor = strdup(value);
}
else if (!strcmp(key, "ID_INPUT_KEY")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_KEY;
}
else if (!strcmp(key, "ID_INPUT_KEYBOARD")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_KEYBOARD;
}
else if (!strcmp(key, "ID_INPUT_MOUSE")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_POINTER;
}
else if (!strcmp(key, "ID_INPUT_JOYSTICK")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_JOYSTICK;
}
else if (!strcmp(key, "ID_INPUT_TABLET")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TABLET;
}
else if (!strcmp(key, "ID_INPUT_TABLET_PAD")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TABLET_PAD;
}
else if (!strcmp(key, "ID_INPUT_TOUCHPAD")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TOUCHPAD;
}
else if (!strcmp(key, "ID_INPUT_TOUCHSCREEN")) {
LOG_PROPERTY(path, key, value);
attrs.flags |= ATTR_TOUCHSCREEN;
} else if (!strncmp(key, "ID_INPUT_", 9)) {
const struct pfmap {
const char *property;
unsigned int flag;
} map[] = {
{ "ID_INPUT_KEY", ATTR_KEY },
{ "ID_INPUT_KEYBOARD", ATTR_KEYBOARD },
{ "ID_INPUT_MOUSE", ATTR_POINTER },
{ "ID_INPUT_JOYSTICK", ATTR_JOYSTICK },
{ "ID_INPUT_TABLET", ATTR_TABLET },
{ "ID_INPUT_TABLET_PAD", ATTR_TABLET_PAD },
{ "ID_INPUT_TOUCHPAD", ATTR_TOUCHPAD },
{ "ID_INPUT_TOUCHSCREEN", ATTR_TOUCHSCREEN },
{ NULL, 0 },
};
/* Anything but the literal string "0" is considered a
* boolean true. The empty string isn't a thing with udev
* properties anyway */
if (value && strcmp(value, "0")) {
const struct pfmap *m = map;
while (m->property != NULL) {
if (!strcmp(m->property, key)) {
LOG_PROPERTY(path, key, value);
attrs.flags |= m->flag;
}
m++;
}
}
}
}

30
xserver/configure vendored
View File

@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for xorg-server 1.19.5.
# Generated by GNU Autoconf 2.69 for xorg-server 1.19.6.
#
# Report bugs to <https://bugs.freedesktop.org/enter_bug.cgi?product=xorg>.
#
@ -651,8 +651,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='xorg-server'
PACKAGE_TARNAME='xorg-server'
PACKAGE_VERSION='1.19.5'
PACKAGE_STRING='xorg-server 1.19.5'
PACKAGE_VERSION='1.19.6'
PACKAGE_STRING='xorg-server 1.19.6'
PACKAGE_BUGREPORT='https://bugs.freedesktop.org/enter_bug.cgi?product=xorg'
PACKAGE_URL=''
@ -2071,7 +2071,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
\`configure' configures xorg-server 1.19.5 to adapt to many kinds of systems.
\`configure' configures xorg-server 1.19.6 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@ -2141,7 +2141,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of xorg-server 1.19.5:";;
short | recursive ) echo "Configuration of xorg-server 1.19.6:";;
esac
cat <<\_ACEOF
@ -2342,10 +2342,10 @@ Optional Packages:
org.x)
--with-bundle-version=VERSION
Version to use for X11.app's CFBundleVersion
(default: 1.19.5)
(default: 1.19.6)
--with-bundle-version-string=VERSION
Version to use for X11.app's
CFBundleShortVersionString (default: 1.19.5)
CFBundleShortVersionString (default: 1.19.6)
--with-sparkle-feed-url=URL
URL for the Sparkle feed (default:
https://www.xquartz.org/releases/sparkle/release.xml)
@ -2600,7 +2600,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
xorg-server configure 1.19.5
xorg-server configure 1.19.6
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@ -3309,7 +3309,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
It was created by xorg-server $as_me 1.19.5, which was
It was created by xorg-server $as_me 1.19.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@ -3657,8 +3657,8 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
RELEASE_DATE="2017-10-12"
RELEASE_NAME="Shahi Paneer"
RELEASE_DATE="2017-12-20"
RELEASE_NAME="Lousiana Gumbo"
am__api_version='1.12'
@ -4137,7 +4137,7 @@ fi
# Define the identity of the package.
PACKAGE='xorg-server'
VERSION='1.19.5'
VERSION='1.19.6'
cat >>confdefs.h <<_ACEOF
@ -23161,7 +23161,7 @@ _ACEOF
if test "${with_bundle_version+set}" = set; then :
withval=$with_bundle_version; BUNDLE_VERSION="${withval}"
else
BUNDLE_VERSION="1.19.5"
BUNDLE_VERSION="1.19.6"
fi
@ -33262,7 +33262,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by xorg-server $as_me 1.19.5, which was
This file was extended by xorg-server $as_me 1.19.6, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@ -33328,7 +33328,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
xorg-server config.status 1.19.5
xorg-server config.status 1.19.6
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@ -26,9 +26,9 @@ dnl
dnl Process this file with autoconf to create configure.
AC_PREREQ(2.60)
AC_INIT([xorg-server], 1.19.5, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
RELEASE_DATE="2017-10-12"
RELEASE_NAME="Shahi Paneer"
AC_INIT([xorg-server], 1.19.6, [https://bugs.freedesktop.org/enter_bug.cgi?product=xorg], xorg-server)
RELEASE_DATE="2017-12-20"
RELEASE_NAME="Lousiana Gumbo"
AC_CONFIG_SRCDIR([Makefile.am])
AC_CONFIG_MACRO_DIR([m4])
AM_INIT_AUTOMAKE([foreign dist-bzip2])

View File

@ -2329,10 +2329,15 @@ int
ProcGetPointerControl(ClientPtr client)
{
DeviceIntPtr ptr = PickPointer(client);
PtrCtrl *ctrl = &ptr->ptrfeed->ctrl;
PtrCtrl *ctrl;
xGetPointerControlReply rep;
int rc;
if (ptr->ptrfeed)
ctrl = &ptr->ptrfeed->ctrl;
else
ctrl = &defaultPointerControl;
REQUEST_SIZE_MATCH(xReq);
rc = XaceHook(XACE_DEVICE_ACCESS, client, ptr, DixGetAttrAccess);

View File

@ -215,6 +215,7 @@ __glXdirectContextCreate(__GLXscreen * screen,
if (context == NULL)
return NULL;
context->config = modes;
context->destroy = __glXdirectContextDestroy;
context->loseCurrent = __glXdirectContextLoseCurrent;
@ -631,7 +632,7 @@ DoMakeCurrent(__GLXclientState * cl,
/*
** Flush the previous context if needed.
*/
Bool need_flush = GL_TRUE;
Bool need_flush = !prevglxc->isDirect;
#ifdef GLX_CONTEXT_RELEASE_BEHAVIOR_ARB
if (prevglxc->releaseBehavior == GLX_CONTEXT_RELEASE_BEHAVIOR_NONE_ARB)
need_flush = GL_FALSE;
@ -1030,13 +1031,14 @@ __glXDisp_GetVisualConfigs(__GLXclientState * cl, GLbyte * pc)
buf[p++] = modes->samples;
buf[p++] = GLX_SAMPLE_BUFFERS_SGIS;
buf[p++] = modes->sampleBuffers;
buf[p++] = GLX_VISUAL_SELECT_GROUP_SGIX;
buf[p++] = modes->visualSelectGroup;
/* Add attribute only if its value is not default. */
if (modes->sRGBCapable != GL_FALSE) {
buf[p++] = GLX_FRAMEBUFFER_SRGB_CAPABLE_EXT;
buf[p++] = modes->sRGBCapable;
}
/* Don't add visualSelectGroup (GLX_VISUAL_SELECT_GROUP_SGIX)?
* Pad the remaining place with zeroes, so that attributes count is constant. */
/* Pad with zeroes, so that attributes count is constant. */
while (p < GLX_VIS_CONFIG_TOTAL) {
buf[p++] = 0;
buf[p++] = 0;
@ -1720,7 +1722,7 @@ DoQueryContext(__GLXclientState * cl, GLXContextID gcId)
ClientPtr client = cl->client;
__GLXcontext *ctx;
xGLXQueryContextInfoEXTReply reply;
int nProps = 3;
int nProps = 5;
int sendBuf[nProps * 2];
int nReplyBytes;
int err;
@ -1742,6 +1744,10 @@ DoQueryContext(__GLXclientState * cl, GLXContextID gcId)
sendBuf[3] = (int) (ctx->config->visualID);
sendBuf[4] = GLX_SCREEN_EXT;
sendBuf[5] = (int) (ctx->pGlxScreen->pScreen->myNum);
sendBuf[6] = GLX_FBCONFIG_ID;
sendBuf[7] = (int) (ctx->config->fbconfigID);
sendBuf[8] = GLX_RENDER_TYPE;
sendBuf[9] = (int) (ctx->config->renderType);
if (client->swapped) {
__glXSwapQueryContextInfoEXTReply(client, &reply, sendBuf);

View File

@ -557,6 +557,7 @@ __glXDRIscreenCreateContext(__GLXscreen * baseScreen,
return NULL;
}
context->base.config = glxConfig;
context->base.destroy = __glXDRIcontextDestroy;
context->base.makeCurrent = __glXDRIcontextMakeCurrent;
context->base.loseCurrent = __glXDRIcontextLoseCurrent;
@ -901,7 +902,7 @@ initializeExtensions(__GLXscreen * screen)
#ifdef __DRI2_FLUSH_CONTROL
if (strcmp(extensions[i]->name, __DRI2_FLUSH_CONTROL) == 0) {
__glXEnableExtension(screen->glx_enable_bits,
"GLX_ARB_context_flush_control\n");
"GLX_ARB_context_flush_control");
}
#endif

View File

@ -139,13 +139,15 @@ render_type_is_pbuffer_only(unsigned renderType)
static __GLXconfig *
createModeFromConfig(const __DRIcoreExtension * core,
const __DRIconfig * driConfig,
unsigned int visualType)
unsigned int visualType,
GLboolean duplicateForComp)
{
__GLXDRIconfig *config;
GLint renderType = 0;
unsigned int attrib, value, drawableType = GLX_PBUFFER_BIT;
int i;
config = calloc(1, sizeof *config);
config->driConfig = driConfig;
@ -181,6 +183,13 @@ createModeFromConfig(const __DRIcoreExtension * core,
config->config.bindToTextureTargets |=
GLX_TEXTURE_RECTANGLE_BIT_EXT;
break;
case __DRI_ATTRIB_SWAP_METHOD:
/* Workaround for broken dri drivers */
if (value != GLX_SWAP_UNDEFINED_OML &&
value != GLX_SWAP_COPY_OML &&
value != GLX_SWAP_EXCHANGE_OML)
value = GLX_SWAP_UNDEFINED_OML;
/* Fall through. */
default:
setScalar(&config->config, attrib, value);
break;
@ -196,6 +205,28 @@ createModeFromConfig(const __DRIcoreExtension * core,
config->config.drawableType = drawableType;
config->config.yInverted = GL_TRUE;
#ifdef COMPOSITE
/*
* Here we decide what fbconfigs will be duplicated for compositing.
* fgbconfigs marked with duplicatedForConf will be reserved for
* compositing visuals.
* It might look strange to do this decision this late when translation
* from a __DRIConfig is already done, but using the __DRIConfig
* accessor function becomes worse both with respect to code complexity
* and CPU usage.
*/
if (duplicateForComp &&
(render_type_is_pbuffer_only(renderType) ||
config->config.rgbBits != 32 ||
config->config.visualRating != GLX_NONE ||
config->config.sampleBuffers != 0)) {
free(config);
return NULL;
}
config->config.duplicatedForComp = duplicateForComp;
#endif
return &config->config;
}
@ -210,21 +241,34 @@ glxConvertConfigs(const __DRIcoreExtension * core,
head.next = NULL;
for (i = 0; configs[i]; i++) {
tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR);
tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR,
GL_FALSE);
if (tail->next == NULL)
break;
tail = tail->next;
}
for (i = 0; configs[i]; i++) {
tail->next = createModeFromConfig(core, configs[i], GLX_DIRECT_COLOR);
tail->next = createModeFromConfig(core, configs[i], GLX_DIRECT_COLOR,
GL_FALSE);
if (tail->next == NULL)
break;
tail = tail->next;
}
#ifdef COMPOSITE
/* Duplicate fbconfigs for use with compositing visuals */
for (i = 0; configs[i]; i++) {
tail->next = createModeFromConfig(core, configs[i], GLX_TRUE_COLOR,
GL_TRUE);
if (tail->next == NULL)
continue;
tail = tail->next;
}
#endif
return head.next;
}

View File

@ -244,6 +244,7 @@ __glXDRIscreenCreateContext(__GLXscreen * baseScreen,
if (context == NULL)
return NULL;
context->base.config = glxConfig;
context->base.destroy = __glXDRIcontextDestroy;
context->base.makeCurrent = __glXDRIcontextMakeCurrent;
context->base.loseCurrent = __glXDRIcontextLoseCurrent;
@ -413,7 +414,7 @@ initializeExtensions(__GLXscreen * screen)
#ifdef __DRI2_FLUSH_CONTROL
if (strcmp(extensions[i]->name, __DRI2_FLUSH_CONTROL) == 0) {
__glXEnableExtension(screen->glx_enable_bits,
"GLX_ARB_context_flush_control\n");
"GLX_ARB_context_flush_control");
}
#endif

View File

@ -43,6 +43,7 @@
#include "glxutil.h"
#include "glxext.h"
#include "protocol-versions.h"
#include "compositeext.h"
static DevPrivateKeyRec glxScreenPrivateKeyRec;
@ -277,7 +278,21 @@ pickFBConfig(__GLXscreen * pGlxScreen, VisualPtr visual)
/* Can't use the same FBconfig for multiple X visuals. I think. */
if (config->visualID != 0)
continue;
#ifdef COMPOSITE
/* Use only duplicated configs for compIsAlternateVisuals */
if (!!compIsAlternateVisual(pGlxScreen->pScreen, visual->vid) !=
!!config->duplicatedForComp)
continue;
#endif
/*
* If possible, use the same swapmethod for all built-in visual
* fbconfigs, to avoid getting the 32-bit composite visual when
* requesting, for example, a SWAP_COPY fbconfig.
*/
if (config->swapMethod == GLX_SWAP_UNDEFINED_OML)
score += 32;
if (config->swapMethod == GLX_SWAP_EXCHANGE_OML)
score += 16;
if (config->doubleBufferMode > 0)
score += 8;
if (config->depthBits > 0)
@ -336,6 +351,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen, ScreenPtr pScreen)
if (config) {
pGlxScreen->visuals[pGlxScreen->numVisuals++] = config;
config->visualID = visual->vid;
#ifdef COMPOSITE
if (compIsAlternateVisual(pScreen, visual->vid))
config->visualSelectGroup++;
#endif
}
}
@ -355,7 +374,12 @@ __glXScreenInit(__GLXscreen * pGlxScreen, ScreenPtr pScreen)
* set up above is for.
*/
depth = config->redBits + config->greenBits + config->blueBits;
#ifdef COMPOSITE
if (config->duplicatedForComp) {
depth += config->alphaBits;
config->visualSelectGroup++;
}
#endif
/* Make sure that our FBconfig's depth can actually be displayed
* (corresponds to an existing visual).
*/
@ -378,6 +402,10 @@ __glXScreenInit(__GLXscreen * pGlxScreen, ScreenPtr pScreen)
if (visual == NULL)
continue;
#ifdef COMPOSITE
if (config->duplicatedForComp)
(void) CompositeRegisterAlternateVisuals(pScreen, &visual->vid, 1);
#endif
pGlxScreen->visuals[pGlxScreen->numVisuals++] = config;
initGlxVisual(visual, config);
}

View File

@ -39,7 +39,11 @@
typedef struct __GLXconfig __GLXconfig;
struct __GLXconfig {
/* Management */
__GLXconfig *next;
#ifdef COMPOSITE
GLboolean duplicatedForComp;
#endif
GLuint doubleBufferMode;
GLuint stereoMode;

View File

@ -60,34 +60,22 @@ static PixmapPtr drmmode_create_pixmap_header(ScreenPtr pScreen, int width, int
static Bool
drmmode_zaphod_string_matches(ScrnInfoPtr scrn, const char *s, char *output_name)
{
int i = 0;
char s1[20];
char **token = xstrtokenize(s, ", \t\n\r");
Bool ret = FALSE;
do {
switch(*s) {
case ',':
s1[i] = '\0';
i = 0;
if (strcmp(s1, output_name) == 0)
return TRUE;
break;
case ' ':
case '\t':
case '\n':
case '\r':
break;
default:
s1[i] = *s;
i++;
break;
}
} while(*s++);
if (!token)
return FALSE;
s1[i] = '\0';
if (strcmp(s1, output_name) == 0)
return TRUE;
for (int i = 0; token[i]; i++) {
if (strcmp(token[i], output_name) == 0)
ret = TRUE;
return FALSE;
free(token[i]);
}
free(token);
return ret;
}
int

View File

@ -976,8 +976,8 @@ handle_cea_svd(struct cea_video_block *video, void *data)
int vid;
vid = video->video_code & 0x7f;
if (vid < CEA_VIDEO_MODES_NUM) {
Mode = xf86DuplicateMode(CEAVideoModes + vid);
if (vid >= 1 && vid <= CEA_VIDEO_MODES_NUM) {
Mode = xf86DuplicateMode(CEAVideoModes + (vid - 1));
*Modes = xf86ModesAdd(*Modes, Mode);
}
}

View File

@ -180,9 +180,16 @@ xf86ScreenSetCursor(ScreenPtr pScreen, CursorPtr pCurs, int x, int y)
xf86CursorScreenPtr ScreenPriv =
(xf86CursorScreenPtr) dixLookupPrivate(&pScreen->devPrivates,
xf86CursorScreenKey);
xf86CursorInfoPtr infoPtr = ScreenPriv->CursorInfoPtr;
xf86CursorInfoPtr infoPtr;
unsigned char *bits;
if (!ScreenPriv) { /* NULL if Option "SWCursor" */
return (pCurs == NullCursor);
}
infoPtr = ScreenPriv->CursorInfoPtr;
if (pCurs == NullCursor) {
(*infoPtr->HideCursor) (infoPtr->pScrn);
return TRUE;

View File

@ -156,7 +156,7 @@ __glXAquaScreenCreateContext(__GLXscreen *screen,
memset(context, 0, sizeof *context);
context->base.pGlxScreen = screen;
context->base.config = conf;
context->base.destroy = __glXAquaContextDestroy;
context->base.makeCurrent = __glXAquaContextMakeCurrent;
context->base.loseCurrent = __glXAquaContextLoseCurrent;

View File

@ -42,7 +42,7 @@ expand_source_and_mask(CursorPtr cursor, CARD32 *data)
(cursor->foreGreen & 0xff00) | (cursor->foreGreen >> 8);
bg = ((cursor->backRed & 0xff00) << 8) |
(cursor->backGreen & 0xff00) | (cursor->backGreen >> 8);
stride = (bits->width / 8 + 3) & ~3;
stride = BitmapBytePad(bits->width);
for (y = 0; y < bits->height; y++)
for (x = 0; x < bits->width; x++) {
i = y * stride + x / 8;

View File

@ -248,7 +248,7 @@ padding_for_int32(const int bytes)
}
extern char **xstrtokenize(const char *str, const char *separators);
extern _X_EXPORT char **xstrtokenize(const char *str, const char *separators);
extern void FormatInt64(int64_t num, char *string);
extern void FormatUInt64(uint64_t num, char *string);
extern void FormatUInt64Hex(uint64_t num, char *string);

View File

@ -1137,12 +1137,12 @@ ComputeLocalClient(ClientPtr client)
/* Cut off any colon and whatever comes after it, see
* https://lists.freedesktop.org/archives/xorg-devel/2015-December/048164.html
*/
cmd = strtok(cmd, ":");
char *tok = strtok(cmd, ":");
#if !defined(WIN32) || defined(__CYGWIN__)
ret = strcmp(basename(cmd), "ssh") != 0;
ret = strcmp(basename(tok), "ssh") != 0;
#else
ret = strcmp(cmd, "ssh") != 0;
ret = strcmp(tok, "ssh") != 0;
#endif
free(cmd);

View File

@ -797,7 +797,7 @@ XdmcpDeadSession(const char *reason)
ErrorF("XDM: %s, declaring session dead\n", reason);
state = XDM_INIT_STATE;
isItTimeToYield = TRUE;
dispatchException |= DE_RESET;
dispatchException |= (OneSession ? DE_TERMINATE : DE_RESET);
TimerCancel(xdmcp_timer);
timeOutRtx = 0;
send_packet();

View File

@ -222,13 +222,13 @@ present_vblank_notify(present_vblank_ptr vblank, CARD8 kind, CARD8 mode, uint64_
int n;
if (vblank->window)
present_send_complete_notify(vblank->window, kind, mode, vblank->serial, ust, crtc_msc - vblank->msc_offset);
present_send_complete_notify(vblank->window, kind, mode, vblank->serial, ust, crtc_msc - vblank->msc_offset, vblank->client);
for (n = 0; n < vblank->num_notifies; n++) {
WindowPtr window = vblank->notifies[n].window;
CARD32 serial = vblank->notifies[n].serial;
if (window)
present_send_complete_notify(window, kind, mode, serial, ust, crtc_msc - vblank->msc_offset);
present_send_complete_notify(window, kind, mode, serial, ust, crtc_msc - vblank->msc_offset, vblank->client);
}
}
@ -788,6 +788,7 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
int
present_pixmap(WindowPtr window,
PixmapPtr pixmap,
ClientPtr client,
CARD32 serial,
RegionPtr valid,
RegionPtr update,
@ -898,6 +899,7 @@ present_pixmap(WindowPtr window,
xorg_list_append(&vblank->window_list, &window_priv->vblank);
xorg_list_init(&vblank->event_queue);
vblank->client = client;
vblank->screen = screen;
vblank->window = window;
vblank->pixmap = pixmap;
@ -1017,6 +1019,7 @@ present_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64
int
present_notify_msc(WindowPtr window,
ClientPtr client,
CARD32 serial,
uint64_t target_msc,
uint64_t divisor,
@ -1024,6 +1027,7 @@ present_notify_msc(WindowPtr window,
{
return present_pixmap(window,
NULL,
client,
serial,
NULL, NULL,
0, 0,

View File

@ -146,7 +146,7 @@ present_register_complete_notify(present_complete_notify_proc proc)
}
void
present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc)
present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc, ClientPtr client)
{
present_window_priv_ptr window_priv = present_window_priv(window);
@ -167,7 +167,8 @@ present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 se
present_event_ptr event;
for (event = window_priv->events; event; event = event->next) {
if (event->mask & PresentCompleteNotifyMask) {
if (event->mask & PresentCompleteNotifyMask &&
client == event->client) {
cn.eid = event->id;
WriteEventsToClient(event->client, 1, (xEvent *) &cn);
}

View File

@ -52,6 +52,7 @@ struct present_notify {
struct present_vblank {
struct xorg_list window_list;
struct xorg_list event_queue;
ClientPtr client;
ScreenPtr screen;
WindowPtr window;
PixmapPtr pixmap;
@ -155,6 +156,7 @@ present_get_window_priv(WindowPtr window, Bool create);
int
present_pixmap(WindowPtr window,
PixmapPtr pixmap,
ClientPtr client,
CARD32 serial,
RegionPtr valid,
RegionPtr update,
@ -172,6 +174,7 @@ present_pixmap(WindowPtr window,
int
present_notify_msc(WindowPtr window,
ClientPtr client,
CARD32 serial,
uint64_t target_msc,
uint64_t divisor,
@ -215,7 +218,7 @@ void
present_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling);
void
present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc);
present_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc, ClientPtr client);
void
present_send_idle_notify(WindowPtr window, CARD32 serial, PixmapPtr pixmap, present_fence_ptr idle_fence);

View File

@ -135,7 +135,7 @@ proc_present_pixmap(ClientPtr client)
return ret;
}
ret = present_pixmap(window, pixmap, stuff->serial, valid, update,
ret = present_pixmap(window, pixmap, client, stuff->serial, valid, update,
stuff->x_off, stuff->y_off, target_crtc,
wait_fence, idle_fence, stuff->options,
stuff->target_msc, stuff->divisor, stuff->remainder, notifies, nnotifies);
@ -171,7 +171,7 @@ proc_present_notify_msc(ClientPtr client)
}
}
return present_notify_msc(window, stuff->serial,
return present_notify_msc(window, client, stuff->serial,
stuff->target_msc, stuff->divisor, stuff->remainder);
}

View File

@ -459,7 +459,7 @@ ProcRRGetOutputInfo(ClientPtr client)
if (extraLen) {
rep.length += bytes_to_int32(extraLen);
extra = malloc(extraLen);
extra = calloc(1, extraLen);
if (!extra)
return BadAlloc;
}

View File

@ -558,7 +558,7 @@ rrGetScreenResources(ClientPtr client, Bool query)
extraLen = rep.length << 2;
if (extraLen) {
extra = malloc(extraLen);
extra = calloc(1, extraLen);
if (!extra) {
free(modes);
return BadAlloc;

View File

@ -228,7 +228,7 @@ dix_check_grab_values(void)
static void
dix_event_to_core(int type)
{
DeviceEvent ev;
DeviceEvent ev = {};
xEvent *core;
int time;
int x, y;

View File

@ -146,7 +146,7 @@ number_formatting(void)
for (i = 0; i < sizeof(unsigned_tests) / sizeof(unsigned_tests[0]); i++)
assert(check_number_format_test(unsigned_tests[i]));
for (i = 0; i < sizeof(unsigned_tests) / sizeof(signed_tests[0]); i++)
for (i = 0; i < sizeof(signed_tests) / sizeof(signed_tests[0]); i++)
assert(check_signed_number_format_test(signed_tests[i]));
for (i = 0; i < sizeof(float_tests) / sizeof(float_tests[0]); i++)

View File

@ -61,7 +61,6 @@
static RESTYPE CursorClientType;
static RESTYPE CursorHideCountType;
static RESTYPE CursorWindowType;
static CursorPtr CursorCurrent[MAXDEVICES];
static DevPrivateKeyRec CursorScreenPrivateKeyRec;
@ -132,10 +131,26 @@ typedef struct _CursorScreen {
Bool CursorVisible = FALSE;
Bool EnableCursor = TRUE;
static CursorPtr
CursorForDevice(DeviceIntPtr pDev)
{
if (pDev && pDev->spriteInfo && pDev->spriteInfo->sprite)
return pDev->spriteInfo->sprite->current;
return NULL;
}
static CursorPtr
CursorForClient(ClientPtr client)
{
return CursorForDevice(PickPointer(client));
}
static Bool
CursorDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
{
CursorScreenPtr cs = GetCursorScreen(pScreen);
CursorPtr pOldCursor = CursorForDevice(pDev);
Bool ret;
DisplayCursorProcPtr backupProc;
@ -150,11 +165,10 @@ CursorDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor)
ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor);
}
if (pCursor != CursorCurrent[pDev->id]) {
if (pCursor != pOldCursor) {
CursorEventPtr e;
UpdateCurrentTimeIf();
CursorCurrent[pDev->id] = pCursor;
for (e = cursorEvents; e; e = e->next) {
if ((e->eventMask & XFixesDisplayCursorNotifyMask)) {
xXFixesCursorNotifyEvent ev = {
@ -351,7 +365,7 @@ ProcXFixesGetCursorImage(ClientPtr client)
int npixels, width, height, rc, x, y;
REQUEST_SIZE_MATCH(xXFixesGetCursorImageReq);
pCursor = CursorCurrent[PickPointer(client)->id];
pCursor = CursorForClient(client);
if (!pCursor)
return BadCursor;
rc = XaceHook(XACE_RESOURCE_ACCESS, client, pCursor->id, RT_CURSOR,
@ -500,7 +514,7 @@ ProcXFixesGetCursorImageAndName(ClientPtr client)
int rc, x, y;
REQUEST_SIZE_MATCH(xXFixesGetCursorImageAndNameReq);
pCursor = CursorCurrent[PickPointer(client)->id];
pCursor = CursorForClient(client);
if (!pCursor)
return BadCursor;
rc = XaceHook(XACE_RESOURCE_ACCESS, client, pCursor->id, RT_CURSOR,
@ -874,7 +888,7 @@ ProcXFixesHideCursor(ClientPtr client)
for (dev = inputInfo.devices; dev; dev = dev->next) {
if (IsMaster(dev) && IsPointerDevice(dev))
CursorDisplayCursor(dev, pWin->drawable.pScreen,
CursorCurrent[dev->id]);
CursorForDevice(dev));
}
}
@ -969,7 +983,7 @@ CursorFreeHideCount(void *data, XID id)
deleteCursorHideCount(pChc, pChc->pScreen);
for (dev = inputInfo.devices; dev; dev = dev->next) {
if (IsMaster(dev) && IsPointerDevice(dev))
CursorDisplayCursor(dev, pScreen, CursorCurrent[dev->id]);
CursorDisplayCursor(dev, pScreen, CursorForDevice(dev));
}
return 1;

View File

@ -191,8 +191,10 @@ RunXkbComp(xkbcomp_buffer_callback callback, void *userdata)
#endif
return xnfstrdup(keymap);
}
else
LogMessage(X_ERROR, "Error compiling keymap (%s)\n", keymap);
else {
LogMessage(X_ERROR, "Error compiling keymap (%s) executing '%s'\n",
keymap, buf);
}
#ifdef WIN32
/* remove the temporary file */
unlink(tmpname);

View File

@ -222,7 +222,7 @@ XkbUpdateKeyTypesFromCore(DeviceIntPtr pXDev,
XkbDescPtr xkb;
unsigned key, nG, explicit;
int types[XkbNumKbdGroups];
KeySym tsyms[XkbMaxSymsPerKey], *syms;
KeySym tsyms[XkbMaxSymsPerKey] = {NoSymbol}, *syms;
XkbMapChangesPtr mc;
xkb = pXDev->key->xkbInfo->desc;