--- ./nx-X11/programs/Xserver/hw/nxagent/X/NXmiglyph.c.X.original	2015-02-13 14:03:44.744441510 +0100
+++ ./nx-X11/programs/Xserver/hw/nxagent/X/NXmiglyph.c	2015-02-10 19:13:13.804685886 +0100
@@ -1,3 +1,20 @@
+/**************************************************************************/
+/*                                                                        */
+/* Copyright (c) 2001, 2011 NoMachine, http://www.nomachine.com/.         */
+/*                                                                        */
+/* NXAGENT, NX protocol compression and NX extensions to this software    */
+/* are copyright of NoMachine. Redistribution and use of the present      */
+/* software is allowed according to terms specified in the file LICENSE   */
+/* which comes in the source distribution.                                */
+/*                                                                        */
+/* Check http://www.nomachine.com/licensing.html for applicability.       */
+/*                                                                        */
+/* NX and NoMachine are trademarks of Medialogic S.p.A.                   */
+/*                                                                        */
+/* All rights reserved.                                                   */
+/*                                                                        */
+/**************************************************************************/
+
 /*
  * $XFree86: xc/programs/Xserver/render/miglyph.c,v 1.4 2000/11/20 07:13:13 keithp Exp $
  *
@@ -35,6 +52,12 @@
 #include "picturestr.h"
 #include "mipict.h"
 
+#ifdef NXAGENT_SERVER
+
+#include "Render.h"
+
+#endif
+
 void
 miGlyphExtents (int		nlist,
 		GlyphListPtr	list,
@@ -45,7 +68,7 @@
     int		n;
     GlyphPtr	glyph;
     int		x, y;
-    
+ 
     x = 0;
     y = 0;
     extents->x1 = MAXSHORT;
@@ -113,25 +136,58 @@
     int		error;
     BoxRec	extents;
     CARD32	component_alpha;
-    
+
+    #ifdef NXAGENT_SERVER
+
+    /*
+     * Get rid of the warning.
+     */
+
+    extents.x1 = 0;
+    extents.y1 = 0;
+
+    #endif
+
     if (maskFormat)
     {
 	GCPtr	    pGC;
 	xRectangle  rect;
-	
-	miGlyphExtents (nlist, list, glyphs, &extents);
-	
+
+        #ifdef NXAGENT_SERVER
+
+        if (nxagentGlyphsExtents != NullBox)
+        {
+          memcpy(&extents, nxagentGlyphsExtents, sizeof(BoxRec));
+        }
+        else
+        {
+          nxagentGlyphsExtents = (BoxPtr) xalloc(sizeof(BoxRec));
+
+          miGlyphExtents (nlist, list, glyphs, &extents);
+
+          memcpy(nxagentGlyphsExtents, &extents, sizeof(BoxRec));
+        }
+
+        #else
+
+        miGlyphExtents (nlist, list, glyphs, &extents);
+
+        #endif
+
 	if (extents.x2 <= extents.x1 || extents.y2 <= extents.y1)
 	    return;
 	width = extents.x2 - extents.x1;
 	height = extents.y2 - extents.y1;
 	pMaskPixmap = (*pScreen->CreatePixmap) (pScreen, width, height, maskFormat->depth);
+
 	if (!pMaskPixmap)
 	    return;
+
 	component_alpha = NeedsComponent(maskFormat->format);
 	pMask = CreatePicture (0, &pMaskPixmap->drawable,
 			       maskFormat, CPComponentAlpha, &component_alpha,
 			       serverClient, &error);
+
 	if (!pMask)
 	{
 	    (*pScreen->DestroyPixmap) (pMaskPixmap);
@@ -160,6 +216,7 @@
 	x += list->xOff;
 	y += list->yOff;
 	n = list->len;
+
 	while (n--)
 	{
 	    glyph = *glyphs++;
@@ -184,6 +241,21 @@
 	    (*pScreen->ModifyPixmapHeader) (pPixmap, 
 					    glyph->info.width, glyph->info.height,
 					    0, 0, -1, (pointer) (glyph + 1));
+
+            #ifdef NXAGENT_SERVER
+
+            /*
+             * The following line fixes a problem with glyphs that appeared
+             * as clipped. It was a side effect due the validate function
+             * "ValidatePicture" that makes a check on the Drawable serial
+             * number instead of the picture serial number, failing thus
+             * the clip mask update.
+             */
+
+            pPicture->pDrawable->serialNumber = NEXT_SERIAL_NUMBER;
+
+            #endif
+
 	    pPixmap->drawable.serialNumber = NEXT_SERIAL_NUMBER;
 	    if (maskFormat)
 	    {
@@ -215,6 +287,7 @@
 	    x += glyph->info.xOff;
 	    y += glyph->info.yOff;
 	}
+
 	list++;
 	if (pPicture)
 	{
@@ -237,7 +310,9 @@
 			  0, 0,
 			  x, y,
 			  width, height);
+
 	FreePicture ((pointer) pMask, (XID) 0);
 	(*pScreen->DestroyPixmap) (pMaskPixmap);
     }
+
 }