From af418c43569ec527a1f58834204d0b9b2f1ba0d4 Mon Sep 17 00:00:00 2001 From: Jaka Hudoklin Date: Tue, 31 Mar 2020 13:29:46 +0700 Subject: xpra: use xf86videodummy from xorg --- pkgs/tools/X11/xpra/0002-Constant-DPI.patch | 96 ++++++++++++++++++++++ pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch | 39 +++++++++ ...-support-for-30-bit-depth-in-dummy-driver.patch | 41 +++++++++ pkgs/tools/X11/xpra/default.nix | 11 ++- .../xpra/xf86videodummy/0002-Constant-DPI.patch | 96 ---------------------- .../xf86videodummy/0003-fix-pointer-limits.patch | 39 --------- ...-support-for-30-bit-depth-in-dummy-driver.patch | 41 --------- pkgs/tools/X11/xpra/xf86videodummy/default.nix | 31 ------- 8 files changed, 185 insertions(+), 209 deletions(-) create mode 100644 pkgs/tools/X11/xpra/0002-Constant-DPI.patch create mode 100644 pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch create mode 100644 pkgs/tools/X11/xpra/0005-support-for-30-bit-depth-in-dummy-driver.patch delete mode 100644 pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch delete mode 100644 pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch delete mode 100644 pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch delete mode 100644 pkgs/tools/X11/xpra/xf86videodummy/default.nix (limited to 'pkgs/tools/X11') diff --git a/pkgs/tools/X11/xpra/0002-Constant-DPI.patch b/pkgs/tools/X11/xpra/0002-Constant-DPI.patch new file mode 100644 index 00000000000..f91e53d1e49 --- /dev/null +++ b/pkgs/tools/X11/xpra/0002-Constant-DPI.patch @@ -0,0 +1,96 @@ +--- a/src/dummy.h 2016-12-17 23:02:53.396287041 +0100 ++++ b/src/dummy.h 2016-12-17 23:03:30.319616550 +0100 +@@ -51,6 +51,7 @@ + /* options */ + OptionInfoPtr Options; + Bool swCursor; ++ Bool constantDPI; + /* proc pointer */ + CloseScreenProcPtr CloseScreen; + xf86CursorInfoPtr CursorInfo; +--- a/src/dummy_driver.c 2016-12-14 21:54:20.000000000 +0100 ++++ b/src/dummy_driver.c 2016-12-17 23:04:59.916416126 +0100 +@@ -17,6 +17,12 @@ + /* All drivers using the mi colormap manipulation need this */ + #include "micmap.h" + ++#ifdef RANDR ++#include "randrstr.h" ++#endif ++ ++#include "windowstr.h" ++ + /* identifying atom needed by magnifiers */ + #include + #include "property.h" +@@ -115,11 +121,15 @@ + }; + + typedef enum { +- OPTION_SW_CURSOR ++ OPTION_SW_CURSOR, ++ OPTION_CONSTANT_DPI + } DUMMYOpts; + + static const OptionInfoRec DUMMYOptions[] = { + { OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE }, ++#ifdef RANDR ++ { OPTION_CONSTANT_DPI, "ConstantDPI", OPTV_BOOLEAN, {0}, FALSE }, ++#endif + { -1, NULL, OPTV_NONE, {0}, FALSE } + }; + +@@ -359,6 +369,7 @@ + xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options); + + xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor); ++ xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI); + + if (device->videoRam != 0) { + pScrn->videoRam = device->videoRam; +@@ -639,10 +650,45 @@ + return TRUE; + } + ++const char *XDPY_PROPERTY = "dummy-constant-xdpi"; ++const char *YDPY_PROPERTY = "dummy-constant-ydpi"; ++static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi) ++{ ++ PropertyPtr prop; ++ Atom type_atom = MakeAtom("CARDINAL", 8, TRUE); ++ Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE); ++ ++ for (prop = wUserProps(root); prop; prop = prop->next) { ++ if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) { ++ int v = (int) (*((CARD32 *) prop->data)); ++ if ((v>0) && (v<4096)) { ++ xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property \"%s\" with value=%i\n", property_name, (int) v); ++ return (int) v; ++ } ++ break; ++ } ++ } ++ return default_dpi; ++} ++ + /* Mandatory */ + Bool + DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL) + { ++ SCRN_INFO_PTR(arg); ++#ifdef RANDR ++ DUMMYPtr dPtr = DUMMYPTR(pScrn); ++ if (dPtr->constantDPI) { ++ int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi); ++ int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi); ++ //25.4 mm per inch: (254/10) ++ pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10; ++ pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10; ++ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%i\n", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight); ++ RRScreenSizeNotify(pScrn->pScreen); ++ RRTellChanged(pScrn->pScreen); ++ } ++#endif + return TRUE; + } + diff --git a/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch b/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch new file mode 100644 index 00000000000..3dbb6fd179f --- /dev/null +++ b/pkgs/tools/X11/xpra/0003-fix-pointer-limits.patch @@ -0,0 +1,39 @@ +--- xf86-video-dummy-0.3.6/src/dummy_driver.c 2014-11-05 19:24:02.668656601 +0700 ++++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c 2014-11-05 19:37:53.076061853 +0700 +@@ -55,6 +55,9 @@ + #include + #endif + ++/* Needed for fixing pointer limits on resize */ ++#include "inputstr.h" ++ + /* Mandatory functions */ + static const OptionInfoRec * DUMMYAvailableOptions(int chipid, int busid); + static void DUMMYIdentify(int flags); +@@ -713,6 +716,26 @@ + RRTellChanged(pScrn->pScreen); + } + #endif ++ //ensure the screen dimensions are also updated: ++ pScrn->pScreen->width = mode->HDisplay; ++ pScrn->pScreen->height = mode->VDisplay; ++ pScrn->virtualX = mode->HDisplay; ++ pScrn->virtualY = mode->VDisplay; ++ pScrn->frameX1 = mode->HDisplay; ++ pScrn->frameY1 = mode->VDisplay; ++ ++ //ensure the pointer uses the new limits too: ++ DeviceIntPtr pDev; ++ SpritePtr pSprite; ++ for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { ++ if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) { ++ pSprite = pDev->spriteInfo->sprite; ++ pSprite->hotLimits.x2 = mode->HDisplay; ++ pSprite->hotLimits.y2 = mode->VDisplay; ++ pSprite->physLimits.x2 = mode->HDisplay; ++ pSprite->physLimits.y2 = mode->VDisplay; ++ } ++ } + return TRUE; + } + diff --git a/pkgs/tools/X11/xpra/0005-support-for-30-bit-depth-in-dummy-driver.patch b/pkgs/tools/X11/xpra/0005-support-for-30-bit-depth-in-dummy-driver.patch new file mode 100644 index 00000000000..567db3fc386 --- /dev/null +++ b/pkgs/tools/X11/xpra/0005-support-for-30-bit-depth-in-dummy-driver.patch @@ -0,0 +1,41 @@ +--- a/src/dummy.h 2016-12-17 23:33:33.279533389 +0100 ++++ b/src/dummy.h 2016-12-17 23:33:56.695739166 +0100 +@@ -69,7 +69,7 @@ + int overlay_offset; + int videoKey; + int interlace; +- dummy_colors colors[256]; ++ dummy_colors colors[1024]; + pointer* FBBase; + Bool (*CreateWindow)() ; /* wrapped CreateWindow */ + Bool prop; +--- a/src/dummy_driver.c 2016-12-17 23:33:47.446657886 +0100 ++++ b/src/dummy_driver.c 2016-12-17 23:33:56.696739175 +0100 +@@ -317,6 +317,7 @@ + case 15: + case 16: + case 24: ++ case 30: + break; + default: + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, +@@ -331,8 +332,8 @@ + pScrn->rgbBits = 8; + + /* Get the depth24 pixmap format */ +- if (pScrn->depth == 24 && pix24bpp == 0) +- pix24bpp = xf86GetBppFromDepth(pScrn, 24); ++ if (pScrn->depth >= 24 && pix24bpp == 0) ++ pix24bpp = xf86GetBppFromDepth(pScrn, pScrn->depth); + + /* + * This must happen after pScrn->display has been set because +@@ -623,7 +624,7 @@ + if(!miCreateDefColormap(pScreen)) + return FALSE; + +- if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, ++ if (!xf86HandleColormaps(pScreen, 1024, pScrn->rgbBits, + DUMMYLoadPalette, NULL, + CMAP_PALETTED_TRUECOLOR + | CMAP_RELOAD_ON_MODE_SWITCH)) diff --git a/pkgs/tools/X11/xpra/default.nix b/pkgs/tools/X11/xpra/default.nix index cef8bd49163..69b3e51280c 100644 --- a/pkgs/tools/X11/xpra/default.nix +++ b/pkgs/tools/X11/xpra/default.nix @@ -1,4 +1,4 @@ -{ stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig +{ stdenv, lib, fetchurl, callPackage, substituteAll, python3, pkgconfig, writeText , xorg, gtk3, glib, pango, cairo, gdk-pixbuf, atk , wrapGAppsHook, xorgserver, getopt, xauth, utillinux, which , ffmpeg_4, x264, libvpx, libwebp, x265 @@ -11,7 +11,14 @@ with lib; let inherit (python3.pkgs) cython buildPythonApplication; - xf86videodummy = callPackage ./xf86videodummy { }; + xf86videodummy = xorg.xf86videodummy.overrideDerivation (p: { + patches = [ + ./0002-Constant-DPI.patch + ./0003-fix-pointer-limits.patch + ./0005-support-for-30-bit-depth-in-dummy-driver.patch + ]; + }); + in buildPythonApplication rec { pname = "xpra"; version = "3.0.7"; diff --git a/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch b/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch deleted file mode 100644 index f91e53d1e49..00000000000 --- a/pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch +++ /dev/null @@ -1,96 +0,0 @@ ---- a/src/dummy.h 2016-12-17 23:02:53.396287041 +0100 -+++ b/src/dummy.h 2016-12-17 23:03:30.319616550 +0100 -@@ -51,6 +51,7 @@ - /* options */ - OptionInfoPtr Options; - Bool swCursor; -+ Bool constantDPI; - /* proc pointer */ - CloseScreenProcPtr CloseScreen; - xf86CursorInfoPtr CursorInfo; ---- a/src/dummy_driver.c 2016-12-14 21:54:20.000000000 +0100 -+++ b/src/dummy_driver.c 2016-12-17 23:04:59.916416126 +0100 -@@ -17,6 +17,12 @@ - /* All drivers using the mi colormap manipulation need this */ - #include "micmap.h" - -+#ifdef RANDR -+#include "randrstr.h" -+#endif -+ -+#include "windowstr.h" -+ - /* identifying atom needed by magnifiers */ - #include - #include "property.h" -@@ -115,11 +121,15 @@ - }; - - typedef enum { -- OPTION_SW_CURSOR -+ OPTION_SW_CURSOR, -+ OPTION_CONSTANT_DPI - } DUMMYOpts; - - static const OptionInfoRec DUMMYOptions[] = { - { OPTION_SW_CURSOR, "SWcursor", OPTV_BOOLEAN, {0}, FALSE }, -+#ifdef RANDR -+ { OPTION_CONSTANT_DPI, "ConstantDPI", OPTV_BOOLEAN, {0}, FALSE }, -+#endif - { -1, NULL, OPTV_NONE, {0}, FALSE } - }; - -@@ -359,6 +369,7 @@ - xf86ProcessOptions(pScrn->scrnIndex, pScrn->options, dPtr->Options); - - xf86GetOptValBool(dPtr->Options, OPTION_SW_CURSOR,&dPtr->swCursor); -+ xf86GetOptValBool(dPtr->Options, OPTION_CONSTANT_DPI, &dPtr->constantDPI); - - if (device->videoRam != 0) { - pScrn->videoRam = device->videoRam; -@@ -639,10 +650,45 @@ - return TRUE; - } - -+const char *XDPY_PROPERTY = "dummy-constant-xdpi"; -+const char *YDPY_PROPERTY = "dummy-constant-ydpi"; -+static int get_dpi_value(WindowPtr root, const char *property_name, int default_dpi) -+{ -+ PropertyPtr prop; -+ Atom type_atom = MakeAtom("CARDINAL", 8, TRUE); -+ Atom prop_atom = MakeAtom(property_name, strlen(property_name), FALSE); -+ -+ for (prop = wUserProps(root); prop; prop = prop->next) { -+ if (prop->propertyName == prop_atom && prop->type == type_atom && prop->data) { -+ int v = (int) (*((CARD32 *) prop->data)); -+ if ((v>0) && (v<4096)) { -+ xf86DrvMsg(0, X_INFO, "get_constant_dpi_value() found property \"%s\" with value=%i\n", property_name, (int) v); -+ return (int) v; -+ } -+ break; -+ } -+ } -+ return default_dpi; -+} -+ - /* Mandatory */ - Bool - DUMMYSwitchMode(SWITCH_MODE_ARGS_DECL) - { -+ SCRN_INFO_PTR(arg); -+#ifdef RANDR -+ DUMMYPtr dPtr = DUMMYPTR(pScrn); -+ if (dPtr->constantDPI) { -+ int xDpi = get_dpi_value(pScrn->pScreen->root, XDPY_PROPERTY, pScrn->xDpi); -+ int yDpi = get_dpi_value(pScrn->pScreen->root, YDPY_PROPERTY, pScrn->yDpi); -+ //25.4 mm per inch: (254/10) -+ pScrn->pScreen->mmWidth = mode->HDisplay * 254 / xDpi / 10; -+ pScrn->pScreen->mmHeight = mode->VDisplay * 254 / yDpi / 10; -+ xf86DrvMsg(pScrn->scrnIndex, X_INFO, "mm(dpi %ix%i)=%ix%i\n", xDpi, yDpi, pScrn->pScreen->mmWidth, pScrn->pScreen->mmHeight); -+ RRScreenSizeNotify(pScrn->pScreen); -+ RRTellChanged(pScrn->pScreen); -+ } -+#endif - return TRUE; - } - diff --git a/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch b/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch deleted file mode 100644 index 3dbb6fd179f..00000000000 --- a/pkgs/tools/X11/xpra/xf86videodummy/0003-fix-pointer-limits.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- xf86-video-dummy-0.3.6/src/dummy_driver.c 2014-11-05 19:24:02.668656601 +0700 -+++ xf86-video-dummy-0.3.6.new/src/dummy_driver.c 2014-11-05 19:37:53.076061853 +0700 -@@ -55,6 +55,9 @@ - #include - #endif - -+/* Needed for fixing pointer limits on resize */ -+#include "inputstr.h" -+ - /* Mandatory functions */ - static const OptionInfoRec * DUMMYAvailableOptions(int chipid, int busid); - static void DUMMYIdentify(int flags); -@@ -713,6 +716,26 @@ - RRTellChanged(pScrn->pScreen); - } - #endif -+ //ensure the screen dimensions are also updated: -+ pScrn->pScreen->width = mode->HDisplay; -+ pScrn->pScreen->height = mode->VDisplay; -+ pScrn->virtualX = mode->HDisplay; -+ pScrn->virtualY = mode->VDisplay; -+ pScrn->frameX1 = mode->HDisplay; -+ pScrn->frameY1 = mode->VDisplay; -+ -+ //ensure the pointer uses the new limits too: -+ DeviceIntPtr pDev; -+ SpritePtr pSprite; -+ for (pDev = inputInfo.devices; pDev; pDev = pDev->next) { -+ if (pDev->spriteInfo!=NULL && pDev->spriteInfo->sprite!=NULL) { -+ pSprite = pDev->spriteInfo->sprite; -+ pSprite->hotLimits.x2 = mode->HDisplay; -+ pSprite->hotLimits.y2 = mode->VDisplay; -+ pSprite->physLimits.x2 = mode->HDisplay; -+ pSprite->physLimits.y2 = mode->VDisplay; -+ } -+ } - return TRUE; - } - diff --git a/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch b/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch deleted file mode 100644 index 567db3fc386..00000000000 --- a/pkgs/tools/X11/xpra/xf86videodummy/0005-support-for-30-bit-depth-in-dummy-driver.patch +++ /dev/null @@ -1,41 +0,0 @@ ---- a/src/dummy.h 2016-12-17 23:33:33.279533389 +0100 -+++ b/src/dummy.h 2016-12-17 23:33:56.695739166 +0100 -@@ -69,7 +69,7 @@ - int overlay_offset; - int videoKey; - int interlace; -- dummy_colors colors[256]; -+ dummy_colors colors[1024]; - pointer* FBBase; - Bool (*CreateWindow)() ; /* wrapped CreateWindow */ - Bool prop; ---- a/src/dummy_driver.c 2016-12-17 23:33:47.446657886 +0100 -+++ b/src/dummy_driver.c 2016-12-17 23:33:56.696739175 +0100 -@@ -317,6 +317,7 @@ - case 15: - case 16: - case 24: -+ case 30: - break; - default: - xf86DrvMsg(pScrn->scrnIndex, X_ERROR, -@@ -331,8 +332,8 @@ - pScrn->rgbBits = 8; - - /* Get the depth24 pixmap format */ -- if (pScrn->depth == 24 && pix24bpp == 0) -- pix24bpp = xf86GetBppFromDepth(pScrn, 24); -+ if (pScrn->depth >= 24 && pix24bpp == 0) -+ pix24bpp = xf86GetBppFromDepth(pScrn, pScrn->depth); - - /* - * This must happen after pScrn->display has been set because -@@ -623,7 +624,7 @@ - if(!miCreateDefColormap(pScreen)) - return FALSE; - -- if (!xf86HandleColormaps(pScreen, 256, pScrn->rgbBits, -+ if (!xf86HandleColormaps(pScreen, 1024, pScrn->rgbBits, - DUMMYLoadPalette, NULL, - CMAP_PALETTED_TRUECOLOR - | CMAP_RELOAD_ON_MODE_SWITCH)) diff --git a/pkgs/tools/X11/xpra/xf86videodummy/default.nix b/pkgs/tools/X11/xpra/xf86videodummy/default.nix deleted file mode 100644 index 4e9f8860892..00000000000 --- a/pkgs/tools/X11/xpra/xf86videodummy/default.nix +++ /dev/null @@ -1,31 +0,0 @@ -{ stdenv, lib, fetchurl -, xorgproto, xorgserver -, pkgconfig }: - -with lib; - -stdenv.mkDerivation rec { - version = "0.3.8"; - suffix = "1"; - name = "xpra-xf86videodummy-${version}-${suffix}"; - builder = ../../../../servers/x11/xorg/builder.sh; - src = fetchurl { - url = "mirror://xorg/individual/driver/xf86-video-dummy-${version}.tar.bz2"; - sha256 = "1fcm9vwgv8wnffbvkzddk4yxrh3kc0np6w65wj8k88q7jf3bn4ip"; - }; - patches = [ - ./0002-Constant-DPI.patch - ./0003-fix-pointer-limits.patch - ./0005-support-for-30-bit-depth-in-dummy-driver.patch - ]; - nativeBuildInputs = [ pkgconfig ]; - buildInputs = [ xorgproto xorgserver ]; - - meta = { - description = "Dummy driver for Xorg with xpra patches"; - homepage = https://xpra.org/trac/wiki/Xdummy; - license = licenses.gpl2; - platforms = platforms.unix; - maintainers = with maintainers; [ numinit ]; - }; -} -- cgit 1.4.1 From 439d97eb97dac18987a31dab967b8ad88575f085 Mon Sep 17 00:00:00 2001 From: Jaka Hudoklin Date: Tue, 31 Mar 2020 13:30:26 +0700 Subject: xpra: set correct module paths for xorg.conf --- pkgs/tools/X11/xpra/default.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'pkgs/tools/X11') diff --git a/pkgs/tools/X11/xpra/default.nix b/pkgs/tools/X11/xpra/default.nix index 69b3e51280c..968c695c464 100644 --- a/pkgs/tools/X11/xpra/default.nix +++ b/pkgs/tools/X11/xpra/default.nix @@ -19,6 +19,15 @@ let ]; }); + xorgModulePaths = writeText "module-paths" '' + Section "Files" + ModulePath "${xorgserver}/lib/xorg/modules" + ModulePath "${xorgserver}/lib/xorg/modules/extensions" + ModulePath "${xorgserver}/lib/xorg/modules/drivers" + ModulePath "${xf86videodummy}/lib/xorg/modules/drivers" + EndSection + ''; + in buildPythonApplication rec { pname = "xpra"; version = "3.0.7"; @@ -88,6 +97,11 @@ in buildPythonApplication rec { ) ''; + # append module paths to xorg.conf + postInstall = '' + cat ${xorgModulePaths} >> $out/etc/xpra/xorg.conf + ''; + doCheck = false; enableParallelBuilding = true; -- cgit 1.4.1