Update to xserver 1.19.6. bug fix release
This commit is contained in:
parent
b406e94aae
commit
857585fc69
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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_ */
|
||||
|
@ -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;
|
||||
|
@ -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
30
xserver/configure
vendored
@ -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\\"
|
||||
|
||||
|
@ -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])
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -39,7 +39,11 @@
|
||||
|
||||
typedef struct __GLXconfig __GLXconfig;
|
||||
struct __GLXconfig {
|
||||
/* Management */
|
||||
__GLXconfig *next;
|
||||
#ifdef COMPOSITE
|
||||
GLboolean duplicatedForComp;
|
||||
#endif
|
||||
GLuint doubleBufferMode;
|
||||
GLuint stereoMode;
|
||||
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
@ -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();
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
@ -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++)
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user