mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-02 15:41:48 +00:00
Merge pull request #43562 from numinit/xf86videodummy
xpra.xf86videodummy: init at 0.3.8
This commit is contained in:
commit
f01a201fb4
@ -1,4 +1,4 @@
|
|||||||
{ stdenv, lib, fetchurl, python2Packages, pkgconfig
|
{ stdenv, lib, fetchurl, callPackage, python2Packages, pkgconfig
|
||||||
, xorg, gtk2, glib, pango, cairo, gdk_pixbuf, atk
|
, xorg, gtk2, glib, pango, cairo, gdk_pixbuf, atk
|
||||||
, makeWrapper, xorgserver, getopt, xauth, utillinux, which
|
, makeWrapper, xorgserver, getopt, xauth, utillinux, which
|
||||||
, ffmpeg, x264, libvpx, libwebp
|
, ffmpeg, x264, libvpx, libwebp
|
||||||
@ -10,12 +10,14 @@ with lib;
|
|||||||
|
|
||||||
let
|
let
|
||||||
inherit (python2Packages) cython buildPythonApplication;
|
inherit (python2Packages) cython buildPythonApplication;
|
||||||
|
|
||||||
|
xf86videodummy = callPackage ./xf86videodummy { };
|
||||||
in buildPythonApplication rec {
|
in buildPythonApplication rec {
|
||||||
name = "xpra-${version}";
|
pname = "xpra";
|
||||||
version = "2.3.3";
|
version = "2.3.3";
|
||||||
|
|
||||||
src = fetchurl {
|
src = fetchurl {
|
||||||
url = "https://xpra.org/src/${name}.tar.xz";
|
url = "https://xpra.org/src/${pname}-${version}.tar.xz";
|
||||||
sha256 = "1azvvddjfq7lb5kmbn0ilgq2nf7pmymsc3b9lhbjld6w156qdv01";
|
sha256 = "1azvvddjfq7lb5kmbn0ilgq2nf7pmymsc3b9lhbjld6w156qdv01";
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -73,6 +75,7 @@ in buildPythonApplication rec {
|
|||||||
# sed -i '4iexport PATH=${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux ]}\${PATH:+:}\$PATH' $out/bin/xpra
|
# sed -i '4iexport PATH=${stdenv.lib.makeBinPath [ getopt xorgserver xauth which utillinux ]}\${PATH:+:}\$PATH' $out/bin/xpra
|
||||||
#'';
|
#'';
|
||||||
|
|
||||||
|
passthru = { inherit xf86videodummy; };
|
||||||
|
|
||||||
meta = {
|
meta = {
|
||||||
homepage = http://xpra.org/;
|
homepage = http://xpra.org/;
|
||||||
@ -80,7 +83,7 @@ in buildPythonApplication rec {
|
|||||||
downloadURLRegexp = "xpra-.*[.]tar[.]xz$";
|
downloadURLRegexp = "xpra-.*[.]tar[.]xz$";
|
||||||
description = "Persistent remote applications for X";
|
description = "Persistent remote applications for X";
|
||||||
platforms = platforms.linux;
|
platforms = platforms.linux;
|
||||||
maintainers = with maintainers; [ tstrobel offline ];
|
|
||||||
license = licenses.gpl2;
|
license = licenses.gpl2;
|
||||||
|
maintainers = with maintainers; [ tstrobel offline numinit ];
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
96
pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch
Normal file
96
pkgs/tools/X11/xpra/xf86videodummy/0002-Constant-DPI.patch
Normal file
@ -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 <X11/Xatom.h>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
|
@ -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 <X11/extensions/xf86dgaproto.h>
|
||||||
|
#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;
|
||||||
|
}
|
||||||
|
|
@ -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))
|
32
pkgs/tools/X11/xpra/xf86videodummy/default.nix
Normal file
32
pkgs/tools/X11/xpra/xf86videodummy/default.nix
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
{ stdenv, lib, fetchurl
|
||||||
|
, fontsproto, randrproto, renderproto, videoproto, xf86dgaproto, xorgserver, xproto
|
||||||
|
, pkgconfig
|
||||||
|
, xpra }:
|
||||||
|
|
||||||
|
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 = [ fontsproto randrproto renderproto videoproto xf86dgaproto xorgserver xproto ];
|
||||||
|
|
||||||
|
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 ];
|
||||||
|
};
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user