--- ./nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.X.original 2015-02-13 14:03:44.744441510 +0100 +++ ./nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c 2015-02-10 19:13:13.824685138 +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/glyph.c,v 1.5 2001/01/30 07:01:22 keithp Exp $ * @@ -40,9 +57,25 @@ #include "dixstruct.h" #include "gcstruct.h" #include "servermd.h" + +#ifdef NXAGENT_SERVER + +#include "NXpicturestr.h" +#include "NXglyphstr.h" +#include "Render.h" + +#define PANIC +#define WARNING +#undef DEBUG +#undef TEST + +#else + #include "picturestr.h" #include "glyphstr.h" +#endif + #if HAVE_STDINT_H #include #elif !defined(UINT32_MAX) @@ -293,7 +326,7 @@ gr->signature = hash; globalGlyphs[glyphSet->fdepth].tableEntries++; } - + /* Insert/replace glyphset value */ gr = FindGlyphRef (&glyphSet->hash, id, FALSE, 0); ++glyph->refcnt; @@ -303,6 +336,13 @@ glyphSet->hash.tableEntries++; gr->glyph = glyph; gr->signature = id; + + #ifdef NXAGENT_SERVER + + gr -> corruptedGlyph = 1; + + #endif + CheckDuplicates (&globalGlyphs[glyphSet->fdepth], "AddGlyph bottom"); } @@ -324,6 +364,36 @@ return FALSE; } +#ifdef NXAGENT_SERVER + +GlyphPtr FindGlyph (GlyphSetPtr glyphSet, Glyph id) +{ + GlyphRefPtr gr; + GlyphPtr glyph; + + gr = FindGlyphRef (&glyphSet->hash, id, FALSE, 0); + glyph = gr -> glyph; + + if (glyph == DeletedGlyph) + { + glyph = 0; + } + else if (gr -> corruptedGlyph == 1) + { + #ifdef DEBUG + fprintf(stderr, "FindGlyphRef: Going to synchronize the glyph [%p] for glyphset [%p].\n", + (void *) glyph, (void *) glyphSet); + #endif + + nxagentAddGlyphs(glyphSet, &id, &(glyph -> info), 1, + (CARD8*)(glyph + 1), glyph -> size - sizeof(xGlyphInfo)); + } + + return glyph; +} + +#else + GlyphPtr FindGlyph (GlyphSetPtr glyphSet, Glyph id) { @@ -335,6 +405,8 @@ return glyph; } +#endif + GlyphPtr AllocateGlyph (xGlyphInfo *gi, int fdepth) { @@ -379,6 +451,12 @@ int oldSize; CARD32 s; + #ifdef NXAGENT_SERVER + + CARD32 c; + + #endif + tableEntries = hash->tableEntries + change; hashSet = FindGlyphHashSet (tableEntries); if (hashSet == hash->hashSet) @@ -396,9 +474,23 @@ if (glyph && glyph != DeletedGlyph) { s = hash->table[i].signature; + + #ifdef NXAGENT_SERVER + + c = hash->table[i].corruptedGlyph; + + #endif + gr = FindGlyphRef (&newHash, s, global, glyph); gr->signature = s; gr->glyph = glyph; + + #ifdef NXAGENT_SERVER + + gr -> corruptedGlyph = c; + + #endif + ++newHash.tableEntries; } } @@ -486,3 +578,4 @@ } return Success; } +