diff --git a/.gitignore b/.gitignore index ae892e8..29790d0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,36 +1,3 @@ -xorg-server-1.9.1.tar.bz2 -/xorg-server-20101125.tar.xz -/xorg-server-20101201.tar.xz -/xorg-server-1.10.0.tar.bz2 -/xorg-server-20110418.tar.xz -/xorg-server-20110510.tar.xz -/xorg-server-20110818.tar.xz -/xorg-server-1.11.0.tar.bz2 -/xorg-server-1.11.1.tar.bz2 -/xorg-server-20111109.tar.xz -/xorg-server-20120103.tar.xz -/xorg-server-20120124.tar.xz -/xorg-server-20120215.tar.xz -/xorg-server-1.12.0.tar.bz2 -/xorg-server-1.12.1.tar.bz2 -/xorg-server-1.12.2.tar.bz2 -/xorg-server-1.12.3.tar.bz2 -/xorg-server-20120717.tar.xz -/xorg-server-20120726.tar.xz -/xorg-server-20120808.tar.xz -/xorg-server-20120822.tar.xz -/xorg-server-1.13.0.tar.bz2 -/xorg-server-1.13.1.tar.bz2 -/xorg-server-20130109.tar.xz -/xorg-server-20130215.tar.xz -/xorg-server-1.14.0.tar.bz2 -/xorg-server-1.14.1.tar.bz2 -/xorg-server-1.14.1.901.tar.bz2 -/xorg-server-1.14.2.tar.bz2 -/xorg-server-1.14.3.tar.bz2 -/xorg-server-1.14.99.3.tar.bz2 -/xorg-server-1.14.99.901.tar.bz2 -/xorg-server-1.14.99.902.tar.bz2 *.bz2 *.xz -/xorg-x11-server-1.15.0-1.fc21.src.rpm +*.gz diff --git a/0001-autobind-GPUs-to-the-screen.patch b/0001-autobind-GPUs-to-the-screen.patch deleted file mode 100644 index 86b96a2..0000000 --- a/0001-autobind-GPUs-to-the-screen.patch +++ /dev/null @@ -1,293 +0,0 @@ -From 471289fa1dc359555ceed6302f7d9605ab6be3ea Mon Sep 17 00:00:00 2001 -From: Dave Airlie -Date: Mon, 2 Apr 2018 16:49:02 -0400 -Subject: [PATCH] autobind GPUs to the screen - -This is a modified version of a patch we've been carry-ing in Fedora and -RHEL for years now. This patch automatically adds secondary GPUs to the -master as output sink / offload source making e.g. the use of -slave-outputs just work, with requiring the user to manually run -"xrandr --setprovideroutputsource" before he can hookup an external -monitor to his hybrid graphics laptop. - -There is one problem with this patch, which is why it was not upstreamed -before. What to do when a secondary GPU gets detected really is a policy -decission (e.g. one may want to autobind PCI GPUs but not USB ones) and -as such should be under control of the Desktop Environment. - -Unconditionally adding autobinding support to the xserver will result -in races between the DE dealing with the hotplug of a secondary GPU -and the server itself dealing with it. - -However we've waited for years for any Desktop Environments to actually -start doing some sort of autoconfiguration of secondary GPUs and there -is still not a single DE dealing with this, so I believe that it is -time to upstream this now. - -To avoid potential future problems if any DEs get support for doing -secondary GPU configuration themselves, the new autobind functionality -is made optional. Since no DEs currently support doing this themselves it -is enabled by default. When DEs grow support for doing this themselves -they can disable the servers autobinding through the servers cmdline or a -xorg.conf snippet. - -Signed-off-by: Dave Airlie -[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream] -Signed-off-by: Hans de Goede ---- - hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++ - hw/xfree86/common/xf86Globals.c | 2 ++ - hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++ - hw/xfree86/common/xf86Priv.h | 1 + - hw/xfree86/common/xf86Privstr.h | 1 + - hw/xfree86/common/xf86platformBus.c | 4 ++++ - hw/xfree86/man/Xorg.man | 7 +++++++ - hw/xfree86/man/xorg.conf.man | 6 ++++++ - randr/randrstr.h | 3 +++ - randr/rrprovider.c | 22 ++++++++++++++++++++++ - 10 files changed, 85 insertions(+) - -diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c -index 2c1d335..d7d7c2e 100644 ---- a/hw/xfree86/common/xf86Config.c -+++ b/hw/xfree86/common/xf86Config.c -@@ -643,6 +643,7 @@ typedef enum { - FLAG_DRI2, - FLAG_USE_SIGIO, - FLAG_AUTO_ADD_GPU, -+ FLAG_AUTO_BIND_GPU, - FLAG_MAX_CLIENTS, - FLAG_IGLX, - FLAG_DEBUG, -@@ -699,6 +700,8 @@ static OptionInfoRec FlagOptions[] = { - {0}, FALSE}, - {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN, - {0}, FALSE}, -+ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN, -+ {0}, FALSE}, - {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER, - {0}, FALSE }, - {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN, -@@ -779,6 +782,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) - } - xf86Msg(from, "%sutomatically adding GPU devices\n", - xf86Info.autoAddGPU ? "A" : "Not a"); -+ -+ if (xf86AutoBindGPUDisabled) { -+ xf86Info.autoBindGPU = FALSE; -+ from = X_CMDLINE; -+ } -+ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) { -+ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU, -+ &xf86Info.autoBindGPU); -+ from = X_CONFIG; -+ } -+ else { -+ from = X_DEFAULT; -+ } -+ xf86Msg(from, "%sutomatically binding GPU devices\n", -+ xf86Info.autoBindGPU ? "A" : "Not a"); -+ - /* - * Set things up based on the config file information. Some of these - * settings may be overridden later when the command line options are -diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c -index e890f05..7b27b4c 100644 ---- a/hw/xfree86/common/xf86Globals.c -+++ b/hw/xfree86/common/xf86Globals.c -@@ -131,6 +131,7 @@ xf86InfoRec xf86Info = { - #else - .autoAddGPU = FALSE, - #endif -+ .autoBindGPU = TRUE, - }; - - const char *xf86ConfigFile = NULL; -@@ -191,6 +192,7 @@ Bool xf86FlipPixels = FALSE; - Gamma xf86Gamma = { 0.0, 0.0, 0.0 }; - - Bool xf86AllowMouseOpenFail = FALSE; -+Bool xf86AutoBindGPUDisabled = FALSE; - - #ifdef XF86VIDMODE - Bool xf86VidModeDisabled = FALSE; -diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c -index ea42ec9..ec255b6 100644 ---- a/hw/xfree86/common/xf86Init.c -+++ b/hw/xfree86/common/xf86Init.c -@@ -76,6 +76,7 @@ - #include "xf86DDC.h" - #include "xf86Xinput.h" - #include "xf86InPriv.h" -+#include "xf86Crtc.h" - #include "picturestr.h" - #include "randrstr.h" - #include "glxvndabi.h" -@@ -237,6 +238,19 @@ xf86PrivsElevated(void) - return PrivsElevated(); - } - -+static void -+xf86AutoConfigOutputDevices(void) -+{ -+ int i; -+ -+ if (!xf86Info.autoBindGPU) -+ return; -+ -+ for (i = 0; i < xf86NumGPUScreens; i++) -+ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), -+ xf86ScrnToScreen(xf86Screens[0])); -+} -+ - static void - TrapSignals(void) - { -@@ -770,6 +784,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) - for (i = 0; i < xf86NumGPUScreens; i++) - AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); - -+ xf86AutoConfigOutputDevices(); -+ - xf86VGAarbiterWrapFunctions(); - if (sigio_blocked) - input_unlock(); -@@ -1278,6 +1294,10 @@ ddxProcessArgument(int argc, char **argv, int i) - xf86Info.iglxFrom = X_CMDLINE; - return 0; - } -+ if (!strcmp(argv[i], "-noautoBindGPU")) { -+ xf86AutoBindGPUDisabled = TRUE; -+ return 1; -+ } - - /* OS-specific processing */ - return xf86ProcessArgument(argc, argv, i); -diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h -index 4fe2b5f..6566622 100644 ---- a/hw/xfree86/common/xf86Priv.h -+++ b/hw/xfree86/common/xf86Priv.h -@@ -46,6 +46,7 @@ - extern _X_EXPORT const char *xf86ConfigFile; - extern _X_EXPORT const char *xf86ConfigDir; - extern _X_EXPORT Bool xf86AllowMouseOpenFail; -+extern _X_EXPORT Bool xf86AutoBindGPUDisabled; - - #ifdef XF86VIDMODE - extern _X_EXPORT Bool xf86VidModeDisabled; -diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h -index 21c2e1f..6c71863 100644 ---- a/hw/xfree86/common/xf86Privstr.h -+++ b/hw/xfree86/common/xf86Privstr.h -@@ -98,6 +98,7 @@ typedef struct { - - Bool autoAddGPU; - const char *debug; -+ Bool autoBindGPU; - } xf86InfoRec, *xf86InfoPtr; - - /* ISC's cc can't handle ~ of UL constants, so explicitly type cast them. */ -diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index cef47da..913a324 100644 ---- a/hw/xfree86/common/xf86platformBus.c -+++ b/hw/xfree86/common/xf86platformBus.c -@@ -49,6 +49,7 @@ - #include "Pci.h" - #include "xf86platformBus.h" - #include "xf86Config.h" -+#include "xf86Crtc.h" - - #include "randrstr.h" - int platformSlotClaimed; -@@ -665,6 +666,9 @@ xf86platformAddDevice(int index) - } - /* attach unbound to 0 protocol screen */ - AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); -+ if (xf86Info.autoBindGPU) -+ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), -+ xf86ScrnToScreen(xf86Screens[0])); - - RRResourcesChanged(xf86Screens[0]->pScreen); - RRTellChanged(xf86Screens[0]->pScreen); -diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man -index 13a9dc3..745f986 100644 ---- a/hw/xfree86/man/Xorg.man -+++ b/hw/xfree86/man/Xorg.man -@@ -283,6 +283,13 @@ is a comma separated list of directories to search for - server modules. This option is only available when the server is run - as root (i.e, with real-uid 0). - .TP 8 -+.B \-noautoBindGPU -+Disable automatically setting secondary GPUs up as output sinks and offload -+sources. This is equivalent to setting the -+.B AutoBindGPU -+xorg.conf(__filemansuffix__) file option. To -+.B false. -+.TP 8 - .B \-nosilk - Disable Silken Mouse support. - .TP 8 -diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man -index 9589262..8d51e06 100644 ---- a/hw/xfree86/man/xorg.conf.man -+++ b/hw/xfree86/man/xorg.conf.man -@@ -672,6 +672,12 @@ Enabled by default. - If this option is disabled, then no GPU devices will be added from the udev - backend. Enabled by default. (May need to be disabled to setup Xinerama). - .TP 7 -+.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q -+If enabled then secondary GPUs will be automatically set up as output-sinks and -+offload-sources. Making e.g. laptop outputs connected only to the secondary -+GPU directly available for use without needing to run -+"xrandr --setprovideroutputsource". Enabled by default. -+.TP 7 - .BI "Option \*qLog\*q \*q" string \*q - This option controls whether the log is flushed and/or synced to disk after - each message. -diff --git a/randr/randrstr.h b/randr/randrstr.h -index f94174b..092d726 100644 ---- a/randr/randrstr.h -+++ b/randr/randrstr.h -@@ -1039,6 +1039,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p); - extern _X_EXPORT void - RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); - -+extern _X_EXPORT void -+RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen); -+ - /* rrproviderproperty.c */ - - extern _X_EXPORT void -diff --git a/randr/rrprovider.c b/randr/rrprovider.c -index e4bc2bf..e04c18f 100644 ---- a/randr/rrprovider.c -+++ b/randr/rrprovider.c -@@ -485,3 +485,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider) - - WriteEventsToClient(client, 1, (xEvent *) &pe); - } -+ -+void -+RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen) -+{ -+ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); -+ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen); -+ RRProviderPtr provider = pScrPriv->provider; -+ RRProviderPtr master_provider = masterPriv->provider; -+ -+ if (!provider || !master_provider) -+ return; -+ -+ if ((provider->capabilities & RR_Capability_SinkOutput) && -+ (master_provider->capabilities & RR_Capability_SourceOutput)) { -+ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider); -+ RRInitPrimeSyncProps(pScreen); -+ } -+ -+ if ((provider->capabilities & RR_Capability_SourceOffload) && -+ (master_provider->capabilities & RR_Capability_SinkOffload)) -+ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider); -+} --- -2.16.2 - diff --git a/0001-dix-Add-GetCurrentClient-helper.patch b/0001-dix-Add-GetCurrentClient-helper.patch deleted file mode 100644 index d241c0e..0000000 --- a/0001-dix-Add-GetCurrentClient-helper.patch +++ /dev/null @@ -1,116 +0,0 @@ -From e78e96157efb523272404a85a9433c7b9803c1db Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Thu, 29 Aug 2019 14:18:28 +0200 -Subject: [PATCH xserver 01/24] dix: Add GetCurrentClient helper -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Request-handlers as registered in the requestVector array, always get -passed the clientPtr for the client which sent the request. -But the implementation of many request-handlers typically consists of -a generic handler calling implementation specific callbacks and / or -various helpers often multiple levels deep and in many cases the clientPtr -does not get passed to the callbacks / helpers. - -This means that in some places where we would like to have access to the -current-client, we cannot easily access it and fixing this would require -a lot of work and often would involve ABI breakage. - -This commit adds a GetCurrentClient helper which can be used as a -shortcut to get access to the clienPtr for the currently being processed -request without needing a lot of refactoring and ABI breakage. - -Note using this new GetCurrentClient helper is only safe for code -which only runs from the main thread, this new variable MUST NOT be used -by code which runs from signal handlers or from the input-thread. - -The specific use-case which resulted in the creation of this patch is adding -support for emulation of randr / vidmode resolution changes to Xwayland. -This emulation will not actually change the monitor resolution instead it -will scale any window with a size which exactly matches the requested -resolution to fill the entire monitor. The main use-case for this is -games which are hard-coded to render at a specific resolution and have -sofar relied on randr / vidmode to change the monitor resolution when going -fullscreen. - -To make this emulation as robust as possible (e.g. avoid accidentally scaling -windows from other apps) we want to make the emulated resolution a per client -state. But e.g. the RRSetCrtc function does not take a client pointer; and is -a (used) part of the Xorg server ABI (note the problem is not just limited -to RRSetCrtc). - -Reviewed-by: Olivier Fourdan -Reviewed-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 834a467af978ac7a24ed17b8c8e58b6cddb4faf9) ---- - dix/dispatch.c | 23 ++++++++++++++++++++++- - include/dix.h | 1 + - 2 files changed, 23 insertions(+), 1 deletion(-) - -diff --git a/dix/dispatch.c b/dix/dispatch.c -index a33bfaa9e..2b1cf1a74 100644 ---- a/dix/dispatch.c -+++ b/dix/dispatch.c -@@ -148,6 +148,7 @@ xConnSetupPrefix connSetupPrefix; - PaddingInfo PixmapWidthPaddingInfo[33]; - - static ClientPtr grabClient; -+static ClientPtr currentClient; /* Client for the request currently being dispatched */ - - #define GrabNone 0 - #define GrabActive 1 -@@ -176,6 +177,23 @@ volatile char isItTimeToYield; - #define SAME_SCREENS(a, b) (\ - (a.pScreen == b.pScreen)) - -+ClientPtr -+GetCurrentClient(void) -+{ -+ if (in_input_thread()) { -+ static Bool warned; -+ -+ if (!warned) { -+ ErrorF("[dix] Error GetCurrentClient called from input-thread\n"); -+ warned = TRUE; -+ } -+ -+ return NULL; -+ } -+ -+ return currentClient; -+} -+ - void - SetInputCheck(HWEventQueuePtr c0, HWEventQueuePtr c1) - { -@@ -474,9 +492,12 @@ Dispatch(void) - result = BadLength; - else { - result = XaceHookDispatch(client, client->majorOp); -- if (result == Success) -+ if (result == Success) { -+ currentClient = client; - result = - (*client->requestVector[client->majorOp]) (client); -+ currentClient = NULL; -+ } - } - if (!SmartScheduleSignalEnable) - SmartScheduleTime = GetTimeInMillis(); -diff --git a/include/dix.h b/include/dix.h -index b6e2bcfde..d65060cb6 100644 ---- a/include/dix.h -+++ b/include/dix.h -@@ -148,6 +148,7 @@ typedef struct _TimeStamp { - } TimeStamp; - - /* dispatch.c */ -+extern _X_EXPORT ClientPtr GetCurrentClient(void); - - extern _X_EXPORT void SetInputCheck(HWEventQueuePtr /*c0 */ , - HWEventQueuePtr /*c1 */ ); --- -2.25.2 - diff --git a/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch b/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch index cce0348..2134a44 100644 --- a/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch +++ b/0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch @@ -52,7 +52,7 @@ index 6619e3aa7..1f8ad14bc 100644 /* For non-PCI devices and drmGetDevice fail, just assume that * the 3D driver is named the same as the kernel driver. This is * currently true for vc4 and msm (freedreno). -@@ -1456,12 +1460,14 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) +@@ -1454,12 +1458,14 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) xf86DrvMsg(pScreen->myNum, X_ERROR, "[DRI2] Couldn't drmGetVersion() on non-PCI device, " "no driver name found.\n"); @@ -70,7 +70,7 @@ index 6619e3aa7..1f8ad14bc 100644 } for (i = 0; driver_map[i].driver; i++) { -@@ -1469,13 +1475,15 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) +@@ -1467,13 +1473,15 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) continue; if (driver_map[i].num_chips_ids == -1) { @@ -88,7 +88,7 @@ index 6619e3aa7..1f8ad14bc 100644 goto out; } } -@@ -1487,9 +1495,9 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) +@@ -1485,9 +1493,9 @@ dri2_probe_driver_name(ScreenPtr pScreen, DRI2InfoPtr info) dev->deviceinfo.pci->vendor_id, dev->deviceinfo.pci->device_id); out: drmFreeDevice(&dev); @@ -100,21 +100,21 @@ index 6619e3aa7..1f8ad14bc 100644 #endif } -@@ -1610,7 +1618,8 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) - if (info->driverName) { - ds->driverNames[0] = info->driverName; +@@ -1604,7 +1612,8 @@ DRI2ScreenInit(ScreenPtr pScreen, DRI2InfoPtr info) } else { + /* FIXME dri2_probe_driver_name() returns a strdup-ed string, + * currently this gets leaked */ - ds->driverNames[0] = ds->driverNames[1] = dri2_probe_driver_name(pScreen, info); + dri2_probe_driver_name(pScreen, info, + &ds->driverNames[0], &ds->driverNames[1]); if (!ds->driverNames[0]) return FALSE; - } + diff --git a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h index da7ea1c1e..7036d1003 100644 --- a/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h +++ b/hw/xfree86/dri2/pci_ids/pci_id_driver_map.h -@@ -66,21 +66,22 @@ static const int vmwgfx_chip_ids[] = { +@@ -60,23 +60,24 @@ static const int vmwgfx_chip_ids[] = { static const struct { int vendor_id; const char *driver; @@ -124,8 +124,10 @@ index da7ea1c1e..7036d1003 100644 } driver_map[] = { - { 0x8086, "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) }, - { 0x8086, "i965", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, +- { 0x8086, "i965", NULL, -1 }, + { 0x8086, "i915", "i915", i915_chip_ids, ARRAY_SIZE(i915_chip_ids) }, + { 0x8086, "i965", "va_gl", i965_chip_ids, ARRAY_SIZE(i965_chip_ids) }, ++ { 0x8086, "i965", "va_gl", NULL, -1 }, #ifndef DRIVER_MAP_GALLIUM_ONLY - { 0x1002, "radeon", r100_chip_ids, ARRAY_SIZE(r100_chip_ids) }, - { 0x1002, "r200", r200_chip_ids, ARRAY_SIZE(r200_chip_ids) }, @@ -134,19 +136,18 @@ index da7ea1c1e..7036d1003 100644 #endif - { 0x1002, "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) }, - { 0x1002, "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, -- { 0x1002, "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, +- { 0x1002, "radeonsi", NULL, -1 }, - { 0x10de, "nouveau", NULL, -1 }, - { 0x1af4, "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, - { 0x15ad, "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, +- { 0x0000, NULL, NULL, 0 }, + { 0x1002, "r300", "r300", r300_chip_ids, ARRAY_SIZE(r300_chip_ids) }, -+ { 0x1002, "r600","r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, -+ { 0x1002, "radeonsi", "radeonsi", radeonsi_chip_ids, ARRAY_SIZE(radeonsi_chip_ids) }, ++ { 0x1002, "r600", "r600", r600_chip_ids, ARRAY_SIZE(r600_chip_ids) }, ++ { 0x1002, "radeonsi", "radeonsi", NULL, -1 }, + { 0x10de, "nouveau", "nouveau", NULL, -1 }, + { 0x1af4, "virtio_gpu", "virtio_gpu", virtio_gpu_chip_ids, ARRAY_SIZE(virtio_gpu_chip_ids) }, + { 0x15ad, "vmwgfx", "vmwgfx", vmwgfx_chip_ids, ARRAY_SIZE(vmwgfx_chip_ids) }, - { 0x0000, NULL, NULL, 0 }, ++ { 0x0000, NULL, NULL, NULL, 0 }, }; --- -2.19.0 - + #endif /* _PCI_ID_DRIVER_MAP_H_ */ diff --git a/0002-xwayland-Add-wp_viewport-wayland-extension-support.patch b/0002-xwayland-Add-wp_viewport-wayland-extension-support.patch deleted file mode 100644 index 441bf4c..0000000 --- a/0002-xwayland-Add-wp_viewport-wayland-extension-support.patch +++ /dev/null @@ -1,119 +0,0 @@ -From c0981af6a683266e3f2adfdd7d6539104f502233 Mon Sep 17 00:00:00 2001 -From: Robert Mader -Date: Mon, 22 Jan 2018 22:02:32 +0100 -Subject: [PATCH xserver 02/24] xwayland: Add wp_viewport wayland extension - support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This commit adds support for the wayland wp_viewport extension, note -nothing uses this yet. - -This is a preparation patch for adding support for fake mode-changes through -xrandr for apps which want to change the resolution when going fullscreen. - -[hdegoede@redhat.com: Split the code for the extension out into its own patch] - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 47bba4625339592d08b375bcd8e51029c0000850) ---- - hw/xwayland/Makefile.am | 9 ++++++++- - hw/xwayland/meson.build | 3 +++ - hw/xwayland/xwayland.c | 3 +++ - hw/xwayland/xwayland.h | 2 ++ - 4 files changed, 16 insertions(+), 1 deletion(-) - -diff --git a/hw/xwayland/Makefile.am b/hw/xwayland/Makefile.am -index bc1cb8506..49aae3d8b 100644 ---- a/hw/xwayland/Makefile.am -+++ b/hw/xwayland/Makefile.am -@@ -71,7 +71,9 @@ Xwayland_built_sources += \ - xdg-output-unstable-v1-protocol.c \ - xdg-output-unstable-v1-client-protocol.h \ - linux-dmabuf-unstable-v1-client-protocol.h \ -- linux-dmabuf-unstable-v1-protocol.c -+ linux-dmabuf-unstable-v1-protocol.c \ -+ viewporter-client-protocol.h \ -+ viewporter-protocol.c - - if XWAYLAND_EGLSTREAM - Xwayland_built_sources += \ -@@ -120,6 +122,11 @@ linux-dmabuf-unstable-v1-protocol.c : $(WAYLAND_PROTOCOLS_DATADIR)/unstable/linu - linux-dmabuf-unstable-v1-client-protocol.h : $(WAYLAND_PROTOCOLS_DATADIR)/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml - $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@ - -+viewporter-protocol.c: $(WAYLAND_PROTOCOLS_DATADIR)/stable/viewporter/viewporter.xml -+ $(AM_V_GEN)$(WAYLAND_SCANNER) @SCANNER_ARG@ < $< > $@ -+viewporter-client-protocol.h: $(WAYLAND_PROTOCOLS_DATADIR)/stable/viewporter/viewporter.xml -+ $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@ -+ - wayland-eglstream-client-protocol.h : $(WAYLAND_EGLSTREAM_DATADIR)/wayland-eglstream.xml - $(AM_V_GEN)$(WAYLAND_SCANNER) client-header < $< > $@ - wayland-eglstream-controller-client-protocol.h : $(WAYLAND_EGLSTREAM_DATADIR)/wayland-eglstream-controller.xml -diff --git a/hw/xwayland/meson.build b/hw/xwayland/meson.build -index 36bf2133a..4a8d171bb 100644 ---- a/hw/xwayland/meson.build -+++ b/hw/xwayland/meson.build -@@ -21,6 +21,7 @@ tablet_xml = join_paths(protodir, 'unstable', 'tablet', 'tablet-unstable-v2.xml' - kbgrab_xml = join_paths(protodir, 'unstable', 'xwayland-keyboard-grab', 'xwayland-keyboard-grab-unstable-v1.xml') - xdg_output_xml = join_paths(protodir, 'unstable', 'xdg-output', 'xdg-output-unstable-v1.xml') - dmabuf_xml = join_paths(protodir, 'unstable', 'linux-dmabuf', 'linux-dmabuf-unstable-v1.xml') -+viewporter_xml = join_paths(protodir, 'stable', 'viewporter', 'viewporter.xml') - - client_header = generator(scanner, - output : '@BASENAME@-client-protocol.h', -@@ -43,12 +44,14 @@ srcs += client_header.process(tablet_xml) - srcs += client_header.process(kbgrab_xml) - srcs += client_header.process(xdg_output_xml) - srcs += client_header.process(dmabuf_xml) -+srcs += client_header.process(viewporter_xml) - srcs += code.process(relative_xml) - srcs += code.process(pointer_xml) - srcs += code.process(tablet_xml) - srcs += code.process(kbgrab_xml) - srcs += code.process(xdg_output_xml) - srcs += code.process(dmabuf_xml) -+srcs += code.process(viewporter_xml) - - xwayland_glamor = [] - eglstream_srcs = [] -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index ed9f2e3c2..2084f2afb 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -923,6 +923,9 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - wl_registry_bind(registry, id, &zxdg_output_manager_v1_interface, 1); - xwl_screen_init_xdg_output(xwl_screen); - } -+ else if (strcmp(interface, "wp_viewporter") == 0) { -+ xwl_screen->viewporter = wl_registry_bind(registry, id, &wp_viewporter_interface, 1); -+ } - #ifdef XWL_HAS_GLAMOR - else if (xwl_screen->glamor) { - xwl_glamor_init_wl_registry(xwl_screen, registry, id, interface, -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index daa719209..f949ea157 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -48,6 +48,7 @@ - #include "xwayland-keyboard-grab-unstable-v1-client-protocol.h" - #include "xdg-output-unstable-v1-client-protocol.h" - #include "linux-dmabuf-unstable-v1-client-protocol.h" -+#include "viewporter-client-protocol.h" - - struct xwl_format { - uint32_t format; -@@ -151,6 +152,7 @@ struct xwl_screen { - struct zwp_pointer_constraints_v1 *pointer_constraints; - struct zwp_xwayland_keyboard_grab_manager_v1 *wp_grab; - struct zxdg_output_manager_v1 *xdg_output_manager; -+ struct wp_viewporter *viewporter; - uint32_t serial; - - #define XWL_FORMAT_ARGB8888 (1 << 0) --- -2.25.2 - diff --git a/0003-xwayland-Use-buffer_damage-instead-of-surface-damage.patch b/0003-xwayland-Use-buffer_damage-instead-of-surface-damage.patch deleted file mode 100644 index acd1a06..0000000 --- a/0003-xwayland-Use-buffer_damage-instead-of-surface-damage.patch +++ /dev/null @@ -1,156 +0,0 @@ -From ce5eef7d33d7ba37cabee6b2bb020ed62abe6208 Mon Sep 17 00:00:00 2001 -From: Robert Mader -Date: Tue, 2 Jul 2019 12:03:12 +0200 -Subject: [PATCH xserver 03/24] xwayland: Use buffer_damage instead of surface - damage if available -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -When a viewport is set, damage will only work properly when using -wl_surface_damage_buffer instead of wl_surface_damage. - -When no viewport is set, there should be no difference between -surface and buffer damage. - -This is a preparation patch for using viewport to add support for fake -mode-changes through xrandr for apps which want to change the resolution -when going fullscreen. - -Changes by Hans de Goede : --Split the damage changes out into their own patch --Add xwl_surface_damage helper --Also use buffer_damage / the new helper for the present and cursor code - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 7c6f17790d3aedb164481264b0f05a8a14103731) ---- - hw/xwayland/xwayland-cursor.c | 12 ++++++------ - hw/xwayland/xwayland-present.c | 6 +++--- - hw/xwayland/xwayland.c | 29 +++++++++++++++++++++++------ - hw/xwayland/xwayland.h | 3 +++ - 4 files changed, 35 insertions(+), 15 deletions(-) - -diff --git a/hw/xwayland/xwayland-cursor.c b/hw/xwayland/xwayland-cursor.c -index 66720bcc0..cbc715061 100644 ---- a/hw/xwayland/xwayland-cursor.c -+++ b/hw/xwayland/xwayland-cursor.c -@@ -165,9 +165,9 @@ xwl_seat_set_cursor(struct xwl_seat *xwl_seat) - xwl_seat->x_cursor->bits->yhot); - wl_surface_attach(xwl_cursor->surface, - xwl_shm_pixmap_get_wl_buffer(pixmap), 0, 0); -- wl_surface_damage(xwl_cursor->surface, 0, 0, -- xwl_seat->x_cursor->bits->width, -- xwl_seat->x_cursor->bits->height); -+ xwl_surface_damage(xwl_seat->xwl_screen, xwl_cursor->surface, 0, 0, -+ xwl_seat->x_cursor->bits->width, -+ xwl_seat->x_cursor->bits->height); - - xwl_cursor->frame_cb = wl_surface_frame(xwl_cursor->surface); - wl_callback_add_listener(xwl_cursor->frame_cb, &frame_listener, xwl_cursor); -@@ -217,9 +217,9 @@ xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *xwl_tablet_tool) - xwl_seat->x_cursor->bits->yhot); - wl_surface_attach(xwl_cursor->surface, - xwl_shm_pixmap_get_wl_buffer(pixmap), 0, 0); -- wl_surface_damage(xwl_cursor->surface, 0, 0, -- xwl_seat->x_cursor->bits->width, -- xwl_seat->x_cursor->bits->height); -+ xwl_surface_damage(xwl_seat->xwl_screen, xwl_cursor->surface, 0, 0, -+ xwl_seat->x_cursor->bits->width, -+ xwl_seat->x_cursor->bits->height); - - xwl_cursor->frame_cb = wl_surface_frame(xwl_cursor->surface); - wl_callback_add_listener(xwl_cursor->frame_cb, &frame_listener, xwl_cursor); -diff --git a/hw/xwayland/xwayland-present.c b/hw/xwayland/xwayland-present.c -index 5ba7dce08..58c32941d 100644 ---- a/hw/xwayland/xwayland-present.c -+++ b/hw/xwayland/xwayland-present.c -@@ -495,9 +495,9 @@ xwl_present_flip(WindowPtr present_window, - /* Realign timer */ - xwl_present_reset_timer(xwl_present_window); - -- wl_surface_damage(xwl_window->surface, 0, 0, -- damage_box->x2 - damage_box->x1, -- damage_box->y2 - damage_box->y1); -+ xwl_surface_damage(xwl_window->xwl_screen, xwl_window->surface, 0, 0, -+ damage_box->x2 - damage_box->x1, -+ damage_box->y2 - damage_box->y1); - - wl_surface_commit(xwl_window->surface); - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 2084f2afb..942981834 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -803,6 +803,16 @@ xwl_destroy_window(WindowPtr window) - return ret; - } - -+void xwl_surface_damage(struct xwl_screen *xwl_screen, -+ struct wl_surface *surface, -+ int32_t x, int32_t y, int32_t width, int32_t height) -+{ -+ if (wl_surface_get_version(surface) >= WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION) -+ wl_surface_damage_buffer(surface, x, y, width, height); -+ else -+ wl_surface_damage(surface, x, y, width, height); -+} -+ - static void - xwl_window_post_damage(struct xwl_window *xwl_window) - { -@@ -839,13 +849,15 @@ xwl_window_post_damage(struct xwl_window *xwl_window) - */ - if (RegionNumRects(region) > 256) { - box = RegionExtents(region); -- wl_surface_damage(xwl_window->surface, box->x1, box->y1, -- box->x2 - box->x1, box->y2 - box->y1); -+ xwl_surface_damage(xwl_screen, xwl_window->surface, box->x1, box->y1, -+ box->x2 - box->x1, box->y2 - box->y1); - } else { - box = RegionRects(region); -- for (i = 0; i < RegionNumRects(region); i++, box++) -- wl_surface_damage(xwl_window->surface, box->x1, box->y1, -- box->x2 - box->x1, box->y2 - box->y1); -+ for (i = 0; i < RegionNumRects(region); i++, box++) { -+ xwl_surface_damage(xwl_screen, xwl_window->surface, -+ box->x1, box->y1, -+ box->x2 - box->x1, box->y2 - box->y1); -+ } - } - - xwl_window_create_frame_callback(xwl_window); -@@ -904,8 +916,13 @@ registry_global(void *data, struct wl_registry *registry, uint32_t id, - struct xwl_screen *xwl_screen = data; - - if (strcmp(interface, "wl_compositor") == 0) { -+ uint32_t request_version = 1; -+ -+ if (version >= WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION) -+ request_version = WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION; -+ - xwl_screen->compositor = -- wl_registry_bind(registry, id, &wl_compositor_interface, 1); -+ wl_registry_bind(registry, id, &wl_compositor_interface, request_version); - } - else if (strcmp(interface, "wl_shm") == 0) { - xwl_screen->shm = wl_registry_bind(registry, id, &wl_shm_interface, 1); -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index f949ea157..fa78b5ab9 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -382,6 +382,9 @@ struct xwl_output { - void xwl_window_create_frame_callback(struct xwl_window *xwl_window); - - void xwl_sync_events (struct xwl_screen *xwl_screen); -+void xwl_surface_damage(struct xwl_screen *xwl_screen, -+ struct wl_surface *surface, -+ int32_t x, int32_t y, int32_t width, int32_t height); - - Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen); - --- -2.25.2 - diff --git a/0004-xwayland-Add-fake-output-modes-to-xrandr-output-mode.patch b/0004-xwayland-Add-fake-output-modes-to-xrandr-output-mode.patch deleted file mode 100644 index 4e05547..0000000 --- a/0004-xwayland-Add-fake-output-modes-to-xrandr-output-mode.patch +++ /dev/null @@ -1,207 +0,0 @@ -From 6ff9bf9f005ce81b587d3b4345232c73fc12da53 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Wed, 26 Jun 2019 16:46:54 +0200 -Subject: [PATCH xserver 04/24] xwayland: Add fake output modes to xrandr - output mode lists -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This is a preparation patch for adding support for apps which want to -change the resolution when they go fullscreen because they are hardcoded -to render at a specific resolution, e.g. 640x480. - -Follow up patches will fake the mode-switch these apps want by using -WPviewport to scale there pixmap to cover the entire output. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 0d656d796071fb637e4969ea800855fe5d1c9728) ---- - hw/xwayland/xwayland-output.c | 112 ++++++++++++++++++++++++++++++++-- - hw/xwayland/xwayland.c | 17 ++++++ - hw/xwayland/xwayland.h | 1 + - 3 files changed, 124 insertions(+), 6 deletions(-) - -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index aa6f37864..2ccc3ca60 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -245,14 +245,110 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height) - update_desktop_dimensions(); - } - -+/* From hw/xfree86/common/xf86DefModeSet.c with some obscure modes dropped */ -+const int32_t xwl_output_fake_modes[][2] = { -+ /* 4:3 (1.33) */ -+ { 2048, 1536 }, -+ { 1920, 1440 }, -+ { 1600, 1200 }, -+ { 1440, 1080 }, -+ { 1400, 1050 }, -+ { 1280, 1024 }, /* 5:4 (1.25) */ -+ { 1280, 960 }, -+ { 1152, 864 }, -+ { 1024, 768 }, -+ { 800, 600 }, -+ { 640, 480 }, -+ { 320, 240 }, -+ /* 16:10 (1.6) */ -+ { 2560, 1600 }, -+ { 1920, 1200 }, -+ { 1680, 1050 }, -+ { 1440, 900 }, -+ { 1280, 800 }, -+ { 720, 480 }, /* 3:2 (1.5) */ -+ { 640, 400 }, -+ { 320, 200 }, -+ /* 16:9 (1.77) */ -+ { 5120, 2880 }, -+ { 4096, 2304 }, -+ { 3840, 2160 }, -+ { 3200, 1800 }, -+ { 2880, 1620 }, -+ { 2560, 1440 }, -+ { 2048, 1152 }, -+ { 1920, 1080 }, -+ { 1600, 900 }, -+ { 1368, 768 }, -+ { 1280, 720 }, -+ { 1024, 576 }, -+ { 864, 486 }, -+ { 720, 400 }, -+ { 640, 350 }, -+}; -+ -+/* Build an array with RRModes the first mode is the actual output mode, the -+ * rest are fake modes from the xwl_output_fake_modes list. We do this for apps -+ * which want to change resolution when they go fullscreen. -+ * When an app requests a mode-change, we fake it using WPviewport. -+ */ -+static RRModePtr * -+output_get_rr_modes(struct xwl_output *xwl_output, -+ int32_t width, int32_t height, -+ int *count) -+{ -+ struct xwl_screen *xwl_screen = xwl_output->xwl_screen; -+ RRModePtr *rr_modes; -+ int i; -+ -+ rr_modes = xallocarray(ARRAY_SIZE(xwl_output_fake_modes) + 1, sizeof(RRModePtr)); -+ if (!rr_modes) -+ goto err; -+ -+ /* Add actual output mode */ -+ rr_modes[0] = xwayland_cvt(width, height, xwl_output->refresh / 1000.0, 0, 0); -+ if (!rr_modes[0]) -+ goto err; -+ -+ *count = 1; -+ -+ if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) -+ return rr_modes; -+ -+ /* Add fake modes */ -+ for (i = 0; i < ARRAY_SIZE(xwl_output_fake_modes); i++) { -+ /* Skip actual output mode, already added */ -+ if (xwl_output_fake_modes[i][0] == width && -+ xwl_output_fake_modes[i][1] == height) -+ continue; -+ -+ /* Skip modes which are too big, avoid downscaling */ -+ if (xwl_output_fake_modes[i][0] > width || -+ xwl_output_fake_modes[i][1] > height) -+ continue; -+ -+ rr_modes[*count] = xwayland_cvt(xwl_output_fake_modes[i][0], -+ xwl_output_fake_modes[i][1], -+ xwl_output->refresh / 1000.0, 0, 0); -+ if (!rr_modes[*count]) -+ goto err; -+ -+ (*count)++; -+ } -+ -+ return rr_modes; -+err: -+ FatalError("Failed to allocate memory for list of RR modes"); -+} -+ - static void - apply_output_change(struct xwl_output *xwl_output) - { - struct xwl_screen *xwl_screen = xwl_output->xwl_screen; - struct xwl_output *it; -- int mode_width, mode_height; -+ int mode_width, mode_height, count; - int width = 0, height = 0, has_this_output = 0; -- RRModePtr randr_mode; -+ RRModePtr *randr_modes; - Bool need_rotate; - - /* Clear out the "done" received flags */ -@@ -271,12 +367,16 @@ apply_output_change(struct xwl_output *xwl_output) - mode_height = xwl_output->width; - } - -- randr_mode = xwayland_cvt(mode_width, mode_height, -- xwl_output->refresh / 1000.0, 0, 0); -- RROutputSetModes(xwl_output->randr_output, &randr_mode, 1, 1); -- RRCrtcNotify(xwl_output->randr_crtc, randr_mode, -+ /* Build a fresh modes array using the current refresh rate */ -+ randr_modes = output_get_rr_modes(xwl_output, mode_width, mode_height, &count); -+ RROutputSetModes(xwl_output->randr_output, randr_modes, count, 1); -+ RRCrtcNotify(xwl_output->randr_crtc, randr_modes[0], - xwl_output->x, xwl_output->y, - xwl_output->rotation, NULL, 1, &xwl_output->randr_output); -+ /* RROutputSetModes takes ownership of the passed in modes, so we only -+ * have to free the pointer array. -+ */ -+ free(randr_modes); - - xorg_list_for_each_entry(it, &xwl_screen->output_list, link) { - /* output done event is sent even when some property -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 942981834..3c50396f1 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -152,6 +152,23 @@ xwl_screen_get(ScreenPtr screen) - return dixLookupPrivate(&screen->devPrivates, &xwl_screen_private_key); - } - -+static Bool -+xwl_screen_has_viewport_support(struct xwl_screen *xwl_screen) -+{ -+ return wl_compositor_get_version(xwl_screen->compositor) >= -+ WL_SURFACE_DAMAGE_BUFFER_SINCE_VERSION && -+ xwl_screen->viewporter != NULL; -+} -+ -+Bool -+xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen) -+{ -+ /* Resolution change emulation is only supported in rootless mode and -+ * it requires viewport support. -+ */ -+ return xwl_screen->rootless && xwl_screen_has_viewport_support(xwl_screen); -+} -+ - static void - xwl_window_set_allow_commits(struct xwl_window *xwl_window, Bool allow, - const char *debug_msg) -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index fa78b5ab9..c66997f00 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -389,6 +389,7 @@ void xwl_surface_damage(struct xwl_screen *xwl_screen, - Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen); - - struct xwl_screen *xwl_screen_get(ScreenPtr screen); -+Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen); - - void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); - void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); --- -2.25.2 - diff --git a/0005-xwayland-Use-RandR-1.2-interface-rev-2.patch b/0005-xwayland-Use-RandR-1.2-interface-rev-2.patch deleted file mode 100644 index 8585f82..0000000 --- a/0005-xwayland-Use-RandR-1.2-interface-rev-2.patch +++ /dev/null @@ -1,139 +0,0 @@ -From d837f7003d22c5e0d5bd05d41e872e7ee331dfa4 Mon Sep 17 00:00:00 2001 -From: Robert Mader -Date: Mon, 22 Jan 2018 17:57:38 +0100 -Subject: [PATCH xserver 05/24] xwayland: Use RandR 1.2 interface (rev 2) -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This adds the RandR 1.2 interface to xwayland and allows modes -advertised by the compositor to be set in an undistructive manner. - -With this patch, applications that try to set the resolution will usually -succeed and work while other apps using the same xwayland -instance are not affected at all. - -The RandR 1.2 interface will be needed to implement fake-mode-setting and -already makes applications work much cleaner and predictive when a mode -was set. - -[hdegoede@redhat.com: Make crtc_set only succeed if the mode matches - the desktop resolution] - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit e89872f51aa834fa9d94a4ca4822f03b0341ab4f) ---- - hw/xwayland/xwayland-output.c | 81 +++++++++++++++++++++++++++++++++++ - 1 file changed, 81 insertions(+) - -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index 2ccc3ca60..67e99bdab 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -561,12 +561,80 @@ xwl_randr_get_info(ScreenPtr pScreen, Rotation * rotations) - return TRUE; - } - -+#ifdef RANDR_10_INTERFACE - static Bool - xwl_randr_set_config(ScreenPtr pScreen, - Rotation rotation, int rate, RRScreenSizePtr pSize) - { - return FALSE; - } -+#endif -+ -+#if RANDR_12_INTERFACE -+static Bool -+xwl_randr_screen_set_size(ScreenPtr pScreen, -+ CARD16 width, -+ CARD16 height, -+ CARD32 mmWidth, CARD32 mmHeight) -+{ -+ return TRUE; -+} -+ -+static Bool -+xwl_randr_crtc_set(ScreenPtr pScreen, -+ RRCrtcPtr crtc, -+ RRModePtr mode, -+ int x, -+ int y, -+ Rotation rotation, -+ int numOutputs, RROutputPtr * outputs) -+{ -+ struct xwl_output *xwl_output = crtc->devPrivate; -+ -+ if (!mode || (mode->mode.width == xwl_output->width && -+ mode->mode.height == xwl_output->height)) { -+ RRCrtcChanged(crtc, TRUE); -+ return TRUE; -+ } -+ -+ return FALSE; -+} -+ -+static Bool -+xwl_randr_crtc_set_gamma(ScreenPtr pScreen, RRCrtcPtr crtc) -+{ -+ return TRUE; -+} -+ -+static Bool -+xwl_randr_crtc_get_gamma(ScreenPtr pScreen, RRCrtcPtr crtc) -+{ -+ return TRUE; -+} -+ -+static Bool -+xwl_randr_output_set_property(ScreenPtr pScreen, -+ RROutputPtr output, -+ Atom property, -+ RRPropertyValuePtr value) -+{ -+ return TRUE; -+} -+ -+static Bool -+xwl_output_validate_mode(ScreenPtr pScreen, -+ RROutputPtr output, -+ RRModePtr mode) -+{ -+ return TRUE; -+} -+ -+static void -+xwl_randr_mode_destroy(ScreenPtr pScreen, RRModePtr mode) -+{ -+ return; -+} -+#endif - - Bool - xwl_screen_init_output(struct xwl_screen *xwl_screen) -@@ -580,7 +648,20 @@ xwl_screen_init_output(struct xwl_screen *xwl_screen) - - rp = rrGetScrPriv(xwl_screen->screen); - rp->rrGetInfo = xwl_randr_get_info; -+ -+#if RANDR_10_INTERFACE - rp->rrSetConfig = xwl_randr_set_config; -+#endif -+ -+#if RANDR_12_INTERFACE -+ rp->rrScreenSetSize = xwl_randr_screen_set_size; -+ rp->rrCrtcSet = xwl_randr_crtc_set; -+ rp->rrCrtcSetGamma = xwl_randr_crtc_set_gamma; -+ rp->rrCrtcGetGamma = xwl_randr_crtc_get_gamma; -+ rp->rrOutputSetProperty = xwl_randr_output_set_property; -+ rp->rrOutputValidateMode = xwl_output_validate_mode; -+ rp->rrModeDestroy = xwl_randr_mode_destroy; -+#endif - - return TRUE; - } --- -2.25.2 - diff --git a/0006-xwayland-Add-per-client-private-data.patch b/0006-xwayland-Add-per-client-private-data.patch deleted file mode 100644 index fc4b473..0000000 --- a/0006-xwayland-Add-per-client-private-data.patch +++ /dev/null @@ -1,80 +0,0 @@ -From 80ca38c4428a499a795084dc696c390b707749b9 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Thu, 29 Aug 2019 22:45:12 +0200 -Subject: [PATCH xserver 06/24] xwayland: Add per client private data -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add per client private data, which for now is empty. - -This is a preparation patch for adding randr/vidmode resolution -change emulation. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 905cb8b9e27add5f49a45fe167a0005bf05218bc) ---- - hw/xwayland/xwayland.c | 14 ++++++++++++++ - hw/xwayland/xwayland.h | 5 +++++ - 2 files changed, 19 insertions(+) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 3c50396f1..b0e37ceb9 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -135,11 +135,18 @@ ddxProcessArgument(int argc, char *argv[], int i) - return 0; - } - -+static DevPrivateKeyRec xwl_client_private_key; - static DevPrivateKeyRec xwl_window_private_key; - static DevPrivateKeyRec xwl_screen_private_key; - static DevPrivateKeyRec xwl_pixmap_private_key; - static DevPrivateKeyRec xwl_damage_private_key; - -+struct xwl_client * -+xwl_client_get(ClientPtr client) -+{ -+ return dixLookupPrivate(&client->devPrivates, &xwl_client_private_key); -+} -+ - static struct xwl_window * - xwl_window_get(WindowPtr window) - { -@@ -1143,6 +1150,13 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) - return FALSE; - if (!dixRegisterPrivateKey(&xwl_damage_private_key, PRIVATE_WINDOW, 0)) - return FALSE; -+ /* There are no easy to use new / delete client hooks, we could use a -+ * ClientStateCallback, but it is easier to let the dix code manage the -+ * memory for us. This will zero fill the initial xwl_client data. -+ */ -+ if (!dixRegisterPrivateKey(&xwl_client_private_key, PRIVATE_CLIENT, -+ sizeof(struct xwl_client))) -+ return FALSE; - - dixSetPrivate(&pScreen->devPrivates, &xwl_screen_private_key, xwl_screen); - xwl_screen->screen = pScreen; -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index c66997f00..593e92b64 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -379,8 +379,13 @@ struct xwl_output { - Bool xdg_output_done; - }; - -+struct xwl_client { -+}; -+ - void xwl_window_create_frame_callback(struct xwl_window *xwl_window); - -+struct xwl_client *xwl_client_get(ClientPtr client); -+ - void xwl_sync_events (struct xwl_screen *xwl_screen); - void xwl_surface_damage(struct xwl_screen *xwl_screen, - struct wl_surface *surface, --- -2.25.2 - diff --git a/0007-xwayland-Add-support-for-storing-per-client-per-outp.patch b/0007-xwayland-Add-support-for-storing-per-client-per-outp.patch deleted file mode 100644 index 4d9b532..0000000 --- a/0007-xwayland-Add-support-for-storing-per-client-per-outp.patch +++ /dev/null @@ -1,149 +0,0 @@ -From 879fed575deea57462217fc31eb331db8d23637c Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Thu, 29 Aug 2019 23:04:36 +0200 -Subject: [PATCH xserver 07/24] xwayland: Add support for storing per client - per output emulated resolution -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add support for storing per output randr/vidmode emulated resolution -into the per client data. - -Since we do not have a free/delete callback for the client this uses -a simple static array. The entries are tied to a specific output by the -server_output_id, with a server_output_id of 0 indicating a free slot -(0 is the "None" Wayland object id). - -Note that even if we were to store this in a linked list, we would still -need the server_output_id as this is *per client* *per output*. - -This is a preparation patch for adding randr/vidmode resolution -change emulation. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit aca0a588eb40a5e6669094a2ab7f71ca0ba06b16) ---- - hw/xwayland/xwayland-output.c | 67 +++++++++++++++++++++++++++++++++++ - hw/xwayland/xwayland.h | 17 +++++++++ - 2 files changed, 84 insertions(+) - -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index 67e99bdab..82ff5db70 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -245,6 +245,73 @@ update_screen_size(struct xwl_output *xwl_output, int width, int height) - update_desktop_dimensions(); - } - -+struct xwl_emulated_mode * -+xwl_output_get_emulated_mode_for_client(struct xwl_output *xwl_output, -+ ClientPtr client) -+{ -+ struct xwl_client *xwl_client = xwl_client_get(client); -+ int i; -+ -+ if (!xwl_output) -+ return NULL; -+ -+ for (i = 0; i < XWL_CLIENT_MAX_EMULATED_MODES; i++) { -+ if (xwl_client->emulated_modes[i].server_output_id == -+ xwl_output->server_output_id) -+ return &xwl_client->emulated_modes[i]; -+ } -+ -+ return NULL; -+} -+ -+static void -+xwl_output_add_emulated_mode_for_client(struct xwl_output *xwl_output, -+ ClientPtr client, -+ RRModePtr mode, -+ Bool from_vidmode) -+{ -+ struct xwl_client *xwl_client = xwl_client_get(client); -+ struct xwl_emulated_mode *emulated_mode; -+ int i; -+ -+ emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); -+ if (!emulated_mode) { -+ /* Find a free spot in the emulated modes array */ -+ for (i = 0; i < XWL_CLIENT_MAX_EMULATED_MODES; i++) { -+ if (xwl_client->emulated_modes[i].server_output_id == 0) { -+ emulated_mode = &xwl_client->emulated_modes[i]; -+ break; -+ } -+ } -+ } -+ if (!emulated_mode) { -+ static Bool warned; -+ -+ if (!warned) { -+ ErrorF("Ran out of space for emulated-modes, not adding mode"); -+ warned = TRUE; -+ } -+ -+ return; -+ } -+ -+ emulated_mode->server_output_id = xwl_output->server_output_id; -+ emulated_mode->width = mode->mode.width; -+ emulated_mode->height = mode->mode.height; -+ emulated_mode->from_vidmode = from_vidmode; -+} -+ -+static void -+xwl_output_remove_emulated_mode_for_client(struct xwl_output *xwl_output, -+ ClientPtr client) -+{ -+ struct xwl_emulated_mode *emulated_mode; -+ -+ emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); -+ if (emulated_mode) -+ memset(emulated_mode, 0, sizeof(*emulated_mode)); -+} -+ - /* From hw/xfree86/common/xf86DefModeSet.c with some obscure modes dropped */ - const int32_t xwl_output_fake_modes[][2] = { - /* 4:3 (1.33) */ -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index 593e92b64..0e6f92e63 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -379,7 +379,21 @@ struct xwl_output { - Bool xdg_output_done; - }; - -+/* Per client per output emulated randr/vidmode resolution info. */ -+struct xwl_emulated_mode { -+ uint32_t server_output_id; -+ int32_t width; -+ int32_t height; -+ Bool from_vidmode; -+}; -+ -+/* Apps which use randr/vidmode to change the mode when going fullscreen, -+ * usually change the mode of only a single monitor, so this should be plenty. -+ */ -+#define XWL_CLIENT_MAX_EMULATED_MODES 16 -+ - struct xwl_client { -+ struct xwl_emulated_mode emulated_modes[XWL_CLIENT_MAX_EMULATED_MODES]; - }; - - void xwl_window_create_frame_callback(struct xwl_window *xwl_window); -@@ -425,6 +439,9 @@ void xwl_output_destroy(struct xwl_output *xwl_output); - - void xwl_output_remove(struct xwl_output *xwl_output); - -+struct xwl_emulated_mode *xwl_output_get_emulated_mode_for_client( -+ struct xwl_output *xwl_output, ClientPtr client); -+ - RRModePtr xwayland_cvt(int HDisplay, int VDisplay, - float VRefresh, Bool Reduced, Bool Interlaced); - --- -2.25.2 - diff --git a/0008-xwayland-Add-support-for-randr-resolution-change-emu.patch b/0008-xwayland-Add-support-for-randr-resolution-change-emu.patch deleted file mode 100644 index 3038555..0000000 --- a/0008-xwayland-Add-support-for-randr-resolution-change-emu.patch +++ /dev/null @@ -1,462 +0,0 @@ -From a640802d33e0daccf2d4045ecb3e70cbf56bf0ac Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Tue, 2 Jul 2019 11:55:26 +0200 -Subject: [PATCH xserver 08/24] xwayland: Add support for randr-resolution - change emulation using viewport -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add support for per client randr-resolution change emulation using viewport, -for apps which want to change the resolution when going fullscreen. - -Partly based on earlier work on this by Robert Mader - -Note SDL2 and SFML do not restore randr resolution when going from -fullscreen -> windowed, I believe this is caused by us still reporting the -desktop resolution when they query the resolution. This is not a problem -because when windowed the toplevel window size includes the window-decorations -so it never matches the emulated resolution. - -One exception would be the window being resizable in Windowed mode and the -user resizing the window so that including decorations it matches the -emulated resolution *and* the window being at pos 0x0. But this is an -extreme corner case. Still I will submit patches upstream to SDL2 -and SFML to always restore the desktop resolution under Xwayland, -disabling resolution emulation all together when going windowed. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit d99b9ff0f237d15e7eb507484493c73b393d5dba) ---- - hw/xwayland/xwayland-input.c | 5 + - hw/xwayland/xwayland-output.c | 63 ++++++++++- - hw/xwayland/xwayland.c | 199 ++++++++++++++++++++++++++++++++++ - hw/xwayland/xwayland.h | 15 +++ - 4 files changed, 276 insertions(+), 6 deletions(-) - -diff --git a/hw/xwayland/xwayland-input.c b/hw/xwayland/xwayland-input.c -index fa46ac3e7..97b8cd132 100644 ---- a/hw/xwayland/xwayland-input.c -+++ b/hw/xwayland/xwayland-input.c -@@ -486,6 +486,11 @@ dispatch_pointer_motion_event(struct xwl_seat *xwl_seat) - int dx = xwl_seat->focus_window->window->drawable.x; - int dy = xwl_seat->focus_window->window->drawable.y; - -+ if (xwl_window_has_viewport_enabled(xwl_seat->focus_window)) { -+ sx *= xwl_seat->focus_window->scale_x; -+ sy *= xwl_seat->focus_window->scale_y; -+ } -+ - x = dx + sx; - y = dy + sy; - } else { -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index 82ff5db70..99ab1b288 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -408,6 +408,42 @@ err: - FatalError("Failed to allocate memory for list of RR modes"); - } - -+RRModePtr -+xwl_output_find_mode(struct xwl_output *xwl_output, -+ int32_t width, int32_t height) -+{ -+ RROutputPtr output = xwl_output->randr_output; -+ int i; -+ -+ /* width & height -1 means we want the actual output mode, which is idx 0 */ -+ if (width == -1 && height == -1 && output->modes) -+ return output->modes[0]; -+ -+ for (i = 0; i < output->numModes; i++) { -+ if (output->modes[i]->mode.width == width && output->modes[i]->mode.height == height) -+ return output->modes[i]; -+ } -+ -+ ErrorF("XWAYLAND: mode %dx%d is not available\n", width, height); -+ return NULL; -+} -+ -+void -+xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, -+ RRModePtr mode, Bool from_vidmode) -+{ -+ DebugF("XWAYLAND: xwl_output_set_emulated_mode from %s: %dx%d\n", -+ from_vidmode ? "vidmode" : "randr", -+ mode->mode.width, mode->mode.height); -+ -+ if (mode->mode.width == xwl_output->width && mode->mode.height == xwl_output->height) -+ xwl_output_remove_emulated_mode_for_client(xwl_output, client); -+ else -+ xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); -+ -+ xwl_screen_check_resolution_change_emulation(xwl_output->xwl_screen); -+} -+ - static void - apply_output_change(struct xwl_output *xwl_output) - { -@@ -650,21 +686,36 @@ xwl_randr_screen_set_size(ScreenPtr pScreen, - static Bool - xwl_randr_crtc_set(ScreenPtr pScreen, - RRCrtcPtr crtc, -- RRModePtr mode, -+ RRModePtr new_mode, - int x, - int y, - Rotation rotation, - int numOutputs, RROutputPtr * outputs) - { - struct xwl_output *xwl_output = crtc->devPrivate; -+ RRModePtr mode; - -- if (!mode || (mode->mode.width == xwl_output->width && -- mode->mode.height == xwl_output->height)) { -- RRCrtcChanged(crtc, TRUE); -- return TRUE; -+ if (new_mode) { -+ mode = xwl_output_find_mode(xwl_output, -+ new_mode->mode.width, -+ new_mode->mode.height); -+ } else { -+ mode = xwl_output_find_mode(xwl_output, -1, -1); - } -+ if (!mode) -+ return FALSE; - -- return FALSE; -+ xwl_output_set_emulated_mode(xwl_output, GetCurrentClient(), mode, FALSE); -+ -+ /* A real randr implementation would call: -+ * RRCrtcNotify(xwl_output->randr_crtc, mode, xwl_output->x, xwl_output->y, -+ * xwl_output->rotation, NULL, 1, &xwl_output->randr_output); -+ * here to update the mode reported to clients querying the randr settings -+ * but that influences *all* clients and we do randr mode change emulation -+ * on a per client basis. So we just return success here. -+ */ -+ -+ return TRUE; - } - - static Bool -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index b0e37ceb9..1ab5b3a28 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -176,6 +176,23 @@ xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen) - return xwl_screen->rootless && xwl_screen_has_viewport_support(xwl_screen); - } - -+/* Return the output @ 0x0, falling back to the first output in the list */ -+struct xwl_output * -+xwl_screen_get_first_output(struct xwl_screen *xwl_screen) -+{ -+ struct xwl_output *xwl_output; -+ -+ xorg_list_for_each_entry(xwl_output, &xwl_screen->output_list, link) { -+ if (xwl_output->x == 0 && xwl_output->y == 0) -+ return xwl_output; -+ } -+ -+ if (xorg_list_is_empty(&xwl_screen->output_list)) -+ return NULL; -+ -+ return xorg_list_first_entry(&xwl_screen->output_list, struct xwl_output, link); -+} -+ - static void - xwl_window_set_allow_commits(struct xwl_window *xwl_window, Bool allow, - const char *debug_msg) -@@ -512,6 +529,150 @@ xwl_pixmap_get(PixmapPtr pixmap) - return dixLookupPrivate(&pixmap->devPrivates, &xwl_pixmap_private_key); - } - -+Bool -+xwl_window_has_viewport_enabled(struct xwl_window *xwl_window) -+{ -+ return (xwl_window->viewport != NULL); -+} -+ -+static void -+xwl_window_disable_viewport(struct xwl_window *xwl_window) -+{ -+ assert (xwl_window->viewport); -+ -+ DebugF("XWAYLAND: disabling viewport\n"); -+ wp_viewport_destroy(xwl_window->viewport); -+ xwl_window->viewport = NULL; -+} -+ -+static void -+xwl_window_enable_viewport(struct xwl_window *xwl_window, -+ struct xwl_output *xwl_output, -+ struct xwl_emulated_mode *emulated_mode) -+{ -+ /* If necessary disable old viewport to apply new settings */ -+ if (xwl_window_has_viewport_enabled(xwl_window)) -+ xwl_window_disable_viewport(xwl_window); -+ -+ DebugF("XWAYLAND: enabling viewport %dx%d -> %dx%d\n", -+ emulated_mode->width, emulated_mode->height, -+ xwl_output->width, xwl_output->height); -+ -+ xwl_window->viewport = -+ wp_viewporter_get_viewport(xwl_window->xwl_screen->viewporter, -+ xwl_window->surface); -+ -+ wp_viewport_set_source(xwl_window->viewport, -+ wl_fixed_from_int(0), -+ wl_fixed_from_int(0), -+ wl_fixed_from_int(emulated_mode->width), -+ wl_fixed_from_int(emulated_mode->height)); -+ wp_viewport_set_destination(xwl_window->viewport, -+ xwl_output->width, -+ xwl_output->height); -+ -+ xwl_window->scale_x = (float)emulated_mode->width / xwl_output->width; -+ xwl_window->scale_y = (float)emulated_mode->height / xwl_output->height; -+} -+ -+static Bool -+xwl_screen_client_is_window_manager(struct xwl_screen *xwl_screen, -+ ClientPtr client) -+{ -+ WindowPtr root = xwl_screen->screen->root; -+ OtherClients *others; -+ -+ for (others = wOtherClients(root); others; others = others->next) { -+ if (SameClient(others, client)) { -+ if (others->mask & (SubstructureRedirectMask | ResizeRedirectMask)) -+ return TRUE; -+ } -+ } -+ -+ return FALSE; -+} -+ -+static ClientPtr -+xwl_window_get_owner(struct xwl_window *xwl_window) -+{ -+ WindowPtr window = xwl_window->window; -+ ClientPtr client = wClient(window); -+ -+ /* If the toplevel window is owned by the window-manager, then the -+ * actual client toplevel window has been reparented to a window-manager -+ * decoration window. In that case return the client of the -+ * first *and only* child of the toplevel (decoration) window. -+ */ -+ if (xwl_screen_client_is_window_manager(xwl_window->xwl_screen, client)) { -+ if (window->firstChild && window->firstChild == window->lastChild) -+ return wClient(window->firstChild); -+ else -+ return NULL; /* Should never happen, skip resolution emulation */ -+ } -+ -+ return client; -+} -+ -+static Bool -+xwl_window_should_enable_viewport(struct xwl_window *xwl_window, -+ struct xwl_output **xwl_output_ret, -+ struct xwl_emulated_mode **emulated_mode_ret) -+{ -+ struct xwl_screen *xwl_screen = xwl_window->xwl_screen; -+ struct xwl_emulated_mode *emulated_mode; -+ struct xwl_output *xwl_output; -+ ClientPtr owner; -+ -+ if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) -+ return FALSE; -+ -+ owner = xwl_window_get_owner(xwl_window); -+ if (!owner) -+ return FALSE; -+ -+ /* 1. Test if the window matches the emulated mode on one of the outputs -+ * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) -+ */ -+ xorg_list_for_each_entry(xwl_output, &xwl_screen->output_list, link) { -+ emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, owner); -+ if (!emulated_mode) -+ continue; -+ -+ if (xwl_window->x == xwl_output->x && -+ xwl_window->y == xwl_output->y && -+ xwl_window->width == emulated_mode->width && -+ xwl_window->height == emulated_mode->height) { -+ -+ *emulated_mode_ret = emulated_mode; -+ *xwl_output_ret = xwl_output; -+ return TRUE; -+ } -+ } -+ -+ return FALSE; -+} -+ -+static void -+xwl_window_check_resolution_change_emulation(struct xwl_window *xwl_window) -+{ -+ struct xwl_emulated_mode *emulated_mode; -+ struct xwl_output *xwl_output; -+ -+ if (xwl_window_should_enable_viewport(xwl_window, &xwl_output, &emulated_mode)) -+ xwl_window_enable_viewport(xwl_window, xwl_output, emulated_mode); -+ else if (xwl_window_has_viewport_enabled(xwl_window)) -+ xwl_window_disable_viewport(xwl_window); -+} -+ -+void -+xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen) -+{ -+ struct xwl_window *xwl_window; -+ -+ xorg_list_for_each_entry(xwl_window, &xwl_screen->window_list, link_window) -+ xwl_window_check_resolution_change_emulation(xwl_window); -+} -+ - static void - xwl_window_init_allow_commits(struct xwl_window *xwl_window) - { -@@ -582,6 +743,8 @@ ensure_surface_for_window(WindowPtr window) - - xwl_window->xwl_screen = xwl_screen; - xwl_window->window = window; -+ xwl_window->width = window->drawable.width; -+ xwl_window->height = window->drawable.height; - xwl_window->surface = wl_compositor_create_surface(xwl_screen->compositor); - if (xwl_window->surface == NULL) { - ErrorF("wl_display_create_surface failed\n"); -@@ -623,6 +786,7 @@ ensure_surface_for_window(WindowPtr window) - - dixSetPrivate(&window->devPrivates, &xwl_window_private_key, xwl_window); - xorg_list_init(&xwl_window->link_damage); -+ xorg_list_add(&xwl_window->link_window, &xwl_screen->window_list); - - #ifdef GLAMOR_HAS_GBM - xorg_list_init(&xwl_window->frame_callback_list); -@@ -716,8 +880,12 @@ xwl_unrealize_window(WindowPtr window) - if (!xwl_window) - return ret; - -+ if (xwl_window_has_viewport_enabled(xwl_window)) -+ xwl_window_disable_viewport(xwl_window); -+ - wl_surface_destroy(xwl_window->surface); - xorg_list_del(&xwl_window->link_damage); -+ xorg_list_del(&xwl_window->link_window); - unregister_damage(window); - - if (xwl_window->frame_callback) -@@ -767,6 +935,33 @@ xwl_set_window_pixmap(WindowPtr window, - ensure_surface_for_window(window); - } - -+static void -+xwl_resize_window(WindowPtr window, -+ int x, int y, -+ unsigned int width, unsigned int height, -+ WindowPtr sib) -+{ -+ ScreenPtr screen = window->drawable.pScreen; -+ struct xwl_screen *xwl_screen; -+ struct xwl_window *xwl_window; -+ -+ xwl_screen = xwl_screen_get(screen); -+ xwl_window = xwl_window_get(window); -+ -+ screen->ResizeWindow = xwl_screen->ResizeWindow; -+ (*screen->ResizeWindow) (window, x, y, width, height, sib); -+ xwl_screen->ResizeWindow = screen->ResizeWindow; -+ screen->ResizeWindow = xwl_resize_window; -+ -+ if (xwl_window) { -+ xwl_window->x = x; -+ xwl_window->y = y; -+ xwl_window->width = width; -+ xwl_window->height = height; -+ xwl_window_check_resolution_change_emulation(xwl_window); -+ } -+} -+ - static void - frame_callback(void *data, - struct wl_callback *callback, -@@ -1218,6 +1413,7 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) - xorg_list_init(&xwl_screen->output_list); - xorg_list_init(&xwl_screen->seat_list); - xorg_list_init(&xwl_screen->damage_window_list); -+ xorg_list_init(&xwl_screen->window_list); - xwl_screen->depth = 24; - - xwl_screen->display = wl_display_connect(NULL); -@@ -1316,6 +1512,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) - xwl_screen->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = xwl_close_screen; - -+ xwl_screen->ResizeWindow = pScreen->ResizeWindow; -+ pScreen->ResizeWindow = xwl_resize_window; -+ - if (xwl_screen->rootless) { - xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; - pScreen->SetWindowPixmap = xwl_set_window_pixmap; -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index 0e6f92e63..9adf3af76 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -135,10 +135,12 @@ struct xwl_screen { - DestroyWindowProcPtr DestroyWindow; - XYToWindowProcPtr XYToWindow; - SetWindowPixmapProcPtr SetWindowPixmap; -+ ResizeWindowProcPtr ResizeWindow; - - struct xorg_list output_list; - struct xorg_list seat_list; - struct xorg_list damage_window_list; -+ struct xorg_list window_list; - - int wayland_fd; - struct wl_display *display; -@@ -179,9 +181,13 @@ struct xwl_screen { - struct xwl_window { - struct xwl_screen *xwl_screen; - struct wl_surface *surface; -+ struct wp_viewport *viewport; -+ int32_t x, y, width, height; -+ float scale_x, scale_y; - struct wl_shell_surface *shell_surface; - WindowPtr window; - struct xorg_list link_damage; -+ struct xorg_list link_window; - struct wl_callback *frame_callback; - Bool allow_commits; - #ifdef GLAMOR_HAS_GBM -@@ -409,6 +415,9 @@ Bool xwl_screen_init_cursor(struct xwl_screen *xwl_screen); - - struct xwl_screen *xwl_screen_get(ScreenPtr screen); - Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen); -+struct xwl_output *xwl_screen_get_first_output(struct xwl_screen *xwl_screen); -+void xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen); -+Bool xwl_window_has_viewport_enabled(struct xwl_window *xwl_window); - - void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); - void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); -@@ -442,6 +451,12 @@ void xwl_output_remove(struct xwl_output *xwl_output); - struct xwl_emulated_mode *xwl_output_get_emulated_mode_for_client( - struct xwl_output *xwl_output, ClientPtr client); - -+RRModePtr xwl_output_find_mode(struct xwl_output *xwl_output, -+ int32_t width, int32_t height); -+void xwl_output_set_emulated_mode(struct xwl_output *xwl_output, -+ ClientPtr client, RRModePtr mode, -+ Bool from_vidmode); -+ - RRModePtr xwayland_cvt(int HDisplay, int VDisplay, - float VRefresh, Bool Reduced, Bool Interlaced); - --- -2.25.2 - diff --git a/0009-xwayland-Add-xwlRRModeToDisplayMode-helper-function.patch b/0009-xwayland-Add-xwlRRModeToDisplayMode-helper-function.patch deleted file mode 100644 index 403f950..0000000 --- a/0009-xwayland-Add-xwlRRModeToDisplayMode-helper-function.patch +++ /dev/null @@ -1,101 +0,0 @@ -From 62e8b2ff7471f1a48b8bac9f41cceecea4931c03 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 8 Jul 2019 14:00:27 +0200 -Subject: [PATCH xserver 09/24] xwayland: Add xwlRRModeToDisplayMode() helper - function -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This is a preparation patch for adding emulated mode/resolution change -support to Xwayland's XF86 vidmode extension emulation, using the -Wayland viewport extension. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 43c80078126f6f33c6ab7d3cf4668733bde03366) ---- - hw/xwayland/xwayland-vidmode.c | 51 +++++++++++++++++++--------------- - 1 file changed, 28 insertions(+), 23 deletions(-) - -diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c -index 0bcd11401..a59c9f6a9 100644 ---- a/hw/xwayland/xwayland-vidmode.c -+++ b/hw/xwayland/xwayland-vidmode.c -@@ -78,13 +78,37 @@ mode_refresh(const xRRModeInfo *mode_info) - return rate; - } - -+static void -+xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode) -+{ -+ const xRRModeInfo *mode_info = &rrmode->mode; -+ -+ mode->next = mode; -+ mode->prev = mode; -+ mode->name = ""; -+ mode->VScan = 1; -+ mode->Private = NULL; -+ mode->HDisplay = mode_info->width; -+ mode->HSyncStart = mode_info->hSyncStart; -+ mode->HSyncEnd = mode_info->hSyncEnd; -+ mode->HTotal = mode_info->hTotal; -+ mode->HSkew = mode_info->hSkew; -+ mode->VDisplay = mode_info->height; -+ mode->VSyncStart = mode_info->vSyncStart; -+ mode->VSyncEnd = mode_info->vSyncEnd; -+ mode->VTotal = mode_info->vTotal; -+ mode->Flags = mode_info->modeFlags; -+ mode->Clock = mode_info->dotClock / 1000.0; -+ mode->VRefresh = mode_refresh(mode_info); /* Or RRVerticalRefresh() */ -+ mode->HSync = mode_hsync(mode_info); -+} -+ - static Bool - xwlVidModeGetCurrentModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotClock) - { - DisplayModePtr pMod; - RROutputPtr output; - RRCrtcPtr crtc; -- xRRModeInfo rrmode; - - pMod = dixLookupPrivate(&pScreen->devPrivates, xwlVidModePrivateKey); - if (pMod == NULL) -@@ -98,30 +122,11 @@ xwlVidModeGetCurrentModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotCl - if (crtc == NULL) - return FALSE; - -- rrmode = crtc->mode->mode; -- -- pMod->next = pMod; -- pMod->prev = pMod; -- pMod->name = ""; -- pMod->VScan = 1; -- pMod->Private = NULL; -- pMod->HDisplay = rrmode.width; -- pMod->HSyncStart = rrmode.hSyncStart; -- pMod->HSyncEnd = rrmode.hSyncEnd; -- pMod->HTotal = rrmode.hTotal; -- pMod->HSkew = rrmode.hSkew; -- pMod->VDisplay = rrmode.height; -- pMod->VSyncStart = rrmode.vSyncStart; -- pMod->VSyncEnd = rrmode.vSyncEnd; -- pMod->VTotal = rrmode.vTotal; -- pMod->Flags = rrmode.modeFlags; -- pMod->Clock = rrmode.dotClock / 1000.0; -- pMod->VRefresh = mode_refresh(&rrmode); /* Or RRVerticalRefresh() */ -- pMod->HSync = mode_hsync(&rrmode); -- *mode = pMod; -+ xwlRRModeToDisplayMode(crtc->mode, pMod); - -+ *mode = pMod; - if (dotClock != NULL) -- *dotClock = rrmode.dotClock / 1000.0; -+ *dotClock = pMod->Clock; - - return TRUE; - } --- -2.25.2 - diff --git a/0010-xwayland-Add-xwlVidModeGetCurrentRRMode-helper-to-th.patch b/0010-xwayland-Add-xwlVidModeGetCurrentRRMode-helper-to-th.patch deleted file mode 100644 index 7fa5a19..0000000 --- a/0010-xwayland-Add-xwlVidModeGetCurrentRRMode-helper-to-th.patch +++ /dev/null @@ -1,193 +0,0 @@ -From 3ecabb250841ff0423744cd2291aaebf87b4239a Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 8 Jul 2019 18:35:27 +0200 -Subject: [PATCH xserver 10/24] xwayland: Add xwlVidModeGetCurrentRRMode helper - to the vidmode code -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -crtc->mode reflects the mode set through the xrandr extension, once we -add support for also changing the mode through the vidmode extension this -will no longer correctly reflect the emulated resolution. - -Add a new xwlVidModeGetCurrentRRMode helper which determines the mode by -looking at the emulated_mode instead. - -Likewise add a xwlVidModeGetRRMode helper and use that in -xwlVidModeCheckModeForMonitor/xwlVidModeCheckModeForDriver to allow any -mode listed in the randr_output's mode list. - -This is a preparation patch for adding emulated mode/resolution change -support to Xwayland's XF86 vidmode extension emulation. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit bcad1b813a04b9f3ff225f57a4baad09bd6315b9) ---- - hw/xwayland/xwayland-vidmode.c | 90 +++++++++++++++++++++------------- - 1 file changed, 56 insertions(+), 34 deletions(-) - -diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c -index a59c9f6a9..e9aea7269 100644 ---- a/hw/xwayland/xwayland-vidmode.c -+++ b/hw/xwayland/xwayland-vidmode.c -@@ -103,26 +103,56 @@ xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode) - mode->HSync = mode_hsync(mode_info); - } - -+static RRModePtr -+xwlVidModeGetRRMode(ScreenPtr pScreen, int32_t width, int32_t height) -+{ -+ RROutputPtr output = RRFirstOutput(pScreen); -+ -+ if (output == NULL) -+ return NULL; -+ -+ return xwl_output_find_mode(output->devPrivate, width, height); -+} -+ -+static RRModePtr -+xwlVidModeGetCurrentRRMode(ScreenPtr pScreen) -+{ -+ struct xwl_emulated_mode *emulated_mode; -+ struct xwl_output *xwl_output; -+ RROutputPtr output; -+ -+ output = RRFirstOutput(pScreen); -+ if (output == NULL) -+ return NULL; -+ -+ xwl_output = output->devPrivate; -+ emulated_mode = -+ xwl_output_get_emulated_mode_for_client(xwl_output, GetCurrentClient()); -+ -+ if (emulated_mode) { -+ return xwl_output_find_mode(xwl_output, -+ emulated_mode->width, -+ emulated_mode->height); -+ } else { -+ return xwl_output_find_mode(xwl_output, -1, -1); -+ } -+} -+ - static Bool - xwlVidModeGetCurrentModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotClock) - { - DisplayModePtr pMod; -- RROutputPtr output; -- RRCrtcPtr crtc; -+ RRModePtr rrmode; - - pMod = dixLookupPrivate(&pScreen->devPrivates, xwlVidModePrivateKey); - if (pMod == NULL) - return FALSE; - -- output = RRFirstOutput(pScreen); -- if (output == NULL) -- return FALSE; -- -- crtc = output->crtc; -- if (crtc == NULL) -+ rrmode = xwlVidModeGetCurrentRRMode(pScreen); -+ if (rrmode == NULL) - return FALSE; - -- xwlRRModeToDisplayMode(crtc->mode, pMod); -+ xwlRRModeToDisplayMode(rrmode, pMod); - - *mode = pMod; - if (dotClock != NULL) -@@ -135,9 +165,10 @@ static vidMonitorValue - xwlVidModeGetMonitorValue(ScreenPtr pScreen, int valtyp, int indx) - { - vidMonitorValue ret = { NULL, }; -- DisplayModePtr pMod; -+ RRModePtr rrmode; - -- if (!xwlVidModeGetCurrentModeline(pScreen, &pMod, NULL)) -+ rrmode = xwlVidModeGetCurrentRRMode(pScreen); -+ if (rrmode == NULL) - return ret; - - switch (valtyp) { -@@ -155,11 +186,11 @@ xwlVidModeGetMonitorValue(ScreenPtr pScreen, int valtyp, int indx) - break; - case VIDMODE_MON_HSYNC_LO: - case VIDMODE_MON_HSYNC_HI: -- ret.f = 100.0 * pMod->HSync; -+ ret.f = mode_hsync(&rrmode->mode) * 100.0; - break; - case VIDMODE_MON_VREFRESH_LO: - case VIDMODE_MON_VREFRESH_HI: -- ret.f = 100.0 * pMod->VRefresh; -+ ret.f = mode_refresh(&rrmode->mode) * 100.0; - break; - } - return ret; -@@ -168,13 +199,13 @@ xwlVidModeGetMonitorValue(ScreenPtr pScreen, int valtyp, int indx) - static int - xwlVidModeGetDotClock(ScreenPtr pScreen, int Clock) - { -- DisplayModePtr pMod; -+ RRModePtr rrmode; - -- if (!xwlVidModeGetCurrentModeline(pScreen, &pMod, NULL)) -+ rrmode = xwlVidModeGetCurrentRRMode(pScreen); -+ if (rrmode == NULL) - return 0; - -- return pMod->Clock; -- -+ return rrmode->mode.dotClock / 1000.0; - } - - static int -@@ -272,14 +303,15 @@ xwlVidModeLockZoom(ScreenPtr pScreen, Bool lock) - static ModeStatus - xwlVidModeCheckModeForMonitor(ScreenPtr pScreen, DisplayModePtr mode) - { -- DisplayModePtr pMod; -+ RRModePtr rrmode; - -- /* This should not happen */ -- if (!xwlVidModeGetCurrentModeline(pScreen, &pMod, NULL)) -+ rrmode = xwlVidModeGetRRMode(pScreen, mode->HDisplay, mode->VDisplay); -+ if (rrmode == NULL) - return MODE_ERROR; - - /* Only support mode with the same HSync/VRefresh as we advertise */ -- if (mode->HSync == pMod->HSync && mode->VRefresh == pMod->VRefresh) -+ if (mode->HSync == mode_hsync(&rrmode->mode) && -+ mode->VRefresh == mode_refresh(&rrmode->mode)) - return MODE_OK; - - /* All the rest is unsupported - If we want to succeed, return MODE_OK instead */ -@@ -289,20 +321,10 @@ xwlVidModeCheckModeForMonitor(ScreenPtr pScreen, DisplayModePtr mode) - static ModeStatus - xwlVidModeCheckModeForDriver(ScreenPtr pScreen, DisplayModePtr mode) - { -- DisplayModePtr pMod; -- -- /* This should not happen */ -- if (!xwlVidModeGetCurrentModeline(pScreen, &pMod, NULL)) -- return MODE_ERROR; -- -- if (mode->HTotal != pMod->HTotal) -- return MODE_BAD_HVALUE; -+ RRModePtr rrmode; - -- if (mode->VTotal != pMod->VTotal) -- return MODE_BAD_VVALUE; -- -- /* Unsupported for now, but pretend it works */ -- return MODE_OK; -+ rrmode = xwlVidModeGetRRMode(pScreen, mode->HDisplay, mode->VDisplay); -+ return rrmode ? MODE_OK : MODE_ERROR; - } - - static void --- -2.25.2 - diff --git a/0011-xwayland-Add-vidmode-mode-changing-emulation-support.patch b/0011-xwayland-Add-vidmode-mode-changing-emulation-support.patch deleted file mode 100644 index cf706e3..0000000 --- a/0011-xwayland-Add-vidmode-mode-changing-emulation-support.patch +++ /dev/null @@ -1,236 +0,0 @@ -From 86e32a877ded8d67ec26ed2bcc06bd80ec2a5915 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Tue, 9 Jul 2019 09:31:13 +0200 -Subject: [PATCH xserver 11/24] xwayland: Add vidmode mode changing emulation - support -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Add support for fake mode changes using viewport, for apps which want to -change the resolution when going fullscreen. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 38de6260816674b5430144cc38a8a27d93d1bf19) ---- - hw/xwayland/xwayland-vidmode.c | 130 ++++++++++++++++++++++----------- - 1 file changed, 86 insertions(+), 44 deletions(-) - -diff --git a/hw/xwayland/xwayland-vidmode.c b/hw/xwayland/xwayland-vidmode.c -index e9aea7269..56aac693a 100644 ---- a/hw/xwayland/xwayland-vidmode.c -+++ b/hw/xwayland/xwayland-vidmode.c -@@ -106,26 +106,25 @@ xwlRRModeToDisplayMode(RRModePtr rrmode, DisplayModePtr mode) - static RRModePtr - xwlVidModeGetRRMode(ScreenPtr pScreen, int32_t width, int32_t height) - { -- RROutputPtr output = RRFirstOutput(pScreen); -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); - -- if (output == NULL) -+ if (!xwl_output) - return NULL; - -- return xwl_output_find_mode(output->devPrivate, width, height); -+ return xwl_output_find_mode(xwl_output, width, height); - } - - static RRModePtr - xwlVidModeGetCurrentRRMode(ScreenPtr pScreen) - { -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); - struct xwl_emulated_mode *emulated_mode; -- struct xwl_output *xwl_output; -- RROutputPtr output; - -- output = RRFirstOutput(pScreen); -- if (output == NULL) -+ if (!xwl_output) - return NULL; - -- xwl_output = output->devPrivate; - emulated_mode = - xwl_output_get_emulated_mode_for_client(xwl_output, GetCurrentClient()); - -@@ -199,39 +198,79 @@ xwlVidModeGetMonitorValue(ScreenPtr pScreen, int valtyp, int indx) - static int - xwlVidModeGetDotClock(ScreenPtr pScreen, int Clock) - { -- RRModePtr rrmode; -- -- rrmode = xwlVidModeGetCurrentRRMode(pScreen); -- if (rrmode == NULL) -- return 0; -- -- return rrmode->mode.dotClock / 1000.0; -+ return Clock; - } - - static int - xwlVidModeGetNumOfClocks(ScreenPtr pScreen, Bool *progClock) - { -- return 1; -+ /* We emulate a programmable clock, rather then a fixed set of clocks */ -+ *progClock = TRUE; -+ return 0; - } - - static Bool - xwlVidModeGetClocks(ScreenPtr pScreen, int *Clocks) - { -- *Clocks = xwlVidModeGetDotClock(pScreen, 0); -- -- return TRUE; -+ return FALSE; /* Programmable clock, no clock list */ - } - -+/* GetFirstModeline and GetNextModeline are used from Xext/vidmode.c like this: -+ * if (pVidMode->GetFirstModeline(pScreen, &mode, &dotClock)) { -+ * do { -+ * ... -+ * if (...) -+ * break; -+ * } while (pVidMode->GetNextModeline(pScreen, &mode, &dotClock)); -+ * } -+ * IOW our caller basically always loops over all the modes. There never is a -+ * return to the mainloop between GetFirstModeline and NextModeline calls where -+ * other parts of the server may change our state so we do not need to worry -+ * about xwl_output->randr_output->modes changing underneath us. -+ * Thus we can simply implement these two callbacks by storing the enumeration -+ * index in pVidMode->Next. -+ */ -+ - static Bool - xwlVidModeGetNextModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotClock) - { -- return FALSE; -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); -+ VidModePtr pVidMode; -+ DisplayModePtr pMod; -+ intptr_t index; -+ -+ pMod = dixLookupPrivate(&pScreen->devPrivates, xwlVidModePrivateKey); -+ pVidMode = VidModeGetPtr(pScreen); -+ if (xwl_output == NULL || pMod == NULL || pVidMode == NULL) -+ return FALSE; -+ -+ index = (intptr_t)pVidMode->Next; -+ if (index >= xwl_output->randr_output->numModes) -+ return FALSE; -+ xwlRRModeToDisplayMode(xwl_output->randr_output->modes[index], pMod); -+ index++; -+ pVidMode->Next = (void *)index; -+ -+ *mode = pMod; -+ if (dotClock != NULL) -+ *dotClock = pMod->Clock; -+ -+ return TRUE; - } - - static Bool - xwlVidModeGetFirstModeline(ScreenPtr pScreen, DisplayModePtr *mode, int *dotClock) - { -- return xwlVidModeGetCurrentModeline(pScreen, mode, dotClock); -+ VidModePtr pVidMode; -+ intptr_t index = 0; -+ -+ pVidMode = VidModeGetPtr(pScreen); -+ if (pVidMode == NULL) -+ return FALSE; -+ -+ pVidMode->Next = (void *)index; /* 0 */ -+ return xwlVidModeGetNextModeline(pScreen, mode, dotClock); - } - - static Bool -@@ -251,37 +290,27 @@ xwlVidModeZoomViewport(ScreenPtr pScreen, int zoom) - static Bool - xwlVidModeSetViewPort(ScreenPtr pScreen, int x, int y) - { -- RROutputPtr output; -- RRCrtcPtr crtc; -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); - -- output = RRFirstOutput(pScreen); -- if (output == NULL) -- return FALSE; -- -- crtc = output->crtc; -- if (crtc == NULL) -+ if (!xwl_output) - return FALSE; - - /* Support only default viewport */ -- return (x == crtc->x && y == crtc->y); -+ return (x == xwl_output->x && y == xwl_output->y); - } - - static Bool - xwlVidModeGetViewPort(ScreenPtr pScreen, int *x, int *y) - { -- RROutputPtr output; -- RRCrtcPtr crtc; -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); - -- output = RRFirstOutput(pScreen); -- if (output == NULL) -+ if (!xwl_output) - return FALSE; - -- crtc = output->crtc; -- if (crtc == NULL) -- return FALSE; -- -- *x = crtc->x; -- *y = crtc->y; -+ *x = xwl_output->x; -+ *y = xwl_output->y; - - return TRUE; - } -@@ -289,8 +318,19 @@ xwlVidModeGetViewPort(ScreenPtr pScreen, int *x, int *y) - static Bool - xwlVidModeSwitchMode(ScreenPtr pScreen, DisplayModePtr mode) - { -- /* Unsupported for now */ -- return FALSE; -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); -+ RRModePtr rrmode; -+ -+ if (!xwl_output) -+ return FALSE; -+ -+ rrmode = xwl_output_find_mode(xwl_output, mode->HDisplay, mode->VDisplay); -+ if (rrmode == NULL) -+ return FALSE; -+ -+ xwl_output_set_emulated_mode(xwl_output, GetCurrentClient(), rrmode, TRUE); -+ return TRUE; - } - - static Bool -@@ -344,8 +384,10 @@ xwlVidModeAddModeline(ScreenPtr pScreen, DisplayModePtr mode) - static int - xwlVidModeGetNumOfModes(ScreenPtr pScreen) - { -- /* We have only one mode */ -- return 1; -+ struct xwl_screen *xwl_screen = xwl_screen_get(pScreen); -+ struct xwl_output *xwl_output = xwl_screen_get_first_output(xwl_screen); -+ -+ return xwl_output ? xwl_output->randr_output->numModes : 0; - } - - static Bool --- -2.25.2 - diff --git a/0012-xwayland-xwl_window_should_enable_viewport-Add-extra.patch b/0012-xwayland-xwl_window_should_enable_viewport-Add-extra.patch deleted file mode 100644 index 573ab8e..0000000 --- a/0012-xwayland-xwl_window_should_enable_viewport-Add-extra.patch +++ /dev/null @@ -1,57 +0,0 @@ -From fd95c9a52e35e994e140a925cfc01587257d4511 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 26 Aug 2019 12:26:34 +0200 -Subject: [PATCH xserver 12/24] xwayland: xwl_window_should_enable_viewport: - Add extra test -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Games based on the allegro gaming library or on ClanLib-1.0 do not size -their window to match the fullscreen resolution, instead they use a -window covering the entire screen, drawing only the fullscreen resolution -part of it. - -This commit adds a check for these games, so that we correctly apply a -viewport to them making fullscreen work properly for these games under -Xwayland. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 0c305dbff8a44f3fa3d6aefd372a967029a7a527) ---- - hw/xwayland/xwayland.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 1ab5b3a28..85036adfe 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -649,6 +649,23 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - } - } - -+ /* 2. Test if the window uses override-redirect + vidmode -+ * and matches (fully covers) the entire screen. -+ * This path gets hit by: allegro4, ClanLib-1.0. -+ */ -+ xwl_output = xwl_screen_get_first_output(xwl_screen); -+ emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, owner); -+ if (xwl_output && xwl_window->window->overrideRedirect && -+ emulated_mode && emulated_mode->from_vidmode && -+ xwl_window->x == 0 && xwl_window->y == 0 && -+ xwl_window->width == xwl_screen->width && -+ xwl_window->height == xwl_screen->height) { -+ -+ *emulated_mode_ret = emulated_mode; -+ *xwl_output_ret = xwl_output; -+ return TRUE; -+ } -+ - return FALSE; - } - --- -2.25.2 - diff --git a/0013-xwayland-Set-_XWAYLAND_RANDR_EMU_MONITOR_RECTS-prope.patch b/0013-xwayland-Set-_XWAYLAND_RANDR_EMU_MONITOR_RECTS-prope.patch deleted file mode 100644 index cfcfd4c..0000000 --- a/0013-xwayland-Set-_XWAYLAND_RANDR_EMU_MONITOR_RECTS-prope.patch +++ /dev/null @@ -1,205 +0,0 @@ -From dda4a8b2f672eb5791f39222dd0996e07b416eb7 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 2 Sep 2019 17:32:45 +0200 -Subject: [PATCH xserver 13/24] xwayland: Set _XWAYLAND_RANDR_EMU_MONITOR_RECTS - property for resolution emulation -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Apps using randr to change the resolution when going fullscreen, in -combination with _NET_WM_STATE_FULLSCREEN to tell the window-manager (WM) -to make their window fullscreen, expect the WM to give the fullscreen window -the size of the emulated resolution as would happen when run under Xorg (*). - -We need the WM to emulate this behavior for these apps to work correctly, -with Xwaylands resolution change emulation. For the WM to emulate this, -it needs to know about the emulated resolution for the Windows owning -client for each monitor. - -This commit adds a _XWAYLAND_RANDR_EMU_MONITOR_RECTS property, which -contains 4 Cardinals (32 bit integers) per monitor with resolution -emulation info. Window-managers can use this to get the emulated -resolution for the client and size the window correctly. - -*) Since under Xorg the resolution will actually be changed and after that -going fullscreen through NET_WM_STATE_FULLSCREEN will size the window to -be equal to the new resolution. - -Reviewed-by: Olivier Fourdan -Acked-by: Michel Dänzer -Signed-off-by: Hans de Goede -(cherry picked from commit 5315f988d9f175e4850f4259f691a68d95ce7ac2) ---- - hw/xwayland/xwayland-output.c | 77 +++++++++++++++++++++++++++++++++++ - hw/xwayland/xwayland.c | 23 +++++++++++ - hw/xwayland/xwayland.h | 3 ++ - 3 files changed, 103 insertions(+) - -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index 99ab1b288..20c254962 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -29,6 +29,7 @@ - - #include "xwayland.h" - #include -+#include - - #define DEFAULT_DPI 96 - #define ALL_ROTATIONS (RR_Rotate_0 | \ -@@ -428,6 +429,80 @@ xwl_output_find_mode(struct xwl_output *xwl_output, - return NULL; - } - -+struct xwl_output_randr_emu_prop { -+ Atom atom; -+ uint32_t rects[XWL_CLIENT_MAX_EMULATED_MODES][4]; -+ int rect_count; -+}; -+ -+static void -+xwl_output_randr_emu_prop(struct xwl_screen *xwl_screen, ClientPtr client, -+ struct xwl_output_randr_emu_prop *prop) -+{ -+ static const char atom_name[] = "_XWAYLAND_RANDR_EMU_MONITOR_RECTS"; -+ struct xwl_emulated_mode *emulated_mode; -+ struct xwl_output *xwl_output; -+ int index = 0; -+ -+ prop->atom = MakeAtom(atom_name, strlen(atom_name), TRUE); -+ -+ xorg_list_for_each_entry(xwl_output, &xwl_screen->output_list, link) { -+ emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); -+ if (!emulated_mode) -+ continue; -+ -+ prop->rects[index][0] = xwl_output->x; -+ prop->rects[index][1] = xwl_output->y; -+ prop->rects[index][2] = emulated_mode->width; -+ prop->rects[index][3] = emulated_mode->height; -+ index++; -+ } -+ -+ prop->rect_count = index; -+} -+ -+static void -+xwl_output_set_randr_emu_prop(WindowPtr window, -+ struct xwl_output_randr_emu_prop *prop) -+{ -+ if (!xwl_window_is_toplevel(window)) -+ return; -+ -+ if (prop->rect_count) { -+ dixChangeWindowProperty(serverClient, window, prop->atom, -+ XA_CARDINAL, 32, PropModeReplace, -+ prop->rect_count * 4, prop->rects, TRUE); -+ } else { -+ DeleteProperty(serverClient, window, prop->atom); -+ } -+} -+ -+static void -+xwl_output_set_randr_emu_prop_callback(void *resource, XID id, void *user_data) -+{ -+ xwl_output_set_randr_emu_prop(resource, user_data); -+} -+ -+static void -+xwl_output_set_randr_emu_props(struct xwl_screen *xwl_screen, ClientPtr client) -+{ -+ struct xwl_output_randr_emu_prop prop = {}; -+ -+ xwl_output_randr_emu_prop(xwl_screen, client, &prop); -+ FindClientResourcesByType(client, RT_WINDOW, -+ xwl_output_set_randr_emu_prop_callback, &prop); -+} -+ -+void -+xwl_output_set_window_randr_emu_props(struct xwl_screen *xwl_screen, -+ WindowPtr window) -+{ -+ struct xwl_output_randr_emu_prop prop = {}; -+ -+ xwl_output_randr_emu_prop(xwl_screen, wClient(window), &prop); -+ xwl_output_set_randr_emu_prop(window, &prop); -+} -+ - void - xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, - RRModePtr mode, Bool from_vidmode) -@@ -442,6 +517,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, - xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); - - xwl_screen_check_resolution_change_emulation(xwl_output->xwl_screen); -+ -+ xwl_output_set_randr_emu_props(xwl_output->xwl_screen, client); - } - - static void -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 85036adfe..e43f3de96 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -690,6 +690,27 @@ xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen) - xwl_window_check_resolution_change_emulation(xwl_window); - } - -+/* This checks if the passed in Window is a toplevel client window, note this -+ * returns false for window-manager decoration windows and returns true for -+ * the actual client top-level window even if it has been reparented to -+ * a window-manager decoration window. -+ */ -+Bool -+xwl_window_is_toplevel(WindowPtr window) -+{ -+ struct xwl_screen *xwl_screen = xwl_screen_get(window->drawable.pScreen); -+ -+ if (xwl_screen_client_is_window_manager(xwl_screen, wClient(window))) -+ return FALSE; -+ -+ /* CSD and override-redirect toplevel windows */ -+ if (window_get_damage(window)) -+ return TRUE; -+ -+ /* Normal toplevel client windows, reparented to decoration window */ -+ return (window->parent && window_get_damage(window->parent)); -+} -+ - static void - xwl_window_init_allow_commits(struct xwl_window *xwl_window) - { -@@ -855,6 +876,8 @@ xwl_realize_window(WindowPtr window) - return FALSE; - } - -+ xwl_output_set_window_randr_emu_props(xwl_screen, window); -+ - return ensure_surface_for_window(window); - } - -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index 9adf3af76..eb8c4bd70 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -418,6 +418,7 @@ Bool xwl_screen_has_resolution_change_emulation(struct xwl_screen *xwl_screen); - struct xwl_output *xwl_screen_get_first_output(struct xwl_screen *xwl_screen); - void xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen); - Bool xwl_window_has_viewport_enabled(struct xwl_window *xwl_window); -+Bool xwl_window_is_toplevel(WindowPtr window); - - void xwl_tablet_tool_set_cursor(struct xwl_tablet_tool *tool); - void xwl_seat_set_cursor(struct xwl_seat *xwl_seat); -@@ -456,6 +457,8 @@ RRModePtr xwl_output_find_mode(struct xwl_output *xwl_output, - void xwl_output_set_emulated_mode(struct xwl_output *xwl_output, - ClientPtr client, RRModePtr mode, - Bool from_vidmode); -+void xwl_output_set_window_randr_emu_props(struct xwl_screen *xwl_screen, -+ WindowPtr window); - - RRModePtr xwayland_cvt(int HDisplay, int VDisplay, - float VRefresh, Bool Reduced, Bool Interlaced); --- -2.25.2 - diff --git a/0014-xwayland-Cache-client-id-for-the-window-manager-clie.patch b/0014-xwayland-Cache-client-id-for-the-window-manager-clie.patch deleted file mode 100644 index 08c605f..0000000 --- a/0014-xwayland-Cache-client-id-for-the-window-manager-clie.patch +++ /dev/null @@ -1,137 +0,0 @@ -From aa0f9ba1aa3f12f7e65ed64ac03114f27c8bff1f Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 27 Jan 2020 11:08:00 +0100 -Subject: [PATCH xserver 14/24] xwayland: Cache client-id for the - window-manager client - -Instead of iterating over all clients which are listening for events on the -root window and checking if the client we are dealing with is the one -listening for SubstructureRedirectMask | ResizeRedirectMask events and thus -is the window-manager, cache the client-id of the window-manager in -xwl_screen and use that when checking if a client is the window-manager. - -Note that we cache and compare the client-id rather then the ClienPtr, -this saves reading the ClientPtr from the global clients array when doing -the comparison. - -Suggested-by: Olivier Fourdan -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit ded89300c1dd541f59fe6e93c5c69d7fe7088244) ---- - hw/xwayland/xwayland.c | 48 ++++++++++++++++++++++++++++-------------- - hw/xwayland/xwayland.h | 2 ++ - 2 files changed, 34 insertions(+), 16 deletions(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index e43f3de96..f4d433bca 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -576,20 +576,11 @@ xwl_window_enable_viewport(struct xwl_window *xwl_window, - } - - static Bool --xwl_screen_client_is_window_manager(struct xwl_screen *xwl_screen, -- ClientPtr client) -+window_is_wm_window(WindowPtr window) - { -- WindowPtr root = xwl_screen->screen->root; -- OtherClients *others; -- -- for (others = wOtherClients(root); others; others = others->next) { -- if (SameClient(others, client)) { -- if (others->mask & (SubstructureRedirectMask | ResizeRedirectMask)) -- return TRUE; -- } -- } -+ struct xwl_screen *xwl_screen = xwl_screen_get(window->drawable.pScreen); - -- return FALSE; -+ return CLIENT_ID(window->drawable.id) == xwl_screen->wm_client_id; - } - - static ClientPtr -@@ -603,7 +594,7 @@ xwl_window_get_owner(struct xwl_window *xwl_window) - * decoration window. In that case return the client of the - * first *and only* child of the toplevel (decoration) window. - */ -- if (xwl_screen_client_is_window_manager(xwl_window->xwl_screen, client)) { -+ if (window_is_wm_window(window)) { - if (window->firstChild && window->firstChild == window->lastChild) - return wClient(window->firstChild); - else -@@ -698,9 +689,7 @@ xwl_screen_check_resolution_change_emulation(struct xwl_screen *xwl_screen) - Bool - xwl_window_is_toplevel(WindowPtr window) - { -- struct xwl_screen *xwl_screen = xwl_screen_get(window->drawable.pScreen); -- -- if (xwl_screen_client_is_window_manager(xwl_screen, wClient(window))) -+ if (window_is_wm_window(window)) - return FALSE; - - /* CSD and override-redirect toplevel windows */ -@@ -975,6 +964,30 @@ xwl_set_window_pixmap(WindowPtr window, - ensure_surface_for_window(window); - } - -+static Bool -+xwl_change_window_attributes(WindowPtr window, unsigned long mask) -+{ -+ ScreenPtr screen = window->drawable.pScreen; -+ struct xwl_screen *xwl_screen = xwl_screen_get(screen); -+ OtherClients *others; -+ Bool ret; -+ -+ screen->ChangeWindowAttributes = xwl_screen->ChangeWindowAttributes; -+ ret = (*screen->ChangeWindowAttributes) (window, mask); -+ xwl_screen->ChangeWindowAttributes = screen->ChangeWindowAttributes; -+ screen->ChangeWindowAttributes = xwl_change_window_attributes; -+ -+ if (window != screen->root || !(mask & CWEventMask)) -+ return ret; -+ -+ for (others = wOtherClients(window); others; others = others->next) { -+ if (others->mask & (SubstructureRedirectMask | ResizeRedirectMask)) -+ xwl_screen->wm_client_id = CLIENT_ID(others->resource); -+ } -+ -+ return ret; -+} -+ - static void - xwl_resize_window(WindowPtr window, - int x, int y, -@@ -1552,6 +1565,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) - xwl_screen->CloseScreen = pScreen->CloseScreen; - pScreen->CloseScreen = xwl_close_screen; - -+ xwl_screen->ChangeWindowAttributes = pScreen->ChangeWindowAttributes; -+ pScreen->ChangeWindowAttributes = xwl_change_window_attributes; -+ - xwl_screen->ResizeWindow = pScreen->ResizeWindow; - pScreen->ResizeWindow = xwl_resize_window; - -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index eb8c4bd70..126af8823 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -118,6 +118,7 @@ struct xwl_screen { - int height; - int depth; - ScreenPtr screen; -+ int wm_client_id; - int expecting_event; - enum RootClipMode root_clip_mode; - -@@ -135,6 +136,7 @@ struct xwl_screen { - DestroyWindowProcPtr DestroyWindow; - XYToWindowProcPtr XYToWindow; - SetWindowPixmapProcPtr SetWindowPixmap; -+ ChangeWindowAttributesProcPtr ChangeWindowAttributes; - ResizeWindowProcPtr ResizeWindow; - - struct xorg_list output_list; --- -2.25.2 - diff --git a/0015-xwayland-Reuse-viewport-instead-of-recreating.patch b/0015-xwayland-Reuse-viewport-instead-of-recreating.patch deleted file mode 100644 index 3f6cb2d..0000000 --- a/0015-xwayland-Reuse-viewport-instead-of-recreating.patch +++ /dev/null @@ -1,50 +0,0 @@ -From 1f39cb2ef51c72ec0c448c5d9571540bb0d9f3eb Mon Sep 17 00:00:00 2001 -From: Roman Gilg -Date: Fri, 3 Jan 2020 17:12:14 +0100 -Subject: [PATCH xserver 15/24] xwayland: Reuse viewport instead of recreating - -When a viewport is already created we can reuse this object instead of -destroying it and getting a new one for updating the source rectangle and -destination size. - -Signed-off-by: Roman Gilg -Reviewed-by: Hans de Goede -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 948e02872feb641a176b3af82b6ef1201c97bb16) ---- - hw/xwayland/xwayland.c | 18 +++++++----------- - 1 file changed, 7 insertions(+), 11 deletions(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index f4d433bca..320589dde 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -550,17 +550,13 @@ xwl_window_enable_viewport(struct xwl_window *xwl_window, - struct xwl_output *xwl_output, - struct xwl_emulated_mode *emulated_mode) - { -- /* If necessary disable old viewport to apply new settings */ -- if (xwl_window_has_viewport_enabled(xwl_window)) -- xwl_window_disable_viewport(xwl_window); -- -- DebugF("XWAYLAND: enabling viewport %dx%d -> %dx%d\n", -- emulated_mode->width, emulated_mode->height, -- xwl_output->width, xwl_output->height); -- -- xwl_window->viewport = -- wp_viewporter_get_viewport(xwl_window->xwl_screen->viewporter, -- xwl_window->surface); -+ if (!xwl_window_has_viewport_enabled(xwl_window)) { -+ DebugF("XWAYLAND: enabling viewport %dx%d -> %dx%d\n", -+ emulated_mode->width, emulated_mode->height, -+ xwl_output->width, xwl_output->height); -+ xwl_window->viewport = wp_viewporter_get_viewport(xwl_window->xwl_screen->viewporter, -+ xwl_window->surface); -+ } - - wp_viewport_set_source(xwl_window->viewport, - wl_fixed_from_int(0), --- -2.25.2 - diff --git a/0016-xwayland-Recurse-on-finding-the-none-wm-owner.patch b/0016-xwayland-Recurse-on-finding-the-none-wm-owner.patch deleted file mode 100644 index 8299c92..0000000 --- a/0016-xwayland-Recurse-on-finding-the-none-wm-owner.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 8cedbfd448edf410a45c57addcee0e7304f11b86 Mon Sep 17 00:00:00 2001 -From: Roman Gilg -Date: Fri, 3 Jan 2020 17:27:28 +0100 -Subject: [PATCH xserver 16/24] xwayland: Recurse on finding the none-wm owner - -An X11 window manager might add a chain of parent windows when reparenting to a -decoration window. - -That is for example the case for KWin, which reparents client windows to one -decoration and another wrapper parent window. - -Account for that by a recursion into the tree. For now assume as before that -all X11 window managers reparent with one child only for these parent windows. - -Changes by Hans de Goede: -- Move the xwl_window_is_toplevel() from a later patch in this series here - as it really belongs together with these changes -- Drop no longer necessary xwl_window argument from window_get_none_wm_owner - parameters - -Signed-off-by: Roman Gilg -Reviewed-by: Hans de Goede -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit a69f7fbb54efc8ffad320c8afd23cb41fc9edc27) ---- - hw/xwayland/xwayland.c | 17 ++++++++--------- - 1 file changed, 8 insertions(+), 9 deletions(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 320589dde..f42b80b90 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -580,19 +580,18 @@ window_is_wm_window(WindowPtr window) - } - - static ClientPtr --xwl_window_get_owner(struct xwl_window *xwl_window) -+window_get_none_wm_owner(WindowPtr window) - { -- WindowPtr window = xwl_window->window; - ClientPtr client = wClient(window); - - /* If the toplevel window is owned by the window-manager, then the -- * actual client toplevel window has been reparented to a window-manager -- * decoration window. In that case return the client of the -- * first *and only* child of the toplevel (decoration) window. -+ * actual client toplevel window has been reparented to some window-manager -+ * decoration/wrapper windows. In that case recurse by checking the client -+ * of the first *and only* child of the decoration/wrapper window. - */ - if (window_is_wm_window(window)) { - if (window->firstChild && window->firstChild == window->lastChild) -- return wClient(window->firstChild); -+ return window_get_none_wm_owner(window->firstChild); - else - return NULL; /* Should never happen, skip resolution emulation */ - } -@@ -613,7 +612,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) - return FALSE; - -- owner = xwl_window_get_owner(xwl_window); -+ owner = window_get_none_wm_owner(xwl_window->window); - if (!owner) - return FALSE; - -@@ -692,8 +691,8 @@ xwl_window_is_toplevel(WindowPtr window) - if (window_get_damage(window)) - return TRUE; - -- /* Normal toplevel client windows, reparented to decoration window */ -- return (window->parent && window_get_damage(window->parent)); -+ /* Normal toplevel client windows, reparented to a window-manager window */ -+ return window->parent && window_is_wm_window(window->parent); - } - - static void --- -2.25.2 - diff --git a/0017-xwayland-Make-window_get_none_wm_owner-return-a-Wind.patch b/0017-xwayland-Make-window_get_none_wm_owner-return-a-Wind.patch deleted file mode 100644 index b9a2331..0000000 --- a/0017-xwayland-Make-window_get_none_wm_owner-return-a-Wind.patch +++ /dev/null @@ -1,82 +0,0 @@ -From 939a78925a1d591e6aaf291a6609b9c6e54ee6ce Mon Sep 17 00:00:00 2001 -From: Roman Gilg -Date: Wed, 15 Jan 2020 10:07:58 +0100 -Subject: [PATCH xserver 17/24] xwayland: Make window_get_none_wm_owner return - a Window instead of a Client - -Make window_get_none_wm_owner return the first non-wm-window instead of the -owner (client) of the first non-wm-window and rename it to -window_get_client_toplevel to match its new behavior. - -This is a preparation patch for switching to using the drawable coordinates -in xwl_window_should_enable_viewport() - -Changes by Hans de Goede: -- Split this change out into a separate patch for easier reviewing -- Rename window_get_none_wm_owner to window_get_client_toplevel to match - its new behavior - -Signed-off-by: Roman Gilg -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 060f10062eb1761515b762b46cba56c7a53db72c) ---- - hw/xwayland/xwayland.c | 17 ++++++++++------- - 1 file changed, 10 insertions(+), 7 deletions(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index f42b80b90..d70d729ae 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -579,10 +579,10 @@ window_is_wm_window(WindowPtr window) - return CLIENT_ID(window->drawable.id) == xwl_screen->wm_client_id; - } - --static ClientPtr --window_get_none_wm_owner(WindowPtr window) -+static WindowPtr -+window_get_client_toplevel(WindowPtr window) - { -- ClientPtr client = wClient(window); -+ assert(window); - - /* If the toplevel window is owned by the window-manager, then the - * actual client toplevel window has been reparented to some window-manager -@@ -591,12 +591,12 @@ window_get_none_wm_owner(WindowPtr window) - */ - if (window_is_wm_window(window)) { - if (window->firstChild && window->firstChild == window->lastChild) -- return window_get_none_wm_owner(window->firstChild); -+ return window_get_client_toplevel(window->firstChild); - else - return NULL; /* Should never happen, skip resolution emulation */ - } - -- return client; -+ return window; - } - - static Bool -@@ -608,14 +608,17 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - struct xwl_emulated_mode *emulated_mode; - struct xwl_output *xwl_output; - ClientPtr owner; -+ WindowPtr window; - - if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) - return FALSE; - -- owner = window_get_none_wm_owner(xwl_window->window); -- if (!owner) -+ window = window_get_client_toplevel(xwl_window->window); -+ if (!window) - return FALSE; - -+ owner = wClient(window); -+ - /* 1. Test if the window matches the emulated mode on one of the outputs - * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) - */ --- -2.25.2 - diff --git a/0018-xwayland-Check-emulation-on-client-toplevel-resize.patch b/0018-xwayland-Check-emulation-on-client-toplevel-resize.patch deleted file mode 100644 index dcc0f5e..0000000 --- a/0018-xwayland-Check-emulation-on-client-toplevel-resize.patch +++ /dev/null @@ -1,121 +0,0 @@ -From c5d9cb5f4bc4f703b66fc524a76247c742490b30 Mon Sep 17 00:00:00 2001 -From: Roman Gilg -Date: Fri, 3 Jan 2020 17:55:28 +0100 -Subject: [PATCH xserver 18/24] xwayland: Check emulation on client toplevel - resize - -When a reparented window is resized directly check the emulation instead of -doing this only when the window manager parent window is resized, what might -never happen. - -For that to work we need to make sure that we compare the current size of the -client toplevel when looking for an emulated mode. - -Changes by Hans de Goede: -- Remove xwl_window x, y, width and height members as those are no longer used. -- Add check for xwl_window_from_window() returning NULL. - -Signed-off-by: Roman Gilg -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 6d98f840da6dfcf2a69e03a1b3fa0bf602ba1f27) ---- - hw/xwayland/xwayland.c | 27 +++++++++++---------------- - hw/xwayland/xwayland.h | 1 - - 2 files changed, 11 insertions(+), 17 deletions(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index d70d729ae..14227a327 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -609,6 +609,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - struct xwl_output *xwl_output; - ClientPtr owner; - WindowPtr window; -+ DrawablePtr drawable; - - if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) - return FALSE; -@@ -618,6 +619,7 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - return FALSE; - - owner = wClient(window); -+ drawable = &window->drawable; - - /* 1. Test if the window matches the emulated mode on one of the outputs - * This path gets hit by most games / libs (e.g. SDL, SFML, OGRE) -@@ -627,10 +629,10 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - if (!emulated_mode) - continue; - -- if (xwl_window->x == xwl_output->x && -- xwl_window->y == xwl_output->y && -- xwl_window->width == emulated_mode->width && -- xwl_window->height == emulated_mode->height) { -+ if (drawable->x == xwl_output->x && -+ drawable->y == xwl_output->y && -+ drawable->width == emulated_mode->width && -+ drawable->height == emulated_mode->height) { - - *emulated_mode_ret = emulated_mode; - *xwl_output_ret = xwl_output; -@@ -646,9 +648,9 @@ xwl_window_should_enable_viewport(struct xwl_window *xwl_window, - emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, owner); - if (xwl_output && xwl_window->window->overrideRedirect && - emulated_mode && emulated_mode->from_vidmode && -- xwl_window->x == 0 && xwl_window->y == 0 && -- xwl_window->width == xwl_screen->width && -- xwl_window->height == xwl_screen->height) { -+ drawable->x == 0 && drawable->y == 0 && -+ drawable->width == xwl_screen->width && -+ drawable->height == xwl_screen->height) { - - *emulated_mode_ret = emulated_mode; - *xwl_output_ret = xwl_output; -@@ -768,8 +770,6 @@ ensure_surface_for_window(WindowPtr window) - - xwl_window->xwl_screen = xwl_screen; - xwl_window->window = window; -- xwl_window->width = window->drawable.width; -- xwl_window->height = window->drawable.height; - xwl_window->surface = wl_compositor_create_surface(xwl_screen->compositor); - if (xwl_window->surface == NULL) { - ErrorF("wl_display_create_surface failed\n"); -@@ -997,20 +997,15 @@ xwl_resize_window(WindowPtr window, - struct xwl_window *xwl_window; - - xwl_screen = xwl_screen_get(screen); -- xwl_window = xwl_window_get(window); -+ xwl_window = xwl_window_from_window(window); - - screen->ResizeWindow = xwl_screen->ResizeWindow; - (*screen->ResizeWindow) (window, x, y, width, height, sib); - xwl_screen->ResizeWindow = screen->ResizeWindow; - screen->ResizeWindow = xwl_resize_window; - -- if (xwl_window) { -- xwl_window->x = x; -- xwl_window->y = y; -- xwl_window->width = width; -- xwl_window->height = height; -+ if (xwl_window && xwl_window_is_toplevel(window)) - xwl_window_check_resolution_change_emulation(xwl_window); -- } - } - - static void -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index 126af8823..01aef27d2 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -184,7 +184,6 @@ struct xwl_window { - struct xwl_screen *xwl_screen; - struct wl_surface *surface; - struct wp_viewport *viewport; -- int32_t x, y, width, height; - float scale_x, scale_y; - struct wl_shell_surface *shell_surface; - WindowPtr window; --- -2.25.2 - diff --git a/0019-xwayland-Also-check-resolution-change-emulation-when.patch b/0019-xwayland-Also-check-resolution-change-emulation-when.patch deleted file mode 100644 index a1c0e84..0000000 --- a/0019-xwayland-Also-check-resolution-change-emulation-when.patch +++ /dev/null @@ -1,45 +0,0 @@ -From 63b0c0d76d1020f0cac331f3eff30fba07f79965 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Wed, 15 Jan 2020 14:36:45 +0100 -Subject: [PATCH xserver 19/24] xwayland: Also check - resolution-change-emulation when the xwl_window itself moves - -The recent change to use the top-level non-window-manager Window drawable -coordinates from xwl_window_check_resolution_change_emulation() in -combination with only calling it on a resize when the top-level window -is moved breaks things with mutter/gnome-shell. - -When fullscreening a X11 window, mutter moves its window-decoration Window -wrapping the top-level Window to the monitor's origin coordinates (e.g. 0x0) -last. This updates the top-level's drawable coordinates, but as the -actual MoveWindow is called on the wrapper Window and not on the toplevel -we do not call xwl_window_check_resolution_change_emulation() and we never -enable the viewport. - -This commit fixes this by also calling -xwl_window_check_resolution_change_emulation() if the Window being moved -is an xwl_window itself. - -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 4fc107460a349a1a46f0e5251e6fd2a31f4c0428) ---- - hw/xwayland/xwayland.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 14227a327..298ef3ac8 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -1004,7 +1004,7 @@ xwl_resize_window(WindowPtr window, - xwl_screen->ResizeWindow = screen->ResizeWindow; - screen->ResizeWindow = xwl_resize_window; - -- if (xwl_window && xwl_window_is_toplevel(window)) -+ if (xwl_window && (xwl_window_get(window) || xwl_window_is_toplevel(window))) - xwl_window_check_resolution_change_emulation(xwl_window); - } - --- -2.25.2 - diff --git a/0020-xwayland-Also-hook-screen-s-MoveWindow-method.patch b/0020-xwayland-Also-hook-screen-s-MoveWindow-method.patch deleted file mode 100644 index 51f3fe8..0000000 --- a/0020-xwayland-Also-hook-screen-s-MoveWindow-method.patch +++ /dev/null @@ -1,83 +0,0 @@ -From 309e6e549adc5a164541d16822745c022cd8574b Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Thu, 9 Jan 2020 11:00:36 +0100 -Subject: [PATCH xserver 20/24] xwayland: Also hook screen's MoveWindow method - -Not only hook the ResizeWindow method of the screen (which really is -MoveAndResize) but also hook the MoveWindow method for checking if we -need to setup a viewport for resolution change emulation. - -Our resolution change emulation check if the windows origin matches -the monitors origin and the windows origin can also be changed by just -a move without being resized. - -Also checking on a move becomes esp. important when we move to checking -on changes to the top-level non-window-manager client (X11)Window instead -of on changes to the xwl_window later on in this patch series. - -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 10df0437a2b142e61c4d84ffffa9592ac6846ef1) ---- - hw/xwayland/xwayland.c | 25 +++++++++++++++++++++++++ - hw/xwayland/xwayland.h | 1 + - 2 files changed, 26 insertions(+) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 298ef3ac8..1294ff1d8 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -1008,6 +1008,28 @@ xwl_resize_window(WindowPtr window, - xwl_window_check_resolution_change_emulation(xwl_window); - } - -+static void -+xwl_move_window(WindowPtr window, -+ int x, int y, -+ WindowPtr next_sib, -+ VTKind kind) -+{ -+ ScreenPtr screen = window->drawable.pScreen; -+ struct xwl_screen *xwl_screen; -+ struct xwl_window *xwl_window; -+ -+ xwl_screen = xwl_screen_get(screen); -+ xwl_window = xwl_window_from_window(window); -+ -+ screen->MoveWindow = xwl_screen->MoveWindow; -+ (*screen->MoveWindow) (window, x, y, next_sib, kind); -+ xwl_screen->MoveWindow = screen->MoveWindow; -+ screen->MoveWindow = xwl_move_window; -+ -+ if (xwl_window && (xwl_window_get(window) || xwl_window_is_toplevel(window))) -+ xwl_window_check_resolution_change_emulation(xwl_window); -+} -+ - static void - frame_callback(void *data, - struct wl_callback *callback, -@@ -1564,6 +1586,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) - xwl_screen->ResizeWindow = pScreen->ResizeWindow; - pScreen->ResizeWindow = xwl_resize_window; - -+ xwl_screen->MoveWindow = pScreen->MoveWindow; -+ pScreen->MoveWindow = xwl_move_window; -+ - if (xwl_screen->rootless) { - xwl_screen->SetWindowPixmap = pScreen->SetWindowPixmap; - pScreen->SetWindowPixmap = xwl_set_window_pixmap; -diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h -index 01aef27d2..72225374b 100644 ---- a/hw/xwayland/xwayland.h -+++ b/hw/xwayland/xwayland.h -@@ -138,6 +138,7 @@ struct xwl_screen { - SetWindowPixmapProcPtr SetWindowPixmap; - ChangeWindowAttributesProcPtr ChangeWindowAttributes; - ResizeWindowProcPtr ResizeWindow; -+ MoveWindowProcPtr MoveWindow; - - struct xorg_list output_list; - struct xorg_list seat_list; --- -2.25.2 - diff --git a/0021-xwayland-Fix-emulated-modes-not-being-removed-when-s.patch b/0021-xwayland-Fix-emulated-modes-not-being-removed-when-s.patch deleted file mode 100644 index 2b1bc84..0000000 --- a/0021-xwayland-Fix-emulated-modes-not-being-removed-when-s.patch +++ /dev/null @@ -1,63 +0,0 @@ -From 52bbef1f55d17229684b0d76a478ec639c4032ed Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 7 Oct 2019 14:27:49 +0200 -Subject: [PATCH xserver 21/24] xwayland: Fix emulated modes not being removed - when screen rotation is used - -The code building the mode-list does the following to deal with screen -rotation: - - if (need_rotate || xwl_output->rotation & (RR_Rotate_0 | RR_Rotate_180)) { - mode_width = xwl_output->width; - mode_height = xwl_output->height; - } else { - mode_width = xwl_output->height; - mode_height = xwl_output->width; - } - -This means we need to do something similar in xwl_output_set_emulated_mode() -to determine if the mode being set is the actual (not-emulated) output mode -and we this should remove any emulated modes set by the client. - -All callers of xwl_output_set_emulated_mode always pass a mode pointer -to a member of xwl_output->randr_output->modes, so we do not need to -duplicate this code, instead we can simply check that the passed in mode -is modes[0] which always is the actual output mode. - -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 88342353de45e64f408c38bb10cd1506ba0f159a) ---- - hw/xwayland/xwayland-output.c | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index 20c254962..7d705d919 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -309,8 +309,11 @@ xwl_output_remove_emulated_mode_for_client(struct xwl_output *xwl_output, - struct xwl_emulated_mode *emulated_mode; - - emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); -- if (emulated_mode) -+ if (emulated_mode) { -+ DebugF("XWAYLAND: xwl_output_remove_emulated_mode: %dx%d\n", -+ emulated_mode->width, emulated_mode->height); - memset(emulated_mode, 0, sizeof(*emulated_mode)); -+ } - } - - /* From hw/xfree86/common/xf86DefModeSet.c with some obscure modes dropped */ -@@ -511,7 +514,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, - from_vidmode ? "vidmode" : "randr", - mode->mode.width, mode->mode.height); - -- if (mode->mode.width == xwl_output->width && mode->mode.height == xwl_output->height) -+ /* modes[0] is the actual (not-emulated) output mode */ -+ if (mode == xwl_output->randr_output->modes[0]) - xwl_output_remove_emulated_mode_for_client(xwl_output, client); - else - xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); --- -2.25.2 - diff --git a/0022-xwayland-Call-xwl_window_check_resolution_change_emu.patch b/0022-xwayland-Call-xwl_window_check_resolution_change_emu.patch deleted file mode 100644 index 0b6a07b..0000000 --- a/0022-xwayland-Call-xwl_window_check_resolution_change_emu.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 57d0ad44fd0b04fff98e9b484816dc95068a90cc Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 4 Nov 2019 11:46:49 +0100 -Subject: [PATCH xserver 22/24] xwayland: Call - xwl_window_check_resolution_change_emulation() on newly created O-R windows - -Some clients, which use vidmode to change the resolution when going fullscreen, -create an override-redirect window and never trigger the screen->ResizeWindow -callback we rely on to do the xwl_window_check_resolution_change_emulation(). - -This causes us to not apply a viewport to them, causing the fullscreen window -to not fill the entire monitor. - -This commit adds a call to xwl_window_check_resolution_change_emulation() -at the end of ensure_surface_for_window() to fix this. Note that -ensure_surface_for_window() exits early without creating an xwl_window -for new windows which will not be backed by a wayland surface and which -thus will not have an xwl_window. - -This fixes ClanLib-0.6.x and alleggl-4.4.x using apps not properly -fullscreening. - -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 4cfc2677f5c82ca5db0919de549b9b077f1ba113) ---- - hw/xwayland/xwayland.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 1294ff1d8..6b86e56bd 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -819,6 +819,11 @@ ensure_surface_for_window(WindowPtr window) - - xwl_window_init_allow_commits(xwl_window); - -+ if (!window_is_wm_window(window)) { -+ /* CSD or O-R toplevel window, check viewport on creation */ -+ xwl_window_check_resolution_change_emulation(xwl_window); -+ } -+ - return TRUE; - - err_surf: --- -2.25.2 - diff --git a/0023-xwayland-Fix-setting-of-_XWAYLAND_RANDR_EMU_MONITOR_.patch b/0023-xwayland-Fix-setting-of-_XWAYLAND_RANDR_EMU_MONITOR_.patch deleted file mode 100644 index f2654fb..0000000 --- a/0023-xwayland-Fix-setting-of-_XWAYLAND_RANDR_EMU_MONITOR_.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 87a1a7b9f8f7d848302057b9ca54f6729e82bbe7 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 4 Nov 2019 14:32:29 +0100 -Subject: [PATCH xserver 23/24] xwayland: Fix setting of - _XWAYLAND_RANDR_EMU_MONITOR_RECTS prop on new windows - -For window-manager managed windows, xwl_realize_window is only called for -the window-manager's decoration window and not for the actual client window -on which we should set the _XWAYLAND_RANDR_EMU_MONITOR_RECTS prop. - -Usualy this is not a problem since we walk all client windows to update -the property when the resolution is changed through a randr call. - -But for apps which first do the randr change and only then create their -window this does not work, and our xwl_output_set_window_randr_emu_props -call in xwl_realize_window is a no-op as that is only called for the wm -decoration window and not for the actual client's window. - -This commit fixes this by making ensure_surface_for_window() call -xwl_output_set_window_randr_emu_props on the first and only child of -window-manager managed windows. - -Note this also removes the non-functional xwl_output_set_window_randr_emu_props -call from xwl_realize_window, which was intended to do this, but does not -work. - -This fixes apps using the ogre3d library always running at the -monitors native resolution. - -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit 148f428dfccf606b932a00d5a00af06e8dca8a7e) ---- - hw/xwayland/xwayland.c | 12 +++++++++--- - 1 file changed, 9 insertions(+), 3 deletions(-) - -diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c -index 6b86e56bd..e721d6cb5 100644 ---- a/hw/xwayland/xwayland.c -+++ b/hw/xwayland/xwayland.c -@@ -749,6 +749,7 @@ ensure_surface_for_window(WindowPtr window) - struct xwl_screen *xwl_screen; - struct xwl_window *xwl_window; - struct wl_region *region; -+ WindowPtr toplevel; - - if (xwl_window_get(window)) - return TRUE; -@@ -819,7 +820,14 @@ ensure_surface_for_window(WindowPtr window) - - xwl_window_init_allow_commits(xwl_window); - -- if (!window_is_wm_window(window)) { -+ /* When a new window-manager window is realized, then the randr emulation -+ * props may have not been set on the managed client window yet. -+ */ -+ if (window_is_wm_window(window)) { -+ toplevel = window_get_client_toplevel(window); -+ if (toplevel) -+ xwl_output_set_window_randr_emu_props(xwl_screen, toplevel); -+ } else { - /* CSD or O-R toplevel window, check viewport on creation */ - xwl_window_check_resolution_change_emulation(xwl_window); - } -@@ -868,8 +876,6 @@ xwl_realize_window(WindowPtr window) - return FALSE; - } - -- xwl_output_set_window_randr_emu_props(xwl_screen, window); -- - return ensure_surface_for_window(window); - } - --- -2.25.2 - diff --git a/0024-xwayland-Remove-unnecessary-xwl_window_is_toplevel-c.patch b/0024-xwayland-Remove-unnecessary-xwl_window_is_toplevel-c.patch deleted file mode 100644 index c4925c2..0000000 --- a/0024-xwayland-Remove-unnecessary-xwl_window_is_toplevel-c.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 231d5e2da2e1b0aee3cfe6febc54daf7a0e4b4c7 Mon Sep 17 00:00:00 2001 -From: Hans de Goede -Date: Mon, 4 Nov 2019 15:01:18 +0100 -Subject: [PATCH xserver 24/24] xwayland: Remove unnecessary - xwl_window_is_toplevel() check from xwl_output_set_window_randr_emu_props() - -Since the recent fix to call xwl_output_set_window_randr_emu_props() from -ensure_surface_for_window(), it is now only called on a toplevel window, -so the is-toplevel check is not necessary for the -xwl_output_set_window_randr_emu_props() case. - -This commit moves the check to xwl_output_set_randr_emu_prop_callback() -so that we only do it when we are walking over all Windows of a client -to update the property on a change of the emulated resolution. - -Acked-by: Olivier Fourdan -Signed-off-by: Hans de Goede -(cherry picked from commit d4faab8708779df265239b203ed5f020bff681bf) ---- - hw/xwayland/xwayland-output.c | 6 ++---- - 1 file changed, 2 insertions(+), 4 deletions(-) - -diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c -index 7d705d919..084b669e4 100644 ---- a/hw/xwayland/xwayland-output.c -+++ b/hw/xwayland/xwayland-output.c -@@ -468,9 +468,6 @@ static void - xwl_output_set_randr_emu_prop(WindowPtr window, - struct xwl_output_randr_emu_prop *prop) - { -- if (!xwl_window_is_toplevel(window)) -- return; -- - if (prop->rect_count) { - dixChangeWindowProperty(serverClient, window, prop->atom, - XA_CARDINAL, 32, PropModeReplace, -@@ -483,7 +480,8 @@ xwl_output_set_randr_emu_prop(WindowPtr window, - static void - xwl_output_set_randr_emu_prop_callback(void *resource, XID id, void *user_data) - { -- xwl_output_set_randr_emu_prop(resource, user_data); -+ if (xwl_window_is_toplevel(resource)) -+ xwl_output_set_randr_emu_prop(resource, user_data); - } - - static void --- -2.25.2 - diff --git a/10-quirks.conf b/10-quirks.conf deleted file mode 100644 index 47907d8..0000000 --- a/10-quirks.conf +++ /dev/null @@ -1,38 +0,0 @@ -# Collection of quirks and blacklist/whitelists for specific devices. - - -# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable -# http://bugs.freedesktop.org/show_bug.cgi?id=22442 -Section "InputClass" - Identifier "ThinkPad HDAPS accelerometer blacklist" - MatchProduct "ThinkPad HDAPS accelerometer data" - Option "Ignore" "on" -EndSection - -# https://bugzilla.redhat.com/show_bug.cgi?id=523914 -# Mouse does not move in PV Xen guest -# Explicitly tell evdev to not ignore the absolute axes. -Section "InputClass" - Identifier "Xen Virtual Pointer axis blacklist" - MatchProduct "Xen Virtual Pointer" - Option "IgnoreAbsoluteAxes" "off" - Option "IgnoreRelativeAxes" "off" -EndSection - -# https://bugs.freedesktop.org/show_bug.cgi?id=55867 -# Bug 55867 - Doesn't know how to tag XI_TRACKBALL -Section "InputClass" - Identifier "Tag trackballs as XI_TRACKBALL" - MatchProduct "trackball" - MatchDriver "evdev" - Option "TypeName" "TRACKBALL" -EndSection - -# https://bugs.freedesktop.org/show_bug.cgi?id=62831 -# Bug 62831 - Mionix Naos 5000 mouse detected incorrectly -Section "InputClass" - Identifier "Tag Mionix Naos 5000 mouse XI_MOUSE" - MatchProduct "La-VIEW Technology Naos 5000 Mouse" - MatchDriver "evdev" - Option "TypeName" "MOUSE" -EndSection diff --git a/Makefile b/Makefile deleted file mode 100644 index 4041668..0000000 --- a/Makefile +++ /dev/null @@ -1,30 +0,0 @@ -# Makefile for source rpm: xorg-x11-server -# $Id$ -NAME := xorg-x11-server -SPECFILE = $(firstword $(wildcard *.spec)) - -define find-makefile-common -for d in common ../common ../../common ; do if [ -f $$d/Makefile.common ] ; then if [ -f $$d/CVS/Root -a -w $$d/Makefile.common ] ; then cd $$d ; cvs -Q update ; fi ; echo "$$d/Makefile.common" ; break ; fi ; done -endef - -MAKEFILE_COMMON := $(shell $(find-makefile-common)) - -ifeq ($(MAKEFILE_COMMON),) -# attempt a checkout -define checkout-makefile-common -test -f CVS/Root && { cvs -Q -d $$(cat CVS/Root) checkout common && echo "common/Makefile.common" ; } || { echo "ERROR: I can't figure out how to checkout the 'common' module." ; exit -1 ; } >&2 -endef - -MAKEFILE_COMMON := $(shell $(checkout-makefile-common)) -endif - -include $(MAKEFILE_COMMON) - -ifeq ($(MAKECMDGOALS),me a sandwich) -.PHONY :: me a sandwich -me a: - @: - -sandwich: - @[ `id -u` -ne 0 ] && echo "What? Make it yourself." || echo Okay. -endif diff --git a/commitid b/commitid deleted file mode 100644 index 7420e41..0000000 --- a/commitid +++ /dev/null @@ -1 +0,0 @@ -d13cb974426f7f1110b0bdb08c4ebb46ff8975f7 diff --git a/gitignore b/gitignore deleted file mode 100644 index 524cfc6..0000000 --- a/gitignore +++ /dev/null @@ -1,306 +0,0 @@ -Makefile -Makefile.in -.deps -.libs -.msg -*.lo -*.la -*.a -*.o -*~ -.*sw? -*.pbxuser -*.mode1v3 -obj* -build* -local -aclocal.m4 -autom4te.cache -compile -config.guess -config.log -config.status -config.sub -configure -configure.lineno -depcomp -install-sh -libtool -ltmain.sh -missing -TAGS -tags -ylwrap -xorg-server.pc -stamp-h? -do-not-use-config.h -do-not-use-config.h.in -afb/afbbltC.c -afb/afbbltCI.c -afb/afbbltG.c -afb/afbbltO.c -afb/afbbltX.c -afb/afbseg.c -afb/afbtileC.c -afb/afbtileG.c -cfb/cfb8lineCO.c -cfb/cfb8lineCP.c -cfb/cfb8lineG.c -cfb/cfb8lineX.c -cfb/cfb8segC.c -cfb/cfb8segCS.c -cfb/cfb8segX.c -cfb/cfb8setG.c -cfb/cfbbltC.c -cfb/cfbbltG.c -cfb/cfbbltO.c -cfb/cfbbltX.c -cfb/cfbfillarcC.c -cfb/cfbfillarcG.c -cfb/cfbglrop8.c -cfb/cfbply1rctC.c -cfb/cfbply1rctG.c -cfb/cfbseg.c -cfb/cfbsolidC.c -cfb/cfbsolidG.c -cfb/cfbsolidX.c -cfb/cfbtile32C.c -cfb/cfbtile32G.c -cfb/cfbtileoddC.c -cfb/cfbtileoddG.c -cfb/cfbzerarcC.c -cfb/cfbzerarcG.c -cfb/cfbzerarcX.c -cfb32/cfb8lineCO.c -cfb32/cfb8lineCP.c -cfb32/cfb8lineG.c -cfb32/cfb8lineX.c -cfb32/cfb8segC.c -cfb32/cfb8segCS.c -cfb32/cfb8segX.c -cfb32/cfb8setG.c -cfb32/cfbbltC.c -cfb32/cfbbltG.c -cfb32/cfbbltO.c -cfb32/cfbbltX.c -cfb32/cfbfillarcC.c -cfb32/cfbfillarcG.c -cfb32/cfbply1rctC.c -cfb32/cfbply1rctG.c -cfb32/cfbseg.c -cfb32/cfbsolidC.c -cfb32/cfbsolidG.c -cfb32/cfbsolidX.c -cfb32/cfbtile32C.c -cfb32/cfbtile32G.c -cfb32/cfbtileoddC.c -cfb32/cfbtileoddG.c -cfb32/cfbzerarcC.c -cfb32/cfbzerarcG.c -cfb32/cfbzerarcX.c -doc/Xserver.1x -doc/Xserver.man -hw/dmx/Xdmx -hw/dmx/Xdmx.1x -hw/dmx/config/dmxtodmx -hw/dmx/config/dmxtodmx.1x -hw/dmx/config/parser.c -hw/dmx/config/parser.h -hw/dmx/config/scanner.c -hw/dmx/config/vdltodmx -hw/dmx/config/vdltodmx.1x -hw/dmx/config/xdmxconfig -hw/dmx/config/xdmxconfig.1x -hw/dmx/examples/dmxaddinput -hw/dmx/examples/dmxaddscreen -hw/dmx/examples/dmxreconfig -hw/dmx/examples/dmxresize -hw/dmx/examples/dmxrminput -hw/dmx/examples/dmxrmscreen -hw/dmx/examples/dmxwininfo -hw/dmx/examples/ev -hw/dmx/examples/evi -hw/dmx/examples/res -hw/dmx/examples/xbell -hw/dmx/examples/xdmx -hw/dmx/examples/xinput -hw/dmx/examples/xled -hw/dmx/examples/xtest -hw/kdrive/ati/Xati -hw/kdrive/chips/Xchips -hw/kdrive/ephyr/Xephyr -hw/kdrive/epson/Xepson -hw/kdrive/fake/Xfake -hw/kdrive/fbdev/Xfbdev -hw/kdrive/i810/Xi810 -hw/kdrive/mach64/Xmach64 -hw/kdrive/mga/Xmga -hw/kdrive/neomagic/Xneomagic -hw/kdrive/nvidia/Xnvidia -hw/kdrive/pm2/Xpm2 -hw/kdrive/r128/Xr128 -hw/kdrive/sdl/Xsdl -hw/kdrive/sis300/Xsis -hw/kdrive/smi/Xsmi -hw/kdrive/vesa/Xvesa -hw/kdrive/via/Xvia -hw/vfb/Xvfb -hw/vfb/Xvfb.1x -hw/vfb/Xvfb.man -hw/xfree86/Xorg -hw/xfree86/common/xf86Build.h -hw/xfree86/common/xf86DefModeSet.c -hw/xfree86/doc/man/Xorg.1x -hw/xfree86/doc/man/Xorg.man -hw/xfree86/doc/man/xorg.conf.5x -hw/xfree86/doc/man/xorg.conf.man -hw/xfree86/exa/exa.4 -hw/xfree86/exa/exa.4x -hw/xfree86/exa/exa.man -hw/xfree86/fbdevhw/fbdevhw.4x -hw/xfree86/fbdevhw/fbdevhw.man -hw/xfree86/getconfig/cfg.man -hw/xfree86/getconfig/getconfig.1x -hw/xfree86/getconfig/getconfig.5x -hw/xfree86/getconfig/getconfig.man -hw/xfree86/os-support/xorgos.c -hw/xfree86/osandcommon.c -hw/xfree86/ramdac/xf86BitOrder.c -hw/xfree86/scanpci/xf86PciData.c -hw/xfree86/scanpci/xf86PciIds.h -hw/xfree86/utils/cvt/cvt -hw/xfree86/utils/cvt/cvt.man -hw/xfree86/utils/gtf/gtf -hw/xfree86/utils/gtf/gtf.1x -hw/xfree86/utils/gtf/gtf.man -hw/xfree86/utils/ioport/inb -hw/xfree86/utils/ioport/inl -hw/xfree86/utils/ioport/inw -hw/xfree86/utils/ioport/ioport -hw/xfree86/utils/ioport/outb -hw/xfree86/utils/ioport/outl -hw/xfree86/utils/ioport/outw -hw/xfree86/utils/pcitweak/pcitweak -hw/xfree86/utils/pcitweak/pcitweak.1x -hw/xfree86/utils/pcitweak/pcitweak.man -hw/xfree86/utils/scanpci/scanpci -hw/xfree86/utils/scanpci/scanpci.1x -hw/xfree86/utils/scanpci/scanpci.man -hw/xfree86/utils/xorgcfg/XOrgCfg -hw/xfree86/utils/xorgcfg/xorgcfg -hw/xfree86/utils/xorgcfg/xorgcfg.1x -hw/xfree86/utils/xorgcfg/xorgcfg.man -hw/xfree86/utils/xorgconfig/xorgconfig -hw/xfree86/utils/xorgconfig/xorgconfig.1x -hw/xfree86/utils/xorgconfig/xorgconfig.man -hw/xfree86/xaa/l-xaaBitmap.c -hw/xfree86/xaa/l-xaaStipple.c -hw/xfree86/xaa/l-xaaTEGlyph.c -hw/xfree86/xaa/l3-xaaBitmap.c -hw/xfree86/xaa/l3-xaaStipple.c -hw/xfree86/xaa/lf-xaaBitmap.c -hw/xfree86/xaa/lf-xaaStipple.c -hw/xfree86/xaa/lf-xaaTEGlyph.c -hw/xfree86/xaa/lf3-xaaBitmap.c -hw/xfree86/xaa/lf3-xaaStipple.c -hw/xfree86/xaa/m-xaaBitmap.c -hw/xfree86/xaa/m-xaaStipple.c -hw/xfree86/xaa/m-xaaTEGlyph.c -hw/xfree86/xaa/m3-xaaBitmap.c -hw/xfree86/xaa/m3-xaaStipple.c -hw/xfree86/xaa/mf-xaaBitmap.c -hw/xfree86/xaa/mf-xaaStipple.c -hw/xfree86/xaa/mf-xaaTEGlyph.c -hw/xfree86/xaa/mf3-xaaBitmap.c -hw/xfree86/xaa/mf3-xaaStipple.c -hw/xfree86/xaa/s-xaaDashLine.c -hw/xfree86/xaa/s-xaaLine.c -hw/xfree86/xf1bpp/maskbits.c -hw/xfree86/xf1bpp/mfbbitblt.c -hw/xfree86/xf1bpp/mfbbltC.c -hw/xfree86/xf1bpp/mfbbltCI.c -hw/xfree86/xf1bpp/mfbbltG.c -hw/xfree86/xf1bpp/mfbbltO.c -hw/xfree86/xf1bpp/mfbbltX.c -hw/xfree86/xf1bpp/mfbbres.c -hw/xfree86/xf1bpp/mfbbresd.c -hw/xfree86/xf1bpp/mfbclip.c -hw/xfree86/xf1bpp/mfbcmap.c -hw/xfree86/xf1bpp/mfbfillarc.c -hw/xfree86/xf1bpp/mfbfillrct.c -hw/xfree86/xf1bpp/mfbfillsp.c -hw/xfree86/xf1bpp/mfbfont.c -hw/xfree86/xf1bpp/mfbgc.c -hw/xfree86/xf1bpp/mfbgetsp.c -hw/xfree86/xf1bpp/mfbigbblak.c -hw/xfree86/xf1bpp/mfbigbwht.c -hw/xfree86/xf1bpp/mfbhrzvert.c -hw/xfree86/xf1bpp/mfbimage.c -hw/xfree86/xf1bpp/mfbline.c -hw/xfree86/xf1bpp/mfbmisc.c -hw/xfree86/xf1bpp/mfbpablack.c -hw/xfree86/xf1bpp/mfbpainv.c -hw/xfree86/xf1bpp/mfbpawhite.c -hw/xfree86/xf1bpp/mfbpgbblak.c -hw/xfree86/xf1bpp/mfbpgbinv.c -hw/xfree86/xf1bpp/mfbpgbwht.c -hw/xfree86/xf1bpp/mfbpixmap.c -hw/xfree86/xf1bpp/mfbplyblack.c -hw/xfree86/xf1bpp/mfbplyinv.c -hw/xfree86/xf1bpp/mfbplywhite.c -hw/xfree86/xf1bpp/mfbpntwin.c -hw/xfree86/xf1bpp/mfbpolypnt.c -hw/xfree86/xf1bpp/mfbpushpxl.c -hw/xfree86/xf1bpp/mfbscrclse.c -hw/xfree86/xf1bpp/mfbscrinit.c -hw/xfree86/xf1bpp/mfbseg.c -hw/xfree86/xf1bpp/mfbsetsp.c -hw/xfree86/xf1bpp/mfbteblack.c -hw/xfree86/xf1bpp/mfbtewhite.c -hw/xfree86/xf1bpp/mfbtileC.c -hw/xfree86/xf1bpp/mfbtileG.c -hw/xfree86/xf1bpp/mfbwindow.c -hw/xfree86/xf1bpp/mfbzerarc.c -hw/xfree86/xf4bpp/mfbseg.c -hw/xfree86/xf8_32bpp/cfbgc32.c -hw/xfree86/xf8_32bpp/cfbgc8.c -hw/xfree86/xorg.c -hw/xfree86/xorg.conf.example -hw/xfree86/xorg.conf.example.pre -hw/xnest/Xnest -hw/xnest/Xnest.1x -hw/xnest/Xnest.man -hw/xprint/Xprt -hw/xprint/config/C/print/Xprinters.ghostscript -hw/xprint/doc/Xprt.1x -hw/xprint/doc/Xprt.man -hw/xprint/dpmsstubs-wrapper.c -hw/xprint/miinitext-wrapper.c -include/dix-config.h -include/kdrive-config.h -include/xgl-config.h -include/xkb-config.h -include/xorg-config.h -include/xorg-server.h -include/xwin-config.h -mfb/mfbbltC.c -mfb/mfbbltCI.c -mfb/mfbbltG.c -mfb/mfbbltO.c -mfb/mfbbltX.c -mfb/mfbigbblak.c -mfb/mfbigbwht.c -mfb/mfbpablack.c -mfb/mfbpainv.c -mfb/mfbpawhite.c -mfb/mfbpgbblak.c -mfb/mfbpgbinv.c -mfb/mfbpgbwht.c -mfb/mfbplyblack.c -mfb/mfbplyinv.c -mfb/mfbplywhite.c -mfb/mfbseg.c -mfb/mfbteblack.c -mfb/mfbtewhite.c -mfb/mfbtileC.c -mfb/mfbtileG.c diff --git a/import.log b/import.log deleted file mode 100644 index 782e371..0000000 --- a/import.log +++ /dev/null @@ -1,6 +0,0 @@ -xorg-x11-server-1_5_0-1_fc10:HEAD:xorg-x11-server-1.5.0-1.fc10.src.rpm:1220485219 -xorg-x11-server-1_5_1-1_fc10:HEAD:xorg-x11-server-1.5.1-1.fc10.src.rpm:1222198557 -xorg-x11-server-1_5_2-1_fc10:HEAD:xorg-x11-server-1.5.2-1.fc10.src.rpm:1223667007 -xorg-x11-server-1_5_3-1_fc10:HEAD:xorg-x11-server-1.5.3-1.fc10.src.rpm:1225918317 -xorg-x11-server-1_6_0-1_fc11:HEAD:xorg-x11-server-1.6.0-1.fc11.src.rpm:1235594175 -xorg-x11-server-1_6_1-1_fc11:HEAD:xorg-x11-server-1.6.1-1.fc11.src.rpm:1239742477 diff --git a/make-git-snapshot.sh b/make-git-snapshot.sh deleted file mode 100755 index 0d9b2ad..0000000 --- a/make-git-snapshot.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -DIRNAME=xorg-server-$( date +%Y%m%d ) - -rm -rf $DIRNAME -git clone git://git.freedesktop.org/git/xorg/xserver $DIRNAME -cd $DIRNAME -if [ -z "$1" ]; then - git log | head -1 -else - git checkout $1 -fi -git log | head -1 | awk '{ print $2 }' > ../commitid -git repack -a -d -cd .. -tar cf - $DIRNAME | xz -c9 > $DIRNAME.tar.xz -rm -rf $DIRNAME diff --git a/sources b/sources index b0a0c91..888c6f9 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (xorg-server-1.20.8.tar.bz2) = ab0ec0fcbf490c61558b9297f61b58fd2dedb676c78bef6431dc9166054743b43a0091b88a8b3f4e81d1f539909440ee7e188a298cefabe13ea89159639cd805 +SHA512 (xorg-server-21.1.21.tar.xz) = bb2eb4e6756eb9e38b61bd47c017da44bcf5f45f2b7a906b4bb3a56b3d791cec64abb9bf37b224efe1e4fab9cc296f3672c9b2f8e00e1cdfc54337bef63cd16c diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 75532b0..788acf9 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -1,330 +1,230 @@ -# This package is an experiment in active integration of upstream SCM with -# Fedora packaging. It works something like this: -# -# The "pristine" source is actually a git repo (with no working checkout). -# The first step of %%prep is to check it out and switch to a "fedora" branch. -# If you need to add a patch to the server, just do it like a normal git -# operation, dump it with git-format-patch to a file in the standard naming -# format, and add a PatchN: line. If you want to push something upstream, -# check out the master branch, pull, cherry-pick, and push. - # X.org requires lazy relocations to work. %undefine _hardened_build %undefine _strict_symbol_defs_build -#global gitdate 20161026 -%global stable_abi 1 - -%if !0%{?gitdate} || %{stable_abi} -# Released ABI versions. Have to keep these manually in sync with the -# source because rpm is a terrible language. +# Released ABI versions: %global ansic_major 0 %global ansic_minor 4 -%global videodrv_major 24 -%global videodrv_minor 1 +%global videodrv_major 25 +%global videodrv_minor 2 %global xinput_major 24 -%global xinput_minor 1 +%global xinput_minor 4 %global extension_major 10 %global extension_minor 0 -%endif - -%if 0%{?gitdate} -# For git snapshots, use date for major and a serial number for minor -%global minor_serial 0 -%global git_ansic_major %{gitdate} -%global git_ansic_minor %{minor_serial} -%global git_videodrv_major %{gitdate} -%global git_videodrv_minor %{minor_serial} -%global git_xinput_major %{gitdate} -%global git_xinput_minor %{minor_serial} -%global git_extension_major %{gitdate} -%global git_extension_minor %{minor_serial} -%endif %global pkgname xorg-server -Summary: X.Org X11 X server -Name: xorg-x11-server -Version: 1.20.8 -Release: 1%{?gitdate:.%{gitdate}}%{?dist} -URL: http://www.x.org -License: MIT +Summary: X.Org X11 X server +Name: xorg-x11-server +Version: 21.1.21 +Release: 1%{?dist} +URL: http://www.x.org +# SPDX +License: Adobe-Display-PostScript AND BSD-3-Clause AND DEC-3-Clause AND HPND AND HPND-sell-MIT-disclaimer-xserver AND HPND-sell-variant AND ICU AND ISC AND MIT AND MIT-open-group AND NTP AND SGI-B-2.0 AND SMLNJ AND X11 AND X11-distribute-modifications-variant -#VCS: git:git://git.freedesktop.org/git/xorg/xserver -%if 0%{?gitdate} -# git snapshot. to recreate, run: -# ./make-git-snapshot.sh `cat commitid` -Source0: xorg-server-%{gitdate}.tar.xz -#Source0: http://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.bz2 -Source1: make-git-snapshot.sh -Source2: commitid -%else -Source0: https://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.bz2 -Source1: gitignore -%endif - -Source4: 10-quirks.conf +Source0: https://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.xz Source10: xserver.pamd - # "useful" xvfb-run script -Source20: http://svn.exactcode.de/t2/trunk/package/xorg/xorg-server/xvfb-run.sh - +Source20: http://svn.exactcode.de/t2/trunk/package/xorg/xorg-server/xvfb-run.sh # for requires generation in drivers -Source30: xserver-sdk-abi-requires.release -Source31: xserver-sdk-abi-requires.git - +Source30: xserver-sdk-abi-requires # maintainer convenience script -Source40: driver-abi-rebuild.sh +Source40: driver-abi-rebuild.sh # From Debian use intel ddx driver only for gen4 and older chipsets -Patch1: 06_use-intel-only-on-pre-gen4.diff +Patch0: 06_use-intel-only-on-pre-gen4.diff # Default to xf86-video-modesetting on GeForce 8 and newer -Patch2: 0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch - +Patch1: 0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch # Default to va_gl on intel i965 as we use the modesetting drv there # va_gl should probably just be the default everywhere ? -Patch3: 0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch - -# Submitted upstream, but not going anywhere -Patch5: 0001-autobind-GPUs-to-the-screen.patch - +Patch2: 0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch # because the display-managers are not ready yet, do not upstream -Patch6: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch +Patch3: 0001-Fedora-hack-Make-the-suid-root-wrapper-always-start-.patch -# Backports from current stable "server-1.20-branch": - -# Backports from "master" upstream: - -# Backported Xwayland randr resolution change emulation support -Patch501: 0001-dix-Add-GetCurrentClient-helper.patch -Patch502: 0002-xwayland-Add-wp_viewport-wayland-extension-support.patch -Patch503: 0003-xwayland-Use-buffer_damage-instead-of-surface-damage.patch -Patch504: 0004-xwayland-Add-fake-output-modes-to-xrandr-output-mode.patch -Patch505: 0005-xwayland-Use-RandR-1.2-interface-rev-2.patch -Patch506: 0006-xwayland-Add-per-client-private-data.patch -Patch507: 0007-xwayland-Add-support-for-storing-per-client-per-outp.patch -Patch508: 0008-xwayland-Add-support-for-randr-resolution-change-emu.patch -Patch509: 0009-xwayland-Add-xwlRRModeToDisplayMode-helper-function.patch -Patch510: 0010-xwayland-Add-xwlVidModeGetCurrentRRMode-helper-to-th.patch -Patch511: 0011-xwayland-Add-vidmode-mode-changing-emulation-support.patch -Patch512: 0012-xwayland-xwl_window_should_enable_viewport-Add-extra.patch -Patch513: 0013-xwayland-Set-_XWAYLAND_RANDR_EMU_MONITOR_RECTS-prope.patch -Patch514: 0014-xwayland-Cache-client-id-for-the-window-manager-clie.patch -Patch515: 0015-xwayland-Reuse-viewport-instead-of-recreating.patch -Patch516: 0016-xwayland-Recurse-on-finding-the-none-wm-owner.patch -Patch517: 0017-xwayland-Make-window_get_none_wm_owner-return-a-Wind.patch -Patch518: 0018-xwayland-Check-emulation-on-client-toplevel-resize.patch -Patch519: 0019-xwayland-Also-check-resolution-change-emulation-when.patch -Patch520: 0020-xwayland-Also-hook-screen-s-MoveWindow-method.patch -Patch521: 0021-xwayland-Fix-emulated-modes-not-being-removed-when-s.patch -Patch522: 0022-xwayland-Call-xwl_window_check_resolution_change_emu.patch -Patch523: 0023-xwayland-Fix-setting-of-_XWAYLAND_RANDR_EMU_MONITOR_.patch -Patch524: 0024-xwayland-Remove-unnecessary-xwl_window_is_toplevel-c.patch - -BuildRequires: systemtap-sdt-devel -BuildRequires: git -BuildRequires: automake autoconf libtool pkgconfig -BuildRequires: xorg-x11-util-macros >= 1.17 - -BuildRequires: xorg-x11-proto-devel >= 7.7-10 -BuildRequires: xorg-x11-font-utils >= 7.2-11 - -BuildRequires: dbus-devel libepoxy-devel systemd-devel -BuildRequires: xorg-x11-xtrans-devel >= 1.3.2 -BuildRequires: libXfont2-devel libXau-devel libxkbfile-devel libXres-devel -BuildRequires: libfontenc-devel libXtst-devel libXdmcp-devel -BuildRequires: libX11-devel libXext-devel -BuildRequires: libXinerama-devel libXi-devel - -# DMX config utils buildreqs. -BuildRequires: libXt-devel libdmx-devel libXmu-devel libXrender-devel -BuildRequires: libXi-devel libXpm-devel libXaw-devel libXfixes-devel - -BuildRequires: wayland-devel -BuildRequires: wayland-protocols-devel -BuildRequires: pkgconfig(wayland-eglstream-protocols) -BuildRequires: pkgconfig(wayland-client) >= 1.3.0 -BuildRequires: pkgconfig(epoxy) -BuildRequires: pkgconfig(xshmfence) >= 1.1 -BuildRequires: libXv-devel -BuildRequires: pixman-devel >= 0.30.0 -BuildRequires: libpciaccess-devel >= 0.13.1 openssl-devel bison flex flex-devel -BuildRequires: mesa-libGL-devel >= 9.2 -BuildRequires: mesa-libEGL-devel -BuildRequires: mesa-libgbm-devel -# XXX silly... -BuildRequires: libdrm-devel >= 2.4.0 kernel-headers - -BuildRequires: audit-libs-devel libselinux-devel >= 2.0.86-1 -BuildRequires: libudev-devel -# libunwind is Exclusive for the following arches -%ifarch aarch64 %{arm} hppa ia64 mips ppc ppc64 %{ix86} x86_64 -%if !0%{?rhel} -BuildRequires: libunwind-devel -%endif -%endif - -BuildRequires: pkgconfig(xcb-aux) pkgconfig(xcb-image) pkgconfig(xcb-icccm) -BuildRequires: pkgconfig(xcb-keysyms) pkgconfig(xcb-renderutil) +BuildRequires: bison +BuildRequires: flex +BuildRequires: gawk +BuildRequires: gcc +BuildRequires: kernel-headers +BuildRequires: libXi-devel +BuildRequires: libXinerama-devel +BuildRequires: libXres-devel +BuildRequires: libXv-devel +BuildRequires: make +BuildRequires: mesa-libEGL-devel +BuildRequires: mesa-libGL-devel >= 9.2 +BuildRequires: meson +BuildRequires: pkgconfig +BuildRequires: pkgconfig(audit) +BuildRequires: pkgconfig(bigreqsproto) >= 1.1.0 +BuildRequires: pkgconfig(compositeproto) >= 0.4 +BuildRequires: pkgconfig(damageproto) >= 1.1 +BuildRequires: pkgconfig(dbus-1) >= 1.0 +BuildRequires: pkgconfig(dri2proto) >= 2.8 +BuildRequires: pkgconfig(dri3proto) >= 1.2 +BuildRequires: pkgconfig(epoxy) +BuildRequires: pkgconfig(epoxy) >= 1.5.4 +BuildRequires: pkgconfig(fixesproto) >= 6.0 +BuildRequires: pkgconfig(fontsproto) >= 2.1.3 +BuildRequires: pkgconfig(gbm) >= 10.2 +BuildRequires: pkgconfig(inputproto) >= 2.3.99.1 +BuildRequires: pkgconfig(kbproto) >= 1.0.3 +BuildRequires: pkgconfig(libdrm) >= 2.4.89 +BuildRequires: pkgconfig(libselinux) >= 2.0.86 +BuildRequires: pkgconfig(libsystemd) >= 209 +BuildRequires: pkgconfig(libudev) >= 143 +BuildRequires: pkgconfig(libunwind) +BuildRequires: pkgconfig(libxcvt) +BuildRequires: pkgconfig(openssl) +BuildRequires: pkgconfig(pciaccess) >= 0.12.901 +BuildRequires: pkgconfig(pixman-1) +BuildRequires: pkgconfig(randrproto) >= 1.6.0 +BuildRequires: pkgconfig(recordproto) >= 1.13.99.1 +BuildRequires: pkgconfig(renderproto) >= 0.11 +BuildRequires: pkgconfig(resourceproto) >= 1.2.0 +BuildRequires: pkgconfig(scrnsaverproto) >= 1.1 +BuildRequires: pkgconfig(videoproto) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(x11-xcb) +BuildRequires: pkgconfig(xau) +BuildRequires: pkgconfig(xcb-aux) +BuildRequires: pkgconfig(xcb-icccm) +BuildRequires: pkgconfig(xcb-image) +BuildRequires: pkgconfig(xcb-keysyms) +BuildRequires: pkgconfig(xcb-renderutil) +BuildRequires: pkgconfig(xcmiscproto) >= 1.2.0 +BuildRequires: pkgconfig(xdmcp) +BuildRequires: pkgconfig(xext) >= 1.0.99.4 +BuildRequires: pkgconfig(xextproto) >= 7.2.99.901 +BuildRequires: pkgconfig(xf86bigfontproto) >= 1.2.0 +BuildRequires: pkgconfig(xf86vidmodeproto) >= 2.2.99.1 +BuildRequires: pkgconfig(xfont2) >= 2.0 +BuildRequires: pkgconfig(xineramaproto) +BuildRequires: pkgconfig(xkbfile) +BuildRequires: pkgconfig(xproto) >= 7.0.31 +BuildRequires: pkgconfig(xshmfence) >= 1.1 +BuildRequires: pkgconfig(xtrans) >= 1.3.5 +BuildRequires: pkgconfig(xtrans) >= 1.3.5 +BuildRequires: systemtap-sdt-devel +BuildRequires: xorg-x11-util-macros >= 1.17 +BuildRequires: xorg-x11-xtrans-devel >= 1.3.2 %description -X.Org X11 X server +X.Org X11 X server. -%package common -Summary: Xorg server common files -Requires: pixman >= 0.30.0 -Requires: xkeyboard-config xkbcomp +%package common +Summary: Xorg server common files +Requires: pixman +Requires: xkbcomp +Requires: xkeyboard-config -%description common +%description common Common files shared among all X servers. -%package Xorg -Summary: Xorg X server -Provides: Xorg = %{version}-%{release} -Provides: Xserver +%package Xorg +Summary: Xorg X server +Requires: libEGL +Requires: system-setup-keyboard +Requires: xorg-x11-drv-libinput +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xorg = %{version}-%{release} +Provides: Xserver # HdG: This should be moved to the wrapper package once the wrapper gets # its own sub-package: -Provides: xorg-x11-server-wrapper = %{version}-%{release} -%if !0%{?gitdate} || %{stable_abi} -Provides: xserver-abi(ansic-%{ansic_major}) = %{ansic_minor} -Provides: xserver-abi(videodrv-%{videodrv_major}) = %{videodrv_minor} -Provides: xserver-abi(xinput-%{xinput_major}) = %{xinput_minor} -Provides: xserver-abi(extension-%{extension_major}) = %{extension_minor} -%endif -%if 0%{?gitdate} -Provides: xserver-abi(ansic-%{git_ansic_major}) = %{git_ansic_minor} -Provides: xserver-abi(videodrv-%{git_videodrv_major}) = %{git_videodrv_minor} -Provides: xserver-abi(xinput-%{git_xinput_major}) = %{git_xinput_minor} -Provides: xserver-abi(extension-%{git_extension_major}) = %{git_extension_minor} -%endif -Obsoletes: xorg-x11-glamor < %{version}-%{release} -Provides: xorg-x11-glamor = %{version}-%{release} -Obsoletes: xorg-x11-drv-modesetting < %{version}-%{release} -Provides: xorg-x11-drv-modesetting = %{version}-%{release} -# Dropped from F25 -Obsoletes: xorg-x11-drv-vmmouse < 13.1.0-4 +Provides: xorg-x11-server-wrapper = %{version}-%{release} +Provides: xserver-abi(ansic-%{ansic_major}) = %{ansic_minor} +Provides: xserver-abi(videodrv-%{videodrv_major}) = %{videodrv_minor} +Provides: xserver-abi(xinput-%{xinput_major}) = %{xinput_minor} +Provides: xserver-abi(extension-%{extension_major}) = %{extension_minor} +# Dropped from xorg-x11-server-21.1 +# https://gitlab.freedesktop.org/xorg/xserver/-/commit/b3b81c8c2090cd49410960a021baf0d27fdd2ab3 +Obsoletes: xorg-x11-server-Xdmx < 1.20.15 +# Legacy fbdev devices have been replaced with simpledrm: +# https://fedoraproject.org/wiki/Changes/ReplaceFbdevDrivers +Obsoletes: xorg-x11-drv-fbdev < 0.5.0-19 +Obsoletes: xorg-x11-drv-vesa < 2.6.0-3 +Obsoletes: xorg-x11-drv-armsoc < 1.4.1-10 -Requires: xorg-x11-server-common >= %{version}-%{release} -Requires: system-setup-keyboard -Requires: xorg-x11-drv-libinput -Requires: libEGL - -%description Xorg -X.org X11 is an open source implementation of the X Window System. It -provides the basic low level functionality which full fledged -graphical user interfaces (GUIs) such as GNOME and KDE are designed -upon. +%description Xorg +X.org X11 is an open source implementation of the X Window System. It provides +the basic low level functionality which full fledged graphical user interfaces +(GUIs) such as GNOME and KDE are designed upon. -%package Xnest -Summary: A nested server -Requires: xorg-x11-server-common >= %{version}-%{release} -Provides: Xnest +%package Xnest +Summary: A nested server +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xnest -%description Xnest -Xnest is an X server which has been implemented as an ordinary -X application. It runs in a window just like other X applications, -but it is an X server itself in which you can run other software. It -is a very useful tool for developers who wish to test their -applications without running them on their real X server. +%description Xnest +Xnest is an X server which has been implemented as an ordinary X application. It +runs in a window just like other X applications, but it is an X server itself in +which you can run other software. It is a very useful tool for developers who +wish to test their applications without running them on their real X server. -%package Xdmx -Summary: Distributed Multihead X Server and utilities -Requires: xorg-x11-server-common >= %{version}-%{release} -Provides: Xdmx - -%description Xdmx -Xdmx is proxy X server that provides multi-head support for multiple displays -attached to different machines (each of which is running a typical X server). -When Xinerama is used with Xdmx, the multiple displays on multiple machines -are presented to the user as a single unified screen. A simple application -for Xdmx would be to provide multi-head support using two desktop machines, -each of which has a single display device attached to it. A complex -application for Xdmx would be to unify a 4 by 4 grid of 1280x1024 displays -(each attached to one of 16 computers) into a unified 5120x4096 display. - - -%package Xvfb -Summary: A X Windows System virtual framebuffer X server +%package Xvfb +Summary: A X Windows System virtual framebuffer X server # xvfb-run is GPLv2, rest is MIT -License: MIT and GPLv2 -Requires: xorg-x11-server-common >= %{version}-%{release} +License: MIT and GPL-2.0-only +Requires: xorg-x11-server-common >= %{version}-%{release} # required for xvfb-run -Requires: xorg-x11-xauth -Provides: Xvfb +Requires: xorg-x11-xauth +Provides: Xvfb +Requires: util-linux -%description Xvfb -Xvfb (X Virtual Frame Buffer) is an X server that is able to run on -machines with no display hardware and no physical input devices. -Xvfb simulates a dumb framebuffer using virtual memory. Xvfb does -not open any devices, but behaves otherwise as an X display. Xvfb -is normally used for testing servers. +%description Xvfb +Xvfb (X Virtual Frame Buffer) is an X server that is able to run on machines +with no display hardware and no physical input devices. Xvfb simulates a dumb +framebuffer using virtual memory. Xvfb does not open any devices, but behaves +otherwise as an X display. Xvfb is normally used for testing servers. -%package Xephyr -Summary: A nested server -Requires: xorg-x11-server-common >= %{version}-%{release} -Provides: Xephyr +%package Xephyr +Summary: A nested server +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xephyr -%description Xephyr -Xephyr is an X server which has been implemented as an ordinary -X application. It runs in a window just like other X applications, -but it is an X server itself in which you can run other software. It -is a very useful tool for developers who wish to test their -applications without running them on their real X server. Unlike -Xnest, Xephyr renders to an X image rather than relaying the -X protocol, and therefore supports the newer X extensions like -Render and Composite. +%description Xephyr +Xephyr is an X server which has been implemented as an ordinary X application. +It runs in a window just like other X applications, but it is an X server itself +in which you can run other software. It is a very useful tool for developers who +wish to test their applications without running them on their real X server. +Unlike Xnest, Xephyr renders to an X image rather than relaying the X protocol, +and therefore supports the newer X extensions like Render and Composite. -%package Xwayland -Summary: Wayland X Server -Requires: xorg-x11-server-common >= %{version}-%{release} -Requires: libEGL - -%description Xwayland -Xwayland is an X server for running X clients under Wayland. - - -%package devel -Summary: SDK for X server driver module development -Requires: xorg-x11-util-macros -Requires: xorg-x11-proto-devel -Requires: libXfont2-devel -Requires: pkgconfig pixman-devel libpciaccess-devel -Provides: xorg-x11-server-static -Obsoletes: xorg-x11-glamor-devel < %{version}-%{release} -Provides: xorg-x11-glamor-devel = %{version}-%{release} +%package devel +Summary: SDK for X server driver module development +Requires: libpciaccess-devel +Requires: libXfont2-devel +Requires: xorg-x11-proto-devel +Requires: xorg-x11-util-macros +Requires: pixman-devel +Requires: pkgconfig +Provides: xorg-x11-server-static %description devel The SDK package provides the developmental files which are necessary for -developing X server driver modules, and for compiling driver modules -outside of the standard X11 source code tree. Developers writing video -drivers, input drivers, or other X modules should install this package. +developing X server driver modules, and for compiling driver modules outside of +the standard X11 source code tree. Developers writing video drivers, input +drivers, or other X modules should install this package. -%package source -Summary: Xserver source code required to build VNC server (Xvnc) -BuildArch: noarch +%package source +Summary: Xserver source code required to build VNC server (Xvnc) +BuildArch: noarch -%description source -Xserver source code needed to build VNC server (Xvnc) +%description source +Xserver source code needed to build VNC server (Xvnc). %prep -%autosetup -N -n %{pkgname}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} -rm -rf .git -cp %{SOURCE1} .gitignore -# ick -%global __scm git -%{expand:%__scm_setup_git -q} -%autopatch +%autosetup -p1 -n %{pkgname}-%{version} -%if 0%{?stable_abi} # check the ABI in the source against what we expect. getmajor() { grep -i ^#define.ABI.$1_VERSION hw/xfree86/common/xf86Module.h | @@ -345,74 +245,80 @@ test `getminor xinput` == %{xinput_minor} test `getmajor extension` == %{extension_major} test `getminor extension` == %{extension_minor} -%endif - %build +%meson \ + -D agp=auto \ + -D builder_string="Build ID: %{name} %{version}-%{release}" \ + -D default_font_path="catalogue:/etc/X11/fontpath.d,built-ins" \ + -D devel-docs=false \ + -D dga=true \ + -D docs-pdf=false \ + -D docs=false \ + -D dpms=true \ + -D dri1=false \ + -D dri2=true \ + -D dri3=true \ + -D drm=true \ + -D dtrace=false \ + -D fallback_input_driver=libinput \ + -D glamor=true \ + -D glx=true \ + -D hal=false \ + -D input_thread=true \ + -D int10=false \ + -D ipv6=true \ + -D libunwind=true \ + -D linux_acpi=false \ + -D linux_apm=false \ + -D listen_local=true \ + -D listen_tcp=false \ + -D listen_unix=true \ + -D log_dir="%{_localstatedir}/log" \ + -D mitshm=auto \ + -D module_dir="%{_libdir}/xorg/modules" \ + -D pciaccess=true \ + -D screensaver=true \ + -D secure-rpc=false \ + -D sha1=libcrypto \ + -D suid_wrapper=true \ + -D systemd_logind=true \ + -D udev_kms=true \ + -D udev=true \ + -D vgahw=true \ + -D xace=true \ + -D xcsecurity=true \ + -D xdm-auth-1=true \ + -D xdmcp=true \ + -D xephyr=true \ + -D xf86bigfont=false \ + -D xf86-input-inputtest=true \ + -D xinerama=true \ + -D xkb_output_dir="%{_localstatedir}/lib/xkb" \ + -D xnest=true \ + -D xorg=true \ + -D xpbproxy=false \ + -D xquartz=false \ + -D xres=true \ + -D xselinux=true \ + -D xvfb=true \ + -D xvmc=true \ + -D xv=true \ + -D xwin=false -export CFLAGS="$RPM_OPT_FLAGS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" -export CXXFLAGS="$RPM_OPT_FLAGS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1" -export LDFLAGS="$RPM_LD_FLAGS -specs=/usr/lib/rpm/redhat/redhat-hardened-ld" - -%ifnarch %{ix86} x86_64 -%global no_int10 --disable-vbe --disable-int10-module -%endif - -%global kdrive --enable-kdrive --enable-xephyr --disable-xfake --disable-xfbdev -%global xservers --enable-xvfb --enable-xnest %{kdrive} --enable-xorg -%global default_font_path "catalogue:/etc/X11/fontpath.d,built-ins" -%global dri_flags --enable-dri --enable-dri2 %{?!rhel:--enable-dri3} --enable-suid-wrapper --enable-glamor -%global bodhi_flags --with-vendor-name="Fedora Project" - -autoreconf -f -v --install || exit 1 - -%configure %{xservers} \ - --enable-dependency-tracking \ - --enable-xwayland-eglstream \ - --disable-static \ - --with-pic \ - %{?no_int10} --with-int10=x86emu \ - --with-default-font-path=%{default_font_path} \ - --with-module-dir=%{_libdir}/xorg/modules \ - --with-builderstring="Build ID: %{name} %{version}-%{release}" \ - --with-os-name="$(hostname -s) $(uname -r)" \ - --with-xkb-output=%{_localstatedir}/lib/xkb \ - --without-dtrace \ - --disable-linux-acpi --disable-linux-apm \ - --enable-xselinux --enable-record --enable-present \ - --enable-config-udev \ - --disable-unit-tests \ - --enable-dmx \ - --enable-xwayland \ - %{dri_flags} %{?bodhi_flags} \ - ${CONFIGURE} - -make V=1 %{?_smp_mflags} - +%meson_build %install -%make_install +%meson_install -mkdir -p $RPM_BUILD_ROOT%{_libdir}/xorg/modules/{drivers,input} - -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pam.d -install -m 644 %{SOURCE10} $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/xserver - -mkdir -p $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d -install -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d +install -D -m 0644 -p xkb/README.compiled %{buildroot}%{_localstatedir}/lib/xkb/README.compiled +install -D -m 0644 %{SOURCE10} %{buildroot}%{_sysconfdir}/pam.d/xserver # make sure the (empty) /etc/X11/xorg.conf.d is there, system-setup-keyboard # relies on it more or less. -mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/X11/xorg.conf.d +mkdir -p %{buildroot}%{_sysconfdir}/X11/xorg.conf.d -%if %{stable_abi} -install -m 755 %{SOURCE30} $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires -%else -sed -e s/@MAJOR@/%{gitdate}/g -e s/@MINOR@/%{minor_serial}/g %{SOURCE31} > \ - $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires -chmod 755 $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires -%endif - -install -m 0755 %{SOURCE20} $RPM_BUILD_ROOT%{_bindir}/xvfb-run +install -D -m 0755 %{SOURCE30} %{buildroot}%{_bindir}/xserver-sdk-abi-requires +install -D -m 0755 %{SOURCE20} %{buildroot}%{_bindir}/xvfb-run # Make the source package %global xserver_source_dir %{_datadir}/xorg-x11-server-source @@ -423,24 +329,18 @@ mkdir -p %{inst_srcdir}/{hw/dmx/doc,man,doc,hw/dmx/doxygen} cp {,%{inst_srcdir}/}hw/xquartz/bundle/cpprules.in cp {,%{inst_srcdir}/}man/Xserver.man cp {,%{inst_srcdir}/}doc/smartsched -cp {,%{inst_srcdir}/}hw/dmx/doxygen/doxygen.conf.in +#cp {,%{inst_srcdir}/}hw/dmx/doxygen/doxygen.conf.in cp {,%{inst_srcdir}/}xserver.ent.in cp {,%{inst_srcdir}/}hw/xfree86/Xorg.sh.in cp xkb/README.compiled %{inst_srcdir}/xkb cp hw/xfree86/xorgconf.cpp %{inst_srcdir}/hw/xfree86 -find . -type f | egrep '.*\.(c|h|am|ac|inc|m4|h.in|pc.in|man.pre|pl|txt)$' | +find . -type f -not -path "./%{_vpath_builddir}/*" | egrep '.*\.(c|h|am|ac|inc|m4|h.in|pc.in|man.pre|pl|txt)$' | xargs tar cf - | (cd %{inst_srcdir} && tar xf -) find %{inst_srcdir}/hw/xfree86 -name \*.c -delete # Remove unwanted files/dirs -{ - find $RPM_BUILD_ROOT -type f -name '*.la' | xargs rm -f -- || : -# wtf -%ifnarch %{ix86} x86_64 - rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/lib{int10,vbe}.so -%endif -} +find %{buildroot} -type f -name '*.la' -delete %files common @@ -450,21 +350,15 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %dir %{_localstatedir}/lib/xkb %{_localstatedir}/lib/xkb/README.compiled -%if 1 -%global Xorgperms %attr(4755, root, root) -%else -# disable until module loading is audited -%global Xorgperms %attr(0711,root,root) %caps(cap_sys_admin,cap_sys_rawio,cap_dac_override=pe) -%endif - %files Xorg %config %attr(0644,root,root) %{_sysconfdir}/pam.d/xserver +%{_bindir}/gtf %{_bindir}/X %{_bindir}/Xorg %{_libexecdir}/Xorg -%{Xorgperms} %{_libexecdir}/Xorg.wrap -%{_bindir}/cvt -%{_bindir}/gtf +# Disable until module loading is audited +# %attr(0711,root,root) %caps(cap_sys_admin,cap_sys_rawio,cap_dac_override=pe) +%attr(4755, root, root) %{_libexecdir}/Xorg.wrap %dir %{_libdir}/xorg %dir %{_libdir}/xorg/modules %dir %{_libdir}/xorg/modules/drivers @@ -472,28 +366,25 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %dir %{_libdir}/xorg/modules/extensions %{_libdir}/xorg/modules/extensions/libglx.so %dir %{_libdir}/xorg/modules/input -%{_libdir}/xorg/modules/libfbdevhw.so +%{_libdir}/xorg/modules/input/inputtest_drv.so %{_libdir}/xorg/modules/libexa.so -%{_libdir}/xorg/modules/libfb.so +%{_libdir}/xorg/modules/libfbdevhw.so +#%%{_libdir}/xorg/modules/libfb.so %{_libdir}/xorg/modules/libglamoregl.so %{_libdir}/xorg/modules/libshadow.so %{_libdir}/xorg/modules/libshadowfb.so %{_libdir}/xorg/modules/libvgahw.so %{_libdir}/xorg/modules/libwfb.so -%ifarch %{ix86} x86_64 -%{_libdir}/xorg/modules/libint10.so -%{_libdir}/xorg/modules/libvbe.so -%endif %{_mandir}/man1/gtf.1* %{_mandir}/man1/Xorg.1* %{_mandir}/man1/Xorg.wrap.1* -%{_mandir}/man1/cvt.1* -%{_mandir}/man4/fbdevhw.4* %{_mandir}/man4/exa.4* +%{_mandir}/man4/fbdevhw.4* +%{_mandir}/man4/inputtestdrv.4* %{_mandir}/man4/modesetting.4* -%{_mandir}/man5/Xwrapper.config.5* %{_mandir}/man5/xorg.conf.5* %{_mandir}/man5/xorg.conf.d.5* +%{_mandir}/man5/Xwrapper.config.5* %dir %{_sysconfdir}/X11/xorg.conf.d %dir %{_datadir}/X11/xorg.conf.d %{_datadir}/X11/xorg.conf.d/10-quirks.conf @@ -502,24 +393,6 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %{_bindir}/Xnest %{_mandir}/man1/Xnest.1* -%files Xdmx -%{_bindir}/Xdmx -%{_bindir}/dmxaddinput -%{_bindir}/dmxaddscreen -%{_bindir}/dmxreconfig -%{_bindir}/dmxresize -%{_bindir}/dmxrminput -%{_bindir}/dmxrmscreen -%{_bindir}/dmxtodmx -%{_bindir}/dmxwininfo -%{_bindir}/vdltodmx -%{_bindir}/dmxinfo -%{_bindir}/xdmxconfig -%{_mandir}/man1/Xdmx.1* -%{_mandir}/man1/dmxtodmx.1* -%{_mandir}/man1/vdltodmx.1* -%{_mandir}/man1/xdmxconfig.1* - %files Xvfb %{_bindir}/Xvfb %{_bindir}/xvfb-run @@ -529,12 +402,8 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %{_bindir}/Xephyr %{_mandir}/man1/Xephyr.1* -%files Xwayland -%{_bindir}/Xwayland - %files devel %doc COPYING -#{_docdir}/xorg-server %{_bindir}/xserver-sdk-abi-requires %{_libdir}/pkgconfig/xorg-server.pc %dir %{_includedir}/xorg @@ -546,234 +415,198 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete %changelog -* Mon Mar 30 2020 Olivier Fourdan - 1.20.8-1 -- xserver 1.20.8 -- Backport latest Xwayland randr resolution change emulation support - patches. +* Tue Nov 25 2025 Olivier Fourdan - 21.1.21-1 +- Update to xserver 21.1.21 (#2417000) -* Wed Mar 18 2020 Olivier Fourdan - 1.20.7-2 -- Fix a crash on closing a window using Present found upstream: - https://gitlab.freedesktop.org/xorg/xserver/issues/1000 +* Tue Oct 28 2025 Olivier Fourdan - 21.1.20-1 +- Update to xserver 21.1.20 (#2406803) +- CVE fix for: CVE-2025-62229, CVE-2025-62230, CVE-2025-62231 -* Fri Mar 13 2020 Olivier Fourdan - 1.20.7-1 -- xserver 1.20.7 -- backport from stable "xserver-1.20-branch" up to commit ad7364d8d - (for mutter fullscreen unredirect on Wayland) -- Update videodrv minor ABI as 1.20.7 changed the minor ABI version - (backward compatible, API addition in glamor) -- Rebase Xwayland randr resolution change emulation support patches +* Fri Jul 25 2025 Fedora Release Engineering - 21.1.18-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild -* Fri Jan 31 2020 Fedora Release Engineering - 1.20.6-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild +* Wed Jul 09 2025 Peter Hutterer +- Update Xvfb SPDX license identifier -* Mon Nov 25 2019 Olivier Fourdan - 1.20.6-1 -- xserver 1.20.6 +* Wed Jun 18 2025 Olivier Fourdan - 21.1.18-1 +- Update to xserver 21.1.18 +- Contains an additional fix for CVE-2025-49176 -* Mon Nov 4 2019 Hans de Goede - 1.20.5-9 -- Fix building with new libglvnd-1.2.0 (E)GL headers and pkgconfig files +* Tue Jun 17 2025 Olivier Fourdan - 21.1.17-1 +- Update to xserver 21.1.17 +- CVE fix for: CVE-2025-49175, CVE-2025-49176, CVE-2025-49177 + CVE-2025-49178, CVE-2025-49179, CVE-2025-49180 -* Mon Nov 4 2019 Hans de Goede - 1.20.5-8 -- Backport Xwayland randr resolution change emulation support +* Wed Feb 26 2025 Olivier Fourdan - 21.1.16-1 +- Update to xserver 21.1.16 (#2347558) +- CVE fix for: CVE-2025-26594, CVE-2025-26595, CVE-2025-26596, CVE-2025-26597, + CVE-2025-26598, CVE-2025-26599, CVE-2025-26600, CVE-2025-26601 -* Thu Aug 29 2019 Olivier Fourdan 1.20.5-7 -- Pick latest fixes from xserver stable branch upstream (rhbz#1729925) +* Tue Feb 25 2025 Olivier Fourdan - 21.1.15-3 +- Fix DRI2 failure (#2347345) -* Sat Jul 27 2019 Fedora Release Engineering - 1.20.5-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild +* Sun Jan 19 2025 Fedora Release Engineering - 21.1.15-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild -* Mon Jul 8 2019 Olivier Fourdan 1.20.5-5 -- Do not include on ARM with glibc to avoid compilation failure. -- Do not force vbe and int10 sdk headers as this enables int10 which does - not build on ARM without +* Fri Dec 20 2024 José Expósito - 21.1.15-1 +- Update to v21.1.15 -* Mon Jul 8 2019 Olivier Fourdan 1.20.5-4 -- Fix regression causing screen tearing with upstream xserver 1.20.5 - (rhbz#1726419) +* Fri Nov 29 2024 Sérgio Basto - 21.1.14-3 +- Revert commit "Fix error copying Xorg.wrap", debugedit-5.1-2 have the real fix -* Fri Jun 28 2019 Olivier Fourdan 1.20.5-3 -- Remove atomic downstream patches causing regressions (#1714981, #1723715) -- Xwayland crashes (#1708119, #1691745) -- Cursor issue with tablet on Xwayland -- Xorg/modesetting issue with flipping pixmaps with Present (#1645553) +* Mon Nov 18 2024 José Expósito - 21.1.14-2 +- Fix build issues caused by Xorg.wrap +- Restore quirks for Apple silicon + Fixes: 422064e45a42 ("Update X11-server to 21.1.13 and ABI numbers of videodrv and xinput") + Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2326701 -* Thu Jun 06 2019 Peter Hutterer 1.20.5-2 -- Return AlreadyGrabbed for keycodes > 255 (#1697804) +* Tue Oct 29 2024 José Expósito - 21.1.14-1 +- Update to v21.1.14 -* Thu May 30 2019 Adam Jackson - 1.20.5-1 -- xserver 1.20.5 +* Wed Oct 16 2024 Peter Robinson +- Obsolete xorg-x11-drv-armsoc -* Tue Apr 23 2019 Adam Jackson - 1.20.4-4 -- Fix some non-atomic modesetting calls to be atomic +* Mon Sep 30 2024 Simone Caronni - 21.1.13-5 +- After removal of int10/vbe, obsolete vesa and fbdev X drivers: + https://fedoraproject.org/wiki/Changes/ReplaceFbdevDrivers -* Wed Mar 27 2019 Peter Hutterer 1.20.4-3 -- Fix a Qt scrolling bug, don't reset the valuator on slave switch +* Sat Sep 28 2024 Simone Caronni - 21.1.13-4 +- Remove all conditionals. Drop int10 everywhere and enable libunwind/dri3 on + ELN. -* Thu Mar 21 2019 Adam Jackson - 1.20.4-2 -- Backport an Xwayland crash fix in the Present code +* Fri Sep 27 2024 Simone Caronni - 21.1.13-3 +- Switch to meson, drop no longer required patch. +- Drop Obsoletes/Provides that have been removed in ~2014. +- Add build depdendencies as they are searched by meson. +- Format SPEC file. -* Tue Feb 26 2019 Adam Jackson - 1.20.4-1 -- xserver 1.20.4 +* Thu Sep 26 2024 Simone Caronni - 21.1.13-2 +- Drop support for building snapshots. If they need to be built, there are + anyway more simpler ways. +- Trim changelog. +- Drop custom compileri/linker flags that are part of the standard already. -* Sun Feb 03 2019 Fedora Release Engineering - 1.20.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild +* Mon Sep 02 2024 Sérgio Basto - 21.1.13-1 +- Update X11-server to 21.1.13 and ABI numbers of videodrv and xinput +- DMX DDX was dropped +- 0001-Disallow-byte-swapped-clients-by-default.patch is upstreamed +- 0001-autobind-GPUs-to-the-screen.patch is upstreamed +- 0001-xf86-dri2-Use-va_gl-as-vdpau_driver-for-Intel-i965-G.patch updated -* Fri Jan 11 2019 Olivier Fourdan - 1.20.3-3 -- More Xwayland/Present fixes from upstream (rhbz#1609181, rhbz#1661748) +* Sat Jul 20 2024 Fedora Release Engineering - 1.20.14-37 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild -* Thu Dec 06 2018 Olivier Fourdan - 1.20.3-2 -- Xwayland/Present fixes from master upstream +* Wed Apr 10 2024 José Expósito - 1.20.14-35 +- Backport fix for invalid Unicode sequence -* Thu Nov 01 2018 Adam Jackson - 1.20.3-1 -- xserver 1.20.3 +* Wed Apr 10 2024 José Expósito - 1.20.14-35 +- Fix regression caused by the fix for CVE-2024-31083 -* Mon Oct 15 2018 Adam Jackson - 1.20.2-1 -- xserver 1.20.2 +* Wed Apr 03 2024 José Expósito - 1.20.14-34 +- CVE fix for: CVE-2024-31080, CVE-2024-31081, CVE-2024-31082 and + CVE-2024-31083 -* Thu Oct 4 2018 Hans de Goede - 1.20.1-4 -- Rebase patch to use va_gl as vdpau driver on i965 GPUs, re-fix rhbz#1413733 +* Mon Mar 04 2024 José Expósito - 1.20.14-33 +- Add util-linux as a dependency of Xvfb -* Thu Sep 13 2018 Dave Airlie - 1.20.1-3 -- Build with PIE enabled (this doesn't enable bind now) +* Sat Jan 27 2024 Fedora Release Engineering - 1.20.14-32 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild -* Mon Sep 10 2018 Olivier Fourdan - 1.20.1-2 -- Include patches from upstream to fix Xwayland crashes +* Fri Jan 19 2024 José Expósito - 1.20.14-31 +- Fix compilation error on i686 -* Thu Aug 09 2018 Adam Jackson - 1.20.1-1 -- xserver 1.20.1 +* Fri Jan 19 2024 José Expósito - 1.20.14-30 +- Fix use after free related to CVE-2024-21886 -* Sat Jul 14 2018 Fedora Release Engineering - 1.20.0-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild +* Tue Jan 16 2024 José Expósito - 1.20.14-29 +- CVE fix for: CVE-2023-6816, CVE-2024-0229, CVE-2024-21885, CVE-2024-21886, + CVE-2024-0408 and CVE-2024-0409 -* Tue Jun 12 2018 Adam Jackson - 1.20.0-4 -- Xorg and Xwayland Requires: libEGL +* Wed Dec 13 2023 Peter Hutterer - 1.20.14-28 +- CVE fix for: CVE-2023-6377, CVE-2023-6478 -* Fri Jun 01 2018 Adam Williamson - 1.20.0-3 -- Backport fixes for RHBZ#1579067 +* Fri Nov 10 2023 Peter Hutterer - 1.20.14-27 +- Update with full SPDX license list -* Wed May 16 2018 Adam Jackson - 1.20.0-2 -- Xorg Requires: xorg-x11-drv-libinput +* Wed Oct 25 2023 Peter Hutterer - 1.20.14-26 +- CVE fix for: CVE-2023-5367, CVE-2023-5380 -* Thu May 10 2018 Adam Jackson - 1.20.0-1 -- xserver 1.20 +* Fri Oct 20 2023 José Expósito +- SPDX migration: license is already SPDX compatible -* Wed Apr 25 2018 Adam Jackson - 1.19.99.905-2 -- Fix xvfb-run's default depth to be 24 +* Fri Sep 29 2023 Orion Poplawski - 1.20.14-25 +- Fix xvfb-run --error-file / auth-file options -* Tue Apr 24 2018 Adam Jackson - 1.19.99.905-1 -- xserver 1.20 RC5 +* Sat Jul 22 2023 Fedora Release Engineering - 1.20.14-24 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild -* Thu Apr 12 2018 Olivier Fourdan - 1.19.99.904-2 -- Re-fix "use type instead of which in xvfb-run (rhbz#1443357)" which - was overridden inadvertently +* Tue Apr 25 2023 Olivier Fourdan - 1.20.14-23 +- Backport fix for a deadlock with DRI3 (#2189434) -* Tue Apr 10 2018 Adam Jackson - 1.19.99.904-1 -- xserver 1.20 RC4 +* Thu Apr 13 2023 Florian Weimer - 1.20.14-22 +- Make more functions available in fb.h with !FB_ACCESS_WRAPPER -* Mon Apr 02 2018 Adam Jackson - 1.19.99.903-1 -- xserver 1.20 RC3 +* Wed Mar 29 2023 Olivier Fourdan - 1.20.14-21 +- CVE fix for: CVE-2023-1393 -* Tue Feb 13 2018 Olivier Fourdan 1.19.6-5 -- xwayland: avoid race condition on new keymap -- xwayland: Keep separate variables for pointer and tablet foci (rhbz#1519961) -- xvfb-run now support command line option “--auto-display” +* Thu Feb 23 2023 Olivier Fourdan - 1.20.14-20 +- Fix xvfb-run script with --listen-tcp -* Fri Feb 09 2018 Fedora Release Engineering - 1.19.6-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild +* Thu Feb 09 2023 Iker Pedrosa - 1.20.14-19 +- Remove pam_console from service file (#1822209) -* Tue Jan 30 2018 Olivier Fourdan 1.19.6-3 -- Avoid generating a core file when the Wayland compositor is gone. +* Thu Feb 02 2023 Peter Hutterer - 1.20.14-18 +- CVE-2023-0494: potential use-after-free -* Thu Jan 11 2018 Peter Hutterer 1.19.6-2 -- Fix handling of devices with ID_INPUT=null +* Wed Feb 01 2023 Peter Hutterer - 1.20.14-17 +- Updated conditional fedora statement -* Wed Dec 20 2017 Adam Jackson - 1.19.6-1 -- xserver 1.19.6 +* Tue Jan 17 2023 Olivier Fourdan - 1.20.14-16 +- Use the recommended way to apply conditional patches without + conditionalizing the sources (for byte-swapped clients). -* Thu Oct 12 2017 Adam Jackson - 1.19.5-1 -- xserver 1.19.5 +* Fri Jan 13 2023 Leif Liddy 1.20.14-15 +- Xorg server does not correctly select the DCP for the display + without a quirk on Apple silicon machines (#2152414) -* Thu Oct 05 2017 Olivier Fourdan - 1.19.4-1 -- xserver-1.19.4 -- Backport tablet support for Xwayland +* Fri Jan 13 2023 Peter Hutterer - 1.20.14-14 +- Disallow byte-swapped clients (#2159489) -* Fri Sep 08 2017 Troy Dawson - 1.19.3-9 -- Cleanup spec file conditionals +* Wed Jan 11 2023 Olivier Fourdan - 1.20.14-13 +- Rename boolean config value field from bool to boolean to fix drivers + build failures due to a conflict with C++ and stdbool.h -* Thu Aug 03 2017 Fedora Release Engineering - 1.19.3-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild +* Mon Dec 19 2022 Peter Hutterer - 1.20.14-12 +- Fix buggy patch to CVE-2022-46340 -* Thu Jul 27 2017 Fedora Release Engineering - 1.19.3-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild +* Wed Dec 14 2022 Peter Hutterer 1.20.14-11 +- CVE fix for: CVE-2022-4283, CVE-2022-46340, CVE-2022-46341, + CVE-2022-46342, CVE-2022-46343, CVE-2022-46344 -* Sun Jul 2 2017 Ville Skyttä - 1.19.3-6 -- Use type instead of which in xvfb-run (rhbz#1443357) +* Wed Nov 23 2022 Peter Hutterer - 1.20.14-10 +- Drop dependency on xorg-x11-font-utils, it was only there for on + build-time variable that's always the same value anyway (#2145088) -* Thu May 04 2017 Orion Poplawski - 1.19.3-5 -- Enable full build for s390/x +* Tue Nov 8 2022 Olivier Fourdan - 1.20.14-9 +- Fix CVE-2022-3550, CVE-2022-3551 -* Mon Apr 24 2017 Ben Skeggs - 1.19.3-4 -- Default to xf86-video-modesetting on GeForce 8 and newer +* Sat Jul 23 2022 Fedora Release Engineering - 1.20.14-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild -* Fri Apr 07 2017 Adam Jackson - 1.19.3-3 -- Inoculate against a versioning bug with libdrm 2.4.78 +* Tue Jul 12 2022 Olivier Fourdan - 1.20.14-7 +- Fix CVE-2022-2319/ZDI-CAN-16062, CVE-2022-2320/ZDI-CAN-16070 -* Thu Mar 23 2017 Hans de Goede - 1.19.3-2 -- Use va_gl as vdpau driver on i965 GPUs (rhbz#1413733) +* Wed Apr 13 2022 Dominik Mierzejewski - 1.20.14-6 +- Don't hardcode fps for fake screen (#2054188) -* Wed Mar 15 2017 Adam Jackson - 1.19.3-1 -- xserver 1.19.3 +* Fri Apr 8 2022 Jocelyn Falempe - 1.20.14-5 +- Fix basic graphic mode not working with simpledrm (#2067151) -* Thu Mar 02 2017 Adam Jackson - 1.19.2-1 -- xserver 1.19.2 +* Fri Jan 28 2022 Olivier Fourdan - 1.20.14-4 +- Fix build with GCC 12 (#2047134) -* Sat Feb 11 2017 Fedora Release Engineering - 1.19.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild +* Tue Jan 25 2022 Olivier Fourdan - 1.20.14-3 +- Fix crash with NVIDIA proprietary driver with Present (#2046147) -* Wed Feb 01 2017 Peter Hutterer 1.19.1-3 -- Fix a few input thread lock issues causing intel crashes (#1384486) - -* Mon Jan 16 2017 Adam Jackson - 1.19.1-2 -- Limit the intel driver only on F26 and up - -* Wed Jan 11 2017 Adam Jackson - 1.19.1-1 -- xserver 1.19.1 - -* Tue Jan 10 2017 Hans de Goede - 1.19.0-4 -- Follow Debian and only default to the intel ddx on gen4 or older intel GPUs - -* Tue Dec 20 2016 Hans de Goede - 1.19.0-3 -- Add one more patch for better integration with the nvidia binary driver - -* Thu Dec 15 2016 Hans de Goede - 1.19.0-2 -- Add some patches for better integration with the nvidia binary driver -- Add a patch from upstream fixing a crash (rhbz#1389886) - -* Wed Nov 23 2016 Olivier Fourdan 1.19.0-1 -- xserver 1.19.0 -- Fix use after free of cursors in Xwayland (rhbz#1385258) -- Fix an issue where some monitors would show only black, or - partially black when secondary GPU outputs are used - -* Tue Nov 15 2016 Peter Hutterer 1.19.0-0.8.rc2 -- Update device barriers for new master devices (#1384432) - -* Thu Nov 3 2016 Hans de Goede - 1.19.0-0.7.rc2 -- Update to 1.19.0-rc2 -- Fix (hopefully) various crashes in FlushAllOutput() (rhbz#1382444) -- Fix Xwayland crashing in glamor on non glamor capable hw (rhbz#1390018) - -* Tue Nov 1 2016 Ben Crocker - 1.19.0-0.6.20161028 -- Fix Config record allocation during startup: if xorg.conf.d directory -- was absent, a segfault resulted. - -* Mon Oct 31 2016 Adam Jackson - 1.19.0-0.5.20161026 -- Use %%autopatch instead of doing our own custom git-am trick - -* Fri Oct 28 2016 Hans de Goede - 1.19.0-0.4.20161026 -- Add missing Requires: libXfont2-devel to -devel sub-package (rhbz#1389711) - -* Wed Oct 26 2016 Hans de Goede - 1.19.0-0.3.20161026 -- Sync with upstream git, bringing in a bunch if bug-fixes -- Add some extra fixes which are pending upstream -- This also adds PointerWarping emulation to Xwayland, which should improve - compatiblity with many games +* Sat Jan 22 2022 Fedora Release Engineering - 1.20.14-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild diff --git a/xserver-sdk-abi-requires.git b/xserver-sdk-abi-requires.git deleted file mode 100755 index c033061..0000000 --- a/xserver-sdk-abi-requires.git +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -# -# The X server provides capabilities of the form: -# -# Provides: xserver-abi(ansic-0) = 4 -# -# for an ABI version of 0.4. The major number is encoded into the name so -# that major number changes force upgrades. If we didn't, then -# -# Requires: xserver-abi(ansic) >= 0.4 -# -# would also match 1.0, which is wrong since major numbers mean an ABI break. - -echo "xserver-abi($1-@MAJOR@) >= @MINOR@" diff --git a/xserver-sdk-abi-requires.release b/xserver-sdk-abi-requires.release deleted file mode 100755 index 30d77bf..0000000 --- a/xserver-sdk-abi-requires.release +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -# -# The X server provides capabilities of the form: -# -# Provides: xserver-abi(ansic-0) = 4 -# -# for an ABI version of 0.4. The major number is encoded into the name so -# that major number changes force upgrades. If we didn't, then -# -# Requires: xserver-abi(ansic) >= 0.4 -# -# would also match 1.0, which is wrong since major numbers mean an ABI break. - -ver=$(pkg-config --variable abi_$1 xorg-server) - -major=$(echo $ver | cut -f 1 -d .) -minor=$(echo $ver | cut -f 2 -d .) - -echo "xserver-abi($1-$major) >= $minor" diff --git a/xserver.pamd b/xserver.pamd index bf79930..9374ff6 100644 --- a/xserver.pamd +++ b/xserver.pamd @@ -1,5 +1,4 @@ #%PAM-1.0 auth sufficient pam_rootok.so -auth required pam_console.so account required pam_permit.so session optional pam_keyinit.so force revoke diff --git a/xvfb-run.sh b/xvfb-run.sh index 9d088c1..dec7dfc 100644 --- a/xvfb-run.sh +++ b/xvfb-run.sh @@ -101,7 +101,7 @@ find_free_servernum() { # Parse the command line. ARGS=$(getopt --options +ade:f:hn:lp:s:w: \ - --long auto-servernum,error-file:auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \ + --long auto-servernum,error-file:,auth-file:,help,server-num:,listen-tcp,xauth-protocol:,server-args:,wait: \ --name "$PROGNAME" -- "$@") GETOPT_STATUS=$? @@ -120,7 +120,7 @@ while :; do -f|--auth-file) AUTHFILE="$2"; shift ;; -h|--help) SHOWHELP="yes" ;; -n|--server-num) SERVERNUM="$2"; shift ;; - -l|--listen-tcp) LISTENTCP="" ;; + -l|--listen-tcp) LISTENTCP="-listen tcp" ;; -p|--xauth-protocol) XAUTHPROTO="$2"; shift ;; -s|--server-args) XVFBARGS="$2"; shift ;; -w|--wait) STARTWAIT="$2"; shift ;;