aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReinhard Tartler <siretart@tauware.de>2011-10-10 17:58:55 +0200
committerReinhard Tartler <siretart@tauware.de>2011-10-10 17:58:55 +0200
commitb79164001d1eb06f4591c59b7a7c2c0fb29e992b (patch)
treed211626f0f91a07ac22c1b254a6300bebf732ea6
parent1c25e92b9ea5811d8ab9c2bfdc0dcb2e4d21bd0a (diff)
downloadnx-libs-b79164001d1eb06f4591c59b7a7c2c0fb29e992b.tar.gz
nx-libs-b79164001d1eb06f4591c59b7a7c2c0fb29e992b.tar.bz2
nx-libs-b79164001d1eb06f4591c59b7a7c2c0fb29e992b.zip
Imported nxagent-3.2.0-5.tar.gznxagent/3.2.0-5
Summary: Imported nxagent-3.2.0-5.tar.gz Keywords: Imported nxagent-3.2.0-5.tar.gz into Git repository
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Args.c12
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/CHANGELOG34
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig5959
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Drawable.c22
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Events.c56
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Font.c145
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Image.c2
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/Keyboard.c2
-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.c.NX.original8
-rw-r--r--nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c~1250
-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
19 files changed, 1346 insertions, 6289 deletions
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Args.c b/nx-X11/programs/Xserver/hw/nxagent/Args.c
index c74bc3f56..5b336279e 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 = 4096;
- tileHeight = 4096;
+ tileWidth = 65536;
+ tileHeight = 65536;
break;
}
@@ -2091,8 +2091,8 @@ void nxagentSetDeferLevel()
deferTimeout = 200;
- tileWidth = 4096;
- tileHeight = 4096;
+ tileWidth = 65536;
+ tileHeight = 65536;
break;
}
@@ -2103,8 +2103,8 @@ void nxagentSetDeferLevel()
deferTimeout = 200;
- tileWidth = 4096;
- tileHeight = 4096;
+ tileWidth = 65536;
+ tileHeight = 65536;
break;
}
diff --git a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
index 1c10208ae..4d930b9b5 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
+++ b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
@@ -1,39 +1,5 @@
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
diff --git a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig
deleted file mode 100644
index 539a7b829..000000000
--- a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig
+++ /dev/null
@@ -1,5959 +0,0 @@
-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/Drawable.c b/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
index 2c1b07fa5..abc228e9c 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Drawable.c
@@ -371,7 +371,6 @@ 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;
@@ -591,20 +590,8 @@ int nxagentSynchronizeRegion(DrawablePtr pDrawable, RegionPtr pRegion, unsigned
pDrawable -> x, pDrawable -> y, pDrawable -> width, pDrawable -> height);
#endif
- /*
- * 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));
+ w = tileWidth = (nxagentOption(TileWidth) > pDrawable -> width ? pDrawable -> width : nxagentOption(TileWidth));
+ h = tileHeight = (nxagentOption(TileHeight) > pDrawable -> height ? pDrawable -> height : nxagentOption(TileHeight));
#ifdef DEBUG
fprintf(stderr, "nxagentSynchronizeRegion: Using tiles of size [%dx%d].\n", tileWidth, tileHeight);
@@ -2626,10 +2613,7 @@ 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. This
- * becomes particularly important when the drawable
- * is a huge window, because the pixmap creation
- * would fail.
+ * drawable origin like in the backing store.
*/
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 b37d81adf..90fb7641b 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c
@@ -2261,11 +2261,7 @@ int nxagentHandleClientMessageEvent(XEvent *X, enum HandleEventResult *result)
{
pScreen = nxagentScreen(X -> xmap.window);
- XMapRaised(nxagentDisplay, nxagentFullscreenWindow);
-
- XIconifyWindow(nxagentDisplay, nxagentIconWindow,
- DefaultScreen(nxagentDisplay));
-
+ nxagentMaximizeToFullScreen(pScreen);
}
if (X -> xclient.window == (nxagentOption(Fullscreen) ?
@@ -3062,6 +3058,56 @@ 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/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c
index e552f826b..6fb34f221 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Font.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c
@@ -101,8 +101,6 @@ 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
@@ -421,59 +419,13 @@ Bool nxagentFontFind(const char *name, int *pos)
Bool nxagentFontLookUp(const char *name)
{
int i;
- 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
- {
+ if (name)
+ if (!strlen(name))
+ return 0;
+ if (nxagentFontFind(name, &i))
return (nxagentRemoteFontList.list[i]->status > 0);
- }
+ else
+ return 0;
}
Bool nxagentRealizeFont(ScreenPtr pScreen, FontPtr pFont)
@@ -1746,88 +1698,3 @@ 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/Image.c b/nx-X11/programs/Xserver/hw/nxagent/Image.c
index 4e08f6bf1..5b40f32e9 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Image.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Image.c
@@ -1176,7 +1176,7 @@ FIXME: Should use an unpack resource here.
*/
pack = (nxagentOption(LinkType) != LINK_TYPE_NONE &&
- packMethod != PACK_NONE && depth > 8 && format == ZPixmap);
+ packMethod != PACK_NONE && depth > 8);
lossless = (packMethod == nxagentPackLossless);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
index 88e99a1a0..1cc6898d7 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 (keymap64 == NULL)
+ if (keymap == NULL)
{
XFreeModifiermap(modifier_keymap);
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c
index f51a8bce9..06dabddaa 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c
@@ -69,17 +69,6 @@
#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
/*
@@ -412,12 +401,8 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
{
int size;
GlyphPtr glyph;
- 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;
+
+ size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
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 f51a8bce9..06dabddaa 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,17 +69,6 @@
#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
/*
@@ -412,12 +401,8 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
{
int size;
GlyphPtr glyph;
- 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;
+
+ size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
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 9f4d1c87b..45c5dd975 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,12 +43,6 @@
#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%
@@ -340,12 +334,8 @@ AllocateGlyph (xGlyphInfo *gi, int fdepth)
{
int size;
GlyphPtr glyph;
- 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;
+
+ size = gi->height * PixmapBytePad (gi->width, glyphDepths[fdepth]);
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 de2df855f..00c55cde7 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c
@@ -1893,8 +1893,6 @@ 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);
@@ -2355,8 +2353,6 @@ 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;
@@ -2959,18 +2955,18 @@ SProcRenderCreateSolidFill(ClientPtr client)
return (*ProcRenderVector[stuff->renderReqType]) (client);
}
-static void swapStops(void *stuff, int num)
+static void swapStops(void *stuff, int n)
{
- int i, n;
+ int i;
CARD32 *stops;
CARD16 *colors;
stops = (CARD32 *)(stuff);
- for (i = 0; i < num; ++i) {
+ for (i = 0; i < n; ++i) {
swapl(stops, n);
++stops;
}
colors = (CARD16 *)(stops);
- for (i = 0; i < 4*num; ++i) {
+ for (i = 0; i < 4*n; ++i) {
swaps(stops, n);
++stops;
}
@@ -2993,8 +2989,6 @@ 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;
@@ -3022,8 +3016,6 @@ 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;
@@ -3048,8 +3040,6 @@ 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 de2df855f..00c55cde7 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,8 +1893,6 @@ 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);
@@ -2355,8 +2353,6 @@ 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;
@@ -2959,18 +2955,18 @@ SProcRenderCreateSolidFill(ClientPtr client)
return (*ProcRenderVector[stuff->renderReqType]) (client);
}
-static void swapStops(void *stuff, int num)
+static void swapStops(void *stuff, int n)
{
- int i, n;
+ int i;
CARD32 *stops;
CARD16 *colors;
stops = (CARD32 *)(stuff);
- for (i = 0; i < num; ++i) {
+ for (i = 0; i < n; ++i) {
swapl(stops, n);
++stops;
}
colors = (CARD16 *)(stops);
- for (i = 0; i < 4*num; ++i) {
+ for (i = 0; i < 4*n; ++i) {
swaps(stops, n);
++stops;
}
@@ -2993,8 +2989,6 @@ 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;
@@ -3022,8 +3016,6 @@ 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;
@@ -3048,8 +3040,6 @@ 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 d25d49756..d2759ab10 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,8 +1505,6 @@ 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);
@@ -1920,8 +1918,6 @@ 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;
@@ -2493,18 +2489,18 @@ SProcRenderCreateSolidFill(ClientPtr client)
return (*ProcRenderVector[stuff->renderReqType]) (client);
}
-static void swapStops(void *stuff, int num)
+static void swapStops(void *stuff, int n)
{
- int i, n;
+ int i;
CARD32 *stops;
CARD16 *colors;
stops = (CARD32 *)(stuff);
- for (i = 0; i < num; ++i) {
+ for (i = 0; i < n; ++i) {
swapl(stops, n);
++stops;
}
colors = (CARD16 *)(stops);
- for (i = 0; i < 4*num; ++i) {
+ for (i = 0; i < 4*n; ++i) {
swaps(stops, n);
++stops;
}
@@ -2527,8 +2523,6 @@ 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;
@@ -2556,8 +2550,6 @@ 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;
@@ -2582,8 +2574,6 @@ 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.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c.NX.original
index 91e03cb0e..7dd021a6e 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
@@ -194,6 +194,10 @@ static DeleteType *DeleteFuncs = (DeleteType *)NULL;
Atom * ResourceNames = NULL;
+#ifdef NXAGENT_SERVER
+static int nxagentResChangedFlag = 0;
+#endif
+
void RegisterResourceName (RESTYPE type, char *name)
{
ResourceNames[type & TypeMask] = MakeAtom(name, strlen(name), TRUE);
@@ -201,10 +205,6 @@ void RegisterResourceName (RESTYPE type, char *name)
#endif
-#ifdef NXAGENT_SERVER
-static int nxagentResChangedFlag = 0;
-#endif
-
RESTYPE
CreateNewResourceType(DeleteType deleteFunc)
{
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c~ b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c~
new file mode 100644
index 000000000..7dd021a6e
--- /dev/null
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c~
@@ -0,0 +1,1250 @@
+/**************************************************************************/
+/* */
+/* Copyright (c) 2001, 2007 NoMachine, http://www.nomachine.com/. */
+/* */
+/* NXAGENT, NX protocol compression and NX extensions to this software */
+/* are copyright of NoMachine. Redistribution and use of the present */
+/* software is allowed according to terms specified in the file LICENSE */
+/* which comes in the source distribution. */
+/* */
+/* Check http://www.nomachine.com/licensing.html for applicability. */
+/* */
+/* NX and NoMachine are trademarks of NoMachine S.r.l. */
+/* */
+/* All rights reserved. */
+/* */
+/**************************************************************************/
+
+/************************************************************
+
+Copyright 1987, 1998 The Open Group
+
+Permission to use, copy, modify, distribute, and sell this software and its
+documentation for any purpose is hereby granted without fee, provided that
+the above copyright notice appear in all copies and that both that
+copyright notice and this permission notice appear in supporting
+documentation.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of The Open Group shall not be
+used in advertising or otherwise to promote the sale, use or other dealings
+in this Software without prior written authorization from The Open Group.
+
+
+Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
+
+ All Rights Reserved
+
+Permission to use, copy, modify, and distribute this software and its
+documentation for any purpose and without fee is hereby granted,
+provided that the above copyright notice appear in all copies and that
+both that copyright notice and this permission notice appear in
+supporting documentation, and that the name of Digital not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission.
+
+DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
+ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
+DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
+ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
+WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+********************************************************/
+/* The panoramix components contained the following notice */
+/*****************************************************************
+
+Copyright (c) 1991, 1997 Digital Equipment Corporation, Maynard, Massachusetts.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software.
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+DIGITAL EQUIPMENT CORPORATION BE LIABLE FOR ANY CLAIM, DAMAGES, INCLUDING,
+BUT NOT LIMITED TO CONSEQUENTIAL OR INCIDENTAL DAMAGES, OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
+IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+Except as contained in this notice, the name of Digital Equipment Corporation
+shall not be used in advertising or otherwise to promote the sale, use or other
+dealings in this Software without prior written authorization from Digital
+Equipment Corporation.
+
+******************************************************************/
+
+/* $Xorg: resource.c,v 1.5 2001/02/09 02:04:40 xorgcvs Exp $ */
+/* $XdotOrg: xc/programs/Xserver/dix/resource.c,v 1.8 2005/07/03 08:53:38 daniels Exp $ */
+/* $TOG: resource.c /main/41 1998/02/09 14:20:31 kaleb $ */
+
+/* Routines to manage various kinds of resources:
+ *
+ * CreateNewResourceType, CreateNewResourceClass, InitClientResources,
+ * FakeClientID, AddResource, FreeResource, FreeClientResources,
+ * FreeAllResources, LookupIDByType, LookupIDByClass, GetXIDRange
+ */
+
+/*
+ * A resource ID is a 32 bit quantity, the upper 2 bits of which are
+ * off-limits for client-visible resources. The next 8 bits are
+ * used as client ID, and the low 22 bits come from the client.
+ * A resource ID is "hashed" by extracting and xoring subfields
+ * (varying with the size of the hash table).
+ *
+ * It is sometimes necessary for the server to create an ID that looks
+ * like it belongs to a client. This ID, however, must not be one
+ * the client actually can create, or we have the potential for conflict.
+ * The 31st bit of the ID is reserved for the server's use for this
+ * purpose. By setting CLIENT_ID(id) to the client, the SERVER_BIT to
+ * 1, and an otherwise arbitrary ID in the low 22 bits, we can create a
+ * resource "owned" by the client.
+ */
+/* $XFree86: xc/programs/Xserver/dix/resource.c,v 3.13 2003/09/24 02:43:13 dawes Exp $ */
+
+#define NEED_EVENTS
+#ifdef HAVE_DIX_CONFIG_H
+#include <dix-config.h>
+#endif
+
+#include <X11/X.h>
+#include "misc.h"
+#include "os.h"
+#include "resource.h"
+#include "dixstruct.h"
+#include "opaque.h"
+#include "windowstr.h"
+#include "dixfont.h"
+#include "colormap.h"
+#include "inputstr.h"
+#include "dixevents.h"
+#include "dixgrabs.h"
+#include "cursor.h"
+#ifdef PANORAMIX
+#include "panoramiX.h"
+#include "panoramiXsrv.h"
+#endif
+#include <assert.h>
+
+#ifdef NXAGENT_SERVER
+
+#include "Agent.h"
+#include "Font.h"
+#include "Pixmaps.h"
+#include "GCs.h"
+
+#define PANIC
+#define WARNING
+#undef TEST
+#undef DEBUG
+
+#endif
+
+static void RebuildTable(
+ int /*client*/
+);
+
+#define SERVER_MINID 32
+
+#define INITBUCKETS 64
+#define INITHASHSIZE 6
+#define MAXHASHSIZE 11
+
+typedef struct _Resource {
+ struct _Resource *next;
+ XID id;
+ RESTYPE type;
+ pointer value;
+} ResourceRec, *ResourcePtr;
+#define NullResource ((ResourcePtr)NULL)
+
+typedef struct _ClientResource {
+ ResourcePtr *resources;
+ int elements;
+ int buckets;
+ int hashsize; /* log(2)(buckets) */
+ XID fakeID;
+ XID endFakeID;
+ XID expectID;
+} ClientResourceRec;
+
+RESTYPE lastResourceType;
+static RESTYPE lastResourceClass;
+RESTYPE TypeMask;
+
+static DeleteType *DeleteFuncs = (DeleteType *)NULL;
+
+#ifdef XResExtension
+
+Atom * ResourceNames = NULL;
+
+#ifdef NXAGENT_SERVER
+static int nxagentResChangedFlag = 0;
+#endif
+
+void RegisterResourceName (RESTYPE type, char *name)
+{
+ ResourceNames[type & TypeMask] = MakeAtom(name, strlen(name), TRUE);
+}
+
+#endif
+
+RESTYPE
+CreateNewResourceType(DeleteType deleteFunc)
+{
+ RESTYPE next = lastResourceType + 1;
+ DeleteType *funcs;
+
+ if (next & lastResourceClass)
+ return 0;
+ funcs = (DeleteType *)xrealloc(DeleteFuncs,
+ (next + 1) * sizeof(DeleteType));
+ if (!funcs)
+ return 0;
+
+#ifdef XResExtension
+ {
+ Atom *newnames;
+ newnames = xrealloc(ResourceNames, (next + 1) * sizeof(Atom));
+ if(!newnames)
+ return 0;
+ ResourceNames = newnames;
+ ResourceNames[next] = 0;
+ }
+#endif
+
+ lastResourceType = next;
+ DeleteFuncs = funcs;
+ DeleteFuncs[next] = deleteFunc;
+ return next;
+}
+
+RESTYPE
+CreateNewResourceClass()
+{
+ RESTYPE next = lastResourceClass >> 1;
+
+ if (next & lastResourceType)
+ return 0;
+ lastResourceClass = next;
+ TypeMask = next - 1;
+ return next;
+}
+
+ClientResourceRec clientTable[MAXCLIENTS];
+
+/*****************
+ * InitClientResources
+ * When a new client is created, call this to allocate space
+ * in resource table
+ *****************/
+
+Bool
+InitClientResources(ClientPtr client)
+{
+ register int i, j;
+
+ if (client == serverClient)
+ {
+ lastResourceType = RT_LASTPREDEF;
+ lastResourceClass = RC_LASTPREDEF;
+ TypeMask = RC_LASTPREDEF - 1;
+ if (DeleteFuncs)
+ xfree(DeleteFuncs);
+ DeleteFuncs = (DeleteType *)xalloc((lastResourceType + 1) *
+ sizeof(DeleteType));
+ if (!DeleteFuncs)
+ return FALSE;
+ DeleteFuncs[RT_NONE & TypeMask] = (DeleteType)NoopDDA;
+ DeleteFuncs[RT_WINDOW & TypeMask] = DeleteWindow;
+ DeleteFuncs[RT_PIXMAP & TypeMask] = dixDestroyPixmap;
+ DeleteFuncs[RT_GC & TypeMask] = FreeGC;
+ DeleteFuncs[RT_FONT & TypeMask] = CloseFont;
+ DeleteFuncs[RT_CURSOR & TypeMask] = FreeCursor;
+ DeleteFuncs[RT_COLORMAP & TypeMask] = FreeColormap;
+ DeleteFuncs[RT_CMAPENTRY & TypeMask] = FreeClientPixels;
+ DeleteFuncs[RT_OTHERCLIENT & TypeMask] = OtherClientGone;
+ DeleteFuncs[RT_PASSIVEGRAB & TypeMask] = DeletePassiveGrab;
+
+#ifdef XResExtension
+ if(ResourceNames)
+ xfree(ResourceNames);
+ ResourceNames = xalloc((lastResourceType + 1) * sizeof(Atom));
+ if(!ResourceNames)
+ return FALSE;
+#endif
+ }
+ clientTable[i = client->index].resources =
+ (ResourcePtr *)xalloc(INITBUCKETS*sizeof(ResourcePtr));
+ if (!clientTable[i].resources)
+ return FALSE;
+ clientTable[i].buckets = INITBUCKETS;
+ clientTable[i].elements = 0;
+ clientTable[i].hashsize = INITHASHSIZE;
+ /* Many IDs allocated from the server client are visible to clients,
+ * so we don't use the SERVER_BIT for them, but we have to start
+ * past the magic value constants used in the protocol. For normal
+ * clients, we can start from zero, with SERVER_BIT set.
+ */
+ clientTable[i].fakeID = client->clientAsMask |
+ (client->index ? SERVER_BIT : SERVER_MINID);
+ clientTable[i].endFakeID = (clientTable[i].fakeID | RESOURCE_ID_MASK) + 1;
+ clientTable[i].expectID = client->clientAsMask;
+ for (j=0; j<INITBUCKETS; j++)
+ {
+ clientTable[i].resources[j] = NullResource;
+ }
+ return TRUE;
+}
+
+
+static int
+Hash(int client, register XID id)
+{
+ id &= RESOURCE_ID_MASK;
+ switch (clientTable[client].hashsize)
+ {
+ case 6:
+ return ((int)(0x03F & (id ^ (id>>6) ^ (id>>12))));
+ case 7:
+ return ((int)(0x07F & (id ^ (id>>7) ^ (id>>13))));
+ case 8:
+ return ((int)(0x0FF & (id ^ (id>>8) ^ (id>>16))));
+ case 9:
+ return ((int)(0x1FF & (id ^ (id>>9))));
+ case 10:
+ return ((int)(0x3FF & (id ^ (id>>10))));
+ case 11:
+ return ((int)(0x7FF & (id ^ (id>>11))));
+ }
+ return -1;
+}
+
+static XID
+AvailableID(
+ register int client,
+ register XID id,
+ register XID maxid,
+ register XID goodid)
+{
+ register ResourcePtr res;
+
+ if ((goodid >= id) && (goodid <= maxid))
+ return goodid;
+ for (; id <= maxid; id++)
+ {
+ res = clientTable[client].resources[Hash(client, id)];
+ while (res && (res->id != id))
+ res = res->next;
+ if (!res)
+ return id;
+ }
+ return 0;
+}
+
+void
+GetXIDRange(int client, Bool server, XID *minp, XID *maxp)
+{
+ register XID id, maxid;
+ register ResourcePtr *resp;
+ register ResourcePtr res;
+ register int i;
+ XID goodid;
+
+ id = (Mask)client << CLIENTOFFSET;
+ if (server)
+ id |= client ? SERVER_BIT : SERVER_MINID;
+ maxid = id | RESOURCE_ID_MASK;
+ goodid = 0;
+ for (resp = clientTable[client].resources, i = clientTable[client].buckets;
+ --i >= 0;)
+ {
+ for (res = *resp++; res; res = res->next)
+ {
+ if ((res->id < id) || (res->id > maxid))
+ continue;
+ if (((res->id - id) >= (maxid - res->id)) ?
+ (goodid = AvailableID(client, id, res->id - 1, goodid)) :
+ !(goodid = AvailableID(client, res->id + 1, maxid, goodid)))
+ maxid = res->id - 1;
+ else
+ id = res->id + 1;
+ }
+ }
+ if (id > maxid)
+ id = maxid = 0;
+ *minp = id;
+ *maxp = maxid;
+}
+
+/**
+ * GetXIDList is called by the XC-MISC extension's MiscGetXIDList function.
+ * This function tries to find count unused XIDs for the given client. It
+ * puts the IDs in the array pids and returns the number found, which should
+ * almost always be the number requested.
+ *
+ * The circumstances that lead to a call to this function are very rare.
+ * Xlib must run out of IDs while trying to generate a request that wants
+ * multiple ID's, like the Multi-buffering CreateImageBuffers request.
+ *
+ * No rocket science in the implementation; just iterate over all
+ * possible IDs for the given client and pick the first count IDs
+ * that aren't in use. A more efficient algorithm could probably be
+ * invented, but this will be used so rarely that this should suffice.
+ */
+
+unsigned int
+GetXIDList(ClientPtr pClient, unsigned count, XID *pids)
+{
+ unsigned int found = 0;
+ XID id = pClient->clientAsMask;
+ XID maxid;
+
+ maxid = id | RESOURCE_ID_MASK;
+ while ( (found < count) && (id <= maxid) )
+ {
+ if (!LookupIDByClass(id, RC_ANY))
+ {
+ pids[found++] = id;
+ }
+ id++;
+ }
+ return found;
+}
+
+/*
+ * Return the next usable fake client ID.
+ *
+ * Normally this is just the next one in line, but if we've used the last
+ * in the range, we need to find a new range of safe IDs to avoid
+ * over-running another client.
+ */
+
+XID
+FakeClientID(register int client)
+{
+ XID id, maxid;
+
+ id = clientTable[client].fakeID++;
+ if (id != clientTable[client].endFakeID)
+ return id;
+ GetXIDRange(client, TRUE, &id, &maxid);
+ if (!id) {
+ if (!client)
+ FatalError("FakeClientID: server internal ids exhausted\n");
+ MarkClientException(clients[client]);
+ id = ((Mask)client << CLIENTOFFSET) | (SERVER_BIT * 3);
+ maxid = id | RESOURCE_ID_MASK;
+ }
+ clientTable[client].fakeID = id + 1;
+ clientTable[client].endFakeID = maxid + 1;
+ return id;
+}
+
+#ifdef NXAGENT_SERVER
+
+int nxagentFindClientResource(int client, RESTYPE type, pointer value)
+{
+ ResourcePtr pResource;
+ ResourcePtr *resources;
+
+ int i;
+
+ for (i = 0; i < clientTable[client].buckets; i++)
+ {
+ resources = clientTable[client].resources;
+
+ for (pResource = resources[i]; pResource; pResource = pResource -> next)
+ {
+ if (pResource -> type == type && pResource -> value == value)
+ {
+ #ifdef TEST
+ fprintf(stderr, "nxagentFindClientResource: Found resource [%p] type [%lu] "
+ "for client [%d].\n", (void *) value,
+ pResource -> type, client);
+ #endif
+
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+int nxagentSwitchResourceType(int client, RESTYPE type, pointer value)
+{
+ ResourcePtr pResource;
+ ResourcePtr *resources;
+
+ RESTYPE internalType = 0;
+
+ int i;
+
+ if (type == RT_PIXMAP)
+ {
+ internalType = RT_NX_PIXMAP;
+ }
+ else if (type == RT_GC)
+ {
+ internalType = RT_NX_GC;
+ }
+ else if (type == RT_FONT)
+ {
+ internalType = RT_NX_FONT;
+ }
+ else
+ {
+ return 0;
+ }
+
+ if (client == serverClient -> index)
+ {
+ #ifdef TEST
+ fprintf(stderr, "nxagentSwitchResourceType: Requesting client is [%d]. Skipping the resource switch.\n",
+ client);
+ #endif
+
+ return 0;
+ }
+
+ for (i = 0; i < clientTable[serverClient -> index].buckets; i++)
+ {
+ resources = clientTable[serverClient -> index].resources;
+
+ for (pResource = resources[i]; pResource; pResource = pResource -> next)
+ {
+ if (pResource -> type == internalType &&
+ pResource -> value == value)
+ {
+ #ifdef TEST
+ fprintf(stderr, "nxagentSwitchResourceType: Changing resource [%p] type from [%lu] to "
+ "[%lu] for server client [%d].\n", (void *) value,
+ (unsigned long) pResource -> type, (unsigned long) type, serverClient -> index);
+ #endif
+
+ FreeResource(pResource -> id, RT_NONE);
+
+ return 1;
+ }
+ }
+ }
+
+ return 0;
+}
+
+#endif
+
+Bool
+AddResource(XID id, RESTYPE type, pointer value)
+{
+ int client;
+ register ClientResourceRec *rrec;
+ register ResourcePtr res, *head;
+
+ client = CLIENT_ID(id);
+ rrec = &clientTable[client];
+ if (!rrec->buckets)
+ {
+ ErrorF("AddResource(%lx, %lx, %lx), client=%d \n",
+ (unsigned long)id, type, (unsigned long)value, client);
+ FatalError("client not in use\n");
+ }
+
+#ifdef NXAGENT_SERVER
+
+ nxagentSwitchResourceType(client, type, value);
+
+ #ifdef TEST
+ fprintf(stderr, "AddResource: Adding resource for client [%d] type [%lu] value [%p] id [%lu].\n",
+ client, (unsigned long) type, (void *) value, (unsigned long) id);
+ #endif
+
+#endif
+
+ if ((rrec->elements >= 4*rrec->buckets) &&
+ (rrec->hashsize < MAXHASHSIZE))
+ RebuildTable(client);
+ head = &rrec->resources[Hash(client, id)];
+ res = (ResourcePtr)xalloc(sizeof(ResourceRec));
+ if (!res)
+ {
+ (*DeleteFuncs[type & TypeMask])(value, id);
+ return FALSE;
+ }
+ res->next = *head;
+ res->id = id;
+ res->type = type;
+ 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;
+}
+
+static void
+RebuildTable(int client)
+{
+ register int j;
+ register ResourcePtr res, next;
+ ResourcePtr **tails, *resources;
+ register ResourcePtr **tptr, *rptr;
+
+ /*
+ * For now, preserve insertion order, since some ddx layers depend
+ * on resources being free in the opposite order they are added.
+ */
+
+ j = 2 * clientTable[client].buckets;
+ tails = (ResourcePtr **)ALLOCATE_LOCAL(j * sizeof(ResourcePtr *));
+ if (!tails)
+ return;
+ resources = (ResourcePtr *)xalloc(j * sizeof(ResourcePtr));
+ if (!resources)
+ {
+ DEALLOCATE_LOCAL(tails);
+ return;
+ }
+ for (rptr = resources, tptr = tails; --j >= 0; rptr++, tptr++)
+ {
+ *rptr = NullResource;
+ *tptr = rptr;
+ }
+ clientTable[client].hashsize++;
+ for (j = clientTable[client].buckets,
+ rptr = clientTable[client].resources;
+ --j >= 0;
+ rptr++)
+ {
+ for (res = *rptr; res; res = next)
+ {
+ next = res->next;
+ res->next = NullResource;
+ tptr = &tails[Hash(client, res->id)];
+ **tptr = res;
+ *tptr = &res->next;
+ }
+ }
+ DEALLOCATE_LOCAL(tails);
+ clientTable[client].buckets *= 2;
+ xfree(clientTable[client].resources);
+ clientTable[client].resources = resources;
+}
+
+void
+FreeResource(XID id, RESTYPE skipDeleteFuncType)
+{
+ int cid;
+ register ResourcePtr res;
+ register ResourcePtr *prev, *head;
+ register int *eltptr;
+ int elements;
+ Bool gotOne = FALSE;
+
+#ifdef NXAGENT_SERVER
+
+ #ifdef TEST
+ fprintf(stderr, "FreeResource: Freeing resource id [%lu].\n", (unsigned long) id);
+ #endif
+
+#endif
+
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) && clientTable[cid].buckets)
+ {
+ head = &clientTable[cid].resources[Hash(cid, id)];
+ eltptr = &clientTable[cid].elements;
+
+ prev = head;
+ while ( (res = *prev) )
+ {
+ if (res->id == id)
+ {
+ 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)
+ (*DeleteFuncs[rtype & TypeMask])(res->value, res->id);
+ xfree(res);
+ if (*eltptr != elements)
+ prev = head; /* prev may no longer be valid */
+ gotOne = TRUE;
+ }
+ else
+ prev = &res->next;
+ }
+ if(clients[cid] && (id == clients[cid]->lastDrawableID))
+ {
+ clients[cid]->lastDrawable = (DrawablePtr)WindowTable[0];
+ clients[cid]->lastDrawableID = WindowTable[0]->drawable.id;
+ }
+ }
+ if (!gotOne)
+ ErrorF("Freeing resource id=%lX which isn't there.\n",
+ (unsigned long)id);
+}
+
+
+void
+FreeResourceByType(XID id, RESTYPE type, Bool skipFree)
+{
+ int cid;
+ register ResourcePtr res;
+ register ResourcePtr *prev, *head;
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) && clientTable[cid].buckets)
+ {
+ head = &clientTable[cid].resources[Hash(cid, id)];
+
+ prev = head;
+ while ( (res = *prev) )
+ {
+ 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)
+ (*DeleteFuncs[type & TypeMask])(res->value, res->id);
+ xfree(res);
+ break;
+ }
+ else
+ prev = &res->next;
+ }
+ if(clients[cid] && (id == clients[cid]->lastDrawableID))
+ {
+ clients[cid]->lastDrawable = (DrawablePtr)WindowTable[0];
+ clients[cid]->lastDrawableID = WindowTable[0]->drawable.id;
+ }
+ }
+}
+
+/*
+ * Change the value associated with a resource id. Caller
+ * is responsible for "doing the right thing" with the old
+ * data
+ */
+
+Bool
+ChangeResourceValue (XID id, RESTYPE rtype, pointer value)
+{
+ int cid;
+ register ResourcePtr res;
+
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) && clientTable[cid].buckets)
+ {
+ res = clientTable[cid].resources[Hash(cid, id)];
+
+ for (; res; res = res->next)
+ if ((res->id == id) && (res->type == rtype))
+ {
+ if (rtype & RC_CACHED)
+ FlushClientCaches(res->id);
+ res->value = value;
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/* Note: if func adds or deletes resources, then func can get called
+ * more than once for some resources. If func adds new resources,
+ * func might or might not get called for them. func cannot both
+ * add and delete an equal number of resources!
+ */
+
+void
+FindClientResourcesByType(
+ ClientPtr client,
+ RESTYPE type,
+ FindResType func,
+ pointer cdata
+){
+ register ResourcePtr *resources;
+ register ResourcePtr this, next;
+ int i, elements;
+ register int *eltptr;
+
+ #ifdef NXAGENT_SERVER
+ register ResourcePtr **resptr;
+ #endif
+
+ if (!client)
+ client = serverClient;
+
+/*
+ * If func triggers a resource table
+ * rebuild then restart the loop.
+ */
+
+#ifdef NXAGENT_SERVER
+RestartLoop:
+#endif
+
+ resources = clientTable[client->index].resources;
+
+ #ifdef NXAGENT_SERVER
+ resptr = &clientTable[client->index].resources;
+ #endif
+
+ eltptr = &clientTable[client->index].elements;
+ for (i = 0; i < clientTable[client->index].buckets; i++)
+ {
+ for (this = resources[i]; this; this = next)
+ {
+ 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 */
+ }
+ }
+ }
+}
+
+void
+FindAllClientResources(
+ ClientPtr client,
+ FindAllRes func,
+ pointer cdata
+){
+ register ResourcePtr *resources;
+ register ResourcePtr this, next;
+ int i, elements;
+ register int *eltptr;
+
+ #ifdef NXAGENT_SERVER
+ register ResourcePtr **resptr;
+ #endif
+
+ if (!client)
+ client = serverClient;
+
+/*
+ * If func triggers a resource table
+ * rebuild then restart the loop.
+ */
+
+#ifdef NXAGENT_SERVER
+RestartLoop:
+#endif
+
+ resources = clientTable[client->index].resources;
+
+ #ifdef NXAGENT_SERVER
+ resptr = &clientTable[client->index].resources;
+ #endif
+
+ eltptr = &clientTable[client->index].elements;
+ for (i = 0; i < clientTable[client->index].buckets; i++)
+ {
+ for (this = resources[i]; this; this = next)
+ {
+ 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 */
+ }
+ }
+}
+
+
+pointer
+LookupClientResourceComplex(
+ ClientPtr client,
+ RESTYPE type,
+ FindComplexResType func,
+ pointer cdata
+){
+ ResourcePtr *resources;
+ ResourcePtr this;
+ int i;
+
+ #ifdef NXAGENT_SERVER
+ ResourcePtr **resptr;
+ Bool res;
+ #endif
+
+ if (!client)
+ client = serverClient;
+
+/*
+ * If func triggers a resource table
+ * rebuild then restart the loop.
+ */
+
+#ifdef NXAGENT_SERVER
+RestartLoop:
+#endif
+
+ resources = clientTable[client->index].resources;
+
+ #ifdef NXAGENT_SERVER
+ resptr = &clientTable[client->index].resources;
+ #endif
+
+ for (i = 0; i < clientTable[client->index].buckets; i++) {
+ for (this = resources[i]; this; this = this->next) {
+ if (!type || this->type == type) {
+ #ifdef NXAGENT_SERVER
+ res = (*func)(this->value, this->id, cdata);
+
+ if (*resptr != resources)
+ goto RestartLoop;
+
+ if (res)
+ return this->value;
+ #else
+ if((*func)(this->value, this->id, cdata))
+ return this->value;
+ #endif
+ }
+ }
+ }
+ return NULL;
+}
+
+
+void
+FreeClientNeverRetainResources(ClientPtr client)
+{
+ ResourcePtr *resources;
+ ResourcePtr this;
+ ResourcePtr *prev;
+ int j;
+
+ if (!client)
+ return;
+
+ resources = clientTable[client->index].resources;
+ for (j=0; j < clientTable[client->index].buckets; j++)
+ {
+ prev = &resources[j];
+ while ( (this = *prev) )
+ {
+ RESTYPE rtype = this->type;
+ if (rtype & RC_NEVERRETAIN)
+ {
+ *prev = this->next;
+ if (rtype & RC_CACHED)
+ FlushClientCaches(this->id);
+ (*DeleteFuncs[rtype & TypeMask])(this->value, this->id);
+ xfree(this);
+ }
+ else
+ prev = &this->next;
+ }
+ }
+}
+
+void
+FreeClientResources(ClientPtr client)
+{
+ register ResourcePtr *resources;
+ register ResourcePtr this;
+ int j;
+
+ /* This routine shouldn't be called with a null client, but just in
+ case ... */
+
+ if (!client)
+ return;
+
+ HandleSaveSet(client);
+
+ resources = clientTable[client->index].resources;
+ for (j=0; j < clientTable[client->index].buckets; j++)
+ {
+ /* It may seem silly to update the head of this resource list as
+ we delete the members, since the entire list will be deleted any way,
+ but there are some resource deletion functions "FreeClientPixels" for
+ one which do a LookupID on another resource id (a Colormap id in this
+ case), so the resource list must be kept valid up to the point that
+ it is deleted, so every time we delete a resource, we must update the
+ head, just like in FreeResource. I hope that this doesn't slow down
+ mass deletion appreciably. PRH */
+
+ ResourcePtr *head;
+
+ head = &resources[j];
+
+ for (this = *head; this; this = *head)
+ {
+ RESTYPE rtype = this->type;
+ *head = this->next;
+ if (rtype & RC_CACHED)
+ FlushClientCaches(this->id);
+ (*DeleteFuncs[rtype & TypeMask])(this->value, this->id);
+ xfree(this);
+ }
+ }
+ xfree(clientTable[client->index].resources);
+ clientTable[client->index].resources = NULL;
+ clientTable[client->index].buckets = 0;
+}
+
+void
+FreeAllResources()
+{
+ int i;
+
+ for (i = currentMaxClients; --i >= 0; )
+ {
+ if (clientTable[i].buckets)
+ FreeClientResources(clients[i]);
+ }
+}
+
+Bool
+LegalNewID(XID id, register ClientPtr client)
+{
+
+#ifdef PANORAMIX
+ XID minid, maxid;
+
+ if (!noPanoramiXExtension) {
+ minid = client->clientAsMask | (client->index ?
+ SERVER_BIT : SERVER_MINID);
+ maxid = (clientTable[client->index].fakeID | RESOURCE_ID_MASK) + 1;
+ if ((id >= minid) && (id <= maxid))
+ return TRUE;
+ }
+#endif /* PANORAMIX */
+ return ((client->clientAsMask == (id & ~RESOURCE_ID_MASK)) &&
+ ((clientTable[client->index].expectID <= id) ||
+ !LookupIDByClass(id, RC_ANY)));
+}
+
+#ifdef XCSECURITY
+
+/* SecurityLookupIDByType and SecurityLookupIDByClass:
+ * These are the heart of the resource ID security system. They take
+ * two additional arguments compared to the old LookupID functions:
+ * the client doing the lookup, and the access mode (see resource.h).
+ * The resource is returned if it exists and the client is allowed access,
+ * else NULL is returned.
+ */
+
+pointer
+SecurityLookupIDByType(ClientPtr client, XID id, RESTYPE rtype, Mask mode)
+{
+ int cid;
+ register ResourcePtr res;
+ pointer retval = NULL;
+
+ assert(client == NullClient ||
+ (client->index <= currentMaxClients && clients[client->index] == client));
+ assert( (rtype & TypeMask) <= lastResourceType);
+
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) &&
+ clientTable[cid].buckets)
+ {
+ res = clientTable[cid].resources[Hash(cid, id)];
+
+ for (; res; res = res->next)
+ if ((res->id == id) && (res->type == rtype))
+ {
+ retval = res->value;
+ break;
+ }
+ }
+ if (retval && client && client->CheckAccess)
+ retval = (* client->CheckAccess)(client, id, rtype, mode, retval);
+ return retval;
+}
+
+
+pointer
+SecurityLookupIDByClass(ClientPtr client, XID id, RESTYPE classes, Mask mode)
+{
+ int cid;
+ register ResourcePtr res = NULL;
+ pointer retval = NULL;
+
+ assert(client == NullClient ||
+ (client->index <= currentMaxClients && clients[client->index] == client));
+ assert (classes >= lastResourceClass);
+
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) &&
+ clientTable[cid].buckets)
+ {
+ res = clientTable[cid].resources[Hash(cid, id)];
+
+ for (; res; res = res->next)
+ if ((res->id == id) && (res->type & classes))
+ {
+ retval = res->value;
+ break;
+ }
+ }
+ if (retval && client && client->CheckAccess)
+ retval = (* client->CheckAccess)(client, id, res->type, mode, retval);
+ return retval;
+}
+
+/* We can't replace the LookupIDByType and LookupIDByClass functions with
+ * macros because of compatibility with loadable servers.
+ */
+
+pointer
+LookupIDByType(XID id, RESTYPE rtype)
+{
+ return SecurityLookupIDByType(NullClient, id, rtype,
+ SecurityUnknownAccess);
+}
+
+pointer
+LookupIDByClass(XID id, RESTYPE classes)
+{
+ return SecurityLookupIDByClass(NullClient, id, classes,
+ SecurityUnknownAccess);
+}
+
+#else /* not XCSECURITY */
+
+/*
+ * LookupIDByType returns the object with the given id and type, else NULL.
+ */
+pointer
+LookupIDByType(XID id, RESTYPE rtype)
+{
+ int cid;
+ register ResourcePtr res;
+
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) &&
+ clientTable[cid].buckets)
+ {
+ res = clientTable[cid].resources[Hash(cid, id)];
+
+ for (; res; res = res->next)
+ if ((res->id == id) && (res->type == rtype))
+ return res->value;
+ }
+ return (pointer)NULL;
+}
+
+/*
+ * LookupIDByClass returns the object with the given id and any one of the
+ * given classes, else NULL.
+ */
+pointer
+LookupIDByClass(XID id, RESTYPE classes)
+{
+ int cid;
+ register ResourcePtr res;
+
+ if (((cid = CLIENT_ID(id)) < MAXCLIENTS) &&
+ clientTable[cid].buckets)
+ {
+ res = clientTable[cid].resources[Hash(cid, id)];
+
+ for (; res; res = res->next)
+ if ((res->id == id) && (res->type & classes))
+ return res->value;
+ }
+ return (pointer)NULL;
+}
+
+#endif /* XCSECURITY */
+
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c
index a6d638ea7..e3e4f4b83 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c
@@ -967,17 +967,8 @@ ProcShmPutImage(client)
return BadValue;
}
- /*
- * 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;
- }
+ VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
+ client);
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 a6d638ea7..e3e4f4b83 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,17 +967,8 @@ ProcShmPutImage(client)
return BadValue;
}
- /*
- * 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;
- }
+ VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
+ client);
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 f25bb9b5d..e2cf8cd24 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,17 +863,8 @@ ProcShmPutImage(client)
return BadValue;
}
- /*
- * 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;
- }
+ VERIFY_SHMSIZE(shmdesc, stuff->offset, length * stuff->totalHeight,
+ client);
if (stuff->srcX > stuff->totalWidth)
{
client->errorValue = stuff->srcX;