Hello community,

here is the log from the commit of package xorg-x11-server for openSUSE:Factory
checked in at Mon Sep 12 10:39:05 CEST 2011.



--------
--- xorg-x11-server/xorg-x11-server.changes     2011-08-30 16:03:43.000000000 
+0200
+++ /mounts/work_src_done/STABLE/xorg-x11-server/xorg-x11-server.changes        
2011-09-11 02:43:38.000000000 +0200
@@ -1,0 +2,24 @@
+Tue Sep  6 15:55:01 UTC 2011 - [email protected]
+
+- update to xorg-server 1.10.4
+- VNC patches completely redone by Egbert Eich (N-VNC-*)
+- Xvnc-pthread.diff: small buildfix required for factory
+- removed obsolete patches
+  * EXA-mixed-ModifyPixmapHeader-pitch-fixes.-bug-33929.patch
+  * Replace-malloc-with-calloc-to-initialize-the-buffers.patch
+  * U_xserver_fix-pixmaps-lifetime-tracking.patch
+  * commit-5c6a2f9.diff
+  * pad-size-of-system-memory-copy-for-1x1-pixmaps
+  * record-avoid-crash-when-calling-RecordFlushReplyBuff.patch
+  * xorg-server-stop-cpu-eating.diff
+- adjusted patches
+  * bug534768-prefer_local_symbols.patch
+  * zap_warning_xserver.diff
+- disabled patches for now
+  * 0001-Xinput-Catch-missing-configlayout-when-deleting-dev.patch
+  * cache-xkbcomp-output-for-fast-start-up.patch
+  * xserver-bg-none-root.patch
+  * 0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch
+-  set VIDEO_ABI_VERSION = 10 and INPUT_ABI_VERSION = 12 in specfile
+
+-------------------------------------------------------------------

calling whatdependson for head-i586


Old:
----
  EXA-mixed-ModifyPixmapHeader-pitch-fixes.-bug-33929.patch
  Replace-malloc-with-calloc-to-initialize-the-buffers.patch
  U_xserver_fix-pixmaps-lifetime-tracking.patch
  commit-5c6a2f9.diff
  pad-size-of-system-memory-copy-for-1x1-pixmaps
  record-avoid-crash-when-calling-RecordFlushReplyBuff.patch
  u_xf4nvc_missing-libz.patch
  xorg-server-1.9.3.tar.bz2
  xorg-server-stop-cpu-eating.diff
  xorg-server-xf4vnc-TranslateNone.diff
  xorg-server-xf4vnc-abi-version.diff
  xorg-server-xf4vnc-busyloop.diff
  xorg-server-xf4vnc-clientTimeout.diff
  xorg-server-xf4vnc-cutpaste.diff
  xorg-server-xf4vnc-disable-dmxvnc.diff
  xorg-server-xf4vnc-fix-keyboard-layout-handling.diff
  xorg-server-xf4vnc-fix.diff
  xorg-server-xf4vnc-fixes_1_8.diff
  xorg-server-xf4vnc-fixes_1_9.diff
  xorg-server-xf4vnc.patch

New:
----
  N-VNC-Add-support-for-VNC.patch
  N-VNC-Don-t-let-VNC-access-the-framebuffer-directly-an.patch
  N-VNC-Enable-use-of-all-keyboard-layouts-independent-o.patch
  N-VNC-Fix-crash-due-to-unset-input-device-names.patch
  N-VNC-Fix-crash-when-no-depth-translation-is-required.patch
  N-VNC-Readd-timeout-when-vnc-viewer-connection-breaks.patch
  Xvnc-pthread.diff
  xorg-server-1.10.4.tar.bz2

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ xorg-x11-server.spec ++++++
--- /var/tmp/diff_new_pack.mH2YoD/_old  2011-09-12 10:38:56.000000000 +0200
+++ /var/tmp/diff_new_pack.mH2YoD/_new  2011-09-12 10:38:56.000000000 +0200
@@ -19,7 +19,7 @@
 
 
 Name:           xorg-x11-server
-%define dirsuffix 1.9.3
+%define dirsuffix 1.10.4
 %define vnc 1
 BuildRequires:  Mesa-devel bison flex fontconfig-devel freetype2-devel 
ghostscript-library libdrm-devel libopenssl-devel pkgconfig xorg-x11 
xorg-x11-devel xorg-x11-fonts-devel xorg-x11-libICE-devel xorg-x11-libSM-devel 
xorg-x11-libX11-devel xorg-x11-libXau-devel xorg-x11-libXdmcp-devel 
xorg-x11-libXext-devel xorg-x11-libXfixes-devel xorg-x11-libXmu-devel 
xorg-x11-libXp-devel xorg-x11-libXpm-devel xorg-x11-libXprintUtil-devel 
xorg-x11-libXrender-devel xorg-x11-libXt-devel xorg-x11-libXv-devel 
xorg-x11-libfontenc-devel xorg-x11-libxkbfile-devel xorg-x11-proto-devel 
xorg-x11-xtrans-devel
 ### udev support (broken on openSUSE 11.2, see also bnc #589997)
@@ -31,7 +31,7 @@
 %endif
 Url:            http://xorg.freedesktop.org/
 Version:        7.6_%{dirsuffix}
-Release:        33
+Release:        1
 License:        GPLv2+ ; MIT License (or similar)
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 Group:          System/X11/Servers/XF86_4
@@ -40,8 +40,8 @@
 %endif
 Requires:       pkgconfig xorg-x11-fonts-core xorg-x11
 %ifnarch s390 s390x
-Provides:       VIDEO_ABI_VERSION = 8
-Provides:       INPUT_ABI_VERSION = 11
+Provides:       VIDEO_ABI_VERSION = 10
+Provides:       INPUT_ABI_VERSION = 12
 Requires:       libpixman-1-0 >= 0.15.2
 %endif
 Provides:       xorg-x11-server-glx xorg-x11-Xvfb
@@ -59,19 +59,13 @@
 Patch13:        u_OS-acpi-Reconnect-to-acpid-when-it-gets-restarted.patch
 Patch16:        p_xnest-ignore-getimage-errors.diff
 %if %vnc
-### Dan Nicholson <[email protected]>
-#http://people.freedesktop.org/~dbn/xorg-server-xf4vnc.patch
-Patch39:        xorg-server-xf4vnc.patch
-Patch40:        xorg-server-xf4vnc-disable-dmxvnc.diff
-Patch42:        xorg-server-xf4vnc-TranslateNone.diff
-Patch43:        xorg-server-xf4vnc-abi-version.diff
-Patch44:        xorg-server-xf4vnc-cutpaste.diff
-Patch46:        xorg-server-xf4vnc-busyloop.diff
-Patch47:        xorg-server-xf4vnc-clientTimeout.diff
-Patch48:        xorg-server-xf4vnc-fix.diff
-Patch49:        xorg-server-xf4vnc-fixes_1_8.diff
-Patch50:        xorg-server-xf4vnc-fixes_1_9.diff
-Patch51:        xorg-server-xf4vnc-fix-keyboard-layout-handling.diff
+Patch17:        N-VNC-Add-support-for-VNC.patch
+Patch18:        N-VNC-Readd-timeout-when-vnc-viewer-connection-breaks.patch
+Patch19:        N-VNC-Fix-crash-when-no-depth-translation-is-required.patch
+Patch20:        N-VNC-Don-t-let-VNC-access-the-framebuffer-directly-an.patch
+Patch21:        N-VNC-Enable-use-of-all-keyboard-layouts-independent-o.patch
+Patch22:        N-VNC-Fix-crash-due-to-unset-input-device-names.patch
+Patch23:        Xvnc-pthread.diff
 %endif
 Patch45:        bug-197858_dpms.diff
 Patch77:        fbdevhw.diff
@@ -98,15 +92,7 @@
 Patch211:       0001-Prevent-XSync-Alarms-from-senslessly-calling-CheckTr.patch
 Patch213:       xorg-server-xdmcp.patch
 Patch220:       Use-external-tool-for-creating-backtraces-on-crashes.patch
-Patch221:       commit-5c6a2f9.diff
 Patch222:       sync-fix.patch
-Patch224:       pad-size-of-system-memory-copy-for-1x1-pixmaps
-Patch225:       xorg-server-stop-cpu-eating.diff
-Patch226:       record-avoid-crash-when-calling-RecordFlushReplyBuff.patch
-Patch227:       Replace-malloc-with-calloc-to-initialize-the-buffers.patch
-Patch228:       EXA-mixed-ModifyPixmapHeader-pitch-fixes.-bug-33929.patch
-Patch229:       u_xf4nvc_missing-libz.patch
-Patch230:       U_xserver_fix-pixmaps-lifetime-tracking.patch
 
 %description
 This package contains the X.Org Server.
@@ -171,20 +157,13 @@
 %patch13 -p1
 %patch16 -p2
 %if %vnc
-%patch39 -p1
-%patch40 -p0
-%patch42 -p1
-%patch43 -p0
-%patch44
-%patch46 -p1
-%patch47 -p1
-%patch48 -p1
-%patch49 -p0
-%patch50 -p1
-%patch51 -p1
-%patch229 -p0
-%patch230 -p1
-chmod 755 hw/vnc/symlink-vnc.sh
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
+%patch23 -p1
 %endif
 %patch45 -p0
 pushd xorg-docs-*
@@ -196,7 +175,8 @@
 %patch106 -p1
 %patch112 -p0
 %patch123 -p0
-%patch125 -p1
+### disabled for now
+#%patch125 -p1
 %patch127 -p1
 %patch128
 pushd hw/xfree86/os-support/bus
@@ -204,25 +184,22 @@
 popd
 %patch143 -p0
 %patch145 -p0
-%patch162 -p1
-%patch163 -p1
+### disabled for now
+#%patch162 -p1
+### disabled for now
+#%patch163 -p1
 %patch164 -p1
 %patch200 -p1
 %patch202 -p1
 %patch203 -p1
 %patch206 -p0
 %patch210 -p1
-%patch211 -p1
+### disabled for now
+#%patch211 -p1
 %patch213 -p1
 # Disable backtrace generation patch for now
 #%patch220 -p1
-%patch221 -p1
 %patch222 -p1
-%patch224 -p1
-%patch225 -p1
-%patch226 -p1
-%patch227 -p1
-%patch228 -p1
 
 %build
 pushd xorg-docs-*
@@ -300,7 +277,6 @@
 install -m 644 $RPM_SOURCE_DIR/README.updates 
$RPM_BUILD_ROOT/usr/%{_lib}/xorg/modules/updates
 mkdir -p $RPM_BUILD_ROOT/etc/modprobe.d
 install -m 644 $RPM_SOURCE_DIR/modprobe.nvidia 
$RPM_BUILD_ROOT/etc/modprobe.d/50-nvidia.conf
-gzip -c hw/dmx/Xdmx.man > $RPM_BUILD_ROOT/%{_mandir}/man1/Xdmx.1.gz
 %else
 rm -f $RPM_BUILD_ROOT/usr/share/aclocal/*.m4
 %endif
@@ -428,6 +404,7 @@
 /usr/include/xorg/
 /usr/%{_lib}/*.a
 %ifnarch s390 s390x
+%exclude /usr/%{_lib}/libxf86config.la
 /usr/%{_lib}/pkgconfig/*.pc
 /usr/share/aclocal/*.m4
 %endif

++++++ N-VNC-Add-support-for-VNC.patch ++++++
++++ 23764 lines (skipped)

++++++ N-VNC-Don-t-let-VNC-access-the-framebuffer-directly-an.patch ++++++
From: Michal Srb <[email protected]>
Date: Tue, 6 Sep 2011 13:08:25 +0200
Subject: [PATCH 4/6] VNC: Don't let VNC access the framebuffer directly any 
more.
Patch-Mainline: Currently no upstream project.
Git-commit: 3e0de1d95b3ffd3988016b2d3f40f577393ad046
Signed-off: Egbert Eich <[email protected]> 
References: bnc #653915

It seems that accessing the framebuffer directly is not a good idea anymore.
This patch will let the tight encoding read the screen data using GetImage. It
may be little slower, but not dramatically - it already does few GetImage calls
on every repaint now.

Signed-off-by: Egbert Eich <[email protected]>
---
 hw/vnc/tight.c           |   69 ++++++++++++++++++++++++++++++---------------
 hw/vnc/vncext.c          |   19 ++----------
 hw/xfree86/vnc/vncInit.c |   11 ++-----
 hw/xfree86/vnc/vncint.h  |    2 -
 4 files changed, 53 insertions(+), 48 deletions(-)

diff --git a/hw/vnc/tight.c b/hw/vnc/tight.c
index 5c54736..f27c73e 100644
--- a/hw/vnc/tight.c
+++ b/hw/vnc/tight.c
@@ -109,15 +109,17 @@ static unsigned char *tightAfterBuf = NULL;
 
 static int *prevRowBuf = NULL;
 
+static unsigned char* fakeFrameBuffer = NULL;
+
 
 /* Prototypes for static functions. */
 
-static void FindBestSolidArea (ScreenPtr pScreen, int x, int y, int w, int h,
+static void FindBestSolidArea (rfbClientPtr cl, int x, int y, int w, int h,
                                CARD32 colorValue, int *w_ptr, int *h_ptr);
-static void ExtendSolidArea   (ScreenPtr pScreen, int x, int y, int w, int h,
+static void ExtendSolidArea   (rfbClientPtr cl, int x, int y, int w, int h,
                                CARD32 colorValue,
                                int *x_ptr, int *y_ptr, int *w_ptr, int *h_ptr);
-static Bool CheckSolidTile    (ScreenPtr pScreen, int x, int y, int w, int h,
+static Bool CheckSolidTile    (rfbClientPtr cl, int x, int y, int w, int h,
                                CARD32 *colorPtr, Bool needSameColor);
 static Bool CheckSolidTile8   (ScreenPtr pScreen, int x, int y, int w, int h,
                                CARD32 *colorPtr, Bool needSameColor);
@@ -126,6 +128,7 @@ static Bool CheckSolidTile16  (ScreenPtr pScreen, int x, 
int y, int w, int h,
 static Bool CheckSolidTile32  (ScreenPtr pScreen, int x, int y, int w, int h,
                                CARD32 *colorPtr, Bool needSameColor);
 
+static Bool SendRectEncodingTight(rfbClientPtr cl, int x, int y, int w, int h);
 static Bool SendRectSimple    (rfbClientPtr cl, int x, int y, int w, int h);
 static Bool SendSubrect       (rfbClientPtr cl, int x, int y, int w, int h);
 static Bool SendTightHeader   (rfbClientPtr cl, int x, int y, int w, int h);
@@ -211,6 +214,25 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
                        int x, int y, int w, int h)
 {
     VNCSCREENPTR(cl->pScreen);
+  
+    /* Copy the rectangle to the fake buffer for CheckSolidTile functions. */
+
+    if(!fakeFrameBuffer) fakeFrameBuffer = malloc(pVNC->width * pVNC->height * 
cl->format.bitsPerPixel / 8);
+    (*cl->translateFn)(cl->pScreen, cl->translateLookupTable, 
+                        &pVNC->rfbServerFormat,
+                        &cl->format, fakeFrameBuffer + (y * pVNC->width * 
cl->format.bitsPerPixel / 8),
+                        pVNC->paddedWidthInBytes, pVNC->width, h, 0, y);
+    
+    /* Call the inner part */
+    
+    return SendRectEncodingTight(cl, x, y, w, h);
+}
+
+static Bool
+SendRectEncodingTight(rfbClientPtr cl,
+                     int x, int y, int w, int h)
+{
+    VNCSCREENPTR(cl->pScreen);
     int nMaxRows;
     CARD32 colorValue;
     int dx, dy, dw, dh;
@@ -247,7 +269,7 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
         nMaxWidth = (w > maxRectWidth) ? maxRectWidth : w;
         nMaxRows = maxRectSize / nMaxWidth;
     }
-
+    
     /* Try to find large solid-color areas and send them separately. */
 
     for (dy = y; dy < y + h; dy += MAX_SPLIT_TILE_SIZE) {
@@ -269,11 +291,11 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
             dw = (dx + MAX_SPLIT_TILE_SIZE <= x + w) ?
                 MAX_SPLIT_TILE_SIZE : (x + w - dx);
 
-            if (CheckSolidTile(cl->pScreen, dx, dy, dw, dh, &colorValue, 
FALSE)) {
+            if (CheckSolidTile(cl, dx, dy, dw, dh, &colorValue, FALSE)) {
 
                 /* Get dimensions of solid-color area. */
 
-                FindBestSolidArea(cl->pScreen, dx, dy, w - (dx - x), h - (dy - 
y),
+                FindBestSolidArea(cl, dx, dy, w - (dx - x), h - (dy - y),
                                  colorValue, &w_best, &h_best);
 
                 /* Make sure a solid rectangle is large enough
@@ -286,7 +308,7 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
                 /* Try to extend solid rectangle to maximum size. */
 
                 x_best = dx; y_best = dy;
-                ExtendSolidArea(cl->pScreen, x, y, w, h, colorValue,
+                ExtendSolidArea(cl, x, y, w, h, colorValue,
                                 &x_best, &y_best, &w_best, &h_best);
 
                 /* Send rectangles at top and left to solid-color area. */
@@ -295,7 +317,7 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
                      !SendRectSimple(cl, x, y, w, y_best-y) )
                     return FALSE;
                 if ( x_best != x &&
-                     !rfbSendRectEncodingTight(cl, x, y_best,
+                     !SendRectEncodingTight(cl, x, y_best,
                                                x_best-x, h_best) )
                     return FALSE;
 
@@ -316,11 +338,11 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
                 /* Send remaining rectangles (at right and bottom). */
 
                 if ( x_best + w_best != x + w &&
-                     !rfbSendRectEncodingTight(cl, x_best+w_best, y_best,
+                     !SendRectEncodingTight(cl, x_best+w_best, y_best,
                                                w-(x_best-x)-w_best, h_best) )
                     return FALSE;
                 if ( y_best + h_best != y + h &&
-                     !rfbSendRectEncodingTight(cl, x, y_best+h_best,
+                     !SendRectEncodingTight(cl, x, y_best+h_best,
                                                w, h-(y_best-y)-h_best) )
                     return FALSE;
 
@@ -339,7 +361,7 @@ rfbSendRectEncodingTight(rfbClientPtr cl,
 }
 
 static void
-FindBestSolidArea(ScreenPtr pScreen,
+FindBestSolidArea(rfbClientPtr cl,
                  int x, int y, int w, int h,
                  CARD32 colorValue,
                  int *w_ptr, int *h_ptr)
@@ -357,13 +379,13 @@ FindBestSolidArea(ScreenPtr pScreen,
         dw = (w_prev > MAX_SPLIT_TILE_SIZE) ?
             MAX_SPLIT_TILE_SIZE : w_prev;
 
-        if (!CheckSolidTile(pScreen, x, dy, dw, dh, &colorValue, TRUE))
+        if (!CheckSolidTile(cl, x, dy, dw, dh, &colorValue, TRUE))
             break;
 
         for (dx = x + dw; dx < x + w_prev;) {
             dw = (dx + MAX_SPLIT_TILE_SIZE <= x + w_prev) ?
                 MAX_SPLIT_TILE_SIZE : (x + w_prev - dx);
-            if (!CheckSolidTile(pScreen, dx, dy, dw, dh, &colorValue, TRUE))
+            if (!CheckSolidTile(cl, dx, dy, dw, dh, &colorValue, TRUE))
                 break;
            dx += dw;
         }
@@ -380,7 +402,7 @@ FindBestSolidArea(ScreenPtr pScreen,
 }
 
 static void
-ExtendSolidArea(ScreenPtr pScreen, int x, int y, int w, int h,
+ExtendSolidArea(rfbClientPtr cl, int x, int y, int w, int h,
                CARD32 colorValue,
                int *x_ptr, int *y_ptr, int *w_ptr, int *h_ptr)
 {
@@ -388,7 +410,7 @@ ExtendSolidArea(ScreenPtr pScreen, int x, int y, int w, int 
h,
 
     /* Try to extend the area upwards. */
     for ( cy = *y_ptr - 1;
-          cy >= y && CheckSolidTile(pScreen, *x_ptr, cy, *w_ptr, 1, 
&colorValue, TRUE);
+          cy >= y && CheckSolidTile(cl, *x_ptr, cy, *w_ptr, 1, &colorValue, 
TRUE);
           cy-- );
     *h_ptr += *y_ptr - (cy + 1);
     *y_ptr = cy + 1;
@@ -396,13 +418,13 @@ ExtendSolidArea(ScreenPtr pScreen, int x, int y, int w, 
int h,
     /* ... downwards. */
     for ( cy = *y_ptr + *h_ptr;
           cy < y + h &&
-              CheckSolidTile(pScreen, *x_ptr, cy, *w_ptr, 1, &colorValue, 
TRUE);
+              CheckSolidTile(cl, *x_ptr, cy, *w_ptr, 1, &colorValue, TRUE);
           cy++ );
     *h_ptr += cy - (*y_ptr + *h_ptr);
 
     /* ... to the left. */
     for ( cx = *x_ptr - 1;
-          cx >= x && CheckSolidTile(pScreen, cx, *y_ptr, 1, *h_ptr, 
&colorValue, TRUE);
+          cx >= x && CheckSolidTile(cl, cx, *y_ptr, 1, *h_ptr, &colorValue, 
TRUE);
           cx-- );
     *w_ptr += *x_ptr - (cx + 1);
     *x_ptr = cx + 1;
@@ -410,7 +432,7 @@ ExtendSolidArea(ScreenPtr pScreen, int x, int y, int w, int 
h,
     /* ... to the right. */
     for ( cx = *x_ptr + *w_ptr;
           cx < x + w &&
-              CheckSolidTile(pScreen, cx, *y_ptr, 1, *h_ptr, &colorValue, 
TRUE);
+              CheckSolidTile(cl, cx, *y_ptr, 1, *h_ptr, &colorValue, TRUE);
           cx++ );
     *w_ptr += cx - (*x_ptr + *w_ptr);
 }
@@ -423,11 +445,12 @@ ExtendSolidArea(ScreenPtr pScreen, int x, int y, int w, 
int h,
  */
 
 static Bool
-CheckSolidTile(ScreenPtr pScreen, int x, int y, int w, int h, CARD32 *colorPtr,
+CheckSolidTile(rfbClientPtr cl, int x, int y, int w, int h, CARD32 *colorPtr,
               Bool needSameColor)
 {
-    VNCSCREENPTR(pScreen);
-    switch(pVNC->rfbServerFormat.bitsPerPixel) {
+  ScreenPtr pScreen = cl->pScreen;
+
+  switch(cl->format.bitsPerPixel) {
     case 32:
         return CheckSolidTile32(pScreen, x, y, w, h, colorPtr, needSameColor);
     case 16:
@@ -449,7 +472,7 @@ static Bool                                                 
                  \
     int dx, dy;                                                               \
                                                                               \
     fbptr = (CARD##bpp *)                                                     \
-        &pVNC->pfbMemory[y * pVNC->paddedWidthInBytes + x * (bpp/8)]; \
+        &fakeFrameBuffer[(y * pVNC->width + x) * (bpp/8)];                    \
                                                                               \
     colorValue = *fbptr;                                                      \
     if (needSameColor && (CARD32)colorValue != *colorPtr)                     \
@@ -460,7 +483,7 @@ static Bool                                                 
                  \
             if (colorValue != fbptr[dx])                                      \
                 return FALSE;                                                 \
         }                                                                     \
-        fbptr = (CARD##bpp *)((CARD8 *)fbptr + pVNC->paddedWidthInBytes);     \
+        fbptr = (CARD##bpp *)((CARD8 *)fbptr + pVNC->width * (bpp/8));        \
     }                                                                         \
                                                                               \
     *colorPtr = (CARD32)colorValue;                                           \
diff --git a/hw/vnc/vncext.c b/hw/vnc/vncext.c
index ea913b7..534f3f5 100644
--- a/hw/vnc/vncext.c
+++ b/hw/vnc/vncext.c
@@ -702,15 +702,7 @@ CreateResourceTypes(void)
 
 static unsigned long vncExtGeneration = 0;
 #if XFREE86VNC
-extern Bool VNCInit(ScreenPtr pScreen, unsigned char *FBStart);
-
-/* copied from miscrinit.c */
-typedef struct
-{
-    pointer pbits; /* pointer to framebuffer */
-    int width;    /* delta to add to a framebuffer addr to move one row down */
-} miScreenInitParmsRec, *miScreenInitParmsPtr;
-
+extern Bool VNCInit(ScreenPtr pScreen);
 
 static Bool
 vncCreateScreenResources(ScreenPtr pScreen)
@@ -719,9 +711,6 @@ vncCreateScreenResources(ScreenPtr pScreen)
     CreateScreenResourcesProcPtr CreateScreenResources =
         (CreateScreenResourcesProcPtr)
         dixLookupPrivate(&pScreen->devPrivates, vncCreateScreenResourcesKey);
-    miScreenInitParmsPtr pScrInitParms;
-
-    pScrInitParms = (miScreenInitParmsPtr)pScreen->devPrivate;
 
     if ( pScreen->CreateScreenResources != vncCreateScreenResources ) {
         /* Can't find hook we are hung on */
@@ -732,9 +721,6 @@ vncCreateScreenResources(ScreenPtr pScreen)
                    (void *) pScreen->CreateScreenResources );
     }
 
-    /* Now do our stuff */
-    VNCInit(pScreen, pScrInitParms->pbits);
-
     /* Unhook this function ... */
     pScreen->CreateScreenResources = CreateScreenResources;
     dixSetPrivate(&pScreen->devPrivates, vncCreateScreenResourcesKey, NULL);
@@ -744,6 +730,9 @@ vncCreateScreenResources(ScreenPtr pScreen)
         ret = (*pScreen->CreateScreenResources)(pScreen);
     }
 
+    /* Now do our stuff */
+    VNCInit(pScreen);
+
 #ifdef DEBUG
     ErrorF("vncCreateScreenResources() returns %d\n", ret);
 #endif
diff --git a/hw/xfree86/vnc/vncInit.c b/hw/xfree86/vnc/vncInit.c
index 4a124fb..8b2fa5f 100644
--- a/hw/xfree86/vnc/vncInit.c
+++ b/hw/xfree86/vnc/vncInit.c
@@ -49,7 +49,7 @@ extern void VncExtensionInit(void);
 
 extern void vncInitMouse(void);
 extern void vncInitKeyb(void);
-Bool VNCInit(ScreenPtr pScreen, unsigned char *FBStart);
+Bool VNCInit(ScreenPtr pScreen);
 
 #ifndef XFree86LOADER
 static unsigned long VNCGeneration = 0;
@@ -151,7 +151,7 @@ void rfbLogPerror(char *str)
  * Called by vncCreateScreenResources()
  */
 Bool
-VNCInit(ScreenPtr pScreen, unsigned char *FBStart)
+VNCInit(ScreenPtr pScreen)
 {
     ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
     VisualPtr visual;
@@ -164,9 +164,6 @@ VNCInit(ScreenPtr pScreen, unsigned char *FBStart)
     PictureScreenPtr   ps;
 #endif
 
-    if (!FBStart)
-       return FALSE;
-
 #ifndef XFree86LOADER
     if (VNCGeneration != serverGeneration) {
        VncExtensionInit();
@@ -287,9 +284,7 @@ VNCInit(ScreenPtr pScreen, unsigned char *FBStart)
     pScreenPriv->depth = pScrn->depth;
     pScreenPriv->paddedWidthInBytes = PixmapBytePad(pScrn->displayWidth, 
pScrn->depth);
     pScreenPriv->bitsPerPixel = rfbBitsPerPixel(pScrn->depth);
-    pScreenPriv->pfbMemory = FBStart;
-    pScreenPriv->oldpfbMemory = FBStart;
-
+    
     pScreenPriv->cursorIsDrawn = TRUE;
     pScreenPriv->dontSendFramebufferUpdate = FALSE;
 
diff --git a/hw/xfree86/vnc/vncint.h b/hw/xfree86/vnc/vncint.h
index 18a3630..9e4a36f 100644
--- a/hw/xfree86/vnc/vncint.h
+++ b/hw/xfree86/vnc/vncint.h
@@ -44,13 +44,11 @@ typedef struct {
     size_t             buf_filled;
     int                        maxFd;
     fd_set             allFds;
-    unsigned char *    oldpfbMemory;
     Bool               rfbAlwaysShared;
     Bool               rfbNeverShared;
     Bool               rfbDontDisconnect;
     Bool               rfbUserAccept;
     Bool               rfbViewOnly;
-    unsigned char *    pfbMemory;
     int                paddedWidthInBytes;
     ColormapPtr        rfbInstalledColormap;
     ColormapPtr                savedColormap;
-- 
1.7.3.4

++++++ N-VNC-Enable-use-of-all-keyboard-layouts-independent-o.patch ++++++
From: Matthias Hopf <[email protected]>
Date: Tue, 6 Sep 2011 08:35:57 +0200
Subject: [PATCH 5/6] VNC: Enable use of all keyboard layouts, independent of 
remotely set layout
Patch-Mainline: Currently no upstream project.
Git-commit: 6885b927a6065e6379cfaa3ebbf6c51445a015d9
Signed-off: Egbert Eich <[email protected]> 
References: bnc #400520, #605015, #660797


- Use virtual core keyboard for events and key state lookup:
  Make layout changes work again - see discussion on
  https://defect.opensolaris.org/bz/show_bug.cgi?id=8687
- keycode lookup:
  Don't use any static keyboard layout any more.
- ISO-Level3-Shift handling:
  Enable the use of keyboard layouts that use AltGr for 3rd and 4th level.
- Make keyboard handling more XKB aware:
  Previous code was e.g. not multi-group aware.
- Nuke use of legacy keymap as far as possible:
  Creating legacy keymap takes time, and it has to be freed again afterwards.
- Free index lookup:
  Make XKB aware.
- Ignore calls for NoSymbol:
  This destroys otherwise valid entries.
- Fix analysis for shift/level3 event faking:
  Previous broken version lead to e.g. Shift+PgUp not being recognized.
- Add tons of debug output (disabled).

Signed-off-by: Egbert Eich <[email protected]>
---
 hw/vnc/kbdptr.c   |  289 +++++++++++++++++++++++++++++++++++++++++------------
 hw/vnc/keyboard.h |    1 +
 2 files changed, 228 insertions(+), 62 deletions(-)

diff --git a/hw/vnc/kbdptr.c b/hw/vnc/kbdptr.c
index f306022..b3b0e68 100644
--- a/hw/vnc/kbdptr.c
+++ b/hw/vnc/kbdptr.c
@@ -34,6 +34,8 @@
 #include "X11/Xproto.h"
 #include "inputstr.h"
 #include "inpututils.h"
+#include "xkbsrv.h"
+#include "xkbstr.h"
 #define XK_CYRILLIC
 #include <X11/keysym.h>
 #include <X11/Xatom.h>
@@ -46,6 +48,7 @@
 #include "dmxinput.h"
 #endif
 
+#if 0
 #if !XFREE86VNC
 
 #define MIN_KEY_CODE           8
@@ -196,21 +199,20 @@ static KeySym map[MAX_KEY_CODE * GLYPHS_PER_KEY] = {
 #define N_PREDEFINED_KEYS (sizeof(map) / (sizeof(KeySym) * GLYPHS_PER_KEY))
 
 #endif
+#endif
 
 #define KEY_IS_PRESSED(keycode) \
-    (kbdDevice->key->down[(keycode) >> 3] & (1 << ((keycode) & 7)))
+    (inputInfo.keyboard->key->down[(keycode) >> 3] & (1 << ((keycode) & 7)))
 
 static void vncXConvertCase(KeySym sym, KeySym *lower, KeySym *upper);
 
-static DeviceIntPtr ptrDevice = NULL, kbdDevice = NULL;
+static DeviceIntPtr ptrDevice = NULL;
 
 
 void
 vncSetKeyboardDevice(DeviceIntPtr kbd)
 {
-   if (kbdDevice && kbd)
-      return; /* set once */
-   kbdDevice = kbd;
+  // obsoleted by inputInfo
 }
 
 
@@ -280,6 +282,29 @@ EnqueueKey(DeviceIntPtr kbdDev, int type, int detail)
       mieqEnqueue(kbdDev, (InternalEvent*)(events + i)->event);
 }
 
+/* In-server and highly changed version of XkbKeycodeToKeysym */
+static KeySym
+_XkbKeycodeToKeysym(XkbDescPtr xkb, KeyCode kc, int group, int level)
+{
+    KeySym ks;
+
+    if ((kc<xkb->min_key_code)||(kc>xkb->max_key_code))
+       return NoSymbol;
+    /* Treat single group elements as present in all groups */
+    if (XkbKeyNumGroups (xkb,kc) == 1)
+       group = 0;
+    if ((group<0)||(level<0)||(group>=XkbKeyNumGroups(xkb,kc)))
+       return NoSymbol;
+    if (level < XkbKeyGroupWidth(xkb, kc, group))
+       ks = XkbKeySymEntry(xkb, kc, level, group);
+    else
+       ks = NoSymbol;
+    /* Treat 'K' as 'K K', */
+    if (ks == NoSymbol && (level & 1) && level-1 < XkbKeyGroupWidth(xkb, kc, 
group))
+       ks = XkbKeySymEntry(xkb, kc, level-1, group);
+    return ks;
+}
+
 /*
  * Called when the rfbserver receives a rfbKeyEvent event from a client.
  * Put an X keyboard event into the event queue.
@@ -288,21 +313,35 @@ void
 KbdAddEvent(Bool down, KeySym keySym, rfbClientPtr cl)
 {
     const int type = down ? KeyPress : KeyRelease;
-    KeySymsPtr keySyms;
-    XkbStateRec *xkb;
-    int i;
+    XkbSrvInfoPtr xkbInfo;
+    int i, group, level;
     int keyCode = 0;
-    int freeIndex = -1;
     Bool fakeShiftPress = FALSE;
     Bool fakeShiftLRelease = FALSE;
     Bool fakeShiftRRelease = FALSE;
     Bool shiftMustBeReleased = FALSE;
     Bool shiftMustBePressed = FALSE;
+    Bool fakeLevel3Press = FALSE;
+    Bool fakeLevel3Release = FALSE;
+    Bool level3MustBeReleased = FALSE;
+    Bool level3MustBePressed = FALSE;
+
+    /* Incomplete maps may create NoSymbol - which lets us
+     * select and/or overwrite otherwise valid entries.
+     * E.g Level3+a in serbian layout creates NoSymbol on os11.4
+     * 2011-05-24 [email protected] */
+    if (keySym == NoSymbol) {
+       ErrorF("KbdAddEvent: ignoring illegal NoSymbol\n");
+       return;
+    }
 
-    if (!kbdDevice)
-        return;
-
-    keySyms = XkbGetCoreMap(kbdDevice);
+    xkbInfo = inputInfo.keyboard->key->xkbInfo;
+    group   = xkbInfo->state.group;
+    level   = (KEY_IS_PRESSED(ISO_LEVEL3_KEY_CODE) ? 2 : 0) |
+             (XkbStateFieldFromRec(&xkbInfo->state) & ShiftMask ? 1 : 0);
+#ifdef DEBUG
+    ErrorF ("VNCkbd:\t%s Sym %04x\n", down ? "+":"-", (int)keySym);
+#endif
 
 #ifdef CORBA
     if (cl) {
@@ -320,6 +359,12 @@ KbdAddEvent(Bool down, KeySym keySym, rfbClientPtr cl)
      *
      * Alan.
      */
+    /* Never use predefined keys.
+     * This is inherently incapable of dealing with changing
+     * keyboard layouts. Not being able to work with non-local xmodmaps
+     * is a nuisance at worst, and probably even preferred.
+     * 2011-04-15 [email protected] */
+#ifdef NOTANYMORE
 #if !XFREE86VNC
     /* First check if it's one of our predefined keys.  If so then we can make
        some attempt at allowing an xmodmap inside a VNC desktop behave
@@ -346,107 +391,227 @@ KbdAddEvent(Bool down, KeySym keySym, rfbClientPtr cl)
        }
     }
 #endif
+#endif
 
     if (!keyCode) {
 
        /* not one of our predefined keys - see if it's in the current keyboard
            mapping (i.e. we've already allocated an extra keycode for it) */
 
-       if (keySyms->mapWidth < 2) {
-           ErrorF("KbdAddEvent: Sanity check failed - Keyboard mapping has "
-                  "less than 2 keysyms per keycode (KeySym 0x%x)\n", 
(int)keySym);
-           return;
-       }
-
-       for (i = 0; i < NO_OF_KEYS * keySyms->mapWidth; i++) {
-           if (keySym == keySyms->map[i]) {
-               keyCode = MIN_KEY_CODE + i / keySyms->mapWidth;
-
-               if (keySyms->map[(i / keySyms->mapWidth)
-                                       * keySyms->mapWidth + 1] != NoSymbol) {
-
-                   /* this keycode has more than one symbol associated with
-                      it, so shift state is important */
+       for (keyCode = MIN_KEY_CODE; keyCode < MIN_KEY_CODE + NO_OF_KEYS; 
keyCode++) {
+           /* Check all keycodes, but only continue on those where
+            * backconversion results in keySym.
+            * 2011-05-20 [email protected] */
+
+#ifdef DEBUG
+           int j;
+           ErrorF ("   keyCode %3d map# %4d++ level %d of %d:  keySyms",
+                   keyCode, (i / keySyms->mapWidth) * keySyms->mapWidth,
+                   i % keySyms->mapWidth, keySyms->mapWidth);
+           for (j = 0; j < keySyms->mapWidth; j++)
+               ErrorF (" %02x", (int)keySyms->map[(i / keySyms->mapWidth) * 
keySyms->mapWidth + j]);
+           ErrorF ("\n");
+           ErrorF ("   group %d of %d width %d:  keySyms",
+                   group, XkbKeyNumGroups(xkbInfo->desc, keyCode),
+                   XkbKeyGroupWidth(xkbInfo->desc, keyCode, group));
+           if (XkbKeyNumGroups(xkbInfo->desc, keyCode) > group)
+               for (j = 0; j < XkbKeyGroupWidth(xkbInfo->desc, keyCode, 
group); j++)
+                   ErrorF (" %02x", (int) XkbKeySymEntry(xkbInfo->desc, 
keyCode, j, group));
+           ErrorF ("\n");
+#endif
 
-                   if ((i % keySyms->mapWidth) == 0)
-                       shiftMustBeReleased = TRUE;
-                   else
-                       shiftMustBePressed = TRUE;
-               }
+           /* Check whether keySym is reachable in current group
+            * by any shift/Level3_shift state (preferrable w/o change).
+            * This doesn't do real modifyer analysis, only Shift and 
Level3_Shift.
+            * 2011-05-23 [email protected] */
+           if (_XkbKeycodeToKeysym(xkbInfo->desc, keyCode, group, level) == 
keySym)
+               break;
+           if (_XkbKeycodeToKeysym(xkbInfo->desc, keyCode, group, level ^ 2) 
== keySym) {
+               if (level & 2)
+                   level3MustBeReleased = TRUE;
+               else
+                   level3MustBePressed = TRUE;
                break;
            }
-           if ((freeIndex == -1) && (keySyms->map[i] == NoSymbol)
-               && (i % keySyms->mapWidth) == 0)
-           {
-               freeIndex = i;
+           if (_XkbKeycodeToKeysym(xkbInfo->desc, keyCode, group, level ^ 1) 
== keySym) {
+               if (level & 1)
+                   shiftMustBeReleased = TRUE;
+               else
+                   shiftMustBePressed = TRUE;
+               break;
+           }
+           if (_XkbKeycodeToKeysym(xkbInfo->desc, keyCode, group, level ^ 3) 
== keySym) {
+               if (level & 2)
+                   level3MustBeReleased = TRUE;
+               else
+                   level3MustBePressed = TRUE;
+               if (level & 1)
+                   shiftMustBeReleased = TRUE;
+               else
+                   shiftMustBePressed = TRUE;
+               break;
            }
        }
+       if (keyCode == MIN_KEY_CODE + NO_OF_KEYS)
+           keyCode = 0;
     }
 
     if (!keyCode) {
        KeySym lower, upper;
+       KeySymsPtr keySyms = XkbGetCoreMap(inputInfo.keyboard);
 
        /* we don't have an existing keycode - make one up on the fly and add
           it to the keyboard mapping.  Thanks to Vlad Harchev for pointing
           out problems with non-ascii capitalisation. */
 
-       if (freeIndex == -1) {
+       /* Find free index for current group. */
+       for (keyCode = MIN_KEY_CODE; keyCode < MIN_KEY_CODE + NO_OF_KEYS; 
keyCode++) {
+           /* A keyCode is free if no groups are assigned at all */
+           if (XkbKeyNumGroups(xkbInfo->desc, keyCode) == 0)
+               break;
+#ifdef NOTANYMORE
+           /* We can use exact map positions for group 1+2, but only partially
+            * filling out xkb legacy maps may suddenly change the # of groups.
+            * Reason for that is unknown yet. Might be related to (fixed) 
NoSymbol issue.
+            * 2011-05-24 [email protected] */
+           /* For primary groups: A keyCode is free if current group is empty 
*/
+           if (XkbKeyGroupWidth(xkbInfo->desc, keyCode, group) < 1 && group < 
2)
+               break;
+           /* Never touch groups that have a single level only (weird 
group?!?) */
+           if (XkbKeyGroupWidth(xkbInfo->desc, keyCode, group) < 2)
+               continue;
+           /* For primary groups: A keyCode is free if only NoSymbol is 
assigned
+            * to available levels (only validating levels 0-3) */
+           if (group < 2 &&
+               XkbKeySymEntry(xkbInfo->desc, keyCode, 0, group) == NoSymbol &&
+               XkbKeySymEntry(xkbInfo->desc, keyCode, 1, group) == NoSymbol &&
+               (XkbKeyGroupWidth(xkbInfo->desc, keyCode, group) < 3 ||
+                (XkbKeySymEntry(xkbInfo->desc, keyCode, 2, group) == NoSymbol 
&&
+                 (XkbKeyGroupWidth(xkbInfo->desc, keyCode, group) < 4 ||
+                  XkbKeySymEntry(xkbInfo->desc, keyCode, 3, group) == 
NoSymbol))))
+               break;
+#endif
+       }
+
+       if (keyCode == MIN_KEY_CODE + NO_OF_KEYS) {
            ErrorF("KbdAddEvent: ignoring KeySym 0x%x - no free KeyCodes\n",
                   (int)keySym);
+           free (keySyms->map);
+           free (keySyms);
            return;
        }
 
-       keyCode = MIN_KEY_CODE + freeIndex / keySyms->mapWidth;
-
        vncXConvertCase(keySym, &lower, &upper);
 
-       if (lower == upper) {
-           keySyms->map[freeIndex] = keySym;
-
-       } else {
-           keySyms->map[freeIndex] = lower;
-           keySyms->map[freeIndex+1] = upper;
-
+       /* Adding keys is not using xkb mechanisms yet, but relying on support
+        * for changing keys in the legacy map. Should be changed, eventually.
+        * 2011-05-19 [email protected] */
+#ifdef NOTANYMORE
+       if (group < 2) {
+           /* Only set mapping for active group. Will only work with dual 
layouts.
+            * 2011-05-23 [email protected] */
+           int active_group_offset = group ? 2 : 0;
+
+           if (lower == upper) {
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + 
active_group_offset] = keySym;
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + 
active_group_offset + 1] = NoSymbol;
+           } else {
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + 
active_group_offset] = lower;
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + 
active_group_offset + 1] = upper;
+           }
+       }
+#endif
+       /* Generic layouts needs to set the full map width.
+        * Weird enough, mapWidth seems too big...
+        * 2011-05-23 [email protected] */
+       for (i = 0; i < (keySyms->mapWidth & ~1); i += 2) {
+           if (lower == upper) {
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + i]  
   = keySym;
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + i + 
1] = NoSymbol;
+           } else {
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + i]  
   = lower;
+               keySyms->map[(keyCode - MIN_KEY_CODE) * keySyms->mapWidth + i + 
1] = upper;
+           }
+       }
+       if (lower != upper) {
            if (keySym == lower)
                shiftMustBeReleased = TRUE;
            else
                shiftMustBePressed = TRUE;
        }
+       level3MustBeReleased = TRUE;
 
-       XkbApplyMappingChange(kbdDevice, keySyms, keyCode, 1, NULL, 
serverClient);
+       XkbApplyMappingChange(inputInfo.keyboard, keySyms, keyCode, 1, NULL, 
serverClient);
 
        ErrorF("KbdAddEvent: unknown KeySym 0x%x - allocating KeyCode %d\n",
               (int)keySym, keyCode);
+       free (keySyms->map);
+       free (keySyms);
     }
 
-    xkb = &kbdDevice->key->xkbInfo->state;
+#ifdef DEBUG
+    ErrorF ("\t%s Sym %04x Code%3d\tState x%02x %s%s%s\tSh %s%s\tL3 %s%s\n",
+           down ? "+":"-", (int)keySym, keyCode, 
XkbStateFieldFromRec(&xkbInfo->state),
+           KEY_IS_PRESSED(SHIFT_L_KEY_CODE) ? "Sl":"",
+           KEY_IS_PRESSED(SHIFT_R_KEY_CODE) ? "Sr":"",
+           KEY_IS_PRESSED(ISO_LEVEL3_KEY_CODE) ? "L3":"",
+           shiftMustBePressed ? "+":"", shiftMustBeReleased ? "-":"",
+           level3MustBePressed ? "+":"", level3MustBeReleased ? "-":"");
+#endif
+#ifdef NOTANYMORE
+    int back = _XkbKeycodeToKeysym (xkbInfo->desc, keyCode, group,
+                                   ((level3MustBePressed || 
(!level3MustBeReleased && (level & 2))) ? 2 : 0) |
+                                   ((shiftMustBePressed || 
(!shiftMustBeReleased && (level & 1))) ? 1 : 0));
+    ErrorF ("\tvalidate code %d %-2s%-2s -> sym %04x %s\n\n", keyCode,
+           (shiftMustBePressed || (!shiftMustBeReleased && (level & 1)))   ? 
"Sh" : "",
+           (level3MustBePressed || (!level3MustBeReleased && (level & 2))) ? 
"L3" : "",
+           back, (back == keySym ? "ok" : "FAILED"));
+#endif
+
     if (down) {
-       if (shiftMustBePressed && !(XkbStateFieldFromRec(xkb) & ShiftMask)) {
+       /* TODO: would require to check which keycodes are actually
+        * bound to ISO_Level3_Shift and/or Shift_L.
+        * 2011-04-18 [email protected] */
+       if (level3MustBePressed && !(level & 2)) {
+           fakeLevel3Press = TRUE;
+           EnqueueKey(inputInfo.keyboard, KeyPress, ISO_LEVEL3_KEY_CODE);
+       }
+       if (level3MustBeReleased && (level & 2)) {
+           fakeLevel3Release = TRUE;
+           EnqueueKey(inputInfo.keyboard, KeyRelease, ISO_LEVEL3_KEY_CODE);
+       }
+       if (shiftMustBePressed && !(level & 1)) {
            fakeShiftPress = TRUE;
-            EnqueueKey(kbdDevice, KeyPress, SHIFT_L_KEY_CODE);
+            EnqueueKey(inputInfo.keyboard, KeyPress, SHIFT_L_KEY_CODE);
        }
-       if (shiftMustBeReleased && (XkbStateFieldFromRec(xkb) & ShiftMask)) {
+       if (shiftMustBeReleased && (level & 1)) {
            if (KEY_IS_PRESSED(SHIFT_L_KEY_CODE)) {
                fakeShiftLRelease = TRUE;
-                EnqueueKey(kbdDevice, KeyRelease, SHIFT_L_KEY_CODE);
+                EnqueueKey(inputInfo.keyboard, KeyRelease, SHIFT_L_KEY_CODE);
            }
            if (KEY_IS_PRESSED(SHIFT_R_KEY_CODE)) {
                fakeShiftRRelease = TRUE;
-                EnqueueKey(kbdDevice, KeyRelease, SHIFT_R_KEY_CODE);
+                EnqueueKey(inputInfo.keyboard, KeyRelease, SHIFT_R_KEY_CODE);
            }
        }
     }
 
-    EnqueueKey(kbdDevice, type, keyCode);
+    EnqueueKey(inputInfo.keyboard, type, keyCode);
 
     if (fakeShiftPress) {
-        EnqueueKey(kbdDevice, KeyRelease, SHIFT_L_KEY_CODE);
+        EnqueueKey(inputInfo.keyboard, KeyRelease, SHIFT_L_KEY_CODE);
     }
     if (fakeShiftLRelease) {
-        EnqueueKey(kbdDevice, KeyPress, SHIFT_L_KEY_CODE);
+        EnqueueKey(inputInfo.keyboard, KeyPress, SHIFT_L_KEY_CODE);
     }
     if (fakeShiftRRelease) {
-        EnqueueKey(kbdDevice, KeyPress, SHIFT_R_KEY_CODE);
+        EnqueueKey(inputInfo.keyboard, KeyPress, SHIFT_R_KEY_CODE);
+    }
+    if (fakeLevel3Press) {
+        EnqueueKey(inputInfo.keyboard, KeyRelease, ISO_LEVEL3_KEY_CODE);
+    }
+    if (fakeLevel3Release) {
+        EnqueueKey(inputInfo.keyboard, KeyPress, ISO_LEVEL3_KEY_CODE);
     }
 }
 
@@ -497,15 +662,15 @@ KbdReleaseAllKeys(void)
 {
     int i, j;
 
-    if (!kbdDevice) 
+    if (!inputInfo.keyboard) 
        return;
 
     for (i = 0; i < DOWN_LENGTH; i++) {
-       if (kbdDevice->key->down[i] != 0) {
+       if (inputInfo.keyboard->key->down[i] != 0) {
            for (j = 0; j < 8; j++) {
-               if (kbdDevice->key->down[i] & (1 << j)) {
+               if (inputInfo.keyboard->key->down[i] & (1 << j)) {
                     int detail = (i << 3) | j;
-                    EnqueueKey(kbdDevice, KeyRelease, detail);
+                    EnqueueKey(inputInfo.keyboard, KeyRelease, detail);
                }
            }
        }
diff --git a/hw/vnc/keyboard.h b/hw/vnc/keyboard.h
index d223b6b..beb948a 100644
--- a/hw/vnc/keyboard.h
+++ b/hw/vnc/keyboard.h
@@ -32,3 +32,4 @@
 #define META_R_KEY_CODE                (MIN_KEY_CODE + 108)
 #define ALT_L_KEY_CODE         (MIN_KEY_CODE + 56)
 #define ALT_R_KEY_CODE         (MIN_KEY_CODE + 105)
+#define ISO_LEVEL3_KEY_CODE    ALT_R_KEY_CODE
-- 
1.7.3.4

++++++ N-VNC-Fix-crash-due-to-unset-input-device-names.patch ++++++
From: Egbert Eich <[email protected]>
Date: Tue, 6 Sep 2011 14:58:28 +0200
Subject: [PATCH 6/6] VNC: Fix crash due to unset input device names.
Patch-Mainline: Currently no upstream project.
Git-commit: b756a7efff37021ca503fe1e63084daae4082e9d
Signed-off: Egbert Eich <[email protected]> 
References: bnc #716074

 Signed-off-by: Egbert Eich <[email protected]>

---
 hw/vnc/init.c     |    2 +-
 hw/vnc/rfb.h      |    2 +-
 hw/vnc/rfbkeyb.c  |    7 +++++--
 hw/vnc/rfbmouse.c |    9 +++++++--
 4 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/hw/vnc/init.c b/hw/vnc/init.c
index 0977fee..6f83aa8 100644
--- a/hw/vnc/init.c
+++ b/hw/vnc/init.c
@@ -816,7 +816,7 @@ rfbMouseProc(DeviceIntPtr pDevice, int onoff)
     switch (onoff)
     {
     case DEVICE_INIT:
-       PtrDeviceInit();
+       PtrDeviceInit(pDevice, "vncMouse");
        map[1] = 1;
        map[2] = 2;
        map[3] = 3;
diff --git a/hw/vnc/rfb.h b/hw/vnc/rfb.h
index 70b1a45..aa9abab 100644
--- a/hw/vnc/rfb.h
+++ b/hw/vnc/rfb.h
@@ -578,7 +578,7 @@ extern void rfbGotXCutText(char *str, int len);
 extern Bool compatibleKbd;
 extern unsigned char ptrAcceleration;
 
-extern void PtrDeviceInit(void);
+extern void PtrDeviceInit(DeviceIntPtr pDevice, char *name);
 extern void PtrDeviceOn(DeviceIntPtr pDev);
 extern void PtrDeviceOff(void);
 extern void PtrDeviceControl(DeviceIntPtr dev, PtrCtrl *ctrl);
diff --git a/hw/vnc/rfbkeyb.c b/hw/vnc/rfbkeyb.c
index 4da29c2..6d97999 100644
--- a/hw/vnc/rfbkeyb.c
+++ b/hw/vnc/rfbkeyb.c
@@ -36,6 +36,7 @@
 #endif
 #include <xf86Xinput.h>
 #include <exevents.h>          /* Needed for InitValuator/Proximity stuff */
+#include <extinit.h>
 #include <mipointer.h>
 
 #ifdef XFree86LOADER
@@ -49,7 +50,6 @@
 
 
 extern void rfbSendBell(void);
-extern DeviceIntPtr kbdDevice;
 extern void vncInitKeyb(void);
 
 #include <X11/keysym.h>
@@ -212,11 +212,15 @@ static KeySym map[MAX_KEY_CODE * GLYPHS_PER_KEY] = {
 };
 
 #define N_PREDEFINED_KEYS (sizeof(map) / (sizeof(KeySym) * GLYPHS_PER_KEY))
+#define RFB_KEYB "rfbKeyb"
 
 void
 KbdDeviceInit(DeviceIntPtr pDevice, KeySymsPtr pKeySyms, CARD8 *pModMap)
 {
     int i;
+    Atom atom = MakeAtom(RFB_KEYB, strlen(RFB_KEYB), TRUE);
+
+    AssignTypeAndName(pDevice, atom, RFB_KEYB);
 
     for (i = 0; i < MAP_LENGTH; i++)
        pModMap[i] = NoSymbol;
@@ -359,7 +363,6 @@ xf86rfbKeybInit(struct _InputDriverRec *drv,
     pInfo->control_proc = NULL;
     pInfo->switch_mode = NULL;
     pInfo->fd = -1;
-    pInfo->dev = NULL;
 
     /* Collect the options, and process the common options. */
     xf86CollectInputOptions(pInfo, (const char**)drv->default_options);
diff --git a/hw/vnc/rfbmouse.c b/hw/vnc/rfbmouse.c
index 4657128..86e8f2f 100644
--- a/hw/vnc/rfbmouse.c
+++ b/hw/vnc/rfbmouse.c
@@ -37,6 +37,7 @@
 #endif
 #include <xf86Xinput.h>
 #include <exevents.h>          /* Needed for InitValuator/Proximity stuff */
+#include <extinit.h>
 #include <mipointer.h>
 
 #ifdef XFree86LOADER
@@ -63,8 +64,12 @@ PtrDeviceOn(DeviceIntPtr pDev)
 }
 
 void
-PtrDeviceInit(void)
+PtrDeviceInit(DeviceIntPtr pDevice, char *name)
 {
+      Atom atom = MakeAtom(name, strlen(name), TRUE);
+
+      AssignTypeAndName(pDevice, atom, name);
+
 }
 
 void
@@ -119,7 +124,7 @@ xf86rfbMouseControlProc(DeviceIntPtr dev, int onoff)
     {
     case DEVICE_INIT:
         vncSetPointerDevice(dev);
-       PtrDeviceInit();
+       //      PtrDeviceInit(dev, "rfbPointer");
        map[1] = 1;
        map[2] = 2;
        map[3] = 3;
-- 
1.7.3.4

++++++ N-VNC-Fix-crash-when-no-depth-translation-is-required.patch ++++++
From: Michael Schroeder <[email protected]>
Date: Tue, 6 Sep 2011 07:58:33 +0200
Subject: [PATCH 3/6] VNC: Fix crash when no depth translation is required.
Patch-Mainline: Currently no upstream project.
Git-commit: 74d5e3115cd955b7ee1acc64c6b8b42198ed894b
Signed-off: Egbert Eich <[email protected]> 
References: bnc #389386

 Signed-off-by: Egbert Eich <[email protected]>

---
 hw/vnc/translate.c |   11 ++++++-----
 1 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/hw/vnc/translate.c b/hw/vnc/translate.c
index 5cc57a3..78030ed 100644
--- a/hw/vnc/translate.c
+++ b/hw/vnc/translate.c
@@ -168,17 +168,18 @@ rfbTranslateNone(ScreenPtr pScreen, char *table, 
rfbPixelFormat *in, rfbPixelFor
 {
     VNCSCREENPTR(pScreen);
     DrawablePtr pDraw = (DrawablePtr)pScreen->root;
-    int truewidth = PixmapBytePad(width, in->bitsPerPixel) / 4;
+    int truewidth = PixmapBytePad(width, in->bitsPerPixel);
 
-    if ((x + truewidth > pVNC->width) || truewidth != width) {
-       unsigned char *buffer = malloc(truewidth * height * in->bitsPerPixel / 
8);
+    if ((x + width > pVNC->width) || truewidth != width * in->bitsPerPixel / 
8) {
+       unsigned char *buffer = malloc(truewidth * height);
        unsigned char *buf = buffer;
        
-       (*pScreen->GetImage)(pDraw, x, y, truewidth, height, ZPixmap, ~0, 
(char*)buf);
+       (*pScreen->GetImage)(pDraw, x, y, width, height, ZPixmap, ~0, 
(char*)buf);
+
        while (height--) {
            memcpy(optr, buf, width * in->bitsPerPixel / 8);
            optr += width * in->bitsPerPixel / 8;
-           buf += truewidth * in->bitsPerPixel / 8;
+           buf += truewidth;
        }
        free(buffer);
        return;
-- 
1.7.3.4

++++++ N-VNC-Readd-timeout-when-vnc-viewer-connection-breaks.patch ++++++
From: Egbert Eich <[email protected]>
Date: Tue, 6 Sep 2011 07:02:11 +0200
Subject: [PATCH 2/6] VNC: Readd timeout when vnc viewer connection breaks.
Patch-Mainline: Currently no upstream project.
Git-commit: 759b49ed1c4ea03e45433c92c2fb8c44a60db34a
Signed-off: Egbert Eich <[email protected]> 
References: bnc #441935, bnc #403901

This prevents Xvnc busy loop forever waiting for a viewer that no longer
response due to network or other issues.

Signed-off-by: Egbert Eich <[email protected]>
---
 hw/vnc/sockets.c |   19 +++++--------------
 1 files changed, 5 insertions(+), 14 deletions(-)

diff --git a/hw/vnc/sockets.c b/hw/vnc/sockets.c
index 39eb88a..ae43ed0 100644
--- a/hw/vnc/sockets.c
+++ b/hw/vnc/sockets.c
@@ -442,9 +442,7 @@ WriteExact(int sock, char *buf, int len)
     int n;
     fd_set fds;
     struct timeval tv;
-#if 0
     int totalTimeWaited = 0;
-#endif
 
     while (len > 0) {
        n = write(sock, buf, len);
@@ -464,7 +462,6 @@ WriteExact(int sock, char *buf, int len)
                return n;
            }
 
-#if 0
            /* Retry every 5 seconds until we exceed rfbMaxClientWait.  We
               need to do this because select doesn't necessarily return
               immediately when the other end has gone away */
@@ -473,19 +470,14 @@ WriteExact(int sock, char *buf, int len)
            FD_SET(sock, &fds);
            tv.tv_sec = 5;
            tv.tv_usec = 0;
-#else
-           /* We're in the WakeupHandler now, so don't wait */
 
-           FD_ZERO(&fds);
-           FD_SET(sock, &fds);
-           tv.tv_sec = 0;
-           tv.tv_usec = 0;
-#endif
            n = select(sock+1, NULL, &fds, NULL, &tv);
-#if 0
+
            if (n < 0) {
-               rfbLogPerror("WriteExact: select");
-               return n;
+               if (errno != EINTR) {
+                   rfbLogPerror("WriteExact: select");
+                   return n;
+               }
            }
            if (n == 0) {
                totalTimeWaited += 5000;
@@ -496,7 +488,6 @@ WriteExact(int sock, char *buf, int len)
            } else {
                totalTimeWaited = 0;
            }
-#endif
        }
     }
     return 1;
-- 
1.7.3.4

++++++ Xvnc-pthread.diff ++++++
--- xorg-server-1.10.4/hw/vnc/Makefile.am.orig  2011-09-06 15:25:27.000000000 
+0000
+++ xorg-server-1.10.4/hw/vnc/Makefile.am       2011-09-06 15:26:40.000000000 
+0000
@@ -37,6 +37,7 @@
 JPEG_LIBS = -ljpeg
 CRYPT_LIBS = -lcrypt
 Z_LIBS = -lz
+PTHREAD_LIBS = -lpthread
 
 AM_CFLAGS = $(DIX_CFLAGS) $(XVNC_CFLAGS) -I$(top_srcdir)/hw/dmx/vnc 
-DCHROMIUM=1
 
@@ -48,7 +49,8 @@
              $(CRYPT_LIBS) \
             $(XSERVER_SYS_LIBS) \
              $(VNCMODULES_LIBS) \
-            $(Z_LIBS)
+            $(Z_LIBS) \
+            $(PTHREAD_LIBS)     
 
 
 relink:
++++++ bug534768-prefer_local_symbols.patch ++++++
--- /var/tmp/diff_new_pack.mH2YoD/_old  2011-09-12 10:38:56.000000000 +0200
+++ /var/tmp/diff_new_pack.mH2YoD/_new  2011-09-12 10:38:56.000000000 +0200
@@ -1,25 +1,11 @@
 Index: xorg-server-1.6.3.901/hw/xfree86/loader/dlloader.c
 
================================================================================
---- xorg-server-1.7.99/hw/xfree86/loader/dlloader.c
-+++ xorg-server-1.7.99/hw/xfree86/loader/dlloader.c
-@@ -120,7 +120,7 @@
-     }
+--- xorg-server-1.7.99/hw/xfree86/loader/loader.c
++++ xorg-server-1.7.99/hw/xfree86/loader/loader.c
+@@ -120,5 +120,5 @@
  
      if (!global_scope)
 -      global_scope = dlopen(NULL, DLOPEN_LAZY | DLOPEN_GLOBAL);
 +      global_scope = dlopen(NULL, DLOPEN_LAZY | DLOPEN_GLOBAL | 
RTLD_DEEPBIND);
  
      if (global_scope)
-       return DLFindSymbolLocal(global_scope, name);
-@@ -136,9 +136,9 @@
-     int dlopen_flags;
- 
-     if (flags & LD_FLAG_GLOBAL)
--      dlopen_flags = DLOPEN_LAZY | DLOPEN_GLOBAL;
-+      dlopen_flags = DLOPEN_LAZY | DLOPEN_GLOBAL | RTLD_DEEPBIND;
-     else
--      dlopen_flags = DLOPEN_LAZY;
-+      dlopen_flags = DLOPEN_LAZY | RTLD_DEEPBIND;
-     dlfile = dlopen(modrec->name, dlopen_flags);
-     if (dlfile == NULL) {
-       ErrorF("dlopen: %s\n", dlerror());

++++++ xorg-server-1.9.3.tar.bz2 -> xorg-server-1.10.4.tar.bz2 ++++++
++++ 198736 lines of diff (skipped)

++++++ zap_warning_xserver.diff ++++++
--- /var/tmp/diff_new_pack.mH2YoD/_old  2011-09-12 10:38:58.000000000 +0200
+++ /var/tmp/diff_new_pack.mH2YoD/_new  2011-09-12 10:38:58.000000000 +0200
@@ -80,8 +80,8 @@
      Bool              dontZoom;
      Bool              notrapSignals;  /* don't exit cleanly - die at fault */
      Bool              caughtSignal;
---- xorg-server-1.7.99/hw/xfree86/doc/man/Xorg.man.pre
-+++ xorg-server-1.7.99/hw/xfree86/doc/man/Xorg.man.pre
+--- xorg-server-1.7.99/hw/xfree86/doc/man/Xorg.man
++++ xorg-server-1.7.99/hw/xfree86/doc/man/Xorg.man
 @@ -438,7 +438,7 @@
  .B Ctrl+Alt+Backspace
  Immediately kills the server -- no questions asked. It can be disabled by
@@ -91,8 +91,8 @@
  __xconfigfile__(__filemansuffix__) file option to a TRUE value.
  .PP
  .RS 8
---- xorg-server-1.7.99/hw/xfree86/doc/man/xorg.conf.man.pre
-+++ xorg-server-1.7.99/hw/xfree86/doc/man/xorg.conf.man.pre
+--- xorg-server-1.7.99/hw/xfree86/doc/man/xorg.conf.man
++++ xorg-server-1.7.99/hw/xfree86/doc/man/xorg.conf.man
 @@ -507,6 +507,13 @@
  When this option is enabled, the action has no effect.
  Default: off.


++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++



Remember to have fun...

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to