[X2go-Commits] nx-libs.git - nxagent (branch) updated: nxagent/3.5.0-7-1-g222a4a2

X2Go dev team git-admin at x2go.org
Tue May 22 00:57:25 CEST 2012


The branch, nxagent has been updated
       via  222a4a22214608b7f89691eee1c57873c2631705 (commit)
      from  c29053f82cbea5f2704d99c4d5e8afe0329e5cbe (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 nx-X11/programs/Xserver/hw/nxagent/Args.c      |   18 +++++++++++++
 nx-X11/programs/Xserver/hw/nxagent/CHANGELOG   |   19 +++++++++++++
 nx-X11/programs/Xserver/hw/nxagent/Client.c    |   23 ++++++++++++----
 nx-X11/programs/Xserver/hw/nxagent/Client.h    |    3 +-
 nx-X11/programs/Xserver/hw/nxagent/Cursor.c    |   17 +++++++++++-
 nx-X11/programs/Xserver/hw/nxagent/Cursor.h    |    3 ++
 nx-X11/programs/Xserver/hw/nxagent/Display.c   |   31 +++++++++++++++++++---
 nx-X11/programs/Xserver/hw/nxagent/Display.h   |    2 +
 nx-X11/programs/Xserver/hw/nxagent/Drawable.c  |   33 ++++++++++++++++++++++++
 nx-X11/programs/Xserver/hw/nxagent/Handlers.c  |    4 ++-
 nx-X11/programs/Xserver/hw/nxagent/Init.c      |   18 +++++++++++++
 nx-X11/programs/Xserver/hw/nxagent/Options.c   |    4 +++
 nx-X11/programs/Xserver/hw/nxagent/Options.h   |   12 ++++++++
 nx-X11/programs/Xserver/hw/nxagent/Pixels.h    |    2 +-
 nx-X11/programs/Xserver/hw/nxagent/Reconnect.c |    5 +--
 nx-X11/programs/Xserver/hw/nxagent/Render.c    |   20 +++++++++-----
 nx-X11/programs/Xserver/hw/nxagent/Screen.c    |    3 ++
 17 files changed, 193 insertions(+), 24 deletions(-)

The diff of changes is:
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index ecf0a21..ecf04e2 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -514,6 +514,22 @@ int ddxProcessArgument(int argc, char *argv[], int i)
     return 0;
   }
 
+  if (!strcmp(argv[i], "-irlimit"))
+  {
+    int limit;
+
+    if (++i < argc &&
+            sscanf(argv[i], "%i", &limit) == 1)
+    {
+      nxagentChangeOption(ImageRateLimit, limit);
+
+  
+      return 2;
+    }
+
+    return 0;
+  }
+
   if (!strcmp(argv[i], "-tile"))
   {
     int width;
@@ -780,6 +796,8 @@ int ddxProcessArgument(int argc, char *argv[], int i)
   {
     nxagentChangeOption(DeviceControl, True);
 
+    nxagentChangeOption(DeviceControlUserDefined , True);
+
     return 1;
   }
 
diff --git a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
index 763f066..0a82773 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
+++ b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
@@ -1,5 +1,24 @@
 ChangeLog:
 
+nxagent-3.5.0-9
+
+- Fixed an issue with cursor position set in XTest extension.
+
+nxagent-3.5.0-8
+
+- Fixed TR01J02646. Performance issues with cairo version 1.12.
+
+- Fixed TR01J02667. Changes to mouse sensitivity couldn't be forwarded
+  to NX client host although -noignore was among extra options.
+
+- Fixed TR05J02705. Agent ignore WarpPointer requests.
+
+- Fixed TR05J02706. Suspended sessions could not be recovered using
+  a client form a different version.
+
+- Fixed TR05J02703. Agent failed because of missing checks on source
+  drawables in the render code.
+
 nxagent-3.5.0-7
 
 - Fixed TR10I02622. Corrected function searching for icon file.
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Client.c b/nx-X11/programs/Xserver/hw/nxagent/Client.c
index 63ed0e1..cba4798 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Client.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Client.c
@@ -124,13 +124,24 @@ void nxagentGuessClientHint(ClientPtr client, Atom property, char *data)
 
   if (nxagentClientPriv(client) -> clientHint == UNKNOWN)
   {
-    if (property == XA_WM_CLASS && strcmp(data, "nxclient") == 0)
+    if (property == XA_WM_CLASS)
     {
-      #ifdef TEST
-      fprintf(stderr, "++++++nxagentGuessClientHint: Detected nxclient as [%d].\n", client -> index);
-      #endif
+      if (strcmp(data, "nxclient") == 0)
+      {
+        #ifdef TEST
+        fprintf(stderr, "++++++nxagentGuessClientHint: Detected nxclient as [%d].\n", client -> index);
+        #endif
 
-      nxagentClientHint(client) = NXCLIENT_WINDOW;
+        nxagentClientHint(client) = NXCLIENT_WINDOW;
+      }
+      else if (strstr(data, "java"))
+      {
+        #ifdef TEST
+        fprintf(stderr, "++++++nxagentGuessClientHint: Detected java as [%d].\n", client -> index);
+        #endif
+
+        nxagentClientHint(client) = JAVA_WINDOW;
+      }
     }
   }
 
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Client.h b/nx-X11/programs/Xserver/hw/nxagent/Client.h
index a9b06c8..67ec50e 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Client.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Client.h
@@ -32,7 +32,8 @@ enum ClientHint
   UNKNOWN = 0,
   NXCLIENT_WINDOW,
   NXCLIENT_DIALOG,
-  NXAGENT_SHADOW
+  NXAGENT_SHADOW,
+  JAVA_WINDOW
 };
 
 typedef struct _PrivClientRec
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Cursor.c b/nx-X11/programs/Xserver/hw/nxagent/Cursor.c
index e27415b..9d48aa1 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Cursor.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Cursor.c
@@ -290,10 +290,25 @@ void nxagentRecolorCursor(ScreenPtr pScreen, CursorPtr pCursor,
                  &fg_color, &bg_color);
 }
 
+Bool (*nxagentSetCursorPositionW)(ScreenPtr pScreen, int x, int y,
+                                      Bool generateEvent);
+
 Bool nxagentSetCursorPosition(ScreenPtr pScreen, int x, int y,
                                   Bool generateEvent)
 {
-  return 1;
+  if (generateEvent != 0)
+  {
+    return (*nxagentSetCursorPositionW)(pScreen, x, y, generateEvent);
+  }
+  else
+  {
+    /*
+     * Calling miSetCursorPosition with generateEvent == 0
+     * causes a crash in miPoiterUpdate().
+     */
+
+    return 1;
+  }
 }
 
 void nxagentReconnectCursor(pointer p0, XID x1, pointer p2)
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Cursor.h b/nx-X11/programs/Xserver/hw/nxagent/Cursor.h
index df7dc44..88dea26 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Cursor.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Cursor.h
@@ -97,6 +97,9 @@ void nxagentRecolorCursor(ScreenPtr pScreen, CursorPtr pCursor,
 Bool nxagentSetCursorPosition(ScreenPtr pScreen, int x, int y,
                                   Bool generateEvent);
 
+extern Bool (*nxagentSetCursorPositionW)(ScreenPtr pScreen, int x, int y,
+                                             Bool generateEvent);
+
 void nxagentDisconnectCursor(pointer p0, XID x1, pointer p2);
 void nxagentReconnectCursor(pointer p0, XID x1, pointer p2);
 void nxagentReDisplayCurrentCursor(void);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Display.c b/nx-X11/programs/Xserver/hw/nxagent/Display.c
index c60718d..9031c25 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c
@@ -746,8 +746,19 @@ static void nxagentDisplayWriteHandler(Display *display, int length)
   }
 }
 
+static CARD32 nxagentRateTime = 5000;
+static CARD32 nxagentLastTime;
+static unsigned int nxagentRate = 0;
+
+int nxagentGetDataRate(void)
+{
+  return nxagentRate;
+}
+
 static void nxagentDisplayFlushHandler(Display *display, int length)
 {
+  CARD32 time;
+
   if (nxagentDisplay != NULL)
   {
     #ifdef TEST
@@ -765,6 +776,22 @@ static void nxagentDisplayFlushHandler(Display *display, int length)
     if (nxagentOption(LinkType) != LINK_TYPE_NONE)
     {
       nxagentFlush = GetTimeInMillis();
+
+      time = nxagentFlush;
+
+      time = time - nxagentLastTime;
+
+      if (time < nxagentRateTime)
+      {
+        nxagentRate = ((nxagentRate * (nxagentRateTime - time) +
+                          length) * 1000) / nxagentRateTime;
+      }
+      else
+      {
+        nxagentRate = (length * 1000) / nxagentRateTime;
+      }
+
+      nxagentLastTime = nxagentFlush;
     }
   }
 }
@@ -1482,10 +1509,6 @@ void nxagentSetDefaultVisual(void)
 
   int i;
 
-  nxagentDefaultVisualIndex = 3;
-
-  return;
-
   if (nxagentUserDefaultClass || nxagentUserDefaultDepth)
   {
     nxagentDefaultVisualIndex = UNDEFINED;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Display.h b/nx-X11/programs/Xserver/hw/nxagent/Display.h
index 454150d..1c12d6c 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.h
@@ -159,6 +159,8 @@ extern int nxagentShadowXConnectionNumber;
 
 int nxagentServerOrder(void);
 
+int nxagentGetDataRate(void);
+
 #define nxagentClientOrder(client) \
     ((client)->swapped ? !nxagentServerOrder() : nxagentServerOrder())
 
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Drawable.c b/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
index 9c16774..f222599 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
@@ -112,6 +112,27 @@ unsigned long nxagentGetColor(DrawablePtr pDrawable, int xPixel, int yPixel);
 unsigned long nxagentGetDrawableColor(DrawablePtr pDrawable);
 unsigned long nxagentGetRegionColor(DrawablePtr pDrawable, RegionPtr pRegion);
 
+int nxagentSkipImage = 0;
+
+static int nxagentTooManyImageData(void)
+{
+  unsigned int r;
+  unsigned int limit;
+
+  limit = nxagentOption(ImageRateLimit);
+
+  r = nxagentGetDataRate() / 1000;
+
+  #ifdef TEST
+  if (r > limit)
+  {
+    fprintf(stderr, "Warning: Current bit rate is: %u kB/s.\n", r);
+  }
+  #endif
+
+  return (r > limit);
+}
+
 int nxagentSynchronizeDrawable(DrawablePtr pDrawable, int wait, unsigned int breakMask, WindowPtr owner)
 {
   int result;
@@ -1304,6 +1325,18 @@ FIXME: All drawables should be set as synchronized and
        never marked as corrupted while the display is
        down.
 */
+
+  nxagentSkipImage = nxagentTooManyImageData();
+
+  if (nxagentOption(ImageRateLimit) && nxagentSkipImage)
+  {
+    #ifdef TEST
+    fprintf(stderr, "nxagentSynchronizeDrawable: Skipping due to bit rate limit reached.\n");
+    #endif
+
+    return;
+  }
+
   if (NXDisplayError(nxagentDisplay) == 1)
   {
     #ifdef TEST
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
index 310b572..332816f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
@@ -159,6 +159,8 @@ struct _DispatchRec nxagentDispatch = { UNDEFINED, 0, 0, 0 };
  * for our clients or the X server.
  */
 
+extern int nxagentSkipImage;
+
 void nxagentBlockHandler(pointer data, struct timeval **timeout, pointer mask)
 {
   /*
@@ -357,7 +359,7 @@ void nxagentBlockHandler(pointer data, struct timeval **timeout, pointer mask)
                            nxagentCorruptedBackgrounds > 0 ||
                                nxagentCorruptedPixmaps > 0));
 
-    if (synchronize == 1)
+    if (nxagentSkipImage == 0 && synchronize == 1)
     {
       #ifdef TEST
       fprintf(stderr, "nxagentBlockHandler: Setting a zero timeout with [%d][%d][%d] and "
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Init.c b/nx-X11/programs/Xserver/hw/nxagent/Init.c
index f4fc3c7..a50e8a5 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c
@@ -120,6 +120,8 @@ extern int OsVendorVErrorFFatal;
 extern void (*OsVendorStartRedirectErrorFProc)();
 extern void (*OsVendorEndRedirectErrorFProc)();
 
+extern void SetVendorRelease(int release);
+
 void OsVendorStartRedirectErrorFFunction();
 void OsVendorEndRedirectErrorFFunction();
 
@@ -206,6 +208,22 @@ void InitOutput(ScreenInfo *screenInfo, int argc, char *argv[])
   }
 
   /*
+   * Avoid slowness due to buggy_repeat workaround
+   * in libcairo versions >= 1.10.
+   */
+
+  SetVendorRelease(70000000);
+
+  /*
+   * Init the time count for image rate.
+   */
+
+  if (nxagentOption(ImageRateLimit) != 0)
+  { 
+    fprintf(stderr, "Info: Image rate limit set to %u kB/s.\n", nxagentOption(ImageRateLimit));
+  }
+
+  /*
    * Unset the LD_LIBRARY_PATH variable in
    * Popen() before calling execl() in the
    * child process.
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Options.c b/nx-X11/programs/Xserver/hw/nxagent/Options.c
index 5d78556..ca5be0b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Options.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Options.c
@@ -85,6 +85,8 @@ void nxagentInitOptions()
 
   nxagentOptions.DeviceControl = 0;
 
+  nxagentOptions.DeviceControlUserDefined = 0;
+
   nxagentOptions.ResetKeyboardAtResume = 1;
 
   nxagentOptions.Reset = 0;
@@ -149,6 +151,8 @@ void nxagentInitOptions()
   nxagentOptions.InhibitXkb = 1;
 
   nxagentOptions.CopyBufferSize = COPY_UNLIMITED;
+
+  nxagentOptions.ImageRateLimit = 0;
 }
 
 /*
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Options.h b/nx-X11/programs/Xserver/hw/nxagent/Options.h
index 7850a05..40cb179 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Options.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Options.h
@@ -184,6 +184,12 @@ typedef struct _AgentOptions
   int DeviceControl;
 
   /*
+   * Explicitly asked config propagation.
+   */
+
+  int DeviceControlUserDefined;
+
+  /*
    * Resuming keyboard device corrects keymap if session
    * migrates across platforms with different keycode
    * layout.
@@ -369,6 +375,12 @@ typedef struct _AgentOptions
 
   int CopyBufferSize;
 
+  /*
+   * Max image data rate to the encoder input.
+   */
+
+  int ImageRateLimit;
+
 } AgentOptionsRec;
 
 typedef AgentOptionsRec *AgentOptionsPtr;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Pixels.h b/nx-X11/programs/Xserver/hw/nxagent/Pixels.h
index 918d74d..4a02d80 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Pixels.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Pixels.h
@@ -134,7 +134,7 @@ FIXME: Changed macro: NXAGENT_SHOULD_DEFER_COMPOSITE
              (nxagentOption(DeferLevel) == 1 &&                                                          \
               (pDst) -> pDrawable -> type == DRAWABLE_PIXMAP &&                                          \
               (((pSrc) -> pDrawable && nxagentDrawableStatus((pSrc) -> pDrawable) == NotSynchronized) || \
-              ((pMask) && nxagentDrawableStatus((pMask) -> pDrawable) == NotSynchronized))))
+              ((pMask) && (pMask) -> pDrawable && nxagentDrawableStatus((pMask) -> pDrawable) == NotSynchronized))))
 
 
 #define NXAGENT_SHOULD_DEFER_PUTIMAGE(pDrawable) \
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
index 90b8079..3c576c6 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
@@ -377,11 +377,10 @@ Bool nxagentReconnectSession(void)
   nxagentResizeDesktopAtStartup = False;
 
   /*
-   * The default is device settings have
-   * not to be propagated to the X server.
+   * Propagate device settings if explicitly asked for.
    */
 
-  nxagentChangeOption(DeviceControl, False);
+  nxagentChangeOption(DeviceControl, nxagentOption(DeviceControlUserDefined));
 
   /*
    * We need to zero out every new XID
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Render.c b/nx-X11/programs/Xserver/hw/nxagent/Render.c
index 6c74c14..29bffaa 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Render.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Render.c
@@ -1095,8 +1095,9 @@ void nxagentComposite(CARD8 op, PicturePtr pSrc, PicturePtr pMask, PicturePtr pD
     }
   }
 
-  if (pMask != NULL && pMask -> pDrawable != pSrc -> pDrawable &&
-          pMask -> pDrawable != pDst -> pDrawable)
+  if (pMask != NULL && pMask -> pDrawable != NULL &&
+          pMask -> pDrawable != pSrc -> pDrawable &&
+              pMask -> pDrawable != pDst -> pDrawable)
   {
     nxagentSynchronizeShmPixmap(pMask -> pDrawable, xMask, yMask, width, height);
 
@@ -1259,7 +1260,8 @@ void nxagentGlyphs(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
    * on the real X server.
    */
 
-  if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+  if (pSrc -> pDrawable != NULL &&
+          nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
     fprintf(stderr, "nxagentGlyphs: Synchronizing source [%s] at [%p].\n",
@@ -1749,7 +1751,8 @@ FIXME: Is this useful or just a waste of bandwidth?
     return;
   }
 
-  if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+  if (pSrc -> pDrawable != NULL &&
+          nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
     fprintf(stderr, "nxagentTrapezoids: Going to synchronize the source drawable at [%p].\n",
@@ -1843,7 +1846,8 @@ void nxagentTriangles(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
    * operation like nxagentTrapezoids() does.
    */
 
-  if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+  if (pSrc -> pDrawable != NULL &&
+          nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
     fprintf(stderr, "nxagentTriangles: Going to synchronize the source drawable at [%p].\n",
@@ -1920,7 +1924,8 @@ void nxagentTriStrip(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
    * operation like nxagentTrapezoids() does.
    */
 
-  if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+  if (pSrc -> pDrawable != NULL &&
+          nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
     fprintf(stderr, "nxagentTriStrip: Going to synchronize the source drawable at [%p].\n",
@@ -1997,7 +2002,8 @@ void nxagentTriFan(CARD8 op, PicturePtr pSrc, PicturePtr pDst,
    * operation like nxagentTrapezoids() does.
    */
 
-  if (nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
+  if (pSrc -> pDrawable != NULL &&
+          nxagentDrawableStatus(pSrc -> pDrawable) == NotSynchronized)
   {
     #ifdef TEST
     fprintf(stderr, "nxagentTriFan: Going to synchronize the source drawable at [%p].\n",
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
index de688a0..9957a7d 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
@@ -1644,6 +1644,9 @@ N/A
     pScreen->RealizeCursor = nxagentRealizeCursor;
     pScreen->UnrealizeCursor = nxagentUnrealizeCursor;
     pScreen->RecolorCursor = nxagentRecolorCursor;
+
+    nxagentSetCursorPositionW = pScreen->SetCursorPosition;
+
     pScreen->SetCursorPosition = nxagentSetCursorPosition;
 
     #define POSITION_OFFSET (pScreen->myNum * (nxagentOption(Width) + \


hooks/post-receive
-- 
nx-libs.git (NX (redistributed))

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "nx-libs.git" (NX (redistributed)).




More information about the x2go-commits mailing list