aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/programs/Xserver/hw/nxagent
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-10-10 17:58:31 +0200
committerReinhard Tartler <siretart@tauware.de>2011-10-10 17:58:31 +0200
commit1c25e92b9ea5811d8ab9c2bfdc0dcb2e4d21bd0a (patch)
tree56b1d4196538a8abb7747e8455b59aa778d6b948 /nx-X11/programs/Xserver/hw/nxagent
parent266b5554943baffafbf1d574f567283cc9792278 (diff)
downloadnx-libs-nxagent/3.2.0-10.tar.gz
nx-libs-nxagent/3.2.0-10.tar.bz2
nx-libs-nxagent/3.2.0-10.zip
Imported nxagent-3.2.0-10.tar.gznxagent/3.2.0-10
Summary: Imported nxagent-3.2.0-10.tar.gz Keywords: Imported nxagent-3.2.0-10.tar.gz into Git repository
Diffstat (limited to 'nx-X11/programs/Xserver/hw/nxagent')
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.c12
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Atoms.c1
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Atoms.h2
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/CHANGELOG117
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig5959
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Clipboard.c64
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Clipboard.h15
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Display.c27
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Drawable.c22
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Events.c204
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Events.h1
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Font.c155
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/GCOps.c18
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Handlers.c15
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Image.c9
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Init.c9
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keyboard.c4
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Literals.h7
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Reconnect.c22
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Screen.c56
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Trap.c15
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Trap.h16
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c3
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c.NX.original3
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c19
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.NX.original19
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.X.original14
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c18
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.NX.original18
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.X.original18
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c77
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c.NX.original77
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c13
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.NX.original13
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.X.original13
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c21
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c.NX.original21
37 files changed, 6943 insertions, 154 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index 5b336279e..c74bc3f56 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Args.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Args.c
@@ -2080,8 +2080,8 @@ void nxagentSetDeferLevel()
deferTimeout = 200;
- tileWidth = 65536;
- tileHeight = 65536;
+ tileWidth = 4096;
+ tileHeight = 4096;
break;
}
@@ -2091,8 +2091,8 @@ void nxagentSetDeferLevel()
deferTimeout = 200;
- tileWidth = 65536;
- tileHeight = 65536;
+ tileWidth = 4096;
+ tileHeight = 4096;
break;
}
@@ -2103,8 +2103,8 @@ void nxagentSetDeferLevel()
deferTimeout = 200;
- tileWidth = 65536;
- tileHeight = 65536;
+ tileWidth = 4096;
+ tileHeight = 4096;
break;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
index 1f412fd27..ac26646ae 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Atoms.c
@@ -78,6 +78,7 @@ static char *nxagentAtomNames[NXAGENT_NUMBER_OF_ATOMS + 1] =
"NXDARWIN", /* 9 */
"CLIPBOARD", /* 10 */
"TIMESTAMP", /* 11 */
+ "UTF8_STRING", /* 12 */
NULL,
NULL
};
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Atoms.h b/nx-X11/programs/Xserver/hw/nxagent/Atoms.h
index 0dd75de43..17b2d8f57 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Atoms.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Atoms.h
@@ -22,7 +22,7 @@
#include "../../include/window.h"
#include "screenint.h"
-#define NXAGENT_NUMBER_OF_ATOMS 13
+#define NXAGENT_NUMBER_OF_ATOMS 14
extern Atom nxagentAtoms[NXAGENT_NUMBER_OF_ATOMS];
diff --git a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
index 285ecb637..1c10208ae 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
+++ b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
@@ -1,5 +1,116 @@
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
@@ -7,8 +118,8 @@ nxagent-3.1.0-7
CVE-2007-5760 CVE-2007-5958 CVE-2007-6427 CVE-2007-6428
CVE-2007-6429 CVE-2008-0006.
-- Handled the case if nxagentCreateDrawableBitmap() fails to create
- the pixmap intended to store the bitmap data.
+- Fixed TR02F02007. Handled the case if nxagentCreateDrawableBitmap()
+ fails to create the pixmap intended to store the bitmap data.
nxagent-3.1.0-6
@@ -81,7 +192,7 @@ nxagent-3.0.0-90
- 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 string comparison in the font replacement routine.
+- Fixed TR07E01762. Problem in comparison of font names.
- Printed the new geometry in the session log when the agent screen is
resized.
diff --git a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig
new file mode 100644
index 000000000..539a7b829
--- /dev/null
+++ b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig
@@ -0,0 +1,5959 @@
+ChangeLog:
+
+nxagent-3.2.0-8-MAR1
+
+- Fixed TR07F02091. Scalable fonts were not correctly listed among
+ available fonts.
+
+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.
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
index 4d8f3f631..a575cabe5 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.c
@@ -31,6 +31,10 @@
#include "Rootless.h"
#include "Clipboard.h"
+#include "gcstruct.h"
+#include "xfixeswire.h"
+#include <X11/extensions/Xfixes.h>
+
/*
* Use asyncronous get property replies.
*/
@@ -115,15 +119,24 @@ static Time lastServerTime;
static Atom serverTARGETS;
static Atom serverTEXT;
+static Atom serverUTF8_STRING;
static Atom clientTARGETS;
static Atom clientTEXT;
static Atom clientCOMPOUND_TEXT;
+static Atom clientUTF8_STRING;
static char szAgentTARGETS[] = "TARGETS";
static char szAgentTEXT[] = "TEXT";
static char szAgentCOMPOUND_TEXT[] = "COMPOUND_TEXT";
+static char szAgentUTF8_STRING[] = "UTF8_STRING";
static char szAgentNX_CUT_BUFFER_CLIENT[] = "NX_CUT_BUFFER_CLIENT";
+/*
+ * Save the values queried from X server.
+ */
+
+XFixesAgentInfoRec nxagentXFixesInfo = { -1, -1, -1, 0 };
+
extern Display *nxagentDisplay;
Bool nxagentValidServerTargets(Atom target);
@@ -299,7 +312,7 @@ FIXME: Do we need this?
result = XChangeProperty (nxagentDisplay,
X->xselectionrequest.requestor,
X->xselectionrequest.property,
- X->xselectionrequest.target,
+ XInternAtom(nxagentDisplay, "ATOM", 0),
sizeof(Atom)*8,
PropModeReplace,
(unsigned char*)&xa_STRING,
@@ -1178,19 +1191,20 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
if (target == clientTARGETS)
{
- Atom xa_STRING[3];
+ Atom xa_STRING[4];
xEvent x;
xa_STRING[0] = XA_STRING;
xa_STRING[1] = clientTEXT;
xa_STRING[2] = clientCOMPOUND_TEXT;
+ xa_STRING[3] = clientUTF8_STRING;
ChangeWindowProperty(pWin,
property,
- target,
+ MakeAtom("ATOM", 4, 1),
sizeof(Atom)*8,
PropModeReplace,
- 3,
+ 4,
&xa_STRING, 1);
x.u.u.type = SelectionNotify;
@@ -1264,7 +1278,10 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
}
}
- if ((target == clientTEXT) || (target == XA_STRING) || (target == clientCOMPOUND_TEXT))
+ if ((target == clientTEXT) ||
+ (target == XA_STRING) ||
+ (target == clientCOMPOUND_TEXT) ||
+ (target == clientUTF8_STRING))
{
lastClientWindowPtr = pWin;
lastClientStage = SelectionStageNone;
@@ -1283,8 +1300,16 @@ int nxagentConvertSelection(ClientPtr client, WindowPtr pWin, Atom selection,
selection = lastSelectionOwner[nxagentClipboardSelection].selection;
}
- XConvertSelection(nxagentDisplay, selection, XA_STRING, serverCutProperty,
- serverWindow, CurrentTime);
+ if (target == clientUTF8_STRING)
+ {
+ XConvertSelection(nxagentDisplay, selection, serverUTF8_STRING, serverCutProperty,
+ serverWindow, CurrentTime);
+ }
+ else
+ {
+ XConvertSelection(nxagentDisplay, selection, XA_STRING, serverCutProperty,
+ serverWindow, CurrentTime);
+ }
#ifdef DEBUG
fprintf(stderr, "nxagentConvertSelection: Sent XConvertSelection with target=[%s], property [%s]\n",
@@ -1465,6 +1490,7 @@ int nxagentInitClipboard(WindowPtr pWin)
serverCutProperty = nxagentAtoms[5]; /* NX_CUT_BUFFER_SERVER */
serverTARGETS = nxagentAtoms[6]; /* TARGETS */
serverTEXT = nxagentAtoms[7]; /* TEXT */
+ serverUTF8_STRING = nxagentAtoms[12]; /* UTF8_STRING */
if (serverCutProperty == None)
{
@@ -1482,6 +1508,29 @@ int nxagentInitClipboard(WindowPtr pWin)
XSetSelectionOwner(nxagentDisplay, serverCutProperty, iWindow, CurrentTime);
+ if (XQueryExtension(nxagentDisplay,
+ "XFIXES",
+ &nxagentXFixesInfo.Opcode,
+ &nxagentXFixesInfo.EventBase,
+ &nxagentXFixesInfo.ErrorBase) == 0)
+ {
+ ErrorF("Unable to initialize XFixes extension.\n");
+ }
+
+ else
+ {
+ #ifdef TEST
+ fprintf(stderr, "nxagentInitClipboard: Registering for XFixesSelectionNotify events.\n");
+ #endif
+
+ XFixesSelectSelectionInput(nxagentDisplay, iWindow, nxagentClipboardAtom,
+ XFixesSetSelectionOwnerNotifyMask |
+ XFixesSelectionWindowDestroyNotifyMask |
+ XFixesSelectionClientCloseNotifyMask);
+
+ nxagentXFixesInfo.Initialized = 1;
+ }
+
if (nxagentSessionId[0])
{
#ifdef TEST
@@ -1525,6 +1574,7 @@ int nxagentInitClipboard(WindowPtr pWin)
clientTARGETS = MakeAtom(szAgentTARGETS, strlen(szAgentTARGETS), True);
clientTEXT = MakeAtom(szAgentTEXT, strlen(szAgentTEXT), True);
clientCOMPOUND_TEXT = MakeAtom(szAgentCOMPOUND_TEXT, strlen(szAgentCOMPOUND_TEXT), True);
+ clientUTF8_STRING = MakeAtom(szAgentUTF8_STRING, strlen(szAgentUTF8_STRING), True);
if (clientCutProperty == None)
{
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.h b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.h
index e4bcbf65e..912260b8b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Clipboard.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Clipboard.h
@@ -19,6 +19,21 @@
#define __Clipboard_H__
/*
+ * Queried at clipboard initialization.
+ */
+
+typedef struct _XFixesAgentInfo
+{
+ int Opcode;
+ int EventBase;
+ int ErrorBase;
+ int Initialized;
+
+} XFixesAgentInfoRec;
+
+extern XFixesAgentInfoRec nxagentXFixesInfo;
+
+/*
* Create the NX_CUT_BUFFER_CLIENT atom and
* initialize the required property to exchange
* data with the X server.
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Display.c b/nx-X11/programs/Xserver/hw/nxagent/Display.c
index c2e131954..9f257e508 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c
@@ -123,12 +123,12 @@ static enum
} reconnectDisplayState;
int nxagentDefaultVisualIndex;
-Colormap *nxagentDefaultColormaps;
+Colormap *nxagentDefaultColormaps = NULL;
int nxagentNumDefaultColormaps;
-int *nxagentDepths;
+int *nxagentDepths = NULL;
int nxagentNumDepths;
-XPixmapFormatValues *nxagentPixmapFormats;
-XPixmapFormatValues *nxagentRemotePixmapFormats;
+XPixmapFormatValues *nxagentPixmapFormats = NULL;
+XPixmapFormatValues *nxagentRemotePixmapFormats = NULL;
int nxagentNumPixmapFormats;
int nxagentRemoteNumPixmapFormats;
Pixel nxagentBlackPixel;
@@ -2500,6 +2500,25 @@ Bool nxagentReconnectDisplay(void *p0)
}
/*
+ * nxagentPixmapFormats and nxagentRemotePixmapFormats
+ * will be reallocated in nxagentInitPixmapFormats().
+ */
+
+ if (nxagentPixmapFormats != NULL)
+ {
+ XFree(nxagentPixmapFormats);
+
+ nxagentPixmapFormats = NULL;
+ }
+
+ if (nxagentRemotePixmapFormats != NULL)
+ {
+ XFree(nxagentRemotePixmapFormats);
+
+ nxagentRemotePixmapFormats = NULL;
+ }
+
+ /*
* Check if all the required pixmap
* formats are supported.
*/
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Drawable.c b/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
index abc228e9c..2c1b07fa5 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
@@ -371,6 +371,7 @@ int nxagentSynchronizeRegion(DrawablePtr pDrawable, RegionPtr pRegion, unsigned
int nBox;
int x, y;
int w, h;
+ int extentWidth, extentHeight;
int tileWidth, tileHeight;
int length, format, leftPad;
int i;
@@ -590,8 +591,20 @@ int nxagentSynchronizeRegion(DrawablePtr pDrawable, RegionPtr pRegion, unsigned
pDrawable -> x, pDrawable -> y, pDrawable -> width, pDrawable -> height);
#endif
- w = tileWidth = (nxagentOption(TileWidth) > pDrawable -> width ? pDrawable -> width : nxagentOption(TileWidth));
- h = tileHeight = (nxagentOption(TileHeight) > pDrawable -> height ? pDrawable -> height : nxagentOption(TileHeight));
+ /*
+ * We are going to synchronize the corrupted
+ * area, so we use the corrupted extents as
+ * maximum size of the image data. It's im-
+ * portant to avoid using the drawable size,
+ * because in case of a huge window it had to
+ * result in a failed data memory allocation.
+ */
+
+ extentWidth = clipRegion -> extents.x2 - clipRegion -> extents.x1;
+ extentHeight = clipRegion -> extents.y2 - clipRegion -> extents.y1;
+
+ w = tileWidth = (nxagentOption(TileWidth) > extentWidth ? extentWidth : nxagentOption(TileWidth));
+ h = tileHeight = (nxagentOption(TileHeight) > extentHeight ? extentHeight : nxagentOption(TileHeight));
#ifdef DEBUG
fprintf(stderr, "nxagentSynchronizeRegion: Using tiles of size [%dx%d].\n", tileWidth, tileHeight);
@@ -2613,7 +2626,10 @@ void nxagentCreateDrawableBitmap(DrawablePtr pDrawable)
* FIXME: A better way it would be create the bitmap
* with the same extents of the clipRegion. This
* requires to save the offset with respect to the
- * drawable origin like in the backing store.
+ * drawable origin like in the backing store. This
+ * becomes particularly important when the drawable
+ * is a huge window, because the pixmap creation
+ * would fail.
*/
pBitmap = nxagentCreatePixmap(pDrawable -> pScreen, pDrawable -> width, pDrawable -> height, pDrawable -> depth);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c
index d2d9f87ea..b37d81adf 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c
@@ -22,6 +22,7 @@
#include "Xproto.h"
#include "screenint.h"
#include "input.h"
+#include "dix.h"
#include "misc.h"
#include "scrnintstr.h"
#include "windowstr.h"
@@ -61,6 +62,9 @@
#include "NXvars.h"
#include "NXproto.h"
+#include "xfixesproto.h"
+#include <X11/extensions/Xfixes.h>
+
#ifdef NXAGENT_FIXKEYS
#include "inputstr.h"
#include "input.h"
@@ -113,6 +117,15 @@ extern int nxagentLastClipboardClient;
extern Bool nxagentRootlessTreesMatch(void);
#endif
+extern Selection *CurrentSelections;
+extern int NumCurrentSelections;
+
+typedef union _XFixesSelectionEvent {
+ int type;
+ XFixesSelectionNotifyEvent xfixesselection;
+ XEvent core;
+} XFixesSelectionEvent;
+
Bool xkbdRunning = False;
pid_t pidkbd;
@@ -742,7 +755,19 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
if (nxagentXkbState.Initialized == 0)
{
+ if (X.xkey.keycode == 66)
+ {
+ nxagentXkbCapsTrap = 1;
+ }
+ else if (X.xkey.keycode == 77)
+ {
+ nxagentXkbNumTrap = 1;
+ }
+
nxagentInitKeyboardState();
+
+ nxagentXkbCapsTrap = 0;
+ nxagentXkbNumTrap = 0;
}
x.u.u.type = KeyRelease;
@@ -1283,10 +1308,6 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
X.xcrossing.mode == NotifyNormal)
{
nxagentUngrabPointerAndKeyboard(&X);
-
- pScreen = nxagentScreen(X.xcrossing.window);
-
- minimize = True;
}
}
@@ -1610,7 +1631,7 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
* state modification event.
*/
- if (nxagentHandleKeyboardEvent(&X) == 0)
+ if (nxagentHandleKeyboardEvent(&X) == 0 && nxagentHandleXFixesSelectionNotify(&X) == 0)
{
#ifdef TEST
fprintf(stderr, "nxagentDispatchEvents: WARNING! Unhandled event code [%d].\n",
@@ -1805,7 +1826,19 @@ int nxagentHandleKeyPress(XEvent *X, enum HandleEventResult *result)
if (nxagentXkbState.Initialized == 0)
{
+ if (X -> xkey.keycode == 66)
+ {
+ nxagentXkbCapsTrap = 1;
+ }
+ else if (X -> xkey.keycode == 77)
+ {
+ nxagentXkbNumTrap = 1;
+ }
+
nxagentInitKeyboardState();
+
+ nxagentXkbCapsTrap = 0;
+ nxagentXkbNumTrap = 0;
}
if (nxagentCheckSpecialKeystroke(&X -> xkey, result))
@@ -2228,7 +2261,11 @@ int nxagentHandleClientMessageEvent(XEvent *X, enum HandleEventResult *result)
{
pScreen = nxagentScreen(X -> xmap.window);
- nxagentMaximizeToFullScreen(pScreen);
+ XMapRaised(nxagentDisplay, nxagentFullscreenWindow);
+
+ XIconifyWindow(nxagentDisplay, nxagentIconWindow,
+ DefaultScreen(nxagentDisplay));
+
}
if (X -> xclient.window == (nxagentOption(Fullscreen) ?
@@ -2273,7 +2310,10 @@ int nxagentHandleKeyboardEvent(XEvent *X)
fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [66] to engage capslock.\n");
#endif
- nxagentSendFakeKey(66);
+ if (!nxagentXkbCapsTrap)
+ {
+ nxagentSendFakeKey(66);
+ }
}
if (nxagentXkbState.Caps == 1 &&
@@ -2288,6 +2328,18 @@ int nxagentHandleKeyboardEvent(XEvent *X)
nxagentSendFakeKey(66);
}
+ if (nxagentXkbState.Caps == 0 &&
+ !(nxagentXkbState.Locked & CAPSFLAG_IN_EVENT) &&
+ nxagentXkbCapsTrap)
+ {
+
+ #ifdef TEST
+ fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [66] to release capslock.\n");
+ #endif
+
+ nxagentSendFakeKey(66);
+ }
+
if (nxagentXkbState.Num == 0 &&
(nxagentXkbState.Locked & NUMFLAG_IN_EVENT))
{
@@ -2297,7 +2349,10 @@ int nxagentHandleKeyboardEvent(XEvent *X)
fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [77] to engage numlock.\n");
#endif
- nxagentSendFakeKey(77);
+ if (!nxagentXkbNumTrap)
+ {
+ nxagentSendFakeKey(77);
+ }
}
if (nxagentXkbState.Num == 1 &&
@@ -2312,12 +2367,95 @@ int nxagentHandleKeyboardEvent(XEvent *X)
nxagentSendFakeKey(77);
}
+ if (nxagentXkbState.Num == 0 &&
+ !(nxagentXkbState.Locked & NUMFLAG_IN_EVENT) &&
+ nxagentXkbNumTrap)
+ {
+
+ #ifdef TEST
+ fprintf(stderr, "nxagentHandleKeyboardEvent: Sending fake key [77] to release numlock.\n");
+ #endif
+
+ nxagentSendFakeKey(77);
+ }
+
return 1;
}
return 0;
}
+int nxagentHandleXFixesSelectionNotify(XEvent *X)
+{
+ int i;
+ Atom local;
+
+ XFixesSelectionEvent *xfixesEvent = (XFixesSelectionEvent *) X;
+
+ if (nxagentXFixesInfo.Initialized == 0 ||
+ xfixesEvent -> type != (nxagentXFixesInfo.EventBase + XFixesSelectionNotify))
+ return 0;
+
+ #ifdef TEST
+ fprintf(stderr, "nxagentHandleXFixesSelectionNotify: Handling event.\n");
+ #endif
+
+ local = nxagentRemoteToLocalAtom(xfixesEvent -> xfixesselection.selection);
+
+ if (SelectionCallback)
+ {
+ i = 0;
+
+ while ((i < NumCurrentSelections) &&
+ CurrentSelections[i].selection != local)
+ i++;
+
+ if (i < NumCurrentSelections)
+ {
+ SelectionInfoRec info;
+
+ if (CurrentSelections[i].client != 0)
+ {
+ #ifdef TEST
+ fprintf(stderr, "nxagentHandleXFixesSelectionNotify: Do nothing.\n");
+ #endif
+
+ return 1;
+ }
+
+ #ifdef TEST
+ fprintf(stderr, "nxagentHandleXFixesSelectionNotify: Calling callbacks for %d [%s] selection.\n",
+ CurrentSelections[i].selection, NameForAtom(CurrentSelections[i].selection));
+ #endif
+
+ #ifdef DEBUG
+ fprintf(stderr, "nxagentHandleXFixesSelectionNotify: Subtype ");
+
+ switch (xfixesEvent -> xfixesselection.subtype)
+ {
+ case SelectionSetOwner:
+ fprintf(stderr, "SelectionSetOwner.\n");
+ break;
+ case SelectionWindowDestroy:
+ fprintf(stderr, "SelectionWindowDestroy.\n");
+ break;
+ case SelectionClientClose:
+ fprintf(stderr, "SelectionClientClose.\n");
+ break;
+ default:
+ fprintf(stderr, ".\n");
+ break;
+ }
+ #endif
+
+ info.selection = &CurrentSelections[i];
+ info.kind = xfixesEvent->xfixesselection.subtype;
+ CallCallbacks(&SelectionCallback, &info);
+ }
+ }
+ return 1;
+}
+
int nxagentHandleProxyEvent(XEvent *X)
{
switch (X -> xclient.data.l[0])
@@ -2924,56 +3062,6 @@ int nxagentHandleReparentNotify(XEvent* X)
return 1;
}
- else
- {
- /*
- * This code is supposed to detect if a window manager
- * is running but in some cases it may be unreliable.
- * Each window manager behaves differently so the check
- * can fail for some less common WMs.
- */
-
- if (!nxagentWMIsRunning && nxagentOption(Fullscreen) &&
- X -> xreparent.window == nxagentDefaultWindows[pScreen -> myNum])
- {
- #ifdef WARNING
- fprintf(stderr, "Warning: The agent window was reparented. Is a "
- "window manager running?\n");
- #endif
-
- /*
- * If no window manager is running and we are supposed to
- * be in fullscreen mode then don't wait for the reparent
- * event. We can assume that there is an undetected window
- * manager and, as switching to fullscreen could have fail-
- * ed, we try it again.
- */
-
- nxagentSwitchFullscreen(pScreen, True);
-
- nxagentWMIsRunning = True;
- }
- else if (nxagentWMIsRunning && X -> xreparent.window ==
- nxagentDefaultWindows[pScreen -> myNum] && X -> xreparent.parent ==
- RootWindow(nxagentDisplay, (pScreen -> myNum)))
- {
- #ifdef WARNING
-
- fprintf(stderr, "Warning: The agent window has been reparented to the root.\n");
-
- fprintf(stderr, "Warning: No window manager seems to be running.\n");
-
- #endif
-
- /*
- * The agent window was unexpectedly reparented
- * to the root window. We assume that the window
- * manager was terminated.
- */
-
- nxagentWMIsRunning = False;
- }
- }
return 1;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.h b/nx-X11/programs/Xserver/hw/nxagent/Events.h
index 4870f83e0..ab0d25764 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.h
@@ -115,6 +115,7 @@ extern int nxagentHandlePropertyNotify(XEvent *X);
extern int nxagentHandleKeyPress(XEvent *X, enum HandleEventResult*);
extern int nxagentHandleReparentNotify(XEvent *X);
extern int nxagentHandleConfigureNotify(XEvent *X);
+extern int nxagentHandleXFixesSelectionNotify(XEvent *X);
/*
* Send a fake keystroke to the remote
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c
index ff968bcc5..e552f826b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Font.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c
@@ -101,6 +101,8 @@ static XFontStruct *nxagentLoadQueryFont(register Display *dpy , char *fontName
int nxagentFreeFont(XFontStruct *fs);
static Bool nxagentGetFontServerPath(char * fontServerPath);
+static char * nxagentMakeScalableFontName(const char *fontName, int scalableResolution);
+
RESTYPE RT_NX_FONT;
#ifdef NXAGENT_RECONNECT_FONT_DEBUG
@@ -419,13 +421,59 @@ Bool nxagentFontFind(const char *name, int *pos)
Bool nxagentFontLookUp(const char *name)
{
int i;
- if (name)
- if (!strlen(name))
- return 0;
- if (nxagentFontFind(name, &i))
- return (nxagentRemoteFontList.list[i]->status > 0);
- else
+ int result;
+
+ char *scalable;
+
+ if (name != NULL && strlen(name) == 0)
+ {
+ return 0;
+ }
+
+ result = nxagentFontFind(name, &i);
+
+ scalable = NULL;
+
+ /*
+ * Let's try with the scalable font description.
+ */
+
+ if (result == 0)
+ {
+ scalable = nxagentMakeScalableFontName(name, 0);
+
+ if (scalable != NULL)
+ {
+ result = nxagentFontFind(scalable, &i);
+
+ free(scalable);
+ }
+ }
+
+ /*
+ * Let's try again after replacing zero to xdpi and ydpi in the pattern.
+ */
+
+ if (result == 0)
+ {
+ scalable = nxagentMakeScalableFontName(name, 1);
+
+ if (scalable != NULL)
+ {
+ result = nxagentFontFind(scalable, &i);
+
+ free(scalable);
+ }
+ }
+
+ if (result == 0)
+ {
return 0;
+ }
+ else
+ {
+ return (nxagentRemoteFontList.list[i]->status > 0);
+ }
}
Bool nxagentRealizeFont(ScreenPtr pScreen, FontPtr pFont)
@@ -768,6 +816,11 @@ static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontP
fprintf(stderr, "nxagentLoadBestQueryFont: Weight '%d' of more accurate font '%s' .\n", weight, substFontBuf);
#endif
}
+
+ for (j = 0; j < numSearchFields; j++)
+ {
+ free (searchFields[j]);
+ }
}
}
@@ -783,6 +836,11 @@ static XFontStruct *nxagentLoadBestQueryFont(Display* dpy, char *fontName, FontP
free (substFontBuf);
+ for (j = 0; j < numFontFields; j++)
+ {
+ free (fontNameFields[j]);
+ }
+
return fontStruct;
}
@@ -1688,3 +1746,88 @@ int nxagentSplitString(char *string, char *fields[], int nfields, char *sep)
return i;
}
+char *nxagentMakeScalableFontName(const char *fontName, int scalableResolution)
+{
+ char *scalableFontName;
+ const char *s;
+ int len;
+ int field;
+
+ len = strlen(fontName) + 1;
+
+ scalableFontName = malloc(len);
+
+ if (scalableFontName == NULL)
+ {
+ #ifdef PANIC
+ fprintf(stderr, "nxagentMakeScalableFontName: PANIC! malloc() failed.\n");
+ #endif
+
+ return NULL;
+ }
+
+ scalableFontName[0] = 0;
+
+ if (*fontName != '-')
+ {
+ goto MakeScalableFontNameError;
+ }
+
+ s = fontName;
+
+ field = 0;
+
+ while (s != NULL)
+ {
+ s = strchr(s + 1, '-');
+
+ if (s != NULL)
+ {
+ if (field == 6 || field == 7 || field == 11)
+ {
+ /*
+ * PIXEL_SIZE || POINT_SIZE || AVERAGE_WIDTH
+ */
+
+ strcat(scalableFontName, "-0");
+ }
+ else if (scalableResolution == 1 && (field == 8 || field == 9))
+ {
+ /*
+ * RESOLUTION_X || RESOLUTION_Y
+ */
+
+ strcat(scalableFontName, "-0");
+ }
+ else
+ {
+ strncat(scalableFontName, fontName, s - fontName);
+ }
+
+ fontName = s;
+ }
+ else
+ {
+ strcat(scalableFontName, fontName);
+ }
+
+ field++;
+ }
+
+ if (field != 14)
+ {
+ goto MakeScalableFontNameError;
+ }
+
+ return scalableFontName;
+
+MakeScalableFontNameError:
+
+ free(scalableFontName);
+
+ #ifdef DEBUG
+ fprintf(stderr, "nxagentMakeScalableFontName: Invalid font name.\n");
+ #endif
+
+ return NULL;
+}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/GCOps.c b/nx-X11/programs/Xserver/hw/nxagent/GCOps.c
index 7a6432a8e..83aa04f11 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/GCOps.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/GCOps.c
@@ -451,6 +451,8 @@ FIXME: The popup could be synchronized with one
CARD32 targetAttributes[2];
+ Bool pClipRegionFree = True;
+
/*
* As we want to copy only the synchronized
* areas of the source drawable, we create
@@ -503,6 +505,13 @@ FIXME: The popup could be synchronized with one
nxagentChangeClip(targetGC, CT_REGION, pClipRegion, 0);
+ /*
+ * Next call to nxagentChangeClip() will destroy
+ * pClipRegion, so it has not to be freed.
+ */
+
+ pClipRegionFree = False;
+
#ifdef DEBUG
fprintf(stderr, "nxagentDeferCopyArea: Going to execute a copy area with clip mask "
"[%d,%d,%d,%d] and origin [%d,%d].\n", ((RegionPtr) targetGC -> clientClip) -> extents.x1,
@@ -518,6 +527,11 @@ FIXME: The popup could be synchronized with one
nxagentChangeClip(targetGC, CT_NONE, NullRegion, 0);
+ if (pClipRegionFree == True)
+ {
+ nxagentFreeRegion(pSrcDrawable, pClipRegion);
+ }
+
FreeScratchGC(targetGC);
}
else
@@ -1184,7 +1198,9 @@ void nxagentPolySegment(DrawablePtr pDrawable, GCPtr pGC,
(XSegment *) pSegments, nSegments);
}
+ SET_GC_TRAP();
fbPolySegment(nxagentVirtualDrawable(pDrawable), pGC, nSegments, pSegments);
+ RESET_GC_TRAP();
return;
}
@@ -1193,7 +1209,9 @@ void nxagentPolySegment(DrawablePtr pDrawable, GCPtr pGC,
XDrawSegments(nxagentDisplay, nxagentDrawable(pDrawable), nxagentGC(pGC),
(XSegment *) pSegments, nSegments);
+ SET_GC_TRAP();
fbPolySegment(pDrawable, pGC, nSegments, pSegments);
+ RESET_GC_TRAP();
}
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
index dc9770c75..3abc3575f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
@@ -33,6 +33,7 @@
#include "Millis.h"
#include "NXlib.h"
+#include "Shadow.h"
/*
* Set here the required log level.
@@ -705,6 +706,7 @@ void nxagentShadowBlockHandler(pointer data, struct timeval **timeout, pointer m
int changed;
int suspended = 0;
int result;
+ int width_, height_;
#ifdef BLOCKS
fprintf(stderr, "[Begin block]\n");
@@ -754,6 +756,19 @@ void nxagentShadowBlockHandler(pointer data, struct timeval **timeout, pointer m
changed = 0;
+ NXShadowGetScreenSize(&width_, &height_);
+
+ if (width_ != nxagentShadowWidth || height_ != nxagentShadowHeight)
+ {
+ /*
+ * The master session has been resized.
+ */
+
+ NXShadowSetScreenSize(&nxagentShadowWidth, &nxagentShadowHeight);
+
+ nxagentShadowAdaptToRatio();
+ }
+
nxagentShadowPoll(nxagentShadowPixmapPtr, nxagentShadowGCPtr, nxagentShadowDepth, nxagentShadowWidth,
nxagentShadowHeight, nxagentShadowBuffer, &changed, &suspended);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Image.c b/nx-X11/programs/Xserver/hw/nxagent/Image.c
index 5108046b8..4e08f6bf1 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Image.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Image.c
@@ -922,7 +922,12 @@ void nxagentRealizeImage(DrawablePtr pDrawable, GCPtr pGC, int depth,
int numSubImages;
int totalHeight;
- const int subSize = (MAX_REQUEST_SIZE << 2) - sizeof(xPutImageReq);
+ /*
+ * NXPutPackedImage is longer than PutPackedImage
+ * so that we subtract the bigger one to be sure.
+ */
+
+ const int subSize = (MAX_REQUEST_SIZE << 2) - sizeof(xNXPutPackedImageReq);
Visual *pVisual = NULL;
@@ -1171,7 +1176,7 @@ FIXME: Should use an unpack resource here.
*/
pack = (nxagentOption(LinkType) != LINK_TYPE_NONE &&
- packMethod != PACK_NONE && depth > 8);
+ packMethod != PACK_NONE && depth > 8 && format == ZPixmap);
lossless = (packMethod == nxagentPackLossless);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Init.c b/nx-X11/programs/Xserver/hw/nxagent/Init.c
index 197bd8c14..4e47f8f81 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c
@@ -74,7 +74,7 @@ is" without express or implied warranty.
#undef DEBUG
#undef DUMP
-#define NXAGENT_VERSION "3.1.0"
+#define NXAGENT_VERSION "3.2.0"
/*
* ProcVector array defined in tables.c.
@@ -332,6 +332,13 @@ FIXME: These variables, if not removed at all because have probably
nxagentAllocateGraphicContexts();
nxagentDoFullGeneration = nxagentFullGeneration;
+
+ /*
+ * Use a solid black root window
+ * background.
+ */
+
+ blackRoot = TRUE;
}
void InitInput(argc, argv)
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
index dbdfc5b19..88e99a1a0 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
@@ -444,7 +444,7 @@ N/A
max_keycode - min_keycode + 1,
&mapWidth);
- if (keymap == NULL)
+ if (keymap64 == NULL)
{
XFreeModifiermap(modifier_keymap);
@@ -756,6 +756,8 @@ XkbError:
XkbInitKeyboardDeviceStruct((pointer)pDev, &names, &keySyms, modmap,
nxagentBell, nxagentChangeKeyboardControl);
+ free(nxagentXkbConfigFilePath);
+
if (!nxagentKeyboard ||
(nxagentKeyboard && (strcmp(nxagentKeyboard, "query") == 0)))
{
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Literals.h b/nx-X11/programs/Xserver/hw/nxagent/Literals.h
index e80f62230..f6aab84e4 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Literals.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Literals.h
@@ -142,6 +142,13 @@ static char *nxagentRequestLiteral[] =
"GetPointerMapping",
"SetModifierMapping",
"GetModifierMapping",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
"NoOperation"
};
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
index de5f78fad..ce3e6ee05 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
@@ -553,12 +553,6 @@ Bool nxagentReconnectSession(void)
strcmp(nxagentKeyboard, nxagentOldKeyboard) != 0 ||
strcmp(nxagentKeyboard, "query") == 0)
{
- if (nxagentOldKeyboard != NULL)
- {
- xfree(nxagentOldKeyboard);
-
- nxagentOldKeyboard = NULL;
- }
if (nxagentResetKeyboard() == 0)
{
@@ -576,6 +570,15 @@ Bool nxagentReconnectSession(void)
}
}
+ nxagentXkbState.Initialized = 0;
+
+ if (nxagentOldKeyboard != NULL)
+ {
+ xfree(nxagentOldKeyboard);
+
+ nxagentOldKeyboard = NULL;
+ }
+
nxagentDeactivatePointerGrab();
nxagentWakeupByReconnect();
@@ -686,6 +689,13 @@ nxagentReconnectError:
nxagentDisconnectDisplay();
}
+ if (nxagentOldKeyboard != NULL)
+ {
+ xfree(nxagentOldKeyboard);
+
+ nxagentOldKeyboard = NULL;
+ }
+
return 0;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Screen.c b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
index 4cc1075af..34d498fb0 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c
@@ -78,7 +78,16 @@ is" without express or implied warranty.
#include "Utils.h"
#include "Xrandr.h"
+
+#define GC XlibGC
+#define Font XlibFont
+#define KeySym XlibKeySym
+#define XID XlibXID
#include <X11/Xlibint.h>
+#undef GC
+#undef Font
+#undef KeySym
+#undef XID
#include "Xatom.h"
#include "Xproto.h"
@@ -309,10 +318,44 @@ void nxagentMaximizeToFullScreen(ScreenPtr pScreen)
/*
XUnmapWindow(nxagentDisplay, nxagentIconWindow);
*/
+/*
+FIXME: We'll chech for ReparentNotify and LeaveNotify events after XReparentWindow()
+ in order to avoid the session window is iconified.
+ We could avoid the sesssion window is iconified when a LeaveNotify event is received,
+ so this check would be unnecessary.
+*/
+ struct timeval timeout;
+ int i;
+ XEvent e;
+
+ XReparentWindow(nxagentDisplay, nxagentFullscreenWindow,
+ RootWindow(nxagentDisplay, DefaultScreen(nxagentDisplay)), 0, 0);
+
+ for (i = 0; i < 100 && nxagentWMIsRunning; i++)
+ {
+ #ifdef TEST
+ fprintf(stderr, "nxagentSwitchFullscreen: WARNING! Going to wait for the ReparentNotify event.\n");
+ #endif
+
+ if (XCheckTypedWindowEvent(nxagentDisplay, nxagentFullscreenWindow, ReparentNotify, &e))
+ {
+ break;
+ }
+
+ XSync(nxagentDisplay, 0);
+
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 50 * 1000;
+
+ nxagentWaitEvents(nxagentDisplay, &timeout);
+ }
+
XMapRaised(nxagentDisplay, nxagentFullscreenWindow);
XIconifyWindow(nxagentDisplay, nxagentIconWindow,
DefaultScreen(nxagentDisplay));
+
+ while (XCheckTypedWindowEvent(nxagentDisplay, nxagentFullscreenWindow, LeaveNotify, &e));
/*
XMapWindow(nxagentDisplay, nxagentIconWindow);
*/
@@ -2872,6 +2915,15 @@ int nxagentShadowPoll(PixmapPtr nxagentShadowPixmapPtr, GCPtr nxagentShadowGCPtr
width = pBox[n].y1 - pBox[n].x1;/* y1 = x2 */
height = y2 - pBox[n].x2; /* x2 = y1 */
+ if((x + width) > nxagentShadowWidth || (y + height) > nxagentShadowHeight)
+ {
+ /*
+ * Out of bounds. Maybe a resize of the master session is going on.
+ */
+
+ continue;
+ }
+
line = PixmapBytePad(width, nxagentMasterDepth);
#ifdef DEBUG
@@ -3826,8 +3878,8 @@ void nxagentShadowAdaptToRatio(void)
pScreen = screenInfo.screens[0];
- nxagentShadowSetRatio(nxagentOption(Width) * 1.0 / WindowTable[0] -> drawable.width,
- nxagentOption(Height) * 1.0 / WindowTable[0] -> drawable.height);
+ nxagentShadowSetRatio(nxagentOption(Width) * 1.0 / nxagentShadowWidth,
+ nxagentOption(Height) * 1.0 / nxagentShadowHeight);
nxagentShadowCreateMainWindow(pScreen, WindowTable[0], nxagentShadowWidth, nxagentShadowHeight);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Trap.c b/nx-X11/programs/Xserver/hw/nxagent/Trap.c
index 3b801d803..2796b2f14 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Trap.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Trap.c
@@ -96,4 +96,19 @@ int nxagentLosslessTrap = 0;
int nxagentSplitTrap = 0;
+/*
+ * Set to avoid CapsLock synchronization
+ * problems when CapsLock is the first
+ * key to be pressed in the session.
+ */
+
+int nxagentXkbCapsTrap = 0;
+
+/*
+ * Set to avoid NumLock synchronization
+ * problems when NumLock is the first
+ * key to be pressed in the session.
+ */
+
+int nxagentXkbNumTrap = 0;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Trap.h b/nx-X11/programs/Xserver/hw/nxagent/Trap.h
index f699306ab..493a18a1b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Trap.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Trap.h
@@ -97,4 +97,20 @@ extern int nxagentLosslessTrap;
extern int nxagentSplitTrap;
+/*
+ * Set to avoid CapsLock synchronization
+ * problems when CapsLock is the first
+ * key to be pressed in the session.
+ */
+
+extern int nxagentXkbCapsTrap;
+
+/*
+ * Set to avoid NumLock synchronization
+ * problems when NumLock is the first
+ * key to be pressed in the session.
+ */
+
+extern int nxagentXkbNumTrap;
+
#endif /* __Trap_H__ */
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
index 845c6cfb9..f84ca0e03 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c
@@ -3835,6 +3835,8 @@ ProcSetScreenSaver (register ClientPtr client)
{
ScreenSaverInterval = defaultScreenSaverInterval;
}
+
+ SetScreenSaverTimer();
}
#ifdef TEST
@@ -3846,7 +3848,6 @@ ProcSetScreenSaver (register ClientPtr client)
#endif
- SetScreenSaverTimer();
return (client->noClientException);
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c.NX.original
index 845c6cfb9..f84ca0e03 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXdispatch.c.NX.original
@@ -3835,6 +3835,8 @@ ProcSetScreenSaver (register ClientPtr client)
{
ScreenSaverInterval = defaultScreenSaverInterval;
}
+
+ SetScreenSaverTimer();
}
#ifdef TEST
@@ -3846,7 +3848,6 @@ ProcSetScreenSaver (register ClientPtr client)
#endif
- SetScreenSaverTimer();
return (client->noClientException);
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c
index 06dabddaa..f51a8bce9 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c
@@ -69,6 +69,17 @@
#undef DEBUG
#undef TEST
+#else
+
+#include "picturestr.h"
+#include "glyphstr.h"
+
+#endif
+
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
#endif
/*
@@ -401,8 +412,12 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
{
int size;
GlyphPtr glyph;
-
- size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ size_t padded_width;
+
+ padded_width = PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ if (gi->height && padded_width > (UINT32_MAX - sizeof(GlyphRec))/gi->height)
+ return 0;
+ size = gi->height * padded_width;
glyph = (GlyphPtr) xalloc (size + sizeof (GlyphRec));
if (!glyph)
return 0;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.NX.original
index 06dabddaa..f51a8bce9 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.NX.original
@@ -69,6 +69,17 @@
#undef DEBUG
#undef TEST
+#else
+
+#include "picturestr.h"
+#include "glyphstr.h"
+
+#endif
+
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
#endif
/*
@@ -401,8 +412,12 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
{
int size;
GlyphPtr glyph;
-
- size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ size_t padded_width;
+
+ padded_width = PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ if (gi->height && padded_width > (UINT32_MAX - sizeof(GlyphRec))/gi->height)
+ return 0;
+ size = gi->height * padded_width;
glyph = (GlyphPtr) xalloc (size + sizeof (GlyphRec));
if (!glyph)
return 0;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.X.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.X.original
index 45c5dd975..9f4d1c87b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.X.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c.X.original
@@ -43,6 +43,12 @@
#include "picturestr.h"
#include "glyphstr.h"
+#if HAVE_STDINT_H
+#include <stdint.h>
+#elif !defined(UINT32_MAX)
+#define UINT32_MAX 0xffffffffU
+#endif
+
/*
* From Knuth -- a good choice for hash/rehash values is p, p-2 where
* p and p-2 are both prime. These tables are sized to have an extra 10%
@@ -334,8 +340,12 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
{
int size;
GlyphPtr glyph;
-
- size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ size_t padded_width;
+
+ padded_width = PixmapBytePad (gi->width, glyphDepths[fdepth]);
+ if (gi->height && padded_width > (UINT32_MAX - sizeof(GlyphRec))/gi->height)
+ return 0;
+ size = gi->height * padded_width;
glyph = (GlyphPtr) xalloc (size + sizeof (GlyphRec));
if (!glyph)
return 0;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c
index 00c55cde7..de2df855f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c
@@ -1893,6 +1893,8 @@ ProcRenderCreateCursor (ClientPtr client)
pScreen = pSrc->pDrawable->pScreen;
width = pSrc->pDrawable->width;
height = pSrc->pDrawable->height;
+ if (height && width > UINT32_MAX/(height*sizeof(CARD32)))
+ return BadAlloc;
if ( stuff->x > width
|| stuff->y > height )
return (BadMatch);
@@ -2353,6 +2355,8 @@ static int ProcRenderCreateLinearGradient (ClientPtr client)
LEGAL_NEW_RESOURCE(stuff->pid, client);
len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -2955,18 +2959,18 @@ SProcRenderCreateSolidFill(ClientPtr client)
return (*ProcRenderVector[stuff->renderReqType]) (client);
}
-static void swapStops(void *stuff, int n)
+static void swapStops(void *stuff, int num)
{
- int i;
+ int i, n;
CARD32 *stops;
CARD16 *colors;
stops = (CARD32 *)(stuff);
- for (i = 0; i < n; ++i) {
+ for (i = 0; i < num; ++i) {
swapl(stops, n);
++stops;
}
colors = (CARD16 *)(stops);
- for (i = 0; i < 4*n; ++i) {
+ for (i = 0; i < 4*num; ++i) {
swaps(stops, n);
++stops;
}
@@ -2989,6 +2993,8 @@ SProcRenderCreateLinearGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -3016,6 +3022,8 @@ SProcRenderCreateRadialGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -3040,6 +3048,8 @@ SProcRenderCreateConicalGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.NX.original
index 00c55cde7..de2df855f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.NX.original
@@ -1893,6 +1893,8 @@ ProcRenderCreateCursor (ClientPtr client)
pScreen = pSrc->pDrawable->pScreen;
width = pSrc->pDrawable->width;
height = pSrc->pDrawable->height;
+ if (height && width > UINT32_MAX/(height*sizeof(CARD32)))
+ return BadAlloc;
if ( stuff->x > width
|| stuff->y > height )
return (BadMatch);
@@ -2353,6 +2355,8 @@ static int ProcRenderCreateLinearGradient (ClientPtr client)
LEGAL_NEW_RESOURCE(stuff->pid, client);
len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -2955,18 +2959,18 @@ SProcRenderCreateSolidFill(ClientPtr client)
return (*ProcRenderVector[stuff->renderReqType]) (client);
}
-static void swapStops(void *stuff, int n)
+static void swapStops(void *stuff, int num)
{
- int i;
+ int i, n;
CARD32 *stops;
CARD16 *colors;
stops = (CARD32 *)(stuff);
- for (i = 0; i < n; ++i) {
+ for (i = 0; i < num; ++i) {
swapl(stops, n);
++stops;
}
colors = (CARD16 *)(stops);
- for (i = 0; i < 4*n; ++i) {
+ for (i = 0; i < 4*num; ++i) {
swaps(stops, n);
++stops;
}
@@ -2989,6 +2993,8 @@ SProcRenderCreateLinearGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -3016,6 +3022,8 @@ SProcRenderCreateRadialGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -3040,6 +3048,8 @@ SProcRenderCreateConicalGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.X.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.X.original
index d2759ab10..d25d49756 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.X.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c.X.original
@@ -1505,6 +1505,8 @@ ProcRenderCreateCursor (ClientPtr client)
pScreen = pSrc->pDrawable->pScreen;
width = pSrc->pDrawable->width;
height = pSrc->pDrawable->height;
+ if (height && width > UINT32_MAX/(height*sizeof(CARD32)))
+ return BadAlloc;
if ( stuff->x > width
|| stuff->y > height )
return (BadMatch);
@@ -1918,6 +1920,8 @@ static int ProcRenderCreateLinearGradient (ClientPtr client)
LEGAL_NEW_RESOURCE(stuff->pid, client);
len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -2489,18 +2493,18 @@ SProcRenderCreateSolidFill(ClientPtr client)
return (*ProcRenderVector[stuff->renderReqType]) (client);
}
-static void swapStops(void *stuff, int n)
+static void swapStops(void *stuff, int num)
{
- int i;
+ int i, n;
CARD32 *stops;
CARD16 *colors;
stops = (CARD32 *)(stuff);
- for (i = 0; i < n; ++i) {
+ for (i = 0; i < num; ++i) {
swapl(stops, n);
++stops;
}
colors = (CARD16 *)(stops);
- for (i = 0; i < 4*n; ++i) {
+ for (i = 0; i < 4*num; ++i) {
swaps(stops, n);
++stops;
}
@@ -2523,6 +2527,8 @@ SProcRenderCreateLinearGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateLinearGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -2550,6 +2556,8 @@ SProcRenderCreateRadialGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateRadialGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
@@ -2574,6 +2582,8 @@ SProcRenderCreateConicalGradient (ClientPtr client)
swapl(&stuff->nStops, n);
len = (client->req_len << 2) - sizeof(xRenderCreateConicalGradientReq);
+ if (stuff->nStops > UINT32_MAX/(sizeof(xFixed) + sizeof(xRenderColor)))
+ return BadLength;
if (len != stuff->nStops*(sizeof(xFixed) + sizeof(xRenderColor)))
return BadLength;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c
index 9af5c4187..91e03cb0e 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c
@@ -201,6 +201,10 @@ void RegisterResourceName (RESTYPE type, char *name)
#endif
+#ifdef NXAGENT_SERVER
+static int nxagentResChangedFlag = 0;
+#endif
+
RESTYPE
CreateNewResourceType(DeleteType deleteFunc)
{
@@ -590,6 +594,9 @@ AddResource(XID id, RESTYPE type, pointer value)
res->value = value;
*head = res;
rrec->elements++;
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 1;
+ #endif
if (!(id & SERVER_BIT) && (id >= rrec->expectID))
rrec->expectID = id + 1;
return TRUE;
@@ -675,6 +682,9 @@ FreeResource(XID id, RESTYPE skipDeleteFuncType)
RESTYPE rtype = res->type;
*prev = res->next;
elements = --*eltptr;
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 1;
+ #endif
if (rtype & RC_CACHED)
FlushClientCaches(res->id);
if (rtype != skipDeleteFuncType)
@@ -715,6 +725,9 @@ FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
if (res->id == id && res->type == type)
{
*prev = res->next;
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 1;
+ #endif
if (type & RC_CACHED)
FlushClientCaches(res->id);
if (!skipFree)
@@ -809,12 +822,44 @@ RestartLoop:
next = this->next;
if (!type || this->type == type) {
elements = *eltptr;
+
+ /*
+ * FIXME:
+ * It is not safe to let a function change the resource
+ * table we are reading!
+ */
+
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 0;
+ #endif
(*func)(this->value, this->id, cdata);
+
+ /*
+ * Avoid that a call to RebuildTable() could invalidate the
+ * pointer. This is safe enough, because in RebuildTable()
+ * the new pointer is allocated just before the old one is
+ * freed, so it can't point to the same address.
+ */
+
#ifdef NXAGENT_SERVER
if (*resptr != resources)
goto RestartLoop;
#endif
+
+ /*
+ * It's not enough to check if the number of elements has
+ * changed, beacause it could happen that the number of
+ * resources that have been added matches the number of
+ * the freed ones.
+ * 'nxagentResChangedFlag' is set if a resource has been
+ * added or freed.
+ */
+
+ #ifdef NXAGENT_SERVER
+ if (*eltptr != elements || nxagentResChangedFlag)
+ #else
if (*eltptr != elements)
+ #endif
next = resources[i]; /* start over */
}
}
@@ -861,12 +906,44 @@ RestartLoop:
{
next = this->next;
elements = *eltptr;
+
+ /*
+ * FIXME:
+ * It is not safe to let a function change the resource
+ * table we are reading!
+ */
+
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 0;
+ #endif
(*func)(this->value, this->id, this->type, cdata);
+
+ /*
+ * Avoid that a call to RebuildTable() could invalidate the
+ * pointer. This is safe enough, because in RebuildTable()
+ * the new pointer is allocated just before the old one is
+ * freed, so it can't point to the same address.
+ */
+
#ifdef NXAGENT_SERVER
if (*resptr != resources)
goto RestartLoop;
#endif
+
+ /*
+ * It's not enough to check if the number of elements has
+ * changed, beacause it could happen that the number of
+ * resources that have been added matches the number of
+ * the freed ones.
+ * 'nxagentResChangedFlag' is set if a resource has been
+ * added or freed.
+ */
+
+ #ifdef NXAGENT_SERVER
+ if (*eltptr != elements || nxagentResChangedFlag)
+ #else
if (*eltptr != elements)
+ #endif
next = resources[i]; /* start over */
}
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c.NX.original
index 9af5c4187..91e03cb0e 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c.NX.original
@@ -201,6 +201,10 @@ void RegisterResourceName (RESTYPE type, char *name)
#endif
+#ifdef NXAGENT_SERVER
+static int nxagentResChangedFlag = 0;
+#endif
+
RESTYPE
CreateNewResourceType(DeleteType deleteFunc)
{
@@ -590,6 +594,9 @@ AddResource(XID id, RESTYPE type, pointer value)
res->value = value;
*head = res;
rrec->elements++;
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 1;
+ #endif
if (!(id & SERVER_BIT) && (id >= rrec->expectID))
rrec->expectID = id + 1;
return TRUE;
@@ -675,6 +682,9 @@ FreeResource(XID id, RESTYPE skipDeleteFuncType)
RESTYPE rtype = res->type;
*prev = res->next;
elements = --*eltptr;
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 1;
+ #endif
if (rtype & RC_CACHED)
FlushClientCaches(res->id);
if (rtype != skipDeleteFuncType)
@@ -715,6 +725,9 @@ FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
if (res->id == id && res->type == type)
{
*prev = res->next;
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 1;
+ #endif
if (type & RC_CACHED)
FlushClientCaches(res->id);
if (!skipFree)
@@ -809,12 +822,44 @@ RestartLoop:
next = this->next;
if (!type || this->type == type) {
elements = *eltptr;
+
+ /*
+ * FIXME:
+ * It is not safe to let a function change the resource
+ * table we are reading!
+ */
+
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 0;
+ #endif
(*func)(this->value, this->id, cdata);
+
+ /*
+ * Avoid that a call to RebuildTable() could invalidate the
+ * pointer. This is safe enough, because in RebuildTable()
+ * the new pointer is allocated just before the old one is
+ * freed, so it can't point to the same address.
+ */
+
#ifdef NXAGENT_SERVER
if (*resptr != resources)
goto RestartLoop;
#endif
+
+ /*
+ * It's not enough to check if the number of elements has
+ * changed, beacause it could happen that the number of
+ * resources that have been added matches the number of
+ * the freed ones.
+ * 'nxagentResChangedFlag' is set if a resource has been
+ * added or freed.
+ */
+
+ #ifdef NXAGENT_SERVER
+ if (*eltptr != elements || nxagentResChangedFlag)
+ #else
if (*eltptr != elements)
+ #endif
next = resources[i]; /* start over */
}
}
@@ -861,12 +906,44 @@ RestartLoop:
{
next = this->next;
elements = *eltptr;
+
+ /*
+ * FIXME:
+ * It is not safe to let a function change the resource
+ * table we are reading!
+ */
+
+ #ifdef NXAGENT_SERVER
+ nxagentResChangedFlag = 0;
+ #endif
(*func)(this->value, this->id, this->type, cdata);
+
+ /*
+ * Avoid that a call to RebuildTable() could invalidate the
+ * pointer. This is safe enough, because in RebuildTable()
+ * the new pointer is allocated just before the old one is
+ * freed, so it can't point to the same address.
+ */
+
#ifdef NXAGENT_SERVER
if (*resptr != resources)
goto RestartLoop;
#endif
+
+ /*
+ * It's not enough to check if the number of elements has
+ * changed, beacause it could happen that the number of
+ * resources that have been added matches the number of
+ * the freed ones.
+ * 'nxagentResChangedFlag' is set if a resource has been
+ * added or freed.
+ */
+
+ #ifdef NXAGENT_SERVER
+ if (*eltptr != elements || nxagentResChangedFlag)
+ #else
if (*eltptr != elements)
+ #endif
next = resources[i]; /* start over */
}
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c
index e3e4f4b83..a6d638ea7 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c
@@ -967,8 +967,17 @@ ProcShmPutImage(client)
return BadValue;
}
- VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
- client);
+ /*
+ * There's a potential integer overflow in this check:
+ * VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
+ * client);
+ * the version below ought to avoid it
+ */
+ if (stuff->totalHeight != 0 &&
+ length > (shmdesc->size - stuff->offset)/stuff->totalHeight) {
+ client->errorValue = stuff->totalWidth;
+ return BadValue;
+ }
if (stuff->srcX > stuff->totalWidth)
{
client->errorValue = stuff->srcX;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.NX.original
index e3e4f4b83..a6d638ea7 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.NX.original
@@ -967,8 +967,17 @@ ProcShmPutImage(client)
return BadValue;
}
- VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
- client);
+ /*
+ * There's a potential integer overflow in this check:
+ * VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
+ * client);
+ * the version below ought to avoid it
+ */
+ if (stuff->totalHeight != 0 &&
+ length > (shmdesc->size - stuff->offset)/stuff->totalHeight) {
+ client->errorValue = stuff->totalWidth;
+ return BadValue;
+ }
if (stuff->srcX > stuff->totalWidth)
{
client->errorValue = stuff->srcX;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.X.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.X.original
index e2cf8cd24..f25bb9b5d 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.X.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c.X.original
@@ -863,8 +863,17 @@ ProcShmPutImage(client)
return BadValue;
}
- VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
- client);
+ /*
+ * There's a potential integer overflow in this check:
+ * VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
+ * client);
+ * the version below ought to avoid it
+ */
+ if (stuff->totalHeight != 0 &&
+ length > (shmdesc->size - stuff->offset)/stuff->totalHeight) {
+ client->errorValue = stuff->totalWidth;
+ return BadValue;
+ }
if (stuff->srcX > stuff->totalWidth)
{
client->errorValue = stuff->srcX;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c
index 7ba468ac0..24dad322f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c
@@ -153,6 +153,9 @@ extern Bool nxagentScreenTrap;
*
******/
+static unsigned char _back_lsb[4] = {0x88, 0x22, 0x44, 0x11};
+static unsigned char _back_msb[4] = {0x11, 0x44, 0x22, 0x88};
+
int screenIsSaved = SCREEN_SAVER_OFF;
ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
@@ -355,18 +358,7 @@ void nxagentClearSplash(WindowPtr pW)
(*pScreen->ChangeWindowAttributes)(pW, CWBackPixmap|CWBackPixel);
}
-static void
-#if NeedFunctionPrototypes
-MakeRootTile(WindowPtr pWin)
-#else
-MakeRootTile(pWin)
- WindowPtr pWin;
-#endif
-{
- nxagentRootTileWindow = pWin;
-}
-
-#else /* NXAGENT_SERVER */
+#endif /* NXAGENT_SERVER */
static void
MakeRootTile(WindowPtr pWin)
@@ -412,9 +404,10 @@ MakeRootTile(WindowPtr pWin)
FreeScratchGC(pGC);
-}
-
+#ifdef NXAGENT_SERVER
+ nxagentRootTileWindow = pWin;
#endif /* NXAGENT_SERVER */
+}
WindowPtr
AllocateWindow(ScreenPtr pScreen)
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c.NX.original
index 7ba468ac0..24dad322f 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXwindow.c.NX.original
@@ -153,6 +153,9 @@ extern Bool nxagentScreenTrap;
*
******/
+static unsigned char _back_lsb[4] = {0x88, 0x22, 0x44, 0x11};
+static unsigned char _back_msb[4] = {0x11, 0x44, 0x22, 0x88};
+
int screenIsSaved = SCREEN_SAVER_OFF;
ScreenSaverStuffRec savedScreenInfo[MAXSCREENS];
@@ -355,18 +358,7 @@ void nxagentClearSplash(WindowPtr pW)
(*pScreen->ChangeWindowAttributes)(pW, CWBackPixmap|CWBackPixel);
}
-static void
-#if NeedFunctionPrototypes
-MakeRootTile(WindowPtr pWin)
-#else
-MakeRootTile(pWin)
- WindowPtr pWin;
-#endif
-{
- nxagentRootTileWindow = pWin;
-}
-
-#else /* NXAGENT_SERVER */
+#endif /* NXAGENT_SERVER */
static void
MakeRootTile(WindowPtr pWin)
@@ -412,9 +404,10 @@ MakeRootTile(WindowPtr pWin)
FreeScratchGC(pGC);
-}
-
+#ifdef NXAGENT_SERVER
+ nxagentRootTileWindow = pWin;
#endif /* NXAGENT_SERVER */
+}
WindowPtr
AllocateWindow(ScreenPtr pScreen)