ChangeLog:

nxagent-3.2.0-10

- Extended fix for TR07F02091 to include font names having zero in
  fields RESOLUTION_X and RESOLUTION_Y.

nxagent-3.2.0-9

- Fixed TR07F02091. Scalable fonts were not correctly listed among
  available fonts.

- Fixed TR06F02080. Use the corrupted area extents as maximum size of
  the image data.

nxagent-3.2.0-8

- Fixed TR07F02082. The agent server could be unable to init core
  keyboard on 64 bit systems.

nxagent-3.2.0-7

- Imported patch fixing issues from  X.Org security advisory, June
  11th, 2008: Multiple vulnerabilities in X server extensions. CVE
  IDs: CVE-2008-1377, CVE-2008-1379, CVE-2008-2360, CVE-2008-2361,
  CVE-2008-2362.

nxagent-3.2.0-6

- Fixed TR05F02063. Ignore ReparentNotify events for non-rootless
  sessions.

- Fixed TR06F02068. Try to pack images only if format is ZPixmap.

- Don't require reparent on close of NX window.

nxagent-3.2.0-5

- Fixed TR04F02044. Restored the original MakeRootTile() function in
  order to create the root window background pixmap.

- Fixed TR04F02041. Gnome panels stayed on top of the NX session win-
  dow with desktops running Compiz. This fix provides a solution for
  the Fullscreen mode.

- Improved for the shadow session the handling of master session win-
  dow resize.

nxagent-3.2.0-4

- Fixed TR10D01535. The agent window is not minimized anymore when
  pointer leaves.

- Changes aimed to avoid possible type mismatch in XDisplay struct
  on 64 bit architectures.

nxagent-3.2.0-3

- Fixed a build issue on Solaris.

nxagent-3.2.0-2

- Code clean up. Moved a variable definition to the beginnning of a
  block.

nxagent-3.2.0-1

- Opened the 3.2.0 branch based on nxagent-3.1.0-9.

nxagent-3.1.0-9

- Fixed TR03F02025. German umlauts couldn't be pasted into a remote
  Windows application. Now also the UTF8_STRING target is available
  for ConvertSelection requests.

- Fixed TR03F02031. Moved SetScreenSaverTimer() call in order to avoid
  undesired reset of the auto-disconnect timeout when a screen saver
  turns on.

nxagent-3.1.0-8

- Added reference to fixed TR02F02007 and TR07E01762 in the CHANGELOG.

- Set the GC trap before calling fbPolySegment.

- Fixed TR09E01863. A flag is set if a resource has been added or fre-
  ed and it is checked in FindClientResourcesByType().

- Added void entries to nxagentRequestLiteral vector in order to avoid
  a wrong string is printed to the output for NoOperation request.

- Fixed TR11E01948. Now keyboard status is initialized again after
  the NX session is reconnected. This avoids CAPS LOCK and NUM LOCK
  synchronization problems.

- Added nxagentXkbCapsTrap and nxagentXkbNumTrap to avoid CAPS LOCK
  and NUM LOCK synchronization problems when CAPS LOCK or NUM LOCK is
  the first key to be pressed in the NX session.

- Corrected subSize variable initialization in nxagentRealizeImage().

- Fixed various memory leaks.

- Fixed TR11E01950. Copy and paste via edit menu didn't work for some
  applications.

- Corrected property type in nxagentRequestSelection(). Some external
  applications didn't enable their paste button when nxagent was the
  owner of the CLIPBOARD selection.

- Added struct to save values queried by XQueryExtension for XFixes
  extension.

nxagent-3.1.0-7

- Imported patch fixing issues from  X.Org security advisory, January
  17th, 2008: Multiple vulnerabilities in the X server.  CVE IDs:
  CVE-2007-5760    CVE-2007-5958    CVE-2007-6427   CVE-2007-6428
  CVE-2007-6429    CVE-2008-0006.

- Fixed TR02F02007. Handled the case if nxagentCreateDrawableBitmap()
  fails to create the pixmap intended to store the bitmap data.

nxagent-3.1.0-6

- Fixed a compile warning in Args.c.

- The synchronization loop breaks if the drawable is clean when it's
  not supposed to be.

- Fixed TR12E01966. Emacs tooltips were not displayed properly. Added
  a check on the event mask before calling miWindowExposures().

- Fixed TR01F01982. ConfigureNotify warning is printed in verbose mode
  only.

nxagent-3.1.0-5

- Moved some variable definitions placed in ProcGetProperty().

nxagent-3.1.0-4

- Fixed TR06D01397. The problem was: drag & drop operations between
  windows of Java applications didn't work in NX Client for Windows.

- Implemented FR12E01957. Added a limit to the amount of data that can
  be pasted from an NX session into an external application. The new
  option - named 'copysize' - can be read from the 'options' file.

nxagent-3.1.0-3

- Fixed TR12E01963. The window tree is revalidated explicitly after
  recomputing the root window clip regions.

nxagent-3.1.0-2

- Fixed TR11E01946. Forcing exposures on regions saved in the backing
  store could bring to unexpected results.

- Fixed TR11E01928. Animated cursors were not properly disconnected
  and reconnected.

nxagent-3.1.0-1

- Opened the 3.1.0 branch based on nxagent-3.0.0-93.

nxagent-3.0.0-93

- Fixed TR10E01913. Now bell settings are restored after the agent
  reconnects.

nxagent-3.0.0-92

- Fixed a compilation error on 64 bit platforms.

nxagent-3.0.0-91

- Checked the window synchronization status before subtracting an ex-
  posed area from the corrupted region.

nxagent-3.0.0-90

- Fixed TR11E01932. In case of rootless session displayed by NXWin X
  server, synthetic ConfigureNotify events are generated by the X11
  agent. This helps to correct menu navigation in Java 1.6.0.

- Fixed the handling of 'client' parameter.

- Fixed bad refreshes in viewport navigation in the case of Windows
  client.

- Fixed TR11E01930. If the defer level is set by means of the command
  line, the DeferLevel option is not reset while resuming the session.

- Fixed TR07E01762. Problem in comparison of font names.

- Printed the new geometry in the session log when the agent screen is
  resized.

nxagent-3.0.0-89

- Fixed TR10E01919. The agent could crash in the routine in charge of
  find a replacement for a missing font.

- Removed an unuseful log message.

nxagent-3.0.0-88

- Fixed TR10D01539. Some XKEYBOARD requests are disabled if the option
  'keyboard' has value 'query'. This locks the initial keyboard map.
  Enabling/disabling of XKEYBOARD requests is done at run time.

- Added -noxkblock command line option enabling the XKEYBOARD requests
  even if the option 'keyboard' value is 'query'.

nxagent-3.0.0-87

- Reworked the handling of CT_PIXMAP client clips. Clips are always
  converted in regions for internal use, while bitmap are saved for
  operations involving the remote X.

nxagent-3.0.0-86

- Fixed TR07E01749. Now using different resolution between shadow
  and master session with shadow display option 'As on the server'
  doesn't display black borders.

- Fixed TR09E01852. The GC clips of type CT_PIXMAP are not converted
  in regions. This avoids generating regions made up by thousands of
  rectangles. Backing store function SetClipmaskRgn is implemented by
  a stub doing nothing.

nxagent-3.0.0-85

- Fixed TR08E01841. Exposed are forced to new areas exposed by the
  viewport.

- Fixed TR02E01645. Remote exposures was blocked if the NX client was
  running on Linux without window manager.

- Even if the agent window is fully obscured, synchronization is not
  skipped if the Composite extension of the remote display is in use.

- Fixed TR08E01851. Exposures events have to be internally generated
  for regions that can't be restored because the backing pixmap is
  corrupted.

- Fixed TR08E01847. The initial values of store used to save XChangeGC
  calls are set to the default GC values.

- When a drawable becomes synchronized, its outdated bitmap is destro-
  yed.

- If a pixmap is not fully synchronized after a synchronization loop
  it is cleared, just like windows.

- Solved a problem causing some pixmaps to remain among the corrup-
  ted resources even if they were synchronized.

nxagent-3.0.0-84

- Renamed Misc.h as Utils.h to solve name clashes on Windows platform.

nxagent-3.0.0-83

- Changes to include correctly declaration of _XDisplay structure on
  64 bit platforms. Further tests are needed to confirm that it fixes
  TR08E01824.

nxagent-3.0.0-82

- Fixed TR08E01821. Changed nxagentAddItemBSPixmapList() to check if
  the pixmap item has already an entry in the list before adding it.

- Fixed TR07E01795. Sun Studio main window showed only its grey back-
  ground. Changed clipboard events handling to let the agent notify
  a failure in converting selection.

nxagent-3.0.0-81

- Based on nxagent-3.0.0-78.

- The agent options are saved before reopening the display in the
  reconnection procedure. If the new initialization fails the backup
  values of options are restored.

- Keyboard device info are saved before the keyboard reset occuring
  in the reconnection procedure. If the new initialization of the
  keyboard fails, the old values are restored.

- The initialization procedure of keyboard device returns with error
  if it fails to retrieve the keyboard mapping information from the
  remote display.

- The reconnection fails if the default depth of the new display is
  different from the previous one.

- The session can be migrated if the visuals don't match for color
  masks swapping. At the moment there are no conversions to line up
  the RGB masks, so even if the session can be migrated, incorrect
  colors may be shown.

nxagent-3.0.0-80

- The agent options are saved before reopening the display in the
  reconnection procedure. If the new initialization fails the backup
  values of options are restored.

- The flag storing that a SIGHUP has been received is reset if the
  function reconnecting the session fails.

nxagent-3.0.0-79

- Changed the SIGHUP handler not to ignore the signal if the state
  is SESSION_GOING_UP or SESSION_GOING_DOWN.

- Keyboard device info are saved before the keybord reset occuring
  in the reconnection procedure. If the new initialization of the
  keyboard fails, the old values are restored.

- The initialization procedure of keyboard device returns with error
  if it fails to retrieve the keyboard mapping information from the
  remote display.

- The reconnection fails if the default depth of the new display is
  different from the previous one.

- The session can be migrated if the visuals don't match for color
  masks swapping. At the moment there are no conversions to line up
  the RGB masks, so even if the session can be migrated, incorrect
  colors may be shown.

nxagent-3.0.0-78

- Fixed TR07E01747. Fixed warnings occuring when compiling for AMD64.

- Fixed TR07E01753. NoMachine WM icon in the title bar is displayed
  correctly.

- Fixed TR03E01656. If client and server endianess didn't match, glyph
  images bits have to be only temporarily swapped.

- Fixed TR07E01746. Terminate the shadow agent if the option 'shadow'
  is empty.

- Added option '-verbose'. It enables the printing of errors received
  by the agent from the remote X server.

- Warnings related to missing fonts are printed only if verbose mode
  is enabled.

- Disabled a log message related to the use of Composite extension.

nxagent-3.0.0-77

- The pixmap formats are initialized without taking care of which are
  supported on the remote display.

- Removed the check for pixmap format compatibility when migrating the
  session to a new display.

- Fixed TR06E01725. A minimum set of available picture formats is
  used to ensure a wide migration from/to different displays.

- The PictFormat structures used by nxagent are no longer filtered
  with the ones available on the real display.

- The background pixmaps are cleared while reconnecting in order to
  make them usable.

- Fixed TR01E01619. Changed the RandR implementation to return a re-
  fresh rate other than zero.

nxagent-3.0.0-76

- Changed the keystroke to force the drawable's synchronization to
  CTRL-ALT-J.

nxagent-3.0.0-75

- If the backing store tries to restore areas from a corrupted pixmap,
  such areas are subtracted from the saved region, so that exposures
  will be sent for them.

nxagent-3.0.0-74

- Don't skip the synchronization when there are more clients ready.
  This temporarily solves the synchronization problems observed in
  the previous versions if one or more clients kept the agent busy.

nxagent-3.0.0-73

- If the PolyFillRect() uses a FillStippled or a FillOpaqueStippled
  fill style and the destination is corrupted, the area affected by
  the operation is first synchronized.

nxagent-3.0.0-72

- Fixed the bug affecting the position of the input window when a
  session was migrated to a linux X server with no window manager
  running.

- The color used to fill the corrupted backgrounds is converted de-
  pending on the depth of remote X server.

- The PolyFillRect() does not clean the corrupted destination region
  if a stipple pixmap is used as mask. This solution is adopted to
  reduce the region fragmentation and to solve the text drawing pro-
  blems affecting rdesktop.

nxagent-3.0.0-71

- Force a flush of the display buffer if the coalescence timeout is
  expired. Set the timeout according to the link type, from 0 to 50
  ms for link MODEM.

- In nxagentRealizeImage() the width in byte is computed newly if
  the image has been scaled.

- The shadow agent clips the screen updates in tile only if the link
  type is MODEM or ISDN.

- Split the abort conditions in the synchronization loop to check
  separately the congestion and the blocking status.

- Implemented a workaround in order to avoid graphical problems with
  render composite operations on Xfree86 remote server.

nxagent-3.0.0-70

- Various adjustments aimed at using the best defer rules depending
  on the congestion state.

- Fixed a problem with icons of message boxes in shadow sessions.

- Changed the log message printed when the shadow agent can't connect
  to the master session.

- If Composite is in use, don't skip the PutImage and CopyArea opera-
  tions even if the agent window is fully obscured.

nxagent-3.0.0-69

- The option -nodamage prevents the shadow agent from using the damage
  extension.

- Changed the scaling feature to set the byte order of the source
  image according to the local endianess.

- Changed the scaling feature in order to handle different ratios for
  horizontal and vertical sizes.

- Force the shadow sessions to be non-persistent.

- When a pixmap background is synchronized, an expose is sent to its
  owners.

nxagent-3.0.0-68

- Changed the type of parameters passed to nxagentRootlessRestack in
  order to be compliant with Xlib types on 64 bit platfors.

- The nxagentCompositeRects() checks for the render operation type to
  determine if the corrupted destination region must be cleared.

nxagent-3.0.0-67

- Fixed a condition discarding the expose events received from the X
  server.

nxagent-3.0.0-66

- The corrupted resources are removed when a session suspends, and are
  reallocated only at reconnection. This is aimed at avoiding synchro-
  nization loops when the link is down.

nxagent-3.0.0-65

- Initialize for now the tile size at 64x64 in shadow mode.

- The height and width of the tiles used for synchronizing drawables
  are set without overriding command line option 'tile'.

- Avoid calling miWindowExposures() for empty regions.

- Fixed a bug while clearing corrupted regions with window exposures.

- The corrupted drawable counters are not reset if there are bitmaps
  to synchronize.

nxagent-3.0.0-64

- The synchronization bitmap is used only when requesting a full
  drawable synchronization, otherwise the frame-buffer is used as
  source.

- Fixed some bugs in the synchronization loop.

- Removed the remaining debug output.

nxagent-3.0.0-63

- Don't start the synchronization loop if the wakeup handler found
  some clients ready.

- Don't flush the display buffers if the synchronization was inter-
  rupted and there are more drawables to synchronize.

- Changed the backing store functions to not save the obscured areas
  which are inside the corrupted region of a window.

- Added the code to send the XClearArea() commands in shadow mode at
  the end of the synchronization loop. In this way large images are
  still split in tiles but, on fast links, the final result can made
  visible all at once.

- Modified the corrupted drawable counters to only report the number
  of resources needing synchronization. This allows the block hand-
  ler to avoid spinning through the synchronization loop if there is
  nothing to do.

- On a window exposure remove the corrupted region of the destinat-
  ion window.

- For testing purposes, the pixmap synchronization loop starts only
  if there are corrupted backgrounds.

nxagent-3.0.0-62

- The image scaling is applied only if the destination drawable is the
  pixmap shadowing the frame buffer of the master session.

- The shadow agent exits with a fatal error if it can't connect to the
  master session.

nxagent-3.0.0-61

- Forward the SIGCHLD to the NX transport instead of letting the NX
  transport forward the signal to us. This allows the agent to set
  and replace the signal handler at any time, without having to ta-
  ke care of the state of the NX transport.

- Improved the synchronization loop by implementing a simple round-
  robin mechanism between the resources needing synchronization.

nxagent-3.0.0-60

- Use a new set of functions to install, post-install and reset the
  signal handlers.

- Reset the signal handlers to their initial state after a display
  failure, as part of the disconnection procedure.

- Don't set SA_RESTART in the sigaction flags. Make the signal int-
  errupt the system call.

- Terminate all the running dialogs before exiting.

nxagent-3.0.0-59

- Use the value of nxagentCongestion in nxagentUserInput() instead
  of calling NXDisplayCongestion().

nxagent-3.0.0-58

- The clip mask of the scratch GC used by nxagentDeferCopyArea() is
  reset before releasing the GC.

- The MotionNotify event can now break the synchronization loop.

- In the case of shadow sessions, if synchronization aborts then the
  remaining data to synchronize are not stored in a bitmap.

- If a table rebuild occurs in a loop searching for resources, the
  loop restarts from beginning not to use the out of date table.

nxagent-3.0.0-57

- The synchronization bitmap is created only if the corrupted area
  of the source drawable is visible.

- The synchronization loop skips the last synchronizing drawable to
  give a chance to the next resources to be synchronized.

- Removed the session starting infos concerning the mismatching ver-
  sions of render and the window manager detection.

- Split the gliph lists in Render.c only if the symbol SPLIT_GLYPH_-
  LISTS is defined.

- Read again the events in the block handler after the flush.

- The nxagentCongestion variable is now a value ranging from 0 to 9,
  not a boolean flag.

- Added some experimental code dynamically reducing the size of the
  display output buffer when the agent is blocking for write.

nxagent-3.0.0-56

- The synchronization loop is now aborted when a short timeout exp-
  ires. If the drawable synchronization cannot be completed, the
  remaining data is stored in a bitmap. The synchronization loop is
  then restarted using the data from the bitmap, instead of pulling
  the latest image from the framebuffer. This allows the agent to
  show a complete frame when displaying videos and animations, while
  at the same time giving a chance to the clients to update the
  screen in background. When an image from the saved bitmap is put
  on the remote display, the image is compared with the actual data
  in the framebuffer. If the two bitmaps match, the corresponding
  region of the drawable is marked as synchronized, otherwise the
  drawable remains dirty and will be synchronized at the next loop
  using the new data taken from the framebuffer.

- If the smart schedules is enabled, let the dispatcher decide when
  it is time to yield and process the next client.

nxagent-3.0.0-55

- Disable the smart scheduler in the case of shadow sessions.

- If the smart scheduler is enabled, stop the timer before returning
  from the block handler. WaitForSomething() sets a zero timeout if
  there are clients with input but doesn't stop the timer. The select
  is then interrupted to update the schedule time even if, what the
  dispatcher cares, is only the ticks count at the time the client
  is scheduled in.

- Fixed a compilation warning in NXresource.c.

- The main window of the shadow agent is mapped in nxagentMapDefault-
  Windows, like for non shadow agents, if the remote display has no
  window manager running. This avoids a flickering effect on the !M
  logo having place if the shadow session was displayed from a Wind-
  ows client.

- Some code related to the use of the Composite extension is not built
  in the agent being not necessary anymore.

nxagent-3.0.0-54

- Get SmartScheduleStopTimer() from dixstruct.h.

- Updated the NoMachine icon file.

nxagent-3.0.0-53

- Changed the message 'NXAGENT: Fatal IO error on display' into 'Info:
  Disconnected from display'.

- Fix a problem occurring when the FindClientResourcesByType() needs
  to reallocate the resource table.

- The popup window synchronization breaks if an user input is caught.

- Implemented FR05E01712. The stderr and stdin are redirected to the
  'clients' file in the session directory.

- The nxagentRealizeImage function does nothing if the agent is not
  connected to the display.

- Removed the code implementing the redraws of the viewport frame.
  Such code is not needed because is't enough for the agent to handle
  the expose event received from the X server.

nxagent-3.0.0-52

- Where it is necessary to wrap the function PaintWindowBackground,
  the original function pointer is saved and restored afterwards. This
  let other code wrapping that function (e.g. the damage extension) to
  work correctly.

- If the agent works in shadow mode, the defer parameters are ignored.

nxagent-3.0.0-51

- Use the smart scheduler on platforms where it is enabled.

- Check ClientsWithInput in the wakeup handler and update the number
  of clients ready if any descriptor is set.

nxagent-3.0.0-50

- Fixed TR05E01714. Changed VisibilityNotify event so that it forces
  a refresh on the root window, but only if on the agent Composite is
  enabled and its window moves from a VisibilityFullyObscured to ano-
  ther state.

- Grant the availability of core fonts in master sessions also after
  the disconnection. This makes possible to start new clients inside
  a shadow sessions while the master is down.

- Changed nxagentGlyphs() to send a single glyph list per request.

- Major rewrite of the agent dispatch handler.

- Some name changes to the functions handling the session states.

nxagent-3.0.0-49

- Made the dispatch loop yield control to a different client after a
  fair amount of time even if the current client doesn't produce any
  output.

nxagent-3.0.0-48

- Modified the message in the suspend dialog to say 'Disconnect' in
  place of 'Suspend'.

- Added macros in Pixels.h to determine the behavior of the lazy en-
  coding.

- Changed the copyright attribution from Medialogic to NoMachine.

- Reset all options to their defaults before processing the session
  arguments. This fixes the problem with the DeferLevel option not
  being set at reconnection.

nxagent-3.0.0-47

- Initialized the arguments of NXGetControlParameters(), NXGetShmem-
  Parameters() and NXGetUnpackParameters() to end up with valid data
  also in the case of a display failure.

- Converted the coordinates in the X_PolyFill requests to relative
  mode. This makes all the requests independent from the origin and
  helps the caching by the proxy.

nxagent-3.0.0-46

- Don't print the 'Display failure' message on a SIGTERM.

- Ensure that the NX transport is shut down after the 'Terminating
  session at...' message if the session is killed by the user.

- Let the agent filter the error output by setting the OsVendorVEr-
  rorFProc function pointer.

- Give the possibility to the agent to redirect the standard error
  during a Popen() or a System() by setting the OsVendorStartRedir-
  ectErrorFProc and OsVendorEndRedirectErrorFProc function pointers.

- Fixed a problem in nxagentPolyFillRect() not properly propagating
  to the destination.

- Added nxagentPolyFillRect() and nxagentGlyphs() among the funct-
  ions increasing the pixmaps usage counter.

- Cleaned up some of the FIXME related to the lazy encoding.

nxagent-3.0.0-45

- Use the three distinct functions in nxcompext to query the state
  of the display connection.

- Terminate gracefully on a fatal server error by printing the fol-
  lowing in the session log:

  Error: Aborting session with 'Error text...'.
  Session: Aborting session at '...'.
  Session: Session aborted at '...'.

- Removed more debug messages from the session log.

nxagent-3.0.0-44

- Guess whether to compress an image with a lossless encoder based
  also on the width and height, not only on size.

- Corrupted pixmaps used as tiles propagate the dirty area when they
  are involved in a PolyFillRect() operation.

- On link settings ADSL to LAN, images are not split in tiles to bet-
  ter fill all the available bandwidth.

- Pixmaps referenced often as source in deferred operations or used
  as backgrounds, are now synchronized as long as when the network
  congestion level remains 0.

- Use nxagentPaintWindowBorder() to update the window's border in
  the framebuffer.

- Fixed a problem with the new handling of the X_RenderChangePicture
  requests that caused the text to be erroneously clipped.

nxagent-3.0.0-43

- Don't pass the uid of the shared memory segment to the nxcompshad
  library if it can't be retrieved from the options.

- Fixed the new handling of the RenderChangePicture requests to work
  on 64 bit platforms.

nxagent-3.0.0-42

- Added support for the 'lossy', 'lossless' and 'adaptive' pack me-
  thod literals. These values activate the dynamic selection of the
  pack method by the agent.

- Use the newer constant PACK_NONE instead of NO_PACK.

nxagent-3.0.0-41

- Fixed a bug in the disconnection procedure introduced with the new
  handling of the display events.

- Realize the XRenderChangePicture() request only if a change of the
  remote picture's attributes is detected.

nxagent-3.0.0-40

- Dynamically select a lossy or a lossless encoder based on the num-
  ber of pixels that appear to be different in the image.

- Use the new PACK_BITMAP_16M_COLORS image encoding. Handle the case
  when the packed image data points at the same data as the original
  image. This is useful to save a copy.

- The PACK_BITMAP_16M_COLORS method is now the default for lossless
  encoding.

- Don't use compression for the alpha channel. This is also intended
  to better leverage the stream compression.

nxagent-3.0.0-39

- The nxagentComposite() function doesn't check the source and mask
  synchronization status, but defers the XRenderComposite() operation
  by checking the defer level only.

- If the target of an XCompositeText() function is an hidden window,
  the operation is prevented.

- Passing the uid of master X server process to nxcompshad library.

- Before the call of XRenderAddGlyphs(), call the new library function
  XRenderCleanGlyphs() cleaning the padding bytes of data section of
  request.

nxagent-3.0.0-38

- Don't warp the cursor if the requesting client is a shadow agent.

- Changed a call to NXFlushDisplay in order to align to nxcomp version
  3.0.0-15.

- Updated the NoMachine icon file.

- Changed Agent.h in order to include NX version of Xlib.h avoiding
  missing declarations.

- If the NXDisplayCongestion notifies an optimum congestion state,
  the continuous user input, due to unreleased buttons/keys, doesn't
  break the drawable's synchronization.

- Renamed the option 'block' as 'tile'.

- Implemented a way to guess if the destination drawable of a copy
  area is a popup window. In such a case, the source is synchronized
  before doing the copy to avoid ugly effects like text items floating
  on an invisible background.

- In order to reduce the number of clip mask changings, if the clean
  region of a corrupted source drawable is formed by a single rectan-
  gle, its coordinates are used to change extents and position of the
  area involved in the copy area operation.

- Fixed a crash caused by a reference to a resource table freed by a
  table rebuilding. This was happening because during the pixmap re-
  connection some new GC resources went beyond the resource table li-
  mit, causing a table relocation. As a general rule, a function loop-
  ing across a resource table should not add or remove resources.

nxagent-3.0.0-37

- To improve the efficiency of the algorithm deferring the trapezoid
  operations, the composite does not propagate the glyphs flag to
  the destination.

- Moved the replacement of XCheckIfEvent() to nx-X11 with the name
  XCheckIfEventNoFlush().

nxagent-3.0.0-36

- Changed nxagentDisplayFlushHandler() according to the new semantic
  of the handler. The function is called by nxcomp when new data is
  sent to the remote proxy.

- After the flush handler is called, use NXQueryDisplay() with query
  type NXDisplayCongestion to update the congestion flag.

- Modified the boxes list defragmentation to merge only those rectan-
  gles which fully overlap.

- During the synchronization loop the nxagentDispatchHandler() takes
  care of reading the enqueued events, while the nxagentUserInput()
  checks only for state changes due to a processed key/button event.

- Set the display output buffer size according to the link type.

- Removed the congestion and synchronization callbacks.

nxagent-3.0.0-35

- In order to avoid the lossy encoding of text regions, the nxagent-
  GlyphsExtents is computed even if the mask format is not specified.
  In this case, the render implementation was not calculating the ex-
  tents of composite text operation, whose coordinates are useful only
  to build a mask pixmap.

nxagent-3.0.0-34

- Removed message 'Could not init font path element' from the output.

- Moved initialization of picture support before the call to miDCInit-
  ialize in the screen opening procedure. This is because miDCInitial-
  ize calls DamageSetup that wraps the picture screen functions.

- Implemented FR05E01686. Added option 'menu' enabling/disabling the
  pulldown menu in the rootless agent.

- Added a flag to each drawable to record if they have been the dest-
  ination of a glyph operation. This is used to skip the deferral of
  some operations (e.g. render trapezoids) if they can cause the
  drawable to be synchronized using a lossy encoding.

- The render trapezoids are deferred if the operation falls inside
  a dirty region or if the destination drawable does not contain
  glyphs.

- Imported the NXmitrap.c file from render directory.

- Improved the algorithm queuing multiple writes across a proxy
  flush.

nxagent-3.0.0-33

- Read the event queue after each request processed. Doing this
  is expensive but it seems to work best.

- Don't split the big trapezoid requests. Splitting the requests
  doesn't seem to provide any benefit with the clients tested.

- By defining BLOCKS in Handlers.c, Events.c and NXdispatch.c, log
  the begin and end of the most sensitive routines.

nxagent-3.0.0-32

- Use NXSetDisplayWriteHandler() to register a callback invoked
  by Xlib after some data is written to the display socket. This
  callback allows the agent to better determine when it is time
  to send the sync requests.

nxagent-3.0.0-31

- The operation of adding glyphs to remote glyphset has been defer-
  red, in order to avoid to add unused glyphs. When a composite text
  operation looks for a certain glyph, if it has not been added to
  the selected glyphset, an XRenderAddglyphs is requested.

- The forced synchronization timeout is now dependant on link type.

- Force the mi to process the events just after having processed
  any input.

- Added an experimental 'hard' sync request intended to wait for
  the X server to complete an image operation. This also affects
  the agent only when the NX transport is not running.

- Added a synchronization mechanism intended to let the agent de-
  tect if the X server is not able to process its input when the
  NX transport is not activated. The algorithm uses asynchronous
  X_GetInputFocus replies to minimize the impact of latency on
  slow connections. A new request is sent at any given amount of
  bytes read from our clients. When the number of pending replies
  is exceeded, the agent stops accepting additional requests and
  waits for the remote until the number of pending replies returns
  below the limit. Note that when the NX transport is running, the
  algorithm is disabled to not interfere with the proxy's own
  token-based flow control.

- Added the nxagentDispatchHandler() function. It is called by the
  dispatcher after a client's request has been processed.

- Added the nxagentWaitEvents() function. It blocks waiting for
  more input with an optional timeout. It handles the case when
  the NX transport is not running and is able to recover gracely
  from a display failure by returning the error.

- Replaced most of the code that was relying on NXTransContinue()
  to use the new function.

- Moved the new event-related functions to Events.h and Events.c.

- Disabled the code raising the splash screen at reconnection.

- Reverted change done in 3.0.0-8 version, dealing with expose events
  not having entries in the queue. They are not collected in a global
  region but sent immediately.

nxagent-3.0.0-30

- Let the block handler check if there are events queued after the
  flush before entering the select.

- Changed the dispatch loop to read the incoming events more often.

- Added the nxagentReadEvents() and nxagentCheckEvents() functions.
  Differently from XCheckIfEvent(), nxagentCheckEvents() doesn't
  flush the output buffer if no event is available. nxagentReadEv-
  ents(), instead, it's like XEventsQueued() but forces the use of
  the QueuedAfterReading mode. These functions should be used when-
  ever XEventsQueued() and XCheckIfEvent() would be required.

- The nxagentQueuedEvents() macro uses XQLength() to return the
  number of events that have been read and need to be dispatched.

- The nxagentPendingEvents() function returns true if there is any
  event queued. If not, it queries the transport to find if more
  events can be read.

- Ripristinated the code preventing the agent to connect to its own
  display. The code was disabled while migrating to the new tree.

- Removed the dependencies from the NXAGENT_QUERYBSIZE, NXAGENT_NO-
  EXPOSEOPTIMIZE and NXAGENT_ONEXIT. Removed the unused code.

- Removed more unused code in Clipboard.c.

- The shadow agent calls NXShadowDestroy before exiting.

- Reverted a change done in 3.0.0-8 dealing with expose events. If the
  result of the subtraction is not sent immediately, some duplicated
  refresh is shown.

nxagent-3.0.0-29

- The splash screen is removed as soon as the session is started in
  the case of shadow session.

- The rules to verify when the synchronization loop can be stopped
  are specified by means of a bitmask passed as parameter to synch-
  ronization functions.

- The glyphsets are no longer reconnected during a session resuming,
  but only when they are used.

- Initialized the timeout parameter in block handlers in case of NULL
  value.

- Added option 'block' to specify the size of image slices sent during
  the synchronization.

- Fixed a memory leak in nxagentParseOptions().

nxagent-3.0.0-28

- Improved the nxagentGetOptimizedRegionBoxes() function to optimize
  the high fragmented rectangle lists.

- When resizing nxagent window the fictitious resize for all top level
  windows, triggering the window tree validation, is not executed if
  rootless mode is off.

- The nxagentInputWindows cannot be resized in rootless mode because
  they are not created.

- Added NXdamage.c to the source files.

- Changed damage's GCOps functions drawing text. This was needed be-
  cause the original functions didn't call agent GCOps if the drawable
  was registered for damage events.

nxagent-3.0.0-27

- Fixed TR04E01677. Changed the reconnection procedure to call the
  function destroying the NoMachine splash window. It rarely happened
  that the splash window was not removed after resuming a session.

- Ignored the ForceScreenSaver requested by X clients to avoid clashes
  with our screen saver handling.

- Cleanup of code handling the screen saver timeout to remove referen-
  ces to the old drawable's synchronization method.

- Fixed TR04E01664. The session is terminated instead of suspended if
  the auto-disconnect timeout expires and the persistence is not allo-
  wed.

- Reverted an optimization in nxagentCheckWindowConfiguration() in
  order to avoid inconsistencies in the stacking order.

- Fixed a segmentation fault in rootless mode.

nxagent-3.0.0-26

- Some fixes to build in the Cygwin environment.

nxagent-3.0.0-25

- Renamed the option 'lazylevel' to 'defer'.

- Added a flag to windows to know if they have transparent children,
  in order to reduce to minimum the put images on windows covered by
  their children.

- Created a generic list of graphic contexts, used when synchronizing
  drawables between the nxagent and the remote X server. All the GCs
  are created with IncludeInferiors property. This solves problem when
  trying to synchronize windows covered by children with transparent
  backgrounds.

- The nxagentUserInput checks if keys are pressed.

- Fixed some memory leaks.

- In shadow mode, removed the handling of events of the source display
  from the code. They can be handled in the nxcompshad library.

- In shadow mode, allow the synchronization loop to break in case of
  input event.

- Moved the call to miDCInitialize after the initialization of poin-
  ters to screen functions. This was needed to make DAMAGE work pro-
  perly.

- In shadow mode, not breaking the polling if a mouse button is down.

- In shadow mode, allow events to break the loop sending updates.

- At reconnection the input window is raised after the root window is
  mapped.

- Fixed an invalid read. The call to the function nxagentSetInstalled-
  ColormapWindows() has been moved from nxagentDestroyWindow to Dele-
  teWindow.

nxagent-3.0.0-24

- The corrupted drawables are added to dedicated lists of resources
  to speed up the synchronization process.

- The nxagentUserInput checks if a mouse button is pressed.

- Created the nxagentGetScratchGC which resets the scratch GCs to de-
  faults values also on the remote X server.

- The synchronization cycle is forced when a timeout expires, albeit
  the remote display is blocked.

- Added a parameter to synchronization functions to specify if loops
  can break. It's useful to force the synchronization in some circum-
  stances.

- Keystroke CTRL-ALT-R is enabled in shadow mode too. It is used to
  switch scaled and non-scaled modes.

- Some changes to adjust the window position.

- Moved some macros to Misc.h.

- Some changes to adjust the behaviour of scaling feature in case of
  resize and switch to full screen.

- Freeing the buffer used for scaling if no needed anymore.

nxagent-3.0.0-23

- Fixed TR02E01648 and TR10D01534. Changed pointer motion events han-
  dling. In desktop mode the nxagent creates a InputOnly window that
  collects the MotionNotify events. This window is mapped over the
  root window. In rootless mode the nxagent creates all windows on
  real X server with PointerMotionMask.

- Not exiting from the block handler with zero timeout if drawables to
  be synchronized are pixmaps only.

- Reduced the margin around the glyph extent from 5 to 3 pixels.

nxagent-3.0.0-22

- Fixed initialization of XImage used for scaling.

- Changes to fix the position of the shadow main window.

nxagent-3.0.0-21

- Moved the implementation of scaling feature in nxagentRealizeImage.

- Disabled log message 'Font not found' in Font.c.

- The synchronization loop is called inside the BlockHandler. Synch-
  ronization goes on until the display is not blocked.

- Exiting the BlockHandler with timeout zero if corrupted drawables
  have not been synchronized because of blocked display connection.

- Changed the synchronization loop to slice the dirty regions.

- The updates by shadowing nxagents are now sent using the lazy me-
  chanics: the remote buffer pixmap is marked as dirty, then synch-
  ronized.

- Traversing the tree to synchonize windows.

nxagent-3.0.0-20

- Fixed a bug in the nxagentGetOptimizedRegionBoxes() function which
  was causing a bad merging of boxes.

- Added a margin of 5 pixels around the glyphs extents before synch-
  ronizing them.

- The synchronization cycle has been reactivated for the first lazy
  level, in order to synchronize the window's background.

- The CopyArea between pixmaps doesn't mark the full destination as
  corrupted, but clips the operation with the synchronized area of the
  source as happens for the windows.

- Implemented scaling feature for the shadow agent. To do: run-time
  control of this feature by keystrokes and window resize; adapting
  the window size to the scaled dimensions.

- Setting the shadow session scaling ratio equal to the size chosen
  from the user divided by the size of the main session.

- Scaled mouse motion events according with the ratio.

- Implemented the nxagentScaleImage() function.

- Updated version number and copyright in the output log.

- Fixed TR06D01390. When resizing nxagent window, we make a fictitious
  resize for all top level windows, in order to trigger the window
  tree validation.

nxagent-3.0.0-19

- Force LazyLevel to 0 in case of shadowing session.

- If shadowing poller returns that nothing is changed and no updates
  have to be sent, call WaitForSomething select with 50 ms timeout.

- The shadow agent doesn't break the sending of updates in case of
  mouse motion events.

- The scratch GC's clip mask was not cleared during a drawable synch-
  ronization. Now the GetScratchGC() function is called after changing
  the nxagentGCTrap flag.

- Implemented the function nxagentGetOptimizedRegionBoxes(). It gets
  the list of boxes forming a region and operates on it to merge as
  much boxes as possible, checking their width and position.

- Implemented the function nxagentClearRegion(). It does an XClearA-
  rea() for each box belonging to a region, using the color returned
  by nxagentGetCorruptedRegionColor() as background of target window.

- Implemented the function nxagentGetCorruptedRegionColor(). It gets
  the color of first outer pixel in the bottom right corner of re-
  gion.

- Fixed some memory leaks.

- Checked and removed some FIXME concerning the lazy encoding.

- Fixed and added some debug messages in Render.c, GC.c and GCOps.c.

- Added to the Literals.h file the Render and Shared memory requests.

nxagent-3.0.0-18

- Changes to comply with nxcompshad library.

nxagent-3.0.0-17

- The master agent holds the number of shadow nxagents connected to
  itself. The shadow nxagent notify its presence to master nxagent
  by setting the _NX_SHADOW property.

nxagent-3.0.0-16

- Rearranged the lazy level rules. All the link types now use the lazy
  level 1: the pixmaps are always corrupted, and they becomes synchro-
  nized only when they're sources of an operation (i.e. CopyArea, ren-
  der).

- The lazy levels greater than 1 don't synchronize automatically. It's
  possible to synchronize with two keystrokes: CTRL+ALT+Z forces the
  windows synchronization without take care of the congestion; CTRL+
  ALT+X synchronizes the windows and the background until there is
  enough bandwidth.

- Only the tile, stipples and glyphs are always synchronized.

- The height of glyphs region has been doubled to obtain a better vi-
  sual effect after the synchronization.

- Fixed a problem causing the background pixmaps to be used also if
  they were not fully synchronized.

- Added a function to convert a PolyPoint in a dirty region. The fun-
  ction is now disabled because it is not advisable to use the exten-
  ts.

- The XCopyArea is not requested if the clip region is NIL.

- The nxagentPutImage does not update the framebuffer when it is
  doing a synchronization.

- Moved all the code handling the drawables synchronization in the
  Drawable.c file.

- As the shared memory pixmaps are never synchronized with the re-
  mote X server, now they're marked as dirty when they're created.

- An XFillRectangles request now marks the rectangles of the desti-
  nation drawable as synchronized.

- Fixed a bug that was causing the CopyArea to propagate wrongly the
  corrupted region on the destination drawable when the GC uses a
  clip mask.

- Implemented a test function useful to show on the windows all the
  dirty regions as colored rectangles. It is used with the CTRL+ALT+A
  keystroke.

- Before sending the XRenderComposite operations (trapezoids, trian-
  gles, TriStrip, TriFan), the drawables involved are synchronized if
  they are dirties.

- Changes to shadow mode.

- Moved the code splitting the screen shadowing updates to a separate
  function.

- Suspend the sending of updates if input is received from the user.

- Make use of callback mechanism implemented in the nxshadow library
  to suspend screen polling when input is received from the user.

- Flush the display link when requested by the proxy.

nxagent-3.0.0-15

- Print the following info when the screen is resized: "Info: Resized
  screen [<screen number>] to [<width>x<height>].

- Changes to comply with nxshadow library.

- Fixed the height of screen updates in shadowing mode.

- Terminate cleanly if shadowing initialization fails.

- Split shadowing screen updates in smaller rectangles for slow links.

nxagent-3.0.0-14

- Fixed a compilation error in NXrender.c.

nxagent-3.0.0-13

- Changed the LICENSE file to state that the software is only made
  available under the version 2 of the GPL.

- Added file COPYING.

- Updated the files imported from X.org to the 6.9.0 release.

nxagent-3.0.0-12

- Fixed compilation on Sun platform.

nxagent-3.0.0-11

- Implemented an algorithm adapting colors if the target display have
  different depth than the shadowed display. It requires that visuals
  are TrueColor and depths are 16 or 24 or 32.

- Added the option shadowmode. If this option is '0' the shadowing
  session doesn't interact with the attached session.

nxagent-3.0.0-10

- Changes to comply with the nxshadow component.

nxagent-3.0.0-9

- Applied changes to files imported from X.org sources.

- Updated copyright notices to the current year.

nxagent-3.0.0-8

- Imported changes up to nxagent-2.1.0-17.

- Fixed problem with font path on Solaris 10.

- Disabled some log messages.

- If the agent has blocked when trying to write to the display, try to
  read other events from the connection.

- After synchronizing expose events, the result of subtraction is not
  sent immediately, but added to a region. Expose events will be for-
  warded to clients after exiting from the event loop.

- Critical output is set when button mouse events are received.

- Fixed TR12D01584. X11 sessions could not be started on Mandriva Li-
  nux 2007 because of a different location of fonts. The font path
  used by this distribution is now added to the alternates font paths.

- Fixed TR11D01550. Modified the collection of visuals when nxagent
  opens a display. Now we only use the ones with the same depth than
  the default one set in the screen.

- Modified the reconnection of pict-format structures, to avoid an
  error that arises when migrating a session by a Linux machine to
  a Windows one.

- Small changes in handling of expose events.

- GraphicsExpose are no more forwarded to clients immediately. They
  are merged with remote-only exposures and sent later.

- Invalidated expose queue elements dealing with destroyed windows.

- Cleaned up code in nxagentSynchronizeExpose().

- Fixed TR10D01541. Now when destroing a window if lastClientWindowPtr
  point to this window then in nxagentClearClipboard() we put nxagent-
  ClearClipboard to NULL and lastClientStage to SelectionStageNone.

- Fixed a problem with LazyLevel option that wasn't correctly read
  from command line.

- Fixed an arithmetic exception raised when the viewable corrupted
  region is empty but not nil.

- Removed the obsolete 'sss' option.

- Fixed a warning related to the expose queue.

- Modified the queue of exposed region to remove some memmov() calls.

- Remote expose events not having entries in the queue are collected
  in a global region and sent later, instead of being sent immediate-
  ly.

- Changed nxagentCheckWindowConfiguration() to prevent unuseful calls
  to XQueryTree().

- Fixed TR10D01530. Fixed an invalid write in doOpenFont().

- Fixed some invalid write/read in nxagentVerifyDefaultFontPath().

- Fixed TR10D01518. If needed, a restack is performed on the top level
  windows in rootless mode.

- Fixed TR10D01520. Reviewed session termination and log messages in
  the case of indirect XDMCP.

- In PictureCreateDefaultFormats(), cleaned the PictFormatRec struct
  when the format is not supported.

- Fixed TR09D01498. As it is possible to use multiple paths where to
  store the fonts, now the agent concatenates all the existing font
  paths used in various XFree/Xorg distributions to obtain a unique
  default font path.

- Fixed TR09D01502. The privates of the real pixmap are initialized
  before trying to allocate a virtual pixmap, avoiding the possibility
  to access an inconsistent structure in case the allocation fails.

- Fixed a memory leak due to a missing deallocation of a virtual pix-
  map's region.

- Fixed TR08D01486. Removed a warning in NXrender.c.

- Implemented FR08D01470. Now in the reconnection phase missing fonts
  are replaced by the most similar picked among the available ones.

- Fixed TR08D01480. A condition inside the nxagentWindowExposures
  function was ignoring the possibility that the first region para-
  meter could be a null region.

- Fixed TR06D01409. Now NXCollectGrabPointer() is called with the
  owner_events true in ActivatePointerGrab() .

- Fixed TR03D01317. Increased the time after wich the session termina-
  tes.

- Fixed TR08D01475. In rootless, ConfigureWindow requests are only
  forwarded to the X server, even if no window manager has been detec-
  ted.

- Fixed TR04D01367. An XKB event is sent to notify that keyboard map-
  ping has changed.

- Check the number of regions in the list before running nxagentSynch-
  ronizeExpose().

- Reduced the number of GCs used during the drawable synchronization.

- Optimized the corrupted region synchronization trying to use the
  extents is some circumstances instead of split the full region.

- Checked and removed some FIXME.

- Fixed TR05D01384. Xgl server uses less picture formats than nxagent
  usually does. Now the PictFormat structures used by nxagent are fil-
  tered with the ones available for the real display.

- Fixed TR06D01410. Function nxagentRestoreAreas have to make use of
  a GC with subwindow mode ClipByChildren for preventing from repaint
  also children of restored window. Children are restored in a separ-
  ate call, if they have backing store on.

- Fixed TR07D01426. The cursor data were swapped in place if the dis-
  play had different bitmap bit order. Let Xlib do this work on a copy
  of the image, preventing from messing up the original data.

- Fixed TR07D01450. Some fonts were missing in the list of available
  fonts because the ListFonts pattern used to build this list was too
  much generic. To build a full font list two different patterns have
  been used.

- Fixed TR07D01449. Some X clients might affect the X screen saver
  functioning modifying the default properties. The SetScreenSaver
  request now correctly checks the parameters changes to avoid any
  issue.

- Fixed TR07D01432. X11 sessions could not be started on Debian 'Etch'
  because of a different location of fonts. The font path provided by
  the Debian Policy is now added to the alternates font paths.

- Fixed TR07D01437. The auto suspend timer was reset when it should
  not.

- Fixed a conditional jump on uninitialised value.

- Fixed TR05D01380. Now migrating a session when display have a 16-bit
  depth does recover all visuals, avoiding reconnection failure.

nxagent-3.0.0-7

- Fixed problems occurring when the main session is terminated and the
  connection is refused to the shadow agent.

- Fixed include directory order for Solaris.

nxagent-3.0.0-6

- The shadow agent works only in viewport mode.

- Added nxagentShadowCreateMainWindow function. This function creates a
  pixmap and a window for mirroring the display root window.

- Added NXShadowUpdateBuffer() function in order to create the buffer
  for the poller with the same sizes of the root window of the master
  agent.

- Added NXxrandr.c NXxrandr.h and NXxrandrint.h files.

- If the main agent screen is resized, the shadow agent adapts to the
  new size of the root window.

- Changed option activating mirror to -S.

- Removed usleep() call when the agent is suspended.

- Input events are sent to the main session even if it is in sus-
  pended state.

- Updates are made from top to bottom.

- Added the option IgnoreVisibility. If this option is set, PutImage
  is not skipped when the window is fully obscured.

- Added the option 'shadow' saying the display to attach.

nxagent-3.0.0-5

- Added the mirror mode. It is activated by -M option.

- Recovered the state of keys when the agent in access mode loses
  focus in mirror mode.

- Changes to work with 16-bit depth display in mirror mode.

- Changed the Imakefile in order to include NXaccess.h and NXaccess-
  Event.h files.

- The layout keyboard is passed to NXShadowCreate() function in order
  to load the right keymap file in mirror mode.

nxagent-3.0.0-4

- Small changes to build on 64 bit x86 platform.

nxagent-3.0.0-3

- Fixes to build on Cygwin platform.

- Change the order of include directories in Imakefile.

- Renamed GC.h, Window.h and Pixmap.h to avoid name clashes.

- Undefined NXAGENT_UPDRADE in Composite.c and NXcomposite* files.

- Defined ddxBeforeReset() in Init.c.

nxagent-3.0.0-2

- Merged changes to NXdispatch.c, NXdixfonts.c, NXmiwindow.c, NX-
  picture.c, NXproperty.c, NXrender.c, NXresource.c, NXwindow.c.

nxagent-3.0.0-1

- Opened the 3.0.0 branch based on nxagent-2.0.0-88.

nxagent-2.0.0-88

- Fixed a memory leak in the code handling the remote font list.

- Removed some log message.

nxagent-2.0.0-87

- The box size is checked during the region synchronization to avoid a
  possible arithmetic exception.

nxagent-2.0.0-86

- Checked the validity of the colormap in nxagentChangeWindowAttri-
  butes().

nxagent-2.0.0-85

- Fixed the bad destination coordinates of shared memory pixmap synch-
  ronization in nxagentCopyArea() and nxagentCopyPlane() functions.

nxagent-2.0.0-84

- Discard the Terminate Server key sequence Ctrl-Alt-BackSpace.

nxagent-2.0.0-83

- Added a workaround to prevent the use of an inconsistent client poi-
  nter in the nxagentNotifyConvertFailure() function.

nxagent-2.0.0-82

- Fixed the parsing of option 'backingstore'.

nxagent-2.0.0-81

- The agent window visibility on the real X server is used together
  with the internal state to decide if graphics operations can be
  avoided.

- When restoring areas, if the backing pixmap is corrupted, an expose
  event is sent to the region that can't be restored.

nxagent-2.0.0-80

- The core protocol requests internally used to accomplish a Render
  extension request are no longer propagated to the real X server. To
  be more precise in this way we can save many XCreatePixmap, XChange-
  GC and XSetClipRectangles.

- Corrected a minimal incoherence in nxagentCopyArea in managing the
  creation and deallocation of a region.

- Fixed a double synchronization of an aged drawable during a put ima-
  ge operation, due to a missing check of nxagentSplitTrap value.

- Added the VisibilityChangeMask bit to the event masks.

- Improved the algorithm which prevents the server client's resource
  duplication.

nxagent-2.0.0-79

- Added the 'lazylevel' option usable in the command line to specify
  how much the Agent should be lazy. The default level is 2. Each
  level adds the following rules to the previous ones:

  Level 0  The lazy is off.

  Level 1  The put images are skipped if we were out of bandwidth,
           unless that the destination drawable has an old corru-
           pted region.

  Level 2  No data is put or copied on pixmaps, marking them always
           as corrupted and synchronizing them on demand.

  Level 3  The put images over the windows are skipped marking the
           destination as corrupted. When a copy area to a window is
           requested, the source is synchronized before copying it.

  Level 4  The source drawable is no longer synchronized before a
           copy area, but the operation is clipped to the synchro-
           nized region.

- Implemented a dynamic synchronization mechanism, based on user ac-
  tivity: if the input devices are not used for a variable amount of
  time (depending from the configured link type), the synchronization
  starts and goes on until there is enough bandwidth.

- Minor fixes to the way the copy area propagates the corrupted re-
  gion.

- Whenever a put image is done, a full synchronization is forced on
  the destination drawable if it has an old corrupted region.

- During the overall synchronization a drawable is skipped if its
  timestamp is lower than the synchronization interval.

- Updated the copy plane to skip the operations from a corrupted pix-
  map to another pixmap.

- Fixed the pixmaps synchronization which was not checking the avai-
  lable bandwidth.

- In rootless mode, ConfigureWindow requests are not internally per-
  formed for top level windows if a window manager is running. Anyway
  they are forwarded to the X server.

- Enabled the DPMS extension.

- Fixed the -dpi option.

nxagent-2.0.0-78

- When the remote proxy supports the alpha encoding, the alpha data
  is sent compressed. When connected to an old version, the agent
  uses the NXSetUnpackAlphaCompat() call.

- Added support for the RLE pack method.

nxagent-2.0.0-77

- Fixed the check for special keystrokes. State mask for Alt and Meta
  keys are inferred from the X server modifier map.

nxagent-2.0.0-76

- Fixed application icon in rootless mode.

- If SYNC_WHOLE_GLYPH_DRAWABLE is set in Render.c the whole drawables
  used in the composite glyphs are synchronized. This is useful to
  evaluate the policy we should use to minimize the put images.

- Code cleanup in Pixmap.c concerning the synchronization functions.

- Added the nxagentSynchronizeBox() function.

- Setting a wide band link (ADSL, WAN, LAN) disables Lazy and Strea-
  ming options.

- Now the Lazy option can be switched by the Ctrl+Alt+E keystroke.

- Set a timestamp on a drawable to verify how much old its data are.
  If we didn't update it since two seconds, the put image operations
  are not skipped.

- The image data split in chunks smaller than a threshold is now mo-
  ved from the nxagentPutImage() to the nxagentRealizeImage() func-
  tion. If a chunk is going to be put on an hidden area of a window,
  the operation is skipped.

- Fixed the value assigned to the id of the alpha visual. Now it is
  assigned by XAllocID().

- Removed a call to XSetInputFocus() before mapping the default win-
  dows.

- Restored the backup display pointer when failing to reconnect the
  display.

- Fixed some return value in the options parser function.

- Fixed the parsing of environment variable.

nxagent-2.0.0-75

- Optionally split the long X_RenderTrapezoid requests in multiple
  messages to help the compression.

nxagent-2.0.0-74

- Fixed a bug preventing the reconnection of pictures.

- Fixed the way the agent notify its start up to NX Client. Now the
  ownership of agent atom is set before the reconnection of pixmaps.

nxagent-2.0.0-73

- Added a check on the display pointer in nxagentTerminateDisplay()
  to ensure that we don't try to force an I/O error if the display
  is already down.

- The image operations now are clipped to the visible area of the
  drawable. As this may hamper the caching algorithm, only source
  images bigger than 32K are clipped.

- Code cleanup in Render.c.

- When setting SKIP_LOUSY_RENDER_OPERATIONS in Render.c the realiza-
  tion of some operations is skipped. This is useful to determine
  how clients (mis)use the RENDER extension to achieve even worse
  performance than they were able to achieve using the core protocol.

nxagent-2.0.0-72

- Ensured that SIGUSR1 and SIGUSR2 are ignored if the NX transport
  is not running.

nxagent-2.0.0-71

- Modified the following messages used to track the session state:

  From: "Session: Session starting at..."
  To:   "Session: Starting session at..."

  From: "Session: Session terminating at..."
  To:   "Session: Terminating session at..."

nxagent-2.0.0-70

- Removed the obsolete 'Info' messages related to the 'fast' versus
  'slow' copy area and get image modes. The -slow and -fast options
  are now ignored as ignored are the keystrokes that allowed switch-
  ing between the two modes.

- Removed more obsolete warnings and commented the logs left around
  for test purposes.

- Removed the code in NXdispatch.c handling the fake get-image.

- Removed the flags related to the use of the frame-buffer.

- Major code cleanup in GCOps.c, Window.c, GC.c, Pixmap.c, Screen.c.

nxagent-2.0.0-69

- Added a check to avoid parsing an empty DISPLAY variable.

- Added parsing of the 'streaming' option.

- GetTimeInMillis() function is compiled only if DDXTIME is defined,
  to avoid double definition errors on Solaris platform.

- Messages "Suspending session..." and "Session suspended..." are not
  printed if the DE_TERMINATE dispatch exception is set.

- When synchronizing the shared memory pixmaps the image is no longer
  put on the framebuffer.

- Code cleanup in the nxagentSynhronizeRegion() function.

- Added the 'lazy' option to enable or disable the lazy policy. It is
  activated by default. At the moment this is configured at compile
  time and can't be changed through a command line or the option file.

- Fixed the counter of the corrupted backgrounds by checking if the
  pixmap was already marked.

- The option SharedPixmaps is now activated by default.

- Fixed a problem when synchronizing the shared memory pixmaps with
  the operation being erroneously skipped.

nxagent-2.0.0-68

- If we are doing a copy area to a pixmap and the source drawable is
  not synchronized, the destination is marked as corrupted and the co-
  py area request is not propagated to the X server. As a general rule
  the source drawables are now synchronized only when they are copied
  to a visible window.

- The nxagentSynchronizeRegion() function synchronizes the region one
  box at a time. This solves the incorrect pictures synchronization.

- When a new element is added to the list of exposed region, sending
  the synchronization request to the X server is postponed to the next
  call of nxagentFlushConfigureWindow().

nxagent-2.0.0-67

- Ensured that NXTransDestroy() is called when getting rid of the NX
  transport.

nxagent-2.0.0-66

- The various messages used by the NX server to control the state of
  the session have been changed and the NX server will have to be mo-
  dified accordingly.

  At the early startup the agent will print the following message:

  "Info: Agent running with pid '...'."

  Followed by:

  "Session: Session starting at '...'."

  The ellipsis here represent the current timestamp, as reported by
  the POSIX function ctime():

  Example: Mon May 22 15:07:11 2006.

  After the connection to the remote display has been established,
  the agent will print the following message:

  "Session: Session started at '...'."

  This replaces the old messages:

  "Info: Session started, state is [SESSION_UP]."

  Or:

  "Info: XDMCP session started, state is [SESSION_UP]."

  And:

  "Info: Entering dispatch loop with exception 0x0."

  If the display connection can't be established, due to a network
  failure, for example, the agent will exit with a fatal error, for
  example:

  "Fatal server error:
   Error: Unable to open display 'nx/nx,options=...'."

  This is a special case, as the X server is still initializing and
  the agent can't intercept all the possible causes of errors.

  When suspending the session, the agent will print one of the fol-
  lowing messages, depending on the reason of the disconnection:

  "Session: Suspending session at '...'."

  Or:

  "Session: Display failure detected at '...'."
  "Session: Suspending session at '...'."

  As soon as the disconnection procedure is completed, the agent will
  notify the server with the message:

  "Session: Session suspended at '...'."

  This message replaces the old message:

  "Session: Session suspended."

  When entering the reconnection procedure, the agent will print:

  "Session: Resuming session at '...'."

  If the session can be successfully resumed, the agent will print:

  "Session: Session resumed at '...'."

  Otherwise, if the display cannot be opened or if the proxy is not
  able to negotiate the session, the agent will return in suspended
  mode by printing:

  "Session: Display failure detected at '...'."
  "Session: Session suspended at '...'."

  At the time the session be terminated, the agent will print:

  "Session: Session terminating at '...'."

  Followed by:

  "Session: Session terminated at '...'."

  This replaces the old message:

  Info: Exiting dispatch loop with exception 0x2.

  The message 'Session terminated at...' should be the last message
  parsed by the NX server. From that moment on the NX server will
  wait the agent process to ensure that the cleanup procedures are
  completed without errors and that the process successfully termi-
  nates with the exit code 0.

nxagent-2.0.0-65

- Many improvements to the block handler and to the drawable synch-
  ronization loop.

- Anyway the synchronization loop is skipped, at the moment, to bet-
  ter test the new copy area implementation. Also all the put-image
  on pixmaps are skipped, so that the pixmaps are only synchronized
  on demand.

- Small fix in the put image to always use the region already allo-
  cated when marking a region as corrupted.

nxagent-2.0.0-64

- The realization of the put image operations now depends on the
  state of the link, as reported by the proxy through the synchroni-
  zation handler. If the proxy link is aproaching a congestion, the
  destination area of the drawable is marked as corrupted and the
  operation is skipped.

- At the moment the synchronization strategy is quite unsophistica-
  ted. The drawables are synchronized when a timeout expires in the
  block handler. The synchronization loop is aborted as soon as the
  link approaches again the congestion and is restarted at the next
  timeout.

- Imported miwindow.c from the DIX layer. The code has been changed
  to prevent miSetShape() from trying to destroy a null region. The
  bug appears to be related to the backing store but it is unclear
  if can also affect the sample server. The region is allocated at
  the beginning of the function only if the backing store is set for
  the window. Then miSetShape() calls miChangeSaveUnder(), that, in
  turn, calls miCheckSubSaveUnder(). The latter can change the back-
  ing store attribute of -some- windows, including, apparently, the
  window that miSetShape() is processing. miSetShape() then destroys
  the region if the backing store is set, but it doesn't verify if
  the region was actually allocated. The problem is fixed by simply
  adding a check on the pointer.

nxagent-2.0.0-63

- Added the nxagentDisplaySynchronizationHandler() callback. The NX
  transport uses the callback to report when it is possible synchro-
  nize the pixmaps and the other X objects that are corrupted or in-
  complete.

- Fixed nxagentClearSelection() to correctly validate the selection
  owner before clearing the record.

- Changed the NXGetControlParameters() call to reflect the changes
  to the reply.

nxagent-2.0.0-62

- At reconnection the pixmap data is sent to the remote X server only
  in two cases: if the pixmap is associated to a picture (glyphs, for
  example) or if its depth is 1 (clip masks of GCs). All the other
  pixmaps are marked as corrupted and synchronized on demand as soon
  as the drawable is used as a source. This code is not enabled by
  default and is currently being tested.

- Implemented a new copy area function synchronizing the corrupted
  region of a drawable before using it as a source.

- Imported resource.c from the DIX. This makes possible to avoid the
  duplication of the RT_GC, RT_FONT and RT_PIXMAP resource types.

- Added the RT_NX_GC resource type and removed the old code dealing
  with the reconnection of the GCs used by the GLX extension.

- Fixed a problem in the synchronization of the window background.

- Checked and removed some FIXMEs related to the streaming code.

- Changed nxagentRestoreAreas() to take care of the width of the win-
  dow's border.

- Changed nxagentSaveAreas() to be independent from the window's pos-
  ition.

- Called nxagentMapDefaultWindows() before pixmaps' reconnection.

- Changed nxagentMapDefaultWindows() to notify the client about the
  agent's startup also when running in rootless mode.

- Added the delete and backspace keystrokes to the routine removing
  duplicated keys.

- Wehn resizing the desktop the clip region of the children windows
  is clipped to the new size of the root. This fixes a crash occur-
  ring when resizing the desktop to the minimum height.

nxagent-2.0.0-61

- Changed the extraction of alpha channel from images to be endianess
  independent.

nxagent-2.0.0-60

- nxagentReleaseSplit() now uses the NXAbortSplit() request to force
  the proxy to discard the pending splits.

- Added the value of the SharedMemory and SharedPixmaps options in
  the log, together with the size of the shared memory segment used
  by the remote proxy.

- Fixed the compilation problem affecting the previous version.

- The location of xkb base directory is checked by calling  _NXGetXkb-
  BasePath() function.

- Fixed TR05D01371. nxagentVerifyDefaultFontPath() is called only if
  the default font path is not defined on the command line.

- Removed some log message.

nxagent-2.0.0-59

- Improved the composite text operation to synchronize the regions
  affected by the operation instead of the whole drawable.

- Updated the copy plane to better propagate the corrupted region
  to the destination.

- The background pixmaps are synchronized with a deferred strategy.
  Tiles and stipples are still synchronized as soon as the GC needs
  to be used.

- Completed the new copy area implementation.

- Shared memory pixmaps are not synchronized after a RenderChange-
  Picture operation. This needs further testing.

- Added a nxagentNotifyKeyboardChanges() function that sends a Map-
  pingNotify event to clients when the keyboard is reloaded or re-
  configured. The SendMappingNotify() function is not used anymore.
  This hopefully solves the TR01D01284.

- Moved the nxagentResetKeyboard() function in Keyboard.c.

- Checked if the previous sibling of a window is changed before try-
  ing to restack it. This saves the redundant window configuration
  requests of the previous version.

nxagent-2.0.0-58

- Before composite glyphs operations, only areas intersecting the
  glyphs extents are synchronized.

- When a new split resource is allocated, a copy of the GC used by
  the put image operation is created. Such copy will be safely used
  by the commit operation even if the original GC is changed or
  destroyed.

nxagent-2.0.0-57

- Region saved by the backing store and corrupted region of backing
  store pixmaps are emptied at suspend and resume time. This makes
  the exposures go to the clients that will redraw their windows.

- Changed the nxagent root window cursor. The cursor of the parent
  window is used instead of the default 'X' cursor.

nxagent-2.0.0-56

- Rewritten the state machine handling the streaming of the images.

- By calling FatalError(), the normal server shutdown was skipped
  and left the X server socket in .X11-unix. This happened also if
  for any reason the agent couldn't complete the session startup.
  Now the DDX abort routine, if the agent is not exiting because of
  an exception, calls nxagentAbortDisplay() which closes down the
  well known sockets.

- Upon a failure of the reconnection procedure, if the alert shown
  to the user by leveraging the proxy control channel is not set
  to a valid code, the function in will use a default.

nxagent-2.0.0-55

- Added an explicit link flush in the display block handler. The
  block handler should now be called by nx-X11 before entering the
  select, not only the the agent has entered WaitForReadable() or
  WaitForWritable().

- Removed the checks on the value of the Streaming option. The way
  a drawable is treated only depends from its previous state.

- Started reimplementing the copy area operation to better propaga-
  te the corrupted region to the destination.

- Shared pixmaps are now synchronized before a copy plane operation.

- The unpack alpha is discarded before the drawable synchronization.
  This fixes the problems with the synchronization of the cursor. A
  better way to deal with the condition is to be considered for the
  future.

- Added a check in the nxagentPutImage() function to skip the opera-
  tion if the window is fully obscured.

nxagent-2.0.0-54

- Fixed a bug in nxagentPaintWindowBackground(). A region passed as
  parameter was modified by this function and this affected subseq-
  uent operations involving the region.

- In rootless mode, the map state of a top level window is uncondit-
  ionally reflected in the internal state when receiving a map event
  from the real display.

nxagent-2.0.0-53

- Regions are marked as synchronized after an image operation if the
  image didn't generate a split.

- When an image operation takes place on a drawable which is already
  being streamed, the resource is marked as invalid and the commits
  are discarded.

- A specific trap is used at the time a drawable is synchronized.

- Fixed Render.c to use the latest streaming code.

nxagent-2.0.0-52

- Fixed a problem in rootless mode where some windows could have mis-
  sed to update the mapped flag after a MapNotify event.

nxagent-2.0.0-51

- Realization of images is skipped, if the link is down, and a small
  delay is introduced before returning from the image function.

- Started implementing a new handler to let the agent include arbit-
  rary data in the transport statistics. For now, only the interfa-
  ces and the stubs exist, and the handler is not registered to the
  proxy.

nxagent-2.0.0-50

- Removed the unused code in nxagentCheckPixmapIntegrity().

- Instead of calling nxagentShapeWindow() immediately, windows to be
  reshaped are added to the list of windows that have to be configur-
  ed at later time. This allows SaveAreas() to work even when windows
  change shape, as in the case of the "bouncing cursor" as implement-
  ed in some versions of the KDE.

- Added a missing call to nxagentFlushConfigureWindow() in the recon-
  nection procedure.

nxagent-2.0.0-49

- Code cleanup in the lazy encoding. Implemented distinct utilities
  to allocate the split resources and manage the corrupted areas.

- The Render.c file is taken from the previous version because the
  updates break the composite code.

- Renamed the option 'Lazy' to 'Streaming'.

nxagent-2.0.0-48

- Made the image cache use the agent data, instead of allocating and
  copying.

- Fixed a memory leak in the image routines.

- The image cache is freed at exit. This helps investigating other
  eventual leaks.

nxagent-2.0.0-47

- Solved the problem at reconnection with lazy encoding enabled.

nxagent-2.0.0-46

- Solved a bug in the parsing of the pack method that made the agent
  select an unavailable id.

nxagent-2.0.0-45

- Ensured that images are explicitly byte swapped before sending to
  an X server using a different byte order. In the attempt of saving
  an expensive operation, the previous code let the unpack procedure
  do the job, but this could fail to work in some special cases.

- Cleaned the bitmaps used for the core cursors before putting the
  image.

- Left the display error handler installed during all the lifetime
  of the session so that other parts of the code don't have to inst-
  all it explicitly before entering a critical Xlib routine.

- Removed more unused code.

nxagent-2.0.0-44

- Fixed the problem with the cursor image being encoded with a lossy
  method. The fix is a temporary. The final solution requires changes
  to the lazy encoding.

- Reworked the code dealing with the alpha visual. The color mask is
  set based on the endianess of the remote display and is recreated
  after a session resume.

- Removed more unused code.

nxagent-2.0.0-43

- Corrupted regions are now correctly clipped to the visible area of
  the drawable.

- Fixed a problem with the clip mask when calculating the intersect-
  ion of the clip region with the destination region.

- Drawables involved in a composite glyph operation are now synchro-
  nized prior to being used.

- The nxagentRealizeDrawable() function is now called only for draw-
  ables that are not already synchronized.

- Pixmaps are now skipped in the synchronization loop. Synchronizat-
  ion of pixmap is to be implemented.

nxagent-2.0.0-42

- Improved the algorithm removing the duplicated keys by trying to
  read more events.

nxagent-2.0.0-41

- Made use of the NXFinishSplit() request to speed up the completion
  of a pending split.

- Added an explicit NX transport flush before any operation that may
  block waiting for data from the X server.

- Set the NX flush policy to deferred after reconnection.

- Solved refresh problems when reconnecting in rootless mode.

- Modified the routine removing duplicated arrow key events. Now the
  routine deals with page down and page up keys as well.

- Added a check for xkb base directory path, in order to support new
  Linux distributions.

- Disabled backing store support for rootless sessions, as implement-
  ation is not very functional, yet.

nxagent-2.0.0-40

- Removed code related to old managing of backing store.

- Added initialization of backing store by calling miInitializeBack-
  ingStore().

- Implemented nxagentSaveAreas() and nxagentRestoreAreas() functions.
  These functions are based on fb code. Calls to XCopyArea() have been
  added in their implementation to make them be effective also on the
  real X server.

- Instead of calling nxagentConfigureWindow() in ClipNotify() and
  PositionWindow(), windows to be configured or mapped are added to a
  list, together with a mask storing operation that have to be done.
  Windows in the list will be configured or mapped later by calling
  nxagentFlushConfigureWindow(). This avoids that windows were mapped
  or configured before saving areas in the backing store pixmaps.

- The function nxagentFlushConfigureWindow() is called before resto-
  ring areas on the X server in nxagentRestoreAreas() and at the end
  of ConfigureWindow and MapWindow in the DIX layer.

- Blocked the NoExpose events at the proxy side.

- Fixed an error in nxagentCompareRegions().

nxagent-2.0.0-39

- Ensured that the display errors are detected while waiting for a
  split operation to complete.

- Removed more unused code.

nxagent-2.0.0-38

- Changed nxagentSetCursorPosition() to avoid warping the cursor if
  the requesting client is NULL or the serverClient.

- Added a specific trap to avoid compressing an image associated to
  a RENDER cursor using a lossy encoding.

nxagent-2.0.0-37

- Added a check in nxagentPaintWindowBackground() to avoid calling of
  XClearArea() if the window is not realized.

- Modified nxagentAtomNames in Atoms.c to include CLIPBOARD and TIME-
  STAMP atoms, avoiding further calls to XInternAtom in Clipboard.c.

- Solved TR04D01356. Auto repeat mode setting is no more propagated to
  the X server keyboard.

- Cleaned up the code in the routine removing duplicated arrow key
  events.

nxagent-2.0.0-36

- Added the Literals.h file. For now it just contains a table used
  to translate a request opcode to the name of the X request, to be
  used for test purposes.

nxagent-2.0.0-35

- Major code rewrite in nxagentPutSubImage(). Removed support for the
  deprecated image encodings. Ensured that padding bytes are cleaned
  before trying to locate the image in the nxcompext cache. Avoided
  to store the image in the cache if it is coming from a XVideo or
  GLX operation.

- Added support for the new RGB image encoder. This allows the agent
  to use the simplest encoding by still separating the alpha channel
  from the image data.

- Added the missing check in nxagentRedirectWindow() verifying that
  use of the composite extension is enabled.

- Updated to use the new NXCleanImage() function.

- Removed more debugging output.

nxagent-2.0.0-34

- Updated to use the 'what' parameter in NXFlushDisplay().

- Removed the duplicated arrow key events from the event queue.

- Solved the TR04D01355. The X11 agent now tries to locate the
  fonts.dir file in the misc directory, to verify the validity of
  the font path.

- Added a check in nxagentChangeClip to avoid creating a new clip
  mask if the old clip mask matches the former.

- Use the 'fixed' font to replace fonts that are not found a the
  display reconnection. This should overcome one the most common
  sources of troubles when migrating the session to a different
  display, and constitute the base for improving the algorithm
  trying to match a substitute font.

- Implemented the FR04D01360. Now the user can enable/disable the
  streaming of the images by using the option 'streaming'.

- Implemented the FR04D01358. The backing-store can be enabled or
  disabled by using the  option 'backingstore'.

- Forced the reconnection routine to call the IOError handler in
  the case the display cannot be opened.

nxagent-2.0.0-33

- The GetImage requests in 'slow' mode are now served by retrieving
  the content of the drawable from the frame buffer.

- Replaced a call to XQueryExtension() by one to XRenderQueryExten-
  sion(). This function caches previous QueryExtension requests. This
  partially implements FR01D01275.

- At reconnection, the keyboard is reset only if the keyboard option
  has been changed.

- Fixed the fonts reconnection procedure. Now the remote fonts list
  is refilled before fonts reconnection and after failed fonts
  reconnection, so as to store the correct list of available fonts.

- Added a check in nxagentLoadQueryFont to look up selected font in
  the list of available fonts. This check avoid filling FontStruct
  with invalid data.

- Added TIMESTAMP to handled selection targets.

nxagent-2.0.0-32

- Implemented FR03D01323. Added the 'clipboard' option to enable or
  disable copy and paste operations from the user's desktop to the NX
  session or vice versa. This option can take four values:

  client  The content copied on the client can be pasted inside the
          NX session.

  server  The content copied inside the NX session can be pasted
          on the client.

  both    The copy & paste operations are allowed both between the
          client and the NX session and viceversa.

  none    The copy&paste operations between the client and the NX
          session are never allowed.

nxagent-2.0.0-31

- Implemented FR03D01337. Now the X11 agent is able to read the op-
  tions from different places according to the following order: the
  DISPLAY variable, the options file, the command line.

- Implemented FR03D01347. Added 'composite' to parsed options.

- Always activate shared memory support in the remote X server proxy.

- Modified nxagentCopyArea for the case the source is a shared memory
  pixmap. The pixmap on the X server is not synchronized, but the con-
  tent of the shared pixmap mantained by the agent is placed directly
  on the destination drawable. This allows to skip the following Copy-
  Area operation.

nxagent-2.0.0-30

- Added the missing flush of the Xlib buffer at the beginning of
  the block handler.

nxagent-2.0.0-29

- Changes in the block and wakeup handlers to queue multiple reads
  and flush the link on demand.

- Removed the unused code in Control.h and Control.c. Renamed the
  files as Client.h and Client.c.

- Added support for the '-nocomposite' command line option.

nxagent-2.0.0-28

- Moved the composite code to Composite.h and Composite.c.

- Redirected the top-level windows when running in rootless mode.

nxagent-2.0.0-27

- When the composite extension is supported by the remote display,
  the agent window is redirected to the off-screen memory of the
  X server.

- Imported Xcomposite.c, Xcomposite.h and xcompositeint.h from the
  3.0.0 branch to be able to activate the off-screen redirection of
  the top level windows.

- Added Composite to the list of agent options. The default is to
  use the composite extension, when available.

nxagent-2.0.0-26

- Avoided to suspend the clients on excess of karma or after a get
  input focus request.

- Images are now split only when the agent is in congestion state.

- Moved all the image related functions from GCOps.h and GCOps.c to
  Image.h and Image.c.

- Removed the unused includes in GCOps.c and Image.c.

- Added the karma delay field to the NXGetControlParameters() call.

- Renamed placeholder.xpm as nxmissing.xpm. Renamed the Icon.h file
  as Icons.h. Added there a define to point at nxmissing.xpm in the
  include.

nxagent-2.0.0-25

- Implemented the FR03D01334. Option keyboard is now a synonym of
  option kbtype.

nxagent-2.0.0-24

- Ensured that the split procedure is completed before executing a
  render operation that required a synchronization of a shared mem-
  ory pixmap.

- Added the appropriate checks to avoid synchronizing the same sha-
  red memory pixmap multiple times.

nxagent-2.0.0-23

- Imported changes to NXrender.c and NXshm.c in the files for the
  3.0.0 port.

nxagent-2.0.0-22

- Implemented FR03D01331. Options shpix and shmem enable/disable the
  use of shared pixmaps and shared memory extension.

- Implented handling of value "query" for nxagentKbtype. This value
  is passed by the NX client for MacOSX. If value of nxagentKbtype is
  "query" or NULL we init keyboard by core protocol functions reading
  the keyvoard mapping of the X server. The property _XKB_RULES_NAMES
  is always set on the root window with default values of model and
  layout.

- Fixed TR11C01223. When the XDM connection can't be established the
  agent creates an alert to notify the user that XDM session failed
  to start.

- Changed Clipboard.c to fix invalid read errors in nxagentGetClip-
  boardWindow() function.

- Implemented FR11C01218. Modified Font.c introducing the new function
  nxagentLoadQueryFont, this function loads the font_struct struct
  locally instead of sending a QueryFont request.

- Modified nxagentListRemoteFontsfunction to fill nxagentFontList
  struct with all remote fonts, avoiding further calls to XListFonts.

- Added two functions, nxagentFreeRemoteFontList and nxagentFreeFont,
  used in disconnect phase to empty the nxagentFontList struct and
  the cached FontStruct elements, respectively.

nxagent-2.0.0-21

- Updated to include the remote proxy version in the NXGetControl-
  Parameter reply.

- Updated to use the NXDisplayFlush() and NXSetDisplayPolicy() int-
  erfaces.

nxagent-2.0.0-20

- NXInitDisplay() and NXResetDisplay() are called at the time we
  open or close the display, to let nxcompext set up its internal
  structures.

nxagent-2.0.0-19

- Activated the streaming of the images even in the case of a link
  type LAN.

- In NXmiexpose.c, if the number of rectangles in an exposed region
  exceeds 4, we let a predicate function decide if it is better to
  send the window extents, rather than the rectangles in the region.

- Added the NXAGENT_SERVER define in the Imakefile. It will be used
  in future to mark all the modifications made to files we imported
  from other layers.

- Removed the warnings from NXmiexpose.c.

nxagent-2.0.0-18

- Imported NXmiexpose.c in the agent code.

- Removed NXmiwindow.c from the agent code. We now use the original
  miwindow.c

- Removed the static qualifier from the _NXFontPath definition.

- Started implementing the new lazy encoding mechanism. For each of
  the drawables, the agent will create a "corrupted" region and will
  try to synchronize the drawable when there is bandwidth available.
  This is a work in progress.

- Implemented the function nxagentFbOnShadowDisplay. This is a test
  facility which opens a window on the display showing the content
  of the agent's framebuffer.

nxagent-2.0.0-17

- The image streaming procedure is now activated also when using a
  link of type LAN.

- Removed the call to NXTransDestroy() in nxagentCloseDisplay. The
  NX transport is now implicitly shut down by either NXForceDisplay-
  Error() or XCloseDisplay().

- Updated to comply with the new NX function prototypes introduced
  in nxcomp-2.0.0-31.

nxagent-2.0.0-16

- Fixed a bug in the nxagentModifyPixmapHeader function that was
  causing some glyphs to be displayed incorrectly.

- Implemented the test function nxagentPixmapOnShadowDisplay, useful
  to display a pixmap on the real screen to check its consistency.

nxagent-2.0.0-15

- Ensured that, before restarting a client after a no-split, all the
  pending image commits are executed.

- Installed the display error predicate function before trying to
  open the display even at session startup. This prevents the agent
  from disappearing silently if a failure occurs before the display
  initialization is completed.

- Moved the initialization of the callback functions in Display.c.

- Added some interfaces to manipulate the callbacks and the error
  handlers and verify the state of the display flags.

nxagent-2.0.0-14

- Implemented stub versions of the nxagentDisplayCongestionHandler()
  and nxagentDisplayBlockHandler() callbacks. See nx-X11-2.0.0-17.

- Added the nxagentDisplayErrorPredicate() function. In combination
  with changes implemented in nx-X11-2.0.0-16, this allows the agent
  to abort a blocking operation and shutdown the display in a timely
  fashion if a signal or any other error condition is received insi-
  de Xlib.

- Modified nxagentWaitSplitEvent() to use XIfEvent() as we can trust
  the proxy to either send the event or give up the proxy connection.
  The function will also give up when an error condition is raised,
  like for example a session termination requested by the user.

- Removed any remaining reference to the unused display buffer and
  image cleanup functions.

- Fixed exposures problems when reconnecting.

- Solved TR05C00896. The problem was due to window manager utilizing
  zero-thick-lines drawing requests. These drawing operations are now
  performed by calling fbPolySegment() instead of miPolySegment(),
   which doesn't handle the zero-thick-lines drawing case.

nxagent-2.0.0-13

- Improved the management of the expose events. We now create the
  fake window used to keep the agent synchronized with the X server
  only once, instead of creating and configuring a different window
  for each generated region.

- A warning is printed if the changes requested for the fake window
  don't match the changes reported in the subsequent ConfigureNotify
  event.

- Imported previous changes in NXevents.c into the 3.0.0 port.

nxagent-2.0.0-12

- Activated the image streaming also during the reconnection. This
  makes possible to leverage the remote disk cache.

- Ensured that all clients are restarted when the session is suspen-
  ded. This is required because the proxy is gone but we may have
  some client still waiting for the completion of a split procedure.

- Skipped the reset of the keyboard device if the display breaks at
  the time it is being reconnected.

- As the reset of the keyboard may have failed before we were able
  to set a valid DeviceIntPtr, also added a check in ProcessPointer-
  Event(), in NXevents.c to verify that the state of the display is
  valid before accessing any of the device members. This is to be
  better investigated.

nxagent-2.0.0-11

- Solved TR02D01298. The clip region associated to the current glyph
  was not updated because the serial number of the virtual pixmap
  pointed by the picture was not incremented.

- Imported the NXmiglyph.c file from render directory.

- Removed the patch added in the release 1.3.2-6 temporary fixing this
  problem.

nxagent-2.0.0-10

- Various improvements the wakeup procedures.

- Implemented the FR10C01110. Now, the X11 agent manages both the
  PRIMARY and CLIPBOARD selections. It is possible copy and paste text
  also by using Ctrl+C and Ctrl-V.

- Modified NXdispatch.c in order to correctly include header files.

- More cosmetic changes and code cleanup.

- Imported changes into the files for the 3.0.0 port.

nxagent-2.0.0-9

- Rewritten the procedures suspending and resuming the clients in
  Control.c. This solves a problem with clients that were restarted
  at wrong time and should ensure that multiple events for the same
  client are correctly handled.

- Removed the calls to NXSetUnpackGeometry() setting the parameters
  for the client 0. The geometry is now set only at the right time,
  just before trying to unpack the image.

- Removed the sample code using the NXTransChannel() interface.

nxagent-2.0.0-8

- Added test code showing how to open a new NX channel by using the
  NXTransChannel() interface.

- Streaming of images is not attempted in the case of link LAN.

- Added preliminary code to the tell the proxy to flush the link if
  the agent is idle.

- Imported changes from nx-X11-2.0.0-14 in NXdixfonts.c.

nxagent-2.0.0-7

- Modified exposures managing: agent synchronizes both with remote X
  server and remote window manager for every generated region. Synch-
  ronization is reached sending a ConfigureWindow request for a fake
  window created on purpose. This way the exposures for the resulting
  region coming from calculating the difference between local region
  and the remote region are sent to clients in order to avoid duplica-
  ted refreshes.

- Improved new algorithm for managing exposures in order to work pro-
  perly also in rootless mode: added privates to windows in order to
  get information about mapping of windows on remote X server and vi-
  sibility state too. This way local exposures are replaced by remote
  ones if windows are mapped only for agent or windows are not fully
  visible. This solves TR08C00971.

- Window attributes values about backing store and save-under are re-
  spectively set to NotUseful and False when creating a window on re-
  mote X server and ignored when a client requests to change these
  attributes.

- Removed a no more needed function call to generate exposures when
  resizing windows.

nxagent-2.0.0-6

- Updated the NoMachine copyright notices.

nxagent-2.0.0-5

- Added handling of font reconnection failure. In case of failure in
  reconnecting some font, the agent adds the font server connection
  forwarded by nxcomp to the font path of the X server.

- Fixed TR09C01022. Moved the handling of the session states into
  main cycle. The session states are not more handled into SIGHUP and
  IOError handlers but into nxagentHandleConnectionStates() called in
  nxagentWakeupHandler().

- In ResizeChildrenWinSize(), privates storing window geometry are
  updated even if the call to PositionWindow() is skipped. This have
  to be done because the window is moved by the X server accordingly
  with window gravity. This prevent some window positioning error on
  the real display evidenced with OpenOffice and GNOME.

nxagent-2.0.0-4

- Solved TR12C01234. In some conditions Alt-F4 keystroke made the user
  unable to open the Gnome Menu panel. This was due to the agent dis-
  carding KeyRelease events for Alt-F4 and Alt-F2.

- Undefined TEST and DEBUG in Dialog.c

- Changed the NXAGENT_VERSION define from 1.5.0 to 2.0.0

- Caching and streaming of images is now disabled when dispatching
  requests from the GLX and XVideo extensions.

- Added the NXxvdisp.c and NXglxext.c files. These files are needed
  to intercept calls to the XVideo and GLX extensions. Only files
  in the main directory are imported. Files in the X directory, used
  for the 3.0.0 port, for now are empty.

- Added the nxagentXvTrap and nxagentGlxTrap flags. These flags are
  set when dispatching requests from the XVideo and GLX extensions.

- Added the GL and Xext include directories to the Imakefile to be
  able to compile the NXxvdisp.c and NXglxext.c sources.

- Modified the NXrender.c and NXshm.c files to set the nxagentGCTrap
  nxagentRenderTrap and nxagentShmTrap even when dispatching requests
  from swapped clients. Files for the 3.0.0 port are not updated.

nxagent-2.0.0-3

- Solved a problem in the export of WM_SIZE_HINTS properties in root-
  less mode on 64 bit machines.

- Modified Render.c in order to correctly process Xrender header fi-
  les on 64 bit machines.

- Made changes in order to compile the agent in the Cygwin environ-
  ment.

- Renamed the files Time.* to Millis.*

- Specified the relative path of some included header files.

- In the Imakefile added a new include paths order related to the
  Cygwin environment to avoid name clashes.

- Disabled the MIT-SHM extension in the Cygwin environment.

- Fixed TR11C01186. Added -timeout item to the usage message.

- Fixed TR08C00945. Scrolling a document in Firefox caused image left-
  overs with animated banners. Set the right window gravity on windows
  created in the real X server. Let X move children for us accordingly
  with window gravity attribute, without dix interferences.

- Removed logs related to parsing of the options file.

- Modified dialogs in order to show the name of the session in the
  caption.

nxagent-2.0.0-2

- Imported changes up to nxagent-1.5.0-112.

- Fixed TR12C01241. The failure condition returned by the XQueryTree
  function is managed in order to avoid the subsequent errors.

- Fixed the TR11C01165. X11 sessions could not be started on Ubuntu
  5.10 because of the different location of fonts. Now we check the
  existence of the fonts directory pointed by the default XF86 and
  X.org font path and, if the directory does not exist, we use the
  alternate font path used on Ubuntu.

- Set the default value of DeviceControl option to False before resu-
  ming a session.

- Added a warning message printed if reset of keyboard fails at recon-
  nection.

- Fixed TR11C01185. Solved by checking if there are windows iconized
  when a window is destroyed.

- Fixed TR11C01164. The xkbcomp process used LD_LIBRARY_PATH as it was
  a child of the agent. Added a call to NXUnsetLibraryPath() in Init.c
  in order to remove LD_LIBRARY_PATH before executing a child process.

- Check if there are windows iconized before terminating a rootless
  session.

- Modified CHANGELOG to include reference to fixed TRs TR08C00967 and
  TR08C00969. Removed some typo.

- Fixed TR11C01194. The agent crashed if launched with -kb option.

- Fixed TR10C01042. The keyboard didn't work if the session migrated
  from Apple X server to another platform and viceversa. This has been
  solved by initializing the keyboard device whenever the session is
  resumed. This feature can be disabled by the new option -nokbreset.

- Fixed some compilation error arising if TEST was enabled in the file
  Keyboard.c.

- Fixed TR11C01167. During the disconnection the font structures poin-
  ted by the font cache were freed leaving inconsistent data in the
  corresponding privates. Now they are nullified and the GCs are che-
  cked to guarantee a correct font handling in the suspended state.

nxagent-2.0.0-1

- Opened the 2.0.0 branch based on the 1.6.0-11.

nxagent-1.6.0-11

- Updated the NX.original copies of files in X directory.

- Merged the NX changes:

  - From dix/extension.c to NXextension.c.
  - From dix/dixfonts.c to NXdixfonts.c.
  - From dix/glyphcurs.c to NXglyphcurs.c.

- Export of CARDINAL properties are expanded to 64 bit units on 64
  bit machines.

- Solved a segmentation fault when handling configure notify events
  in rootless mode on 64 bit machines.

- Merged the NX changes from dix/property in X/NXproperty.c.

- Correctly allocated the local variable used in the call to NXGet-
  CollectedInputFocus to be of 64 bit on 64 bit machine.

- Defined symbolic constants XlibWindow in order to propertly handle
  export property on 64 bit machine.

- Moved the XlibAtom define from Atoms.h to Agent.h.

- Modified export properties of type Window and Atom in order to han-
  dle correctly Window and Atom types on 64 bit machines.

- Removed some invalid read in Atom handling code when compiled for 64
  bit, due to mismatched size of Atom type between Xlib and Xserver
  code.

- Modified some header files in order to properly see the correct pro-
  totypes of some Xlib structures on 64 bit machines.

- The variable currentDispatch is always defined.

- The dispatch current time is updated, this way the initial timeout
  can elapse and the splash window is removed.

nxagent-1.6.0-10

- Imported changes from nxagent-1.5.0-103.

- Removed some redundant redeclarations.

- Merged the NX changes from randr/randr.c to NXrandr.c.

- Removed some warnings in NXrandr.c.

- Removed NXAGENT_FORCEBACK and NXAGENT_INTERNALBS code.

- Added ddxInitGlobals function in order to compile with the new X.org
  tree.

- Converted nxagentSynchronizeShmPixmap from macro to function to
  solve a graphical render problem caused by the variable's scope.

nxagent-1.6.0-9

- Imported changes from nxagent-1.5.0-102

- Fixed TR10C01124. Function nxagentSetPictureFilter() filled the log
  with  a debug message.

- Removed a debug message in Events.c.

- Run function nxagentSetTopLevelEventMask() only in rootless mode.

- In the Java application IntelliJ the dropdown menus was shown in a
  wrong position when the main window was moved or minimized. The
  problem is solved for KDE desktop environment.

- Fixed TR08C00967, TR08C00969, TR08C00941. Our incomplete implementa-
  tion of the MIT-SHM X11 extension was a problem for some applica-
  tions using the Shared Memory Pixmaps. Now the extension support has
  been completed, so the nxagent can handle the Shared Memory Pixmaps
  requests. Introduced some changes in the render implementation to
  synchronize the content of the Shared Memory Pixmaps with the X ser-
  ver before performing the ChangePicture and Composite operations.

nxagent-1.6.0-8

- Fixed TR09C01028. The problem was the GC foreground was not updated
  on the X server. This was due to the private fields was not copied
  from a GC to another in the function nxagentCopyGC(). Added macro
  nxagentCopyGCPriv in GC.h.

- Solved TR11C01162. Removed the dialog shown by nxcomp/nxagent when
  the resume of a session is happening over a slow link.

nxagent-1.6.0-7

- Imported changes up to nxagent-1.5.0-100.

- Fixed some compilation errors.

- Fixed a typo in nxagentChangeClip() declaration.

- Fixed TR10C01040. After the session resume the applications using
  OpenGL were not correctly resumed because some GCs were not recon-
  nected. Now we save these GCs in a safe vector, so we can't lose
  them.

- Improved font reconnection procedure in order to take advantage of
  new font channel provided by nxcomp. If resuming session fails be-
  cause missing fonts, the font channel provided by nxcomp is added
  to font paths of X server. After reconnection succeded the font
  channel is removed from font paths.

- In the Java application IntelliJ the dropdown menus remained opened
  and shown in a wrong position when the main window was moved or
  minimized. This problem has been solved by sending a sinthetic event
  to client. This solves partially TR09C01012.

- In the same application the caret was not shown in the text window.
  Solved the problem by setting nxagentGCTrap before calling a MI
  function in every GC operations.

- Merged the NX changes:

  - From render/glyph.c to NXglyph.c.
  - From Xext/shm.c to NXshm.c.
  - From render/render.c to NXrender.c.
  - From mi/miwindow.c to NXmiwindow.c
  - From render/glyphstr.h to NXglyphstr.h.
  - From render/picturestr.h to NXpicturestr.h.
  - From render/picture.c to NXpicture.c.
  - From dix/dispatch.c to NXdispatch.c.
  - From dix/events.c to NXevents.c.

- Changed picturestr.h glyphstr.h to remove some formatting changes
  compared to the original files.

- Disabled Xinerama extension in order to fix a type conflict in NX-
  dispatch.c.

- The current directory has been moved in front of the include dire-
  ctory list.

- Removed NXAGENT_FORCEBACK code in files imported from DIX.

- Changed NXshm.c NXrandr.c NXproperty.c  NXpicture.c NXglyphcurs.c
  NXglyph.c NXextension.c NXrender.c NXdixfonts.c NXdispatch.c NXmi-
  window.c to remove some formatting changes compared to the original
  files.

- Added copyright notice to file NXrandr.c.

- All files, except those from mi and dix, compile fine in the new
  tree. Problems remain with different size of Atoms and other XID
  objects.

- More compilation fixes for the new tree.

- Merged the NX changes from dix/window.c to NXwindow.c.

- Changed NXwindow.c and NXevents.c to remove some formatting chan-
  ges compared to the original files.

- More compilation fixes aimed at porting the agent to the new tree.

- Started porting the agent to the 6.8.99.16 X.org tree.

- Lot of compilation fixes aimed at building in the new environment.

- Files imported from the X.org tree's dix and mi will have to be
  recreated in the nxagent/X directory. The new files will be inclu-
  ded and built from the nxagent/X director if the NXAGENT_UPGRADE
  symbol is defined (as it is the case when building in the 2.0.0
  nx-X11 tree), otherwise the usual NX* files in the nxagent's dir-
  ectory will be compiled.

- Fixed TR09C01021. SIGHUP it was not received from the proxy. The
  handler of SIGHUP must be installed also in the case of not persi-
  stent sessions.

- In non persistent case: if session is normally running, SIGHUP sig-
  nal is dealt like SIGTERM, otherwise it is passed to the proxy.

- Fixed TR09C01027. Changed function nxagentHandleConfigureNotify()
  in order to get changes of the staking order in a rootless session
  even if no window manager is running.

- Fixed TR09C01025. The problem was XView application could be unable
  to respond to user's input. Modified the Event Mask for non top le-
  vel windows reparented by the root window. Set the input member of
  XWMHints to communicate the window manager the keyboard focus model
  used by the application.

- Fixed TR09C01026. Added 'fast' and 'slow' to the set of accepted
  command line parameters. 'fast', 'slow' and 'geometry' command line
  parameters have precedence regarding the options file.

- Fixed TR08C00968. There was a problem in the implementation of the
  render extension.

- Fixed TR09C01016. In rootless mode when the session was resumed,
  the cursor was shown with a wrong shape.

- Fixed TR09C01011. Allowed clients to monitor the root window for
  structure redirect, button press and resize redirect events in root-
  less mode. This is a quick hack to make the java bean shell work
  flawlessy with the agent.

- Solved TR08C00961. Improved the algorithm updating the sprite win-
  dow. Now it is updated based upon crossing and motion event. Since
  on some X server, like Windows and MacOsX X servers, the only cros-
  sing event is not a reliable method to trace the sprite window chan-
  ges.

- Fixed TR08C00966. Solved the problem on Windows when a rootless
  session is suspended and some of the application windows are
  minimized.

- Fixed TR08C00960. Updated the internal screen dimension in rootless
  sessions at reconnection.

- Fixed TR09C01005. The problem was that the 'render' option on the
  command line was overridden by the one provided in the options file.

- Implemented the HandleEmptySplitEvent function that synchronizes all
  the drawables after the depletion of the split store, when the lazy
  option is activated.

- Some changes in order to avoid duplicated refreshes when display-
  ing Mandrake's kde menu.

- Changed level of some logs from WARNING into TEST in Window.c and
  in Rootless.c.

- Fixed TR08C00958. Changed the log message printed when the user re-
  quest to resume the session.

nxagent-1.6.0-6

- When reconnecting, try to estimate the shift on the main window due
  to WM reparenting.

- In the handling of configure events, if a WM is running save the po-
  sition of the main window only if event is synthetic.

nxagent-1.6.0-5

- Command line option -noshmem disables shared memory extension in the
  agent.

- Changed level of some logs from WARNING into TEST.

nxagent-1.6.0-4

- Some changes in order to improve handling of expose events in root-
  less. The GetInputFocus request is not sent after reconfiguring a
  top level window: window manager intervention could give race condi-
  tions. The request is placed in WindowsRestructured() in order to be
  sure it is sent after any event that could generate expose.

- Zero lenght change property are now imported in rootless mode.

- Corrected few typos.

- Replaced the function usleep with NXTransContinue when NX transport
  is running.

- Changed the session state to GOING_DOWN as soon as the reconnection
  is failed.

nxagent-1.6.0-3

- Updated rootless toplevel window map when a window is reparented to
  the root window.

- Renoved duplicated entry in rootless toplevel window map.

nxagent-1.6.0-2

- Removed TEST and DEBUG in Color.c.

- Removed a compilation error in Atoms.c if DEBUG is enabled.

- Removed invalid read at server reset in rootless mode, now the a-
  toms description are duplicate before that we cache them.

- Now the local atom in the atom cache are reset when exiting from
  the dispatch loop.

nxagent-1.6.0-1

- Opened the 1.6.0 branch based on nxagent-1.5.0-87.

nxagent-1.5.0-87

- Corrected the enable-disable lazy encoding dialog in order to show
  the correct keystroke Ctrl-Alt-E.

nxagent-1.5.0-86

- Reset agent position at reconnection when the new size of display
  doesn't match the old size and fullscreen is on.

- Inserted a comment about handling of expose events.

nxagent-1.5.0-85

- If fullscreen and resize options are true when reconnecting, geo-
  metry option is ignored and the root window is resized to the en-
  tire screen.

- Read the position of the main window at startup from geometry op-
  tions.

nxagent-1.5.0-84

- Changed the keystroke Ctrl-Alt-L to toggle the image encoding on
  and off to the new combination Ctrl-Alt-E.

- Enabled the keystroke Ctrl-Alt-M to minimize the root window also
  in window mode.

nxagent-1.5.0-83

- Replaced the call to XIfEvent() with something less efficient but
  safer, based on XCheckIfEvent(). The previous version might never
  return if an I/O Error was encountered waiting for the event. The
  new version fails gracefully, and returns after having restarted
  the client.

nxagent-1.5.0-82

- Removed some debug logs.

nxagent-1.5.0-81

- Forced window mode if X server geometry has changed at reconnection.

nxagent-1.5.0-80

- Reset resize desktop at startup flag before reconnection.

nxagent-1.5.0-79

- Removed race condition in the parsing order of the options parame-
  ter, now the geometry parameters are set in screen initialization.

nxagent-1.5.0-78

- Disabled auto-resize and viewport mode dialog in case of rootless
  session.

- Removed no more used -backingstore option from usage messages.

- Modified -bs command line option: now the default value "when_re-
  quested" is always set.

- Fixed wrong size of root window when switching from full screen to
  window mode and viewport navigation mode is enabled.

- Added option that solved a minimize bug in LeaveNotify when the
  root window is in full screen and the user is using viewport navi-
  gation mode.

- Forwarded HUP signal to NX transport, when session state is up and
  running.

nxagent-1.5.0-77

- Do PutImage in every case. Don't check if the drawable is synchro-
  nized.

- Do CopyArea, CopyPlane, Composite in every case, don't check whether
  the source is dirty.

nxagent-1.5.0-76

- Terminate rootless session 15 seconds after the last mapped window
  has been destroyed.

nxagent-1.5.0-75

- Ctrl-Alt-T shows suspend/terminate dialog also in rootless mode.

- Sleeps 50 ms in the block handler if the session state is down.

- In rootless mode, the focus window is changed following FocusIn
  events received from the real X server, also in the case no win-
  dow manager has been detected.

nxagent-1.5.0-74

- Changed the alerts names to comply with nxcomp-1.5.0-57.

- Moved loading of placeholder from startup to the first time it is
  needed.

- Corrected a typo in the CHANGELOG.

nxagent-1.5.0-73

- Ignored put image on not synchronized drawables, when the image
  doesn't cover the entire surface.

- Added parsing of render parameter in option file.

- Ignored I/O Error when session is suspended.

- Managed I/O Error at reconnection.

nxagent-1.5.0-72

- Fixed offset of the default window at reconnection and after switch-
  ing from fullscreen in window mode.

- Suppressed the -lazy command line option.

- Made some slightly changes in GCOps.c and Pixmap.c in order to com-
  ply with the new 'Lazy' option.

- Avoided to do CopyArea, CopyPlane and Composite operations when the
  source drawable is dirty.

- Rootless disconnect dialog has changed. This dialog is launched
  after some time the last window has been closed.

- Ignored geometry changes at reconnection if resize at startup is
  not set.

- Removed reset of the offset of the root window in viewport mode at
  reconnection.

- Fixed some refreshes problems in viewport mode and in desktop resize
  mode.

- Fixed a memory leak in nxagentWindowExposures().

- Added predicate to nxagentDispatchEvents.

- Implemented framework in order to wait for a free resource entry,
  when calling the asynchronous Collect* functions.

nxagent-1.5.0-71

- Added keystroke Ctrl+Alt+L switching lazy encoding option.

- Disabled viewport movement in resize mode.

- Changed agent geometry at screen resize.

- Changed agent geometry at initialization.

nxagent-1.5.0-70

- Restored the set of blocked signal after the dialog pid just laun-
  ched has been stored.

- Removed an already fixed FIXME.

- Updated the copyright message.

nxagent-1.5.0-69

- Started working at the integration of the lazy encoding functiona-
  lity. Made the agent draw the placeholder if the image is split and
  never suspend the client. There is no provision for synchronizing
  the drawables yet.

- Made the lazy encoding configurable by the new 'Lazy' option.

- Updated to include the changes in the NXStartSplit() and NXCommit-
  Split() requests.

- This version requires nxcomp-1.5.0-55 and nxcompext-1.5.0-16.

nxagent-1.5.0-68

- Fixed reconnection of iconified windows.

- Ignored the X server's scratch pixmap at reconnection.

- The desktop gets automatically resized at reconnection if the desk-
  top resize option is enabled.

- Added the resize option in nxagentProcessOptionsFile() to allow the
  user to change the geometry of both the root and the default window
  at reconnection.

- Fixed max size of the default window at startup when auto-resize
  mode is enabled or in the case of a reconnected session.

- Made some minimal changes in Atoms.c and NXdispatch.c.

nxagent-1.5.0-67

- Changed handling of expose events received from real X server. A re-
  gion is composed from expose events by checking the count field.

- Reimplemented the exposures managing. Now the GetInputFocus request
  is sent after a window has been configured or unmapped. We use a
  vector to store windows originating expose events while waiting for
  the reply to GetInputFocus.

nxagent-1.5.0-66

- Added the DisplayLatency value in the agent options. This is int-
  ended to give a hint about the latency of the current display
  connection. The value is currently used to determine if the agent
  is running across a slow link, and so it's appropriate to display
  the begin-reconnection alert.

nxagent-1.5.0-65

- Added the DesktopResize option. It controls the behaviour of the
  automatic (RandR) resize of the desktop when dragging the agent's
  window border.

- Automatic resize is again the default.

- Disabled the test logs in Events.c, GCOps.c Pixmap.c, Handlers.c,
  Reconnect.c.

- More cosmetic changes and code cleanup.

nxagent-1.5.0-64

- Rewritten the image streaming procedure to better leverage the new
  infrastructure. The start-split/end-split procedure is always init-
  iated by the agent, including when the size of the image is below
  the threshold, but the client is only suspended when the split has
  taken place in the NX transport.

nxagent-1.5.0-63

- Updated image streaming to use the new NX notification events.

- Removed the references to the NXSync() operation, not used anymore
  by the agent.

nxagent-1.5.0-62

- Fixed wrong position of the root window in case of viewport naviga-
  tion mode.

- Added a field to the client private to trace the client type.

- Tracked which clients are nxclient dialogs in order to not run the
  pulldown dialog on them.

nxagent-1.5.0-61

- Disabled server reset if not needed by XDMCP.

- Disabled persistence for indirect XDMCP session until the first gre-
  eter with the list of host has disappeared.

- Created a small data structure to contain information about integri-
  ty status and placeholder status of a drawable.

- Modified the call to nxagentRealizeOnePixmap function in order to
  avoid errors during the signal handling.

nxagent-1.5.0-60

- Added the XDMCP option. If both Rootless and XDMCP are selected the
  session will fail.

nxagent-1.5.0-59

- Limited the permission to reset the agent only to indirect XDMCP
  sessions, only one reset is allowed.

- Fixed max size of the default window when switching from fullscreen
  to window mode and auto-resize is disabled.

nxagent-1.5.0-58

- Enabled reset mechanism, in order to make XDMCP session work proper-
  ly.

- Added XSync for window manager detection, after a server reset since
  the XInternAtom already used should be cached.

- Now the pixmap status is always tested on real pixmap.

- The placeholder is drawn only once per drawable.

- Implemented nxagentUnmapWindows() in case of failed reconnection if
  the session was running in fullscreen mode and NX transport is not
  enabled.

- In nxagentPutSplitImage(), passing leftPad to XCreateImage().

- This version avoids sending the XSync() to the remote when a large
  amounts of GetInputFocus requests are issued by the same client.
  It will require more testing, especially to verify how it works on
  old Windows machines.

- Changed the NXCommitSplit() call to comply with the new interface.

- The drawable status is now propagated on graphic operations where
  the source is using the tile and stipple components on the graphic
  context and the tile or stipple are not synchronized. This affects
  the following operations:

  - PolyLines
  - PolySegment
  - PolyRectangle
  - PolyArc
  - FillPolygon
  - PolyFillRect
  - PolyFillArc
  - PolyText8
  - PolyText16

nxagent-1.5.0-57

- Removed two XSync() operations at screen initialization.

- Modified keyboard initialization in order to load the correct rules.
  This is choosen according to the vendor string of X-Window system in-
  stalled on the local machine.

- Corrected a few typos.

- When the NX transport is present, the failed reconnection dialog is
  launched on the remote X server by using the NXTransAlert() function.
  The same dialog is managed by NXTransDialog() when a session is run
  by connecting directly to the display.

- Removed the function nxagentUnmapAllWindows().

nxagent-1.5.0-56

- Set the parent window for the pulldown dialog.

nxagent-1.5.0-55

- Added an alert at the time the reconnection procedure begins. The
  alert is shown only when the NX transport is present and the link
  type is not LAN and is removed at the end of the resume operation.

- Removed the former code used for testing the alert functionality.

- Moved the function removing the splash window in Splash.c.

nxagent-1.5.0-54

- Fixed initialization of window privates storing exposed regions.
  This solves a bug affecting the refresh of windows introduced in
  nxagent-1.5.0-42.

- Added a STARTING state to nxagent. Until the agent is in this state
  the suspension mechanism is not activated.

nxagent-1.5.0-53

- Added the special keystroke Ctrl+Alt+R to enable or disable the
  auto-resize mode.

- A dialog notifies the user when the auto-resize mode is toggled.

- Added a test alert at startup, to verify that NXTransAlert() is
  working as expected.

nxagent-1.5.0-52

- Changed the code to call NXTransDialog() and NXTransExit().

nxagent-1.5.0-51

- Solved a bug that prevented the clients that had been restarted
  to be immediately selected for input.

- Removed some code that was added for debugging.

nxagent-1.5.0-50

- Fixed a memory leak in nxagentHandleExposeEvent().

- Fixed a memory leak in nxagentDestroyWindow().

- Now rootless dialog is launched only when last mapped window is
  deleted, since we have pulldown window to control the session.

- Added pulldown dialog to handle NX windows in rootless sessions.
  This dialog is activated from a "magic" slice of window under the
  top border.

- Solved a problem with sessions that might fail at reconnection.

- Now the message text of the dialog launched in case of failed re-
  connection explains the reason why the agent cannot be resumed.

- Implemented function nxagentUnmapAllWindows() to unmap all windows
  if nxagent has failed to migrate the session to the new display.

nxagent-1.5.0-49

- Fixed the problems with propagation of the drawable status.

- Modified nxagentPutSplitImage in order to set the correct height
  of the last split image.

- Code cleaning and optimization in Dialog.c.

- Solved bug that switched on the full screen state in rootless se-
  ssion.

- Changed the way dialog caption are set in rootless mode. It is set
  upon the session name or session id value.

- Corrected the function nxagentFailedReconnectinDialog().

nxagent-1.5.0-48

- Solved bug that switched on the full screen state in rootless se-
  ssion.

- Changed the way dialog caption are set in rootless mode. It is set
  upon the session name or session id value.

- Corrected the function nxagentFailedReconnectinDialog().

nxagent-1.5.0-47

- Now we call NXContinueOnDisplayError() with value 1 just after
  having opened the display. This will cause the NX Xlib to return
  in the case of an I/O error, instead of quitting the application.

- Removed the references to Context.h and the related elements.

- Reflected the changes occurred in NXlib.c regarding NXDisplayErr-
  ror() and inverted the logic compared to NXDisplayIsValid().

- Added a dialog box to notify the user when nxagent has failed to
  migrate the session to the new display. Because the main X agent
  connection is unavailable, this dialog uses the auxiliary nxcomp
  keyboard channel.

- Disabled the special keystroke Ctrl+Alt+S if any dialog is already
  running.

- Started implementing lazy synchronization of pixmaps. At the pre-
  sent moment the implementation doesn't try to perform any optimi-
  zation on the windows' regions that have to be redrawn and neither
  it checks the congestion state. After having synchronized a reaso-
  nable number of pixmaps, it simply sends to all the affected win-
  dows an expose event, mandating the repaint of the whole area.

- Removed a warning in Atoms.c.

nxagent-1.5.0-46

- Removed the longjmp() at the time an I/O error was encountered on
  the display.

nxagent-1.5.0-45

- Removed UNDEFINED status for drawables.

- Now lazy encoding affects only windows.

- Changed the block handler to call NXTransFlush() with 'if needed'.

nxagent-1.5.0-44

- After reconnection, stored exposed regions are reset and the manag-
  ing of duplicate expose events is restarted.

- Detection of window manager has been moved to the start of screen
  initialization. Screen dimensions and fullscreen option are over-
  ridden if no window manager is detected.

- Added a call to XSync() in switching fullscreen function in order
  to synchronize it with the network behaviour.

- Started adding provision for deferred writes in the NX transport.
  When the flush policy will be set accordingly, X data accumulated
  by the proxy will be written to the network under the control of
  the block and wakeup handlers.

- Fixed a bug in nxagentCopyArea(). In some cases, pixmap drawables
  was erroneusly supposed to be windows. This produced invalid reads
  when trying to access to fields of WindowRec structure.

nxagent-1.5.0-43

- In the code managing the property notify events, NXCollectProperty
  is not called if the window is not found in the tree mantained by
  the agent.

- Changed managing of screen resize in order to avoid repeated resize
  of desktop. The agent sleeps one second, then all configure event
  are read from the queue and the server connection. The desktop re-
  size is performed after the last read configure event.

- Changed nxagentImportProperty() in order to use NXCollectProperty
  instead of XGetWindowProperty. This avoids many round-trips in root-
  less mode.

- Fixed Invalid write problem in nxagentRRSetScreenConfig().

nxagent-1.5.0-42

- Modyfied test of NXSetUnpackGeometry for visuals, so now the compa-
  rison between visuals is based on their IDs and not on the memory
  area allocated for their visual structure.

- Modified exposure managing in order to avoid duplicated refreshes.
  Now only exposed regions not formerly managed yet are sent to the
  clients.

nxagent-1.5.0-41

- Modified nxagentCloseScreen() in order to free the frame buffer.

- Added information of the integrity of the windows. Now the integrity
  has became a drawable property that will expand in every drawable to
  drawable operation.

nxagent-1.5.0-40

- Splitting of images now happens only if the display is a valid con-
  nection.

- The isItTimeToYield flag is now set in the dispatcher only when the
  client has been actually suspended because of a karma, a sync, or
  a split operation.

nxagent-1.5.0-39

- Improved the handling of the PutImage request to offer provision
  for splitting images coming from orders generated by extensions.

- Fixed a problem with clients being unexpectedly restarted instead
  of waiting for the end of split.

nxagent-1.5.0-38

- Added a persistent dialog when agent is running in rootless mode.

- Modified the policy of management of nxclient dialogs.

- Fixed memory leak problem in nxagentPutSplitImage().

- Modified printing of some debug messages to avoid passing a null
  pointer to fprintf().

nxagent-1.5.0-37

- Implemented initial support for streaming the packed images in the
  handling of the MIT-SHM extension.

nxagent-1.5.0-36

- Updated the pixmap status when a placeholder is copied on the pix-
  map and when the pixmap is the target of a RENDER composite opera-
  tion.

- Solved the TR05C00900. The NX transport was forced to be set when-
  ever the display name contained the nx prefix.

- Implemented the FRSA052393. Removed the compression filters applied
  by nxagent to cursor pixmaps.

- Modified RANDR implementation to make the user able to resize the
  desktop by simply dragging the agent window's border. Screen resize
  is made after a small timeout, to give time to the last configure
  event to come from the server and avoid multiple re-configurations
  of the screen.

nxagent-1.5.0-35

- Added the current screen size to the set of sizes returned by the
  RANDR extension.

nxagent-1.5.0-34

- Corrected the placeholder xpm image.

- Added a client dialog to notify the user that nxagent is running in
  fast or in slow mode after pressing Ctrl + Alt + S.

- Modified RANDR implementation to give a set of screen sizes. Im-
  plemented functions actually performing screen resize on a RANDR
  request. Now toggling to fullscreen make the desktop cover the en-
  tire screen area.

nxagent-1.5.0-33

- Added an auto-disconnect feature similar to the one present in the
  Windows Terminal Server. The feature is modeled on the built-in X
  server's screen-saver. If the agent doesn't receive any input from
  the user in a given timeout, it will either terminate the session,
  if no client is connected to the display, or will suspend it, so
  that applications will be left running.

- The default is to disable the auto-disconnect option. The feature
  is activated by specifying a "-timeout s" parameter on the command
  line, with s being the timeout in seconds. The minimum allowed ti-
  meout is 60 seconds.

- The waitpid() call now only checks the agent's own children.

- Moved the longjmp() context declaration to a new Context.h file to
  avoid clash with redefinitions by the PNG headers.

- Few other cosmetic changes.

nxagent-1.5.0-32

- Added a check on the type of the connection to avoid cleaning the
  images when not needed.

nxagent-1.5.0-31

- Modified the placeholder frames, now it has a left top black border
  and a bottom right grey one.

- Modified fbShmPutImage() in order to set the correct size for the
  temporary pixmap.

- Modified nxagentForceExposure() and nxagentHandleExposeEvent() in
  order to clip exposed regions to the window size region of the root
  window.

- Added a new placeholder xpm image.

- Corrected few typos.

- Added function to synchronize GC tiles and stipples whenever those
  pixmaps have been realized.

nxagent-1.5.0-30

- Hidden viewport windows to clients in QueryTree request in order
  to make work XDMCP properly.

nxagent-1.5.0-29

- Removed some warnings with gcc 3.4.

- Added desktop -D switch to usage.

- Paint window background draw on framebuffer only with OpenOffice
  client.

- Now fast copy are and fast getimage are no more set according to
  the link type, their default value has been set to true.

nxagent-1.5.0-28

- Modified nxagentUpdateViewportFrame() in order to solve a refresh
  problem. Windows composing the external frame must be always on top
  to be sure that agent sends expose events for every window.

- In rootless mode agent doesn't export anymore the properties when
  disconnected from the X server.

- Changed the way agent check if the connection with the X server
  is available. Instead of using a state machine it uses the display
  flag.

- Removed the SIGTERM handling function in persistent code. We don't
  need anymore those function since agent is no more sleeping when
  disconnected.

- Implemented nxagentFreePropertyList() function in order to empty the
  list of exported properties when the rootless agent is disconnected.

- Added special keystroke Ctrl + Alt + S toggling between fast and
  slow mode for GetImage and CopyArea.

- Added missing handling of down arrow key in Keystroke.c.

- Modified nxagentForceExposure() in order to intersect exposed re-
  gions with the clip region of the root window. This prevents window
  functions from painting outside the frame buffer.

- Added the field usesFrameBuffer in struct nxagentPrivClient. Modifi-
  ed GC funtion and DoGetImage() in order to write in the frame buffer
  only if usesFrameBuffer is True.

- Removed code performing PutImage in the frame buffer, as it is use-
  less at the moment.

- Modified ProcChangeProperty() to check WM_NAME property.

- Added a piece of code in nxagentOpenScreen() checking for and remo-
  ving duplicated visuals.

- Added the Dialog.c Dialog.h files. Unified all calls to NXDialog,
  and blocked SIGCHLD before calling in order not to get the signal
  before the child pid has been stored.

- Modified the algorithm that disconnect the running session in
  order to avoid the opening of a new dialog box for closing or
  suspending the nxagent.

nxagent-1.5.0-27

- Changed the disconnect/reconnect procedure in order to have a pro-
  per default colormap vector when session is suspended, solving a
  segmentation fault in create window function.

- Corrected few errors in slow copy area mechanism.

- Modified screen initialization in order to allocate memory for the
  internal frame buffer.

- Modified some GC functions for writing to and reading from the frame
  buffer.

- Modified nxagentCreateWindow() for initializing the window in the
  frame buffer.

- Modified nxagentCreateColormap() in order to use the default visual
  if a matching one is not found.

- Modified function DoGetImage() in order to call nxagentGetImage() in
  place of nxagentGetDefaultImage() if fast option is on.

- Added nxagentCheckWindowIntegrity() function verifying the matching
  between the internal frame buffer and the X server for a window.

nxagent-1.5.0-26

- Added the property "_KDE_NET_WM_SYSTEM_TRAY_WINDOW_FOR" to the list
  of exported property in rootless mode, in order to let clients use
  the system tray.

- Modified import of WM_STATE properties in rootless mode in order
  to better handle null resources.

- Enhanced the slow CopyArea mechanism in case of one part of the
  image is out of the X server screen or out of nxagent screen.

- Changed type for variables width and height of default window
  from 'unsigned int' to 'int'.

nxagent-1.5.0-25

- Added a new signal handler for SIGCHLD. The transport is set to
  forward the signal (by means of a new NX_SIGNAL_FORWARD action).
  This allows the agent to wait for its own children.

nxagent-1.5.0-24

- Set up the RANDR extension. When querying the configuration, the
  clients get 3 sizes, the first being the current size, the second
  being the maximum size of the remote display, the third being the
  minimum size (arbitrarily set to 100x100 pixels). Screen sizes in
  millimeters are calculated based on the size reported for the real
  display.

  An example of xrandr -q output is below:

   SZ:    Pixels          Physical       Refresh
  *0    800 x 600    ( 270mm x 203mm )
   1    100 x 100    (  33mm x  33mm )
   2   1400 x 1050   ( 474mm x 356mm )
  Current rotation - normal
  Current reflection - none
  Rotations possible - normal
  Reflections possible - none

  As you can note, reflections and rotation is not possible.

- Set up the GLX extension. This provides basic support with GLX op-
  erations being translated into core X protocol primitives.

- Moved initialization of GLX and RANDR to the Extensions.c file.

- Removed the references to the unused mfb library. Modified Screen.c
  to allocate the right privates for the fb code.

- Modified the Xserver Imakefile to link nxagent with FbPostFbLibs
  and avoid including mfb/libmfb.a.

nxagent-1.5.0-23

- Fixed an incorrect buffer length calculation when retrieving a re-
  mote property.

- Added a check to avoid the use of a NULL pointer when changing the
  window cursor.

- Implemented a function to lookup the remote pixmaps.

- Changed the RENDER initialization messages.

- Corrected a few typos in symbol names.

nxagent-1.5.0-22

- Added the nxagentNeedConnectionChange() macro.

- Small optimizations in the block and wakeup handlers.

nxagent-1.5.0-21

- NXCollectGrabPointer() is called by passing nxagentDefaultClient().
  This is a macro that checks the validity of requestingClient and,
  if the pointer is NULL, defaults to NXNumberOfConnections - 1.

nxagent-1.5.0-20

- Replaced all calls to XGrabPointer with the asynchronous version
  provided by nxcompext.

- In DeactivatePointerGrab() function, mouse button state is set to
  up if the window entered by the pointer is the root window and the
  agent is in rootless mode. This change is needed because the sub-
  sequent KeyRelease event could be not received by the agent (for
  example if the focus had left the window), so that agent could be
  unable to update the mouse button state.

- In rootless mode, grabs exported to X in ActivatePointerGrab() are
  always made asynchronous. The synchronous behaviour is implemented
  by the agent, so that requiring a further synchronous grab down to
  the real X server is of little use and potentially harmful.

- Modified function XYToWindow() in order to manage the case that
  mouse pointer is located on the title bar of a top level window in
  rootless mode.

- Reflected name changes to NXImageCache variables.

nxagent-1.5.0-19

- Changed the implementation of the SIGHUP handler to forward the sig-
  nal to the proxy only when appropriate. This allows nxagent to close
  the NX connection without having to go through an I/O error on the
  display.

- Modified nxagentBreakXConnection() to check if the NX transport is
  running and thus use NXTransDestroy(). Using a simple shutdown() may
  not work, for example if NX is using the memory to memory transport.

- Added the -D option, to let users specify that agent must be run in
  desktop mode. This is presently the default.

nxagent-1.5.0-18

- Set the PropertyChange mask on input/output window in rootless mode
  in order to get the PropertyNotify events.

nxagent-1.5.0-17

- Cleaned of the reconnection routines, removed the NXAGENT_RECONNECT
  macro.

- Now the SIGHUP handler forwards the signal also to the NX transport.

- Moved the NXTransDestroy() call in the closure of the display, so
  we can avoid going through the I/O error handler.

- Removed an invalid free in the function that closes the display.

- Commented out more code in Display.c to avoid the segfault on exit.

- In rootless mode, now function XYToWindow() starts search from the
  last window originated an EnterNotify event. In this way, we can
  prevent shaded windows from getting mouse events.

- The variable to disable the smart scheduler is set at its definition
  instead of setting it in the Dispatch function. This avoids the call
  to SmartScheduleInit.

- Changed implementation of cursor visualization in rootless mode. We
  made the cursor attributes changes go transparently to the X server
  while in desktop mode we ignore any client request to change the cu-
  rsor on the X side, and we just set the cursor on the default window
  any time the pointer cross a window border.

- Expanded the range of properties exported on the remote Xserver,
  this way we export properties whose atom name starts with "WM_" and
  "_NET_".

- In Rootless mode PropertyChangeMask is added to top level window in
  order to get PropertyNotify Events.

- First implementation in rootless mode of nxagentImportProperty fun-
  ction with which after reception of PropertyNotify Events, all chan-
  ging properties coming from external clients such as Window Manager
  will be imported in agent windows.

- Changed the GetEventMask function in order to handle the InputOnly
  windows that need to be notified of property changes in rootless
  mode.

nxagent-1.5.0-16

- Implemented the -B command line switch, to let nxagent impersonate
  a "pure" proxy on the NX server side (that is without X connections
  having to be managed by the nxagent's dispatcher). Such a "nxagent
   -B" is going to replace the corresponding nxproxy process that in
  previous version of NX server was run with the same options.

- When running nxagent in 'bind' mode the X port where the the proxy
  has to listen for connection must be specified after the -B option.
  The other NX options must be passed in the DISPLAY environment.

  Example:

  nxagent -B :9

- The initialization procedure will check that the display included
  on the command line matches the one specified in the NX display
  options.

  For example, given the command:

  nxagent -B :9

  The NX options must be something like:

  DISPLAY=nx/nx,link=modem:9

  This allows users to find out which display the agent is impersona-
  ting by running a 'ps' and inspecting the command line.

- Fixed a bug preventing the proxy's ClientMessage to reach the right
  function when activating rootless mode.

- Removed unused function nomachineLogo.

- Code cleaning and soem optimizations in Rootless.c.

- We want to import all properties changed by external clients to our
  internal windows. But we must ignore property notify generated by
  our own requests. For this purpose we implement a list to record
  every change property that we dispatch. This way when processing
  a property notify we can distinguish between the notify generated
  by our request and those generated by an 'outside client'.

- In rootless mode, optimized window configurations mantaining inter-
  nal stacking order.

- Fixed focus troubles in rootless mode. Now focus window is set fol-
  lowing FocusIn events.

- In rootless mode, now fake KeyRelease events on FocusOut are sent
  only if keys having down state are modifiers. This prevents from
  sending key events to a wrong client.

- Removed unused function nxagentRootlessNextSibling in Rootless.c.

- Removed unused function nxagentRootlessStackingOrder in Rootless.c.

- Fixed compilation error if TEST log is enabled in Events.c.

- Changed Options variables to comply with NX naming rules.

- Some additional cosmetic changes.

nxagent-1.5.0-15

- Modified functions nxagentPutImage and DoGetImage for XYPixmap fo-
  rmat.

- Completed implementation of shared memory extension.

- Implemented a mechanism that prevents monitoring of SubStructure-
  Redirect ResizeRedirect and ButtonPress events by any clients simu-
  lating the presence of a window manager running inside the agent.

- Added debug functions in order to check the status of syncroniza-
  tion between the pixmaps residing on the X server and the local
  framebuffer ones.

- Changed the policy used when realizing all the pixmaps in 'lazy en-
  coding' mode so that the agent now switches to 'eager' policy.

- Fixed the routine handling the pixmaps realization: pixmaps with
  an invalid id are not processed anymore.

- Solved a bug in the routine taking care of clearing the NoMachine
  logo: the state of the background was set to 'pixel' without de-
  stroying an eventual backround pixmap.

- Solved a bug in the 'MakeRootTile' function: the value returned by
  'AddResource' was not interpreted in the correct way causing the
  function to bail out without drawing the NoMachine logo and set-
  ting the background state to Pixmap.

- Renamed PlaceHolder.c to Lazy.c and PlaceHolder.h to Lazy.h.

- Inserted a test feature that cleans the framebuffer pixmaps when
  they are created.

nxagent-1.5.0-14

- Changed some reconnection messages.

- Now the disconnect procedure is called also after an IO Error is
  received.

- The rootless agent now doesn't filter anymore keystrokes combina-
  tion related to desktop feature, like viewport navigation the full-
  screen state and minimization.

- In rootless mode, internal stacking order is updated by comparing
  the stack of top level windows mantained by the X server with the
  one mantained by the agent. A global configuration of windows is
  performed from top to bottom through the stack.

- In rootless mode, map state of  top level windows is kept up to date
  by managing map and unmap events.

- In rootless mode, enter events are managed to keep track of top
  level window position. It is very useful for managing differences
  among window manager behaviours. It should be reimplemented follo-
  wing the advice given in ICCCM 4.1.5.

- In rootless mode, requests of configure top level windows are di-
  rectly forwarded to the real X server. Internal configuration is up-
  dated when configure events are managed by the agent. In order to
  mantain internal stacking order up to date, a query tree request is
  performed on the real root window.

- Added viewport navigation by Ctrl + Alt + keypad arrows.

- Fixed wrong internal configuration of agent top level windows, while
  agent runs in rootless mode with metacity window manager.

- Fixed segmentation fault in nxagent running in rootless mode with
  OpenOffice.

- Fixed wrong internal stacking order of drop down menus of firefox
  with nxagent in rootless mode.

nxagent-1.5.0-13

- Fixed compilation problem on solaris.

- Modified the modify pixmap header function. Previously this function
  has been modified in order to solve a glyph problem, enlarging both
  the pixmaps dimensions by four. Corrected the misbehaviour that
  modify the pixmaps dimension even if the caller doesn't want to
  change it.

nxagent-1.5.0-12

- Fixed erroneous behaviour of Root Window in fullscreen mode caused by
  wrong value of XSpan and YSpan.

- Fixed wrong clients' position at Reconnection in Rootless mode,
  setting offset and WinGravity fields in XsizeHints structure.

- Fixed segmentation fault on closing windows that stay always on top.

- Moved the handling of configure notify events in the appropriate
  functions, and cleaned it.

- In rootless mode, internal stacking order of top level windows is
  mantained up to date by monitoring events from window manager top
  level windows.

- Modify the creation of screen at reconnection for detecting an
  eventual failure.

- Removed export of window properties on the X server in desktop mode.

- Changed the events mask for client's window set on the X server.
  We don't use anymore the window mask choosen by clients. In rootless
  mode for a top level window we use the default event mask and for a
  child only the exposure mask.

nxagent-1.5.0-11

- Restored default event mask at reconnection.

- Fixed abnormal behaviour in rootless mode if application windows are
  close to the lower and right bounds of the screen. This trouble was
  due to the wrong size of the agent root window.

- Fixed abnormal behaviour in rootless mode for mouse button events if
  the application window is not fully contained in the screen.

- In rootless mode, exposed region are extended a few to take in ac-
  count border width offsets caused by window managers.

- In rootless mode, grab pointer requests from clients are forwarded
  to X server. This makes application able to close their pop up win-
  dows on a pointer event.

- Fixed wrong position of the agent root window after resize of main
  window.

- Changed the size of viewport frame windows in order to avoid re-
  freshing problems.

nxagent-1.5.0-10

- Handled the Client messages on rootless mode.

- Initializations of event masks have been moved in a unique group of
  functions.

- Disabled the SmartScheduler in dispatcher as it seems to affect the
  responsiveness of nxagent.

- Modified the block and wakeup handlers. We could have left data to
  write to our display connection when entering in WaitForSomething()
  so we now flush everything before entering the select() and let the
  proxy do all the buffering.

- Fixed the wakeup handler to match the correct prototype.

- Few cosmetic changes.

- Inserted a test feature that cleans the framebuffer pixmaps when
  they are created.

- Adjusted pixmap status information in almost every gc operations.

- Removed a warning for usleep not defined on Suse 9.0.

- Adjusted pixmap status information in copy plane operations.

- Throwed fatal error if on lazy encoding the place holder pixmap
  couldn't be loaded.

- Removed the static path to xpm file in place holder initialization.

- Removed useless signal handler initialization multiple times.

- Refined validation of atoms in the atom cache code.

- Corrected few errors in atom cache initialization.

- Added a primitive atom cache that mantain the map between internal
  and external atoms.

- Window properties export began on the X server side in rootless
  mode, this way nxagent open the communication between local clients
  and the window manager on the X server.

nxagent-1.5.0-9

- Fixed wrong position of the main window in case of maximizing in
  window mode.

- Set the correct scan line lenght for XYPixmap created in PutImage
  and GetImage.

- Removed a segmentation fault in GetDefaultImage. The problem arose
  because the XYPixmap created with a data storage taking in account
  of only some planes instead of all the depths planes. Despite XPut-
  Pixel was treating the image as a complete XYPixmap of that depth.

- Removed MapWindow Error at reconnection caused by wrong value of
  IconWindow.

- Now nxagent_WM_START is intialized as soon as the Atoms are
  queried.

- Removed Geometry restrictions.

- Changed the configuration of the agent window in window mode.

- The agent window is correctly reconnected even if is resized.

nxagent-1.5.0-8

- Updated copyright notices.

- Removed a segmentation fault in font cache cleaning routine. The
  problem arise when the session is disconnected and the font struct
  are not allocated.

- Used the return mask of XParseGeometry to correctly set only the
  parameters that are involved.

- Unified the initialization of all the geometry related parameters.

- Updated the offset of the four viewport frames windows at recon-
  nection.

- Changed the way the geometry parameter is used. Now the first time a
  session is started it set the internal dimension of the agent root
  window, afterwards it only affects the dimension of the external
  window on the X server.

- Corrected splash screen offset at reconnection in fullscreen mode.

- Agent can be launched in fullscreen mode and his geometry can differ
  from the X server geometry.

- Now Width and Height options are used to store geometry of the
  default window even on fullscreen mode, and to restore the correct
  dimension when switching back to window mode from fullscreen
  we added two more options.

- Removed an error in the move viewport procedure that didn't upgrade
  the offset of the internal root window when the external root win-
  dow was maximized.

- Unified the initialization of all the geometry related parameters.

- The window manager detection procedure is now started whenever there
  is an attempt to minimize the fullscreen window or to pass to window
  mode.

- Function's optimization for detecting if WM is running.

- Switching to window mode has been disabled when the window manager
  is not running.

nxagent-1.5.0-7

- Now background pixel is not reset at reconnection.

- Now geometry is parsed also as a command line parameter.

- Fixed wrong offset of the root window after a reconnection in case
  of window mode.

- Fixed wrong geometry of the nxagent window after a reconnection
  in case of window mode.

- Fixed wrong position of the main window after a reconnection in
  case of fullscreen mode.

- Fixed refreshing windows problems in viewport navigation. Four in-
  visible windows are created around the agent window to automatica-
  lly generate exposure when the viewport frame is moved or a windows
  come out from the non visibile part of the agent window.

- We need to store the GC records in a list that will be freed in case
  the reconnection succed and will be restored in case of failure. We
  have to do this because we cannot destroy the GC records in the
  disconnect or reconnect procedure, because this way we couldn't
  recover from a disconnection or a reconnection failure.

- Rewritten the reconnection procedure. Since we cannot be sure
  that the reconnection will succed we cannot destroy the display
  structure, so we postpone the closing of the previous display
  with the creation of the new connection.

nxagent-1.5.0-6

- Adjusted usage list in order to show the R parameter for rootless
  mode.

- Added handling of display parameter to option file.
  Corrected few typos error, in option file parsing.

nxagent-1.5.0-5

- Removed error that prevented the realization of cursor in eager
  mode.

nxagent-1.5.0-4

- Fixed abnormal behaviour of termination dialog, after the keystroke
  Ctrl + Alt + T.

- Fixed segmentation fault in function parsing option file.

- Fixed various errors on eager encodings.

- Added lazy command line switch in order to switch lazy encoding
  on.

- Code cleaning.

- Implemented a signal to switch between two pixmap
  realization policies.

- Corrected an error while defining pixmaps status.

- Implemented a debug feature, consisting in a method that pushes
  the synchronized realization of all the pixmaps.

- Began implementation of place holders in replacing of images while
  they are being loaded.

- Performed some changes on spreading of pixmaps status information
  on copy area.

- Began implementation of lazy encoding.

- Changed version to 1.5.0.

nxagent-1.5.0-3

- Removed the option -nogetimage (FRSA052305).

- Code cleaning in Font.c.

- Removed NXAGENT_FONTMATCH macro.

- Removed NXAGENT_FONTCACHE macro.

- Handled the ReparentNotify event we get when in rootless mode
  ours window are reparented from the window manager. Inserted
  fake windows to take account of this new parents.

- Removed the redirection of client message in rootless mode, and
  the configuration of the WM_PROTOCOLS properties on all the top
  level windows.

- Removed parent ID from the windows private structure.

- Implemented screen operation ReparentWindow.

- Redirect all client message of type WM_PROTOCOLS and value WM_DELETE-
  _WINDOW to internal clients in rootless mode.

- Set the WM_PROTOCOLS property on all the top level window.

nxagent-1.5.0-2

- Changed viewport navigation, in order to make it works in fullscreen
  mode.

- Changed special keystrokes used for closing session and minimizing
  fullscreen window.

- Removed the message 'NX was unable to negotiate a cache
  for this session' (FRSA052296).

- Fixed a minor bug. It made metacity produced a warning when the agent
  started up.

- Code cleaning.

- Implemented dynamic handling of the main window's size in the X11
  agent (FRSA052264).

- Implemented dynamic navigation of the main window's viewport in the
  X11 agent (FRSA052265). Users can navigate the viewport while keys
  Ctrl + Alt are pressed, either by arrows keys or dragging it by the
  pointer.

- Implemented dynamic handling of the full-screen attribute in the
  X11 agent.

- First implementation of dynamic handling of the full-screen
  attribute (FRSA052263).

- Now the X connection descriptor is not closed when disconnected,
  because the transport layer still has reference to it. So we want
  it busy till we don't close the display, so we shutdown it instead
  of closing it.

- Removed replys when disconnected.

- Added the X connection number to the set of enabled input devices, at
  reconnection.

- Rewritten the disconnect/reconnect layout.

- Now in the suspend status nxagent doesn't sleep.

- Implementing toggle fullscreen special keys.

nxagent-1.5.0-1

- Opened the 1.5.0 branch.

nxagent-1.4.1-7

- Imported changes from nxagent-1.4.0-64 version.

nxagent-1.4.1-6

- Implemented a GC cache for reconnecting pixmap.

nxagent-1.4.1-5

- Handled the situation of disconnect when the pointer has been grabbed.
  We disconnect and reconnect the "grabbing" cursor and after reconnection
  we fake a button release in order to let client know that the pointer
  button has in effect been released.

- Code cleanup.

nxagent-1.4.1-4

- Imported changes from nxagent-1.4.0-63 version.

nxagent-1.4.1-3

- Imported changes from nxagent-1.4.0-62 version.

nxagent-1.4.1-2

- Cleaned code in the GC reconnection area.
  Scratchs GC are now reconnected before of the pixmaps.

nxagent-1.4.1-1

- Opened the 1.4.1 branch.

nxagent-1.4.0-65

- Cosmetic changes to the diagnostic output.

nxagent-1.4.0-64

- Changed the RENDER version advertised to X clients to be the lowest
  value between the version of RENDER of nxagent and of the remote X
  server.

- Disabled fast copy area and fast get image flags, if RENDER extension
  is not available.

- At the screen initialization, if we don't have window manager we
  grab keyboard to let nxagent get keyboard events.

- Completely rewritted the handling of KeyPress events, now we moved
  all the test for 'special' keybindings in file keystroke.c. Added the
  combination MOD1/2-CTRL-SHIFT-<TAB> for terminate/suspend the session,
  we used the combination MOD1/2 in order to let it work even on MacOS
  where Alt(MOD1) doesn't seem to be set.

- Ignored visibility notify events on the icon windows, that were
  messing up the agent visibility state.

- Changed nxagent reaction on VisibilityNotify event. It fixed the
  problem with refresh session under Mac OS X with NXDarwin.

nxagent-1.4.0-63

- Reset the congestion state at transport initialization.

nxagent-1.4.0-62

- Fixed the disconnection and reconnection of window that have attached
  an animated cursor.

nxagent-1.4.0-61

- Removed the XInputExtension initialization in order to use the more
  general mi extension initialization enabled on new mi version.

- Removed some useless test and logging info on copy area function.

nxagent-1.4.0-60

- Changed the implementation of CopyArea and CopyPlane.
  If both drawables are on framebuffer we send NoExpose to clients,
  otherwise we use the mi function HandleExposure to calculate the
  region to be exposed instead of let mi redo all the copy operation.

nxagent-1.4.0-59

- Disabled use of caching and cleaning of images, if NX transport is
  not used.

nxagent-1.4.0-58

- Added timeout on convert selection operation. If timeout has not
  expired and is there a pending operation any new request is dropped
  and the client notified, until timeout expiration.

- Corrected a bug that prevented to correctly store last convert se-
  lection request time.

nxagent-1.4.0-57

- The Xinput extension is now initialized at startup. This is of
  little use because nxagent only needs to support the core pointer
  and keyboard. Anyway this allows nxagent to get rid of the warn-
  ings printed by some X clients on recent Linux versions when the
  extension is not found.

nxagent-1.4.0-56

- Fixed value returned by ConvertSelection. It was the cause of
  possible slowndowns during KDE sessions.

nxagent-1.4.0-55

- Agent icon now is loaded from a binary-
  embedded Xpm image, if any attempt to
  load the default Xpm file from the image
  directory or from the path fails.
  Removed code used in the old logo drawing
  function.

nxagent-1.4.0-54

- Enabled code for sending to client graphics
  exposures. Redirecting the ones coming from
  remote X server, only if agent window is not
  fully visible, and calculating ourselves failure
  in CopyArea/Plane and notifying clients.
  The only drawback is that we can have double
  refresh effect if agent window is covered.

NOTE: Partially enabled MIT-SHM extension has
      been developed but has not been included
      in stable release. Included in version
      nxagent-1.4.0-53-DAR1.

nxagent-1.4.0-53

- Implemented a reliable technic to detect
  if is there any window manager running on
  the X server.

nxagent-1.4.0-52

- Fixed a bug that prevented to correctly
  notify the client of a successfull convert
  selection.

nxagent-1.4.0-51

- Removed a logging error in render initialization.

nxagent-1.4.0-50

- Now we take the ownership of the selection
  on "NX_CUT_BUFFER_SERVER" twice, in order
  to solve bug in communication with nxclient
  to let him see our main window and know that
  agent established connection with X server.

nxagent-1.4.0-49

- Fixed the colormask layout of the visual
  used to put images on the real X server when
  the drawable has an alpha channel, according
  to the endianess of the X server.

nxagent-1.4.0-48

- Moved up the render compatibility limit,
  due to the inclusion of the support for render
  cursor missing on the 0.2 version.

nxagent-1.4.0-47

- Changing artsd forwarding port from display
  + 8000 to display + 7000

- Stoping key release event if key press was
  catched before. For Alt-F2/F4 combination.

- Preserved the alpha data on drawables that
  are not used by picture but have a depth of 32.

nxagent-1.4.0-46

- Rewritten all the code regarding to the
  acceleration for the Render creation of the
  cursor, and removed the acceleration for
  the animated cursor.

nxagent-1.4.0-45

- The two RENDER operations creating cursors and
  animated cursors have been accelerated by for-
  warding the original operation to the X server.

nxagent-1.4.0-44

- Fixed a problem in the clipboard procedure.
  Now when we get a request of the selection
  from an internal client we have to, if the
  owner is on the X server, forward the request
  to X, otherwise we have to pass the request
  to our internal client.
  But for a problem in this procedure we passed,
  in some situation, the request to the internal
  client even if the owner was on the other side.

- Fixed a segmentation problem in the render
  extension by removing composite trapezoid
  operation on window.

nxagent-1.4.0-43

- Added some pointer sanity check in the discon-
  nect procedure. The problem was arising because
  we were executing the code twice when after
  began a voluntar disconnection the X connect-
  ion was broken for a network failure.

- Changed directory where nxagent gets the icon.

- Fixed missing implementation of rendering
  trapezoids.

- Fixed bug in render extension when the nxagent
  create cursor diffrent then 32 bits format.

nxagent-1.4.0-42

- Solved segmentation fault, caused by a longjmp
  on a stack context not previously saved.

nxagent-1.4.0-41

- Added an exposures of the window in a resize
  operation.

nxagent-1.4.0-40

- Implemented a timeout on the opening of the X
  display, if we get it we reject all well known
  sockets.

nxagent-1.4.0-39

- Corrected minor error on events handling.

nxagent-1.4.0-38

- Removed in the resize window code some exposure
  that generated useless traffic.

- Option geometry is no more parsed in the option
  file.

nxagent-1.4.0-37

- When session is suspended and we get TERM signal
  nxagent just exit instead of just breaking out of
  dispatch loop because we get a terminate exception.
  Cleared display variable after having closed the
  connection with the X server.

nxagent-1.4.0-36

- Refined some details in the ICC with nxclient.

nxagent-1.4.0-35

- Implemented a new method to comunicate to nxclient,
  the raise of the agent root window, taking the ownership
  of the selection "A-{MD5 of session}".
  Used the same selection to let nxclient comunicate to agent
  by changing the property on the same string, when the user
  choose by the administrator to terminate or suspend the
  session.

nxagent-1.4.0-34

- Key sequence to Suspend/Terminate session (Alt-F4).

- Key sequence to Minimize session in fullscreen mode (Alt-F2).

- Check if WM is started, for Alt-F2 sequence.

- Corrected calculation geometry of exposed region
  sent to client after reconnection.
  This solve a serious memory leak of nxagent.

- Fixed a bug in validate GC code that passed
  a wrong pointer of tile to framebuffer.

nxagent-1.4.0-33

- Changed the reconnection state machine in order
  to let agent exit if has got the TERM signal.

nxagent-1.4.0-32

- Fixed memory leak in option parser that wasted
  memory if more than one occurence of 'option'
  argument would have been parsed.

- Removed a invalid read in Keyboard initialization.
  Now kbtype option value is copyed instead that
  referenced.

- The X connection number is recorded only after
  having cheched for display being successfully opened.

nxagent-1.4.0-31

- Fixed memory leak problem caused by region not
  beeing destroyed previously.

- Fixed a memory leak in keyboard initialization.

- Fixed a bug in the function that parse the option file,
  we were reading the options in the format NAME=VALUE and
  were passing it to the argument parser in the format
  {NAME, VALUE}, without the prepending '-' in front of NAME.

nxagent-1.4.0-30

- Readded option persistent in order to let nxagent
  works with older nxserver that are still launching
  nxagent with the persistent option.

nxagent-1.4.0-29

- Corrected the message of the client dialog
  asking if user want to suspend or terminate the
  session.

- Chenged the default value for persistence of session
  in nxagent to true. Change the persistent option to
  nopersistent in order to disable it.

nxagent-1.4.0-28

- Added check on screen initialization of possible
  memory allocation failure.

- Changed the parsing policies of the option file.
  Now we are just considering kbtype and geometry
  options.

- Removed testing code that forced rootless mode
  when geometry is 100X100.

- Correctly initialized and mapped the icon window
  on fullscreen mode.

nxagent-1.4.0-27

- Fixed lost memory problem caused by second
  initialization of screen privates. Screen
  privates is already initialized by miScreenInit
  function.

nxagent-1.4.0-26

- Added option command line option. This parameter
  is used to show complete path to option file.

- Added parser of the option file.

- Now default value for fast copy area and fast
  getimage is true.

nxagent-1.4.0-25

- Done some cleanup to the initialization of the
  defaults drawables at reconnection, and removed
  a memory leak in the reopening of the Display.

nxagent-1.4.0-24

- Changed the version number, printed at startup.

- Removed a memory leak in the font reconnection stage.

nxagent-1.4.0-23

- Removed a bug that messed up the render status info
  if reconnected to a display with no render support.
  Anyway nxserver should prevent agent to trying reconn-
  ecting to such display.

nxagent-1.4.0-22

- Enhanced the reconnection error reporting function.

nxagent-1.4.0-21

- Get the ownership of selection NX_CUT_BUFFER_SERVER at reconnection
  in order to let client knows that agent windows has started
  successfully.

nxagent-1.4.0-20

- Now we draw splash logo at reconnection. And destroy it and show
  all other windows when reconnection has done all in once. We draw
  it on default window instead that on root window, and we map root
  window when reconnection has finished.

nxagent-1.4.0-19

- Removed the old Xconnection descriptor and added the new one
  to the device set, instead of resetting the entire enabled
  device set, at reconnection.

nxagent-1.4.0-18

- Reset the enabled devices set of descriptors, and properly
  add to this set the the Xconnection descriptor.

NOTE: This solves all the known solaris reconnection problems.
      (The problem appear only on solaris because on this machine
       the Xconnection descriptor is changing at reconnection.)

nxagent-1.4.0-17

- Restored the previously owned primary selection, at reconnection.
  Removed the handling of the return value of XSetSelectionOwner,
  man page doesn't specify any return value.

nxagent-1.4.0-16

- Added compatibility with older windows clients(Xserver)
  that send a WM_DELETE_WINDOW client message WM_DELETE_WINDOW
  to all top level window and so agent show more than one
  NXDialog asking for confirmation, instead of sending just the
  message to top level window that are visible and haven't set
  the override redirect option.

nxagent-1.4.0-15

- Ignored unmatched DirectColor visuals at reconnection
  on a different display not providing it.

nxagent-1.4.0-14

- Moved the render query extension in display
  initialization from screen initialization.

- Changed reconnection policy to disallow reconnect a
  session that is using render to a server not providing it.

nxagent-1.4.0-13

- Unified the screen opening function.

- Changed the reconnection requirements
  policy about geometry of X server.
  Now agent doesn't accept changes of X server
  root window size only if in fullscreen mode.

nxagent-1.4.0-12

- Improved failure notification messagges in Display and
  font code.

nxagent-1.4.0-11

- Now visuals are properly recreated, in order to reconnect
  to another X server.

- Updated render formats at reconnection.

nxagent-1.4.0-10

- Removed a serious memory leak at reconnection.

nxagent-1.4.0-9

- Added after window reconnection the redisplay of the current
  cursor. Done some general cleanup at cursor reconnection code.

nxagent-1.4.0-8

- Unified tha atom creation at reconnect.

nxagent-1.4.0-7

- Dix layer when creating a GC use a default real pixmap as
  stipple but agent need a virtual one. This can cause
  segmentation fault to agent if is there any apps that use the
  default GC stipple created by dix, without changing it.

nxagent-1.4.0-6

- Imported 1.4.0-1-DAR6 from the 1.4.0 development branch.

- Handled reconnection of window's cursor still not
  reconnected at window reconnection. (This because that cursor
  is no more a server[nxagent] resource).

- Set the last image client variable at reconnection in order
  to use the visual cache indexed for client number.
  Without this we could get a segmentation fault.

- Handled properly the reconnection of animated cursor.
  Modified the procedure of animated cursor creation
  in order to empty some unused fields.

- Removed a 4 bytes memory leak at reconnection.

- Synced new tree with nxagent-1.3.2-23.

- Finished the unify of PutImage at reconnection.
  Added a Reconnection Trap in order to let screen functions
  (like PutImage) knows that are working at reconnection time
  and can behave differently.

- Unified the code for the normal PutImage and the one's used at
  reconnection. But the code that calculate the split is still
  doubled.

nxagent-1.4.0-5

- Imported 1.3.2-23 from the 1.3.2 development branch, and dropped
  the previous 1.4.0 versions.

nxagent-1.3.2-23

- Pixel hints are set according to the display's depth. Added the
  defaults to be used on 16 bits.

nxagent-1.3.2-22

- The pixel hint on Solaris is by default 0xffffff. The value can be
  overridden by using the -hint option followed by the hex represen-
  tation of the color, as in -hint 0xaabbcc.

nxagent-1.3.2-21

- Asynchronous GetImages are now disabled. If fast GetImage mode is
  enabled, agent will always try to guess the pixel to be used for
  the solid pattern, based, at its best, on the geometry of the pro-
  vided area. This behaviour can be overridden by passing the -slow
  parameter on the command line. Slow mode is also the default when
  selecting WAN or LAN link settings.

- Code cleanup in preparation of the final release.

nxagent-1.3.2-20

- New code uses sigaction to set the SIGHUP handler in persistent
  mode. Contrarily to signal(), the sigaction call doesn't seem to
  reset the handler to SIG_DFL after the signal has been caught.
  This problem seems to be specific of Solaris.

- Client messages of type WM_PROTOCOLS are now handled even when
  a window manager is not detected at agent startup.

- Removed handling of GraphicsExposure coming fron the real server.
  Agent will still generate events in the MI. Code dealing with the
  remote events needs to be better tuned as it seems to cause some
  troubles with double refreshes.

nxagent-1.3.2-19

- Starting from this version agent doens't use NXSync and NXKarma
  messages to manage bandwidth arbitration among clients but makes
  efficient use of the congestion notification messages introduced
  in 1.3.1. A new handler has been added to manage the congestion
  state. The handler will block, if needed, waiting for the decon-
  gestion notification coming from proxy.

nxagent-1.3.2-18

- Rewritten the block handlers to check the event queue more often.
  The new code seems to greatly enhance responsiveness, especially
  on fast links.

- Now agent will handle the expose events coming from the remote
  display inside the event dispatcher.

- Created a new function collecting the expose events. Function is
  optimized to add all the expose events for the same window to a
  single region. Region is passed to the mi when the last event
  has been processed.

- Still dealing with GetImage from OpenOffice. Now we try to match
  the geometry of the incoming requests with known geometry of most
  of its graphic elements. It seem to work on Fedora.

nxagent-1.3.2-17

- Added swapping of image data in nxagentGetImage() when connecting
  to a display having a different image byte order than the agent
  server.

- Added a new nxagentImageReformat() function in GCOps.c.

- Now agent will not try to pack images having a data size smaller
  than 768 bytes. The previous threshold was set to 64. The Mandrake
  vesion of KDE seems to send lot of such small images. Compressed
  through JPEG, these images obtain a very poor ratio of nearly 1:1.

- Added a function translating and sending the GraphicsExposures
  events received from the remote server to the agent's clients.

- Renamed the functions providing the ad-hoc handling of remote X
  events.

nxagent-1.3.2-16

- Implemented a cache for the alpha channel data. With clients
  making heavy use of the alpha blending, the new cache is able to
  cut by nearly 30% the traffic incoming to proxy, offering compara-
  ble savings in CPU performance. While proxy is usually able to
  cache almost all the alpha traffic, when caching is not enabled
  (f.e. when link setting is WAN or LAN) this data is sent uncomp-
  ressed by the agent. Tests running common desktop environments
  showed that alpha channel could weight up to 2 times the corres-
  ponding data generated by the packed images.

- Fixed the compilation warnings in NXrender.c.

nxagent-1.3.2-15

- Rewritten handling of GetImage from dispatcher down to GCOps. If
  the fast GetImage mode is enabled agent will use the asynchronous
  calls provided by nxcompext to get data from the real server. Data
  collected from the last get image performed is preserved and the
  upper left pixel is used to guess a solid background.

- Added a nxagentGetBackgroundImage() function to apply a similar
  mechanism when the nxagent window isn't fully visible. Previously
  a solid white background was returned. The new handling seems to
  correctly match the window background in most cases.

- Fixed a problem passing the bytes per line value when creating a
  XYPixmap image. The previously calculated value didn't take into
  account the depth of the image.

- Now image's bytes per line, length and visual are calculated by
  using a few utility functions added to GCOps.c.

- Added declaration of the nxagentVisibility related variables to
  Window.h.

nxagent-1.3.2-14

- On Fedora xbcomp configuration fails when agent is run nested.
  This causes keyboard to ignore most AltGr keys. Strangely enough
  this behaviour has been observed only with KDE while GNOME does
  not seem to be affected. Reason is to be investigated.

- Auto-repeat mode of the agent's keyboard device is now always
  disabled. Agent will leverage auto-repeated keystrokes genera-
  ted on the real server even when propagating device configura-
  tion changes.

- The info output telling if agent will propagate the changes to
  devices' setting is now printed after having initialized the
  screen. The purpose would be to verify if agent is running in
  fullscreen mode and there is no WM on the real display. In this
  case we should forcibly propagate device configuration changes.
  Unfortunately, due to the way intern atoms are collected, this
  is not going to work on platforms where sessions are likely to
  run on an existing X server.

nxagent-1.3.2-13

- Fixed a problem with XYPixmaps being used in PutImage with the
  wrong left pad. This is a step forward in the solution of the
  corrupted masks displayed by Mozilla when showing some animated
  GIFs.

- By selecting 'fast' mode nxagent will now skip real XGetImage
  operations on windows. This becomes the default in the case of
  MODEM, ISDN and ADSL links. In theory X clients should never do
  that. In practice a few naive programs and libraries (like, sur-
  prisingly enough, a famous Linux office automation suite) do,
  mainly to compose images with the window's backgound. Why don't
  they compose content into a Pixmap?

- Improved the implementation of CompositeGlyphs. It now uses a
  single call to XRenderCompositeText instead of splitting the
  output in multiple RENDER requests.

- In previous versions file NXmiwindow.o was not linked into the
  resulting nxagent. This solves the problem of missing repaints
  in CDE and other Xt applications. Be sure you upgrade nx-X11
  to version nx-X11-1.3.2-2.

- Added a warning when the change keyboard control or the change
  pointer control functions are called.

nxagent-1.3.2-12

- Added bit-swapping of glyphs having depth 1 when agent has a
  different bitmap-bit-order than the X server.

- The KeyRelease event's timestamp calculation, accounting for
  differences in time between the local and the remote machine,
  will now use the timestamp taken from the last KeyPress. Using
  the timestamp of the last event was sometimes causing time to
  go backward with the result that server could remain grabbed.
  This solves the long-standing "mouse stop responding" problem.

- Fixed a problem handling the alpha channeled visual introduced
  while experimenting with the new server endianess layout.

nxagent-1.3.2-11

- Added the Reset option to options repository. By default agent
  will skip server reset when the last client disconnects. This is
  equivalent to passing the -noreset option to a standard XFree86
  server. To restore the original behaviour the new -reset option
  can be used on the command line.

- Moved the SharedMemory and DeviceControl options to the options
  repository.

- A basic session, still leveraging all the default facilities, can
  now be run as: nxagent -name NX -geometry 800x600+10+100 :1. The
  -fp unix/:7100 option can be added to enable access to the X font
  server.

- Fixed a "unused variable" warning in Cursor.c.

nxagent-1.3.2-10

- Rootless mode. Some cleanup in initialization.

- Rootless mode. Working at the configure-window errors.

nxagent-1.3.2-9

- Removed limitations when running nxagent nested inside another
  nxagent server. Now both render extension and packing of images
  are enabled.

- The nxagent X server now inherits its endianess from the host
  architecture, instead of assuming the same endianess of the con-
  necting client. This fixes the remaining problems running ses-
  sions nested inside another nxagent server.

- Removed any reference to ReformatImage().

nxagent-1.3.2-8

- Changed the way the agent server handles images internally.
  The inherited Xnest code used to set the server's image order
  to the same order of the remote X display. This caused agent
  to create images in the internal frame-buffer with a different
  endianess in respect to images got from X clients.

- The new image handling code seems to solve all the known image
  endianess problems, for example cursors created on big-endian
  displays with a wrong shape or glyphs being showed flipped when
  retrieving the image data from the virtual frame-buffer.

- As an added bonus the new code seems to double the performance
  of the SPARC Solaris server when accessing i386 clients.

- Commented out all the existing calls to ReformatImage(). Code
  needs now extensive testing to see if any of the calls must be
  actually restored.

- Replaced calls to index() with strchr().

nxagent-1.3.2-7

- Solved a potential memory error when accessing a client or a
  window pointer in clipboard management code after the resources
  had been destroyed. Added a nxagentClearClipboard() function to
  be called before a client or a window is destroyed to get rid
  of any reference to the disposed resources.

- Auto-repeated keystrokes generated by agent from inside the
  virtual keyboard device are now ignored. Agent will correctly
  honor auto-repeated keystrokes generated by the real X server.
  This is actually the expected behaviour. The former implemen-
  tation triggered an annoying bug, with keystrokes being inad-
  vertedly auto-repeated in the case of high latency on the
  network link.

- Agent will now ignore the pointer settings changes generated
  inside the remote session. The original behaviour was to reset
  the pointer values (for example acceleration) to the X factory
  settings at session startup. Agent will now inherit whatever
  values are set on the real X display.

- Added a -noignore parameter. When passed, agent will propagate
  to the real X server any change to keyboard and pointer control
  settings operated by its own X clients.

nxagent-1.3.2-6

- Fixed problem with glyphs being drawn clipped in the virtual
  frame buffer. This is not yet the final solution but it seems
  to work in all the circumstances where problem was observed
  in the past. Problem seems to be caused by scratch pixmaps
  being requested with a width and height smaller than actually
  required. Note anyway that pixmap's buffer seems to be never
  accessed beyond its boundary. This probably means that memory
  for the pixmap is originally allocated using the right size.

- Moved backing-store selection to options repository. Now by
  default the backing-store mode is set to WhenRequested. This
  means that, in most cases, there is no need to pass the -bs
  option on the command line.

- Code cleanup in Render.c, NXrender.c, NXglyph.c.

nxagent-1.3.2-5

- Fixed initialization of all the supported depths. Previous
  versions correctly initialized the various depths but still
  failed to advertise the support of any other depth than the
  default depth supported by the remote X server.

- Persistent mode. We now correctly propagate the pixmap ID of
  the parent to the virtual pixmap at reconnection. This fixes
  the reconnection errors when render extension is enabled.

- Persistent mode. Solved the refresh problems at reconnection.
  Problems were generated by the lack of window parent's ID at
  the time session was reconnected.

- Changed the agent's behaviour at the time the close button is
  pressed. If agent is running in persistent mode a new dialog
  is showed with the option to suspend the session.

nxagent-1.3.2-4

- Persistent mode. At the time the proxy connection is reset the
  per-client unpack geometry information is cleared. This makes
  agent find out that a new unpack geometry is needed as soon as
  the display is reconnected.

- Persistent mode. Lot of logging added in order to trace use of
  resources as long as they are recreated. The current version
  fails to correctly restore the picture information when render
  is enabled.

nxagent-1.3.2-3

- Finally fixed all the problems with missing initialization of
  pixmap formats. The screen info is now correctly set up even
  when the remote display doesn't support all the target depths.
  Many thanks to Michael L Torrie who helped me to reproduce the
  problem and come to a solution.

- Moved initialization of depths, default drawables and pixmap
  formats to their own functions in Display.c.

nxagent-1.3.2-2

- Fixed the nxagentDestroyPixmap() function to correctly take into
  account the reference counter of the virtual pixmaps. This solves
  the crashes observed when running some GTK clients like xchat.

- Added a function Pixmap.c to forcibly destroy the pixmaps created
  in the virtual framebuffer when the parent pixmap is destroyed.

- This version contains some verbose output intended to better test
  the new behaviour. The output will be removed in future versions.

nxagent-1.3.2-1

- More cleanup in Pixmap.c.

- Rewritten nxagentCreatePixmap(). Corrected an error where the
  bitsPerPixel field was set to the pixmap's depth instead of the
  result of BitsPerPixel(depth). This finally solves the problem
  of text being incorrectly rendered in the virtual framebuffer.

- Corrected the X error returned at the end of session when trying
  to free a pixmap with an invalid id.

- Opened the 1.3.2 branch.

nxagent-1.3.1-32

- Cleanup of Pixmap.h/Pixmap.c. Renamed macros according to the
  nxagent naming conventions.

nxagent-1.3.1-31

- When running in fullscreen mode, grab and ungrab of pointer and
  keyboard is performed in new functions, placed in Events.c.

- The event loop now checks if the enter/leave notify carries a
  NotifyInferior detail and, in this case, doesn't perform the grab.
  This saves half the amount of grabs (and the related roundtrips)
  performed by the previous version.

- Ungrab of pointer is now performed whenever the cursor leaves the
  fullscreen window. In previous version only the keyboard was
  explicitly ungrabbed.

- Added a warning in the event loop when receiving a MappingNotify.
  This event is presently unhandled and seems to be reported, as a
  consequence of the selected event mask, only by some X servers.

nxagent-1.3.1-30

- Reverted the patch introduced in Pixmap.c. The whole issue is
  being investigated in its ramifications up to the virtual frame
  buffer.

nxagent-1.3.1-29

- Fixed a problem in the nxagentDestroyPixmap function where the
  reference counter of pixmaps could be decremented twice. This
  could lead to agent trying to free the pixmaps more than once.

- On Solaris there is no description for pc105 keyboard model. As
  a workaround we consider pc104 to be the closest approximation.

nxagent-1.3.1-28

- Fixed a bug in the create window procedure. With some clients,
  like Maelstrom and xmame, the creation of the main window was
  failing due to the wrong colormap and visual attributes used
  by agent on the real X server.

- In fullscreen mode the keyboard is now grabbed at the time we
  receive an EnterNotify event. This fixes a problem at startup
  observed on some Debian based distributions where agent didn't
  receive the keyboard focus until user had minimized and then
  brought to front the agent's window. The grab is now correctly
  performed by using the timestamp of the remote X server ins-
  tead of our local timestamp.

- In NXdixfonts.c strings corresponding to names of fonts and
  font aliases cached by nxagent were missing the terminating
  zero.

- In function InitClientPrivates fixed the missing initializa-
  tion of the is_ignored member of the ClientPriv structure.

- Added the Persistent option to Options repository. The flag is
  intended to replace the old nxagentEnableReconnect variable.

nxagent-1.3.1-27

- Fixed a memory allocation problem in Keyboard.c. A string was
  allocated in the heap without making enough room for the trail-
  ing zero.

nxagent-1.3.1-26

- Added further run-time checks to verify that pixmaps are not
  created with bad bit-per-plane settings. This problem seems to
  be caused by lack of support by nxagent of some combinations
  of depth and visual when the render extension is enabled. If
  this is the case, hide the render extension to new clients and
  force any subsequent render operation to return a BadRequest
  error. This required including extension.c from dix. A new
  NXextension.c file is added to the distribution.

- A problem was reported by Valgrind about reading the first 4
  bytes just after the block allocated in fbCreatePixmap from
  nxagentCreatePixmap. A quick fix was added to pixmap.c from
  dix so that AllocatePixmap adds 4 additinal bytes to each
  buffer.

nxagent-1.3.1-25

- Fixed a memory corruption error. The original AllocateGlyphSet
  from render/glyph.c could be called instead of the NX counter-
  part defined in NXglyph.c. This could lead to the missing
  allocation of the trailing remote glyphset id field.

- Added initialization of an otherwise usused string in function
  nxagentPropagateArtsdProperties(). The whole string is probably
  to be removed in future versions.

- Moved the flag used to avoid reentrancy in GCOps to a separate
  Trap header and source.

- Further cleanup. Removed the zombie file NXglyphcurs.h.

- Added missing initialization of the picture pointer in private
  window's data in nxagentCreateWindow.

nxagent-1.3.1-24

- Added the missing timeout when calling WaitForSomething() at
  startup. The bug caused the splash to remain on screen until
  a further event was received.

- Fixed a BadAtom error on Windows during initialization. Error
  was caused by a bad attempt to change the NX_AGENT_SIGNATURE.

- Hunting the 0 bits-per-plane drawable bug in nxagentValidateGC.
  Added tracing output and additional checks. GC validation is
  skipped if it is not possible to recover an appropriate value.

- Ensured that nxagentDisplayName is set before calling the post
  initialization procedure.

nxagent-1.3.1-23

- When session is run nested inside another NX X agent, all the
  optimizations regarding remote expose events on fully visible
  windows are disabled. This solves the refresh problems encoun-
  tered when covering the nested session with a window from the
  local X server.

- Reusing NX_AGENT_SIGNATURE atom to detect nested operation.
  Atom is created internally to the agent server at startup,
  before any atom on the real display.

- Fixed construction of caption used for dialog boxes spawn by
  agent. The previous algorithm failed to identify the correct
  string in parameter -name passed on the command line.

nxagent-1.3.1-22

- Ensured that state of keyboard modifiers is initialized with
  values from the real X server when the first key stroke is
  pressed by the user.

- Fixed the X_SetInputFocus errors generated at session startup.

- Rootless mode. Ensured that remote expose events are always
  reported by the remote proxy. This is a temporary fix looking
  forward for better handling of visibility events.

nxagent-1.3.1-21

- Saved a GetWindowAttributes and a GetGeometry in the function
  drawing the splash screen.

- Better handling of splash at startup. Removed the flickering on
  Windows without recurring to another atom. This is achieved by
  optimizing drawing and delaying mapping of the main windows.

- Modified the magic values activating rootless mode to 100x100.

- Removed modifications introduced in 1.3.1-20.

nxagent-1.3.1-20

- Working on eliminating the splash screen flickering on Windows
  and Darwin. Checked if the NX_SPLASH atom has been created by
  the NX X server. If this is the case, we let the NX X server
  show the splash screen on our behalf.

nxagent-1.3.1-19

- Improved the initialization phase by removing a GetProperty, an
  InternAtom and two GetInputFocus round-trips.

- Added appropriate masking of the state bits reported by the
  XkbStateNotifyMask event.

- Added a simple mechanism during the itialization phase to trace
  the use of X server replies.

nxagent-1.3.1-18

- Made some order in functions loading the NX icon.

- Removed some more zombie files from agent distribution. Now only
  the files imported from DIX and MI have name prepended with NX.

nxagent-1.3.1-17

- Moved names and values of intern atoms created by agent in their
  specific header and source.

- We temporarily force rootless mode if user provides a geometry
  of 801x601. This is intended to simplify testing. Note that if
  rootless is selected, we'll anyway disregard any geometry set
  by the user, assuming the geometry of the real display.

nxagent-1.3.1-16

- We are checking now whether NX_IDENTITY intern atom is created
  before NX_SPLASH. We want NX X servers to show the splash on our
  behalf, so if NX_SPLASH is already interned, than we just skip
  the splash procedure.

nxagent-1.3.1-15

- Rootless mode. Fixed a segfault handling ConfigureNotify events
  on top-level windows.

- Moved handling of ClientMessages coming from proxy in a separate
  function.

nxagent-1.3.1-14

- Rewritten the code dealing with key modifier changes. Now we
  use XKB events instead of synchronous XkbGetIndicatorState()
  calls.

- Moved activation of keyboard and pointer events to Events.c.

- Removed pointer motion optimizations as a better logic, taking
  in account the selected link speed, is already implemented in
  proxy.

nxagent-1.3.1-13

- Renamed the -reconnect option as -persistent.

- Rootless mode. Agent's root windows are not mapped at startup.

- Removed the zombie file glyphcurs.c from agent distribution.

nxagent-1.3.1-12

- Corrected a typo in the new CopyArea code in GCOps.c where:

  if (srcx > nxagentWidth)  srcx = nxagentWidth;
  if (srcy > nxagentHeight) srcx = nxagentHeight;

  had to be:

  if (srcx > nxagentWidth)  srcx = nxagentWidth;
  if (srcy > nxagentHeight) srcy = nxagentHeight;

- Added handling of the fullscreen command line parameter to the
  options repository.

- Added agent geometry parameters to the options repository.

nxagent-1.3.1-11

- Rootless mode. Added handling of configuration events reported
  for the top-level windows.

- Rootless mode. Children of the root window get the event mask
  selected when the window is created. This makes the keyboard
  work at least with xterm and other simple clients. There are
  still problems with the pointer events.

- Created new Splash.h and Splash.c sources file to contain the
  few splash screen procedures that were previously sparsed in
  multiple files.

- Added traces in all the window creation procedures and in the
  initialization routines called at startup.

- Renamed some source files to make simpler to identify what is
  imported from DIX and what actually pertains to agent.

nxagent-1.3.1-10

- Added the missing RestackWindow screen operation. This solves
  problems of incorrect stacking order observed in menus when
  using the drop shadow feature in the latest KDE versions.

nxagent-1.3.1-9

- The new standard for checking previous inclusion of headers is
  by verifying definition of _Filename_H_ where Filename is the
  base name of the file, for example __Options_H__ in the case
  of "Options.h". This is intended to be a step in reducing the
  number of defines in code prefixed with NXAGENT.

- Updated NX copyright to year 2004. Placed copyright statement
  regarding NXAGENT and NX modifications to the Xnest software
  at the beginning of the file. Checked again if credit is given
  to all the existing copyright owners.

nxagent-1.3.1-8

- Added a new Options repository to store the values currently
  dispersed all over around. The new macros nxagentOption(option)
  and nxagentChangeOption(option, value) should be used from now
  on to access the important values affecting agent's operations.

- General cleanup of code. Removed the remaining references to
  the Xnest legacy code.

nxagent-1.3.1-7

- Some steps forward toward rootless agent. Now all the top level
  windows are correctly created. Drawing to the real screen seems
  to work without problems. It is still not possible to get events
  in the event loop and the remote WM is interfering with the WM
  on the local display.

- More cleanup of code. Some changes to parts added since 1.3.1-5.

nxagent-1.3.1-6

- A drawable with 0 bpp can somehow arrive to the fb layer. The
  problem needs to be better investigated. In the meanwhile a
  quick check is added to correctly identify the ill condition.

- Small fix to allow Num/Caps lock synchronization also on the
  windows platform. This is still to be considered beta quality.

- New options -slow and -fast added to agent. When "fast mode" is
  not set, agent will query the remote X server to get real content
  of drawables. When fast mode is enabled, agent will save the
  round-trip by just clearing the drawable to its background. The
  default mode is "slow", thus agent will always query the remote
  server. When "fast mode" is explicitly set or when NX transport
  is detected and the link is one of MODEM, ISDN and ADSL, agent
  will default to "fast mode". This behaviour can be overridden by
  system administrators by setting the key AGENT_EXTRA_OPTIONS_X
  to "-slow" in node configuration.

nxagent-1.3.1-5

- Created framework for rootless agent. Added a -rootless option.

- Slowly going toward a better organization of nxagent internals.
  Renamed some files and moved things around. Changed some comments
  in Screen.c to be more explainatory.

nxagent-1.3.1-4

- Changed default keyboard model to "pc102" (was "pc101") to correct
  problems with "<" and ">" keys on the German keyboards and, poten-
  tially on other layouts.

- Added new parameter -kbtype to handle both geometry and layout in
  a single form, for example pc102/pl. Parameter -keyboard is still
  supported for backward compatibility.

- Synchronization of Num and Caps lock status is now done comparing
  the real keyboard and the internal state at the time nxagent gets
  the focus. If state doesn't match, a fake keyboard event is sent.

nxagent-1.3.1-3

- Fixed a further problem on CopyArea between windows and pixmaps.

nxagent-1.3.1-2

- Implemented CopyArea on framebuffer when copying from windows to
  pixmaps. Added the -slow command line switch to let nxagent get
  the real content of the window from the X server. This requires
  an expensive round-trip so it is disabled by default.

nxagent-1.3.1-1

- Opened the 1.3.1 branch.

nxagent-1.3.0-32

- Fixed a bug on 16 bpp displays using render extension. Now only
  images which are used by render pictures and which have depth 32
  are created with a different visual color mask. This saves a big
  amount of SetUnpackColormap requests.

nxagent-1.3.0-31

- Fixed a bug in nxagentComposite routine. The macro nxgentPicturePriv
  was used without checking for a null pointer argument.

nxagent-1.3.0-30

- Limitations on bandwidth introduced whenever the agent's window
  is covered are now disabled by default. They can be enabled by
  specifying the -limit option on the command line. The -nolimit
  option is left for compatibility with the previous versions.
  This handy feature caused complaints in the past from users who
  instruct window managers to not move the window having focus on
  top of the stacking order.

nxagent-1.3.0-29

- Removed the warnings issued at compile time.

nxagent-1.3.0-28

- Replaced the corrupted file nxagent.xpm with the original version.

nxagent-1.3.0-27

- Hopefully fixed all the remained memory leaks. Most problems were
  due to agent's render extension not freeing resources on X server.

- Added support for big-endian X server display on render extension.
  Glyphs are reformatted according with the destination order.

- Added per client information for SetUnpackGeometry, now the unpack
  routines should have the correct information for the color mask at
  the end of the split process.


nxagent-1.3.0-26

- Changed the message printed in the log when leaving the dispatch
  loop from 'Error' to 'Info'.

- Moved initialization of _NXFlushSize to nxcompext in order to set
  value at the time NXGetControlParameters() is called.

nxagent-1.3.0-25

- Content of selection is now acquired using a single round-trip.
  If content exceeds 262144 bytes, it is truncated at that size.
  This works in most situations, at least with text, that, by the
  way, is the only target supported at the moment. An improvement
  would be to modify the state machine in a way that the remaining
  data part is got using a second round-trip. This is not difficult
  to do and can be considered for future releases.

- In handling of clipborad we had to disable check on multiple
  convert selection requests from the same client. There is a bug
  in the algorithm that prevents the counter to be reset at the
  appropriate time. This is to be investigated.

nxagent-1.3.0-24

- Added asynchronous handling of GetProperty requests and replies
  using the NXCollectProperty and NXGetCollectedProperty requests
  and the NXCollectPropertyNotify event in NXclipboard.c and in
  Event.c. Implementation is not complete yet and can sometimes
  cause X clients to misbehave.

- Function xnestBitBlitHelper() now always returns NullRegion.
  Handling of graphical expose events should be rewritten so that
  regions are always generated internally to nxagent. Returning a
  null region without checking our event queue, anyway, saves a
  flush of the display buffer and doesn't seem to affect the
  functionalities.

- This version comprises modifications to Events.c, GCOps.c,
  NXClipboard.c, NXwindow.c and Window.c where I found XSync()
  messages (or code used to just send XSync() messages) outside
  any #ifdef ..._DEBUG.

nxagent-1.3.0-16

- A dialog is showed at startup if proxy was not able to load a
  persistent cache.

- Reflected changes introduced in NXGetControlParameters() to add
  more detailed information about the compression settings.

- Fixed a potential bug with the name of the agent's display at the
  time a dialog had to be showed. String was allocated with only 6
  characters. This could lead to dialogs not being showed using
  display ports greater than 9999.

- NX.h is now included by NXControl.h. Removed #include directives
  from other files.
