From b79164001d1eb06f4591c59b7a7c2c0fb29e992b Mon Sep 17 00:00:00 2001 From: Reinhard Tartler Date: Mon, 10 Oct 2011 17:58:55 +0200 Subject: Imported nxagent-3.2.0-5.tar.gz Summary: Imported nxagent-3.2.0-5.tar.gz Keywords: Imported nxagent-3.2.0-5.tar.gz into Git repository --- nx-X11/programs/Xserver/hw/nxagent/Args.c | 12 +- nx-X11/programs/Xserver/hw/nxagent/CHANGELOG | 34 - nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig | 5959 -------------------- nx-X11/programs/Xserver/hw/nxagent/Drawable.c | 22 +- nx-X11/programs/Xserver/hw/nxagent/Events.c | 56 +- nx-X11/programs/Xserver/hw/nxagent/Font.c | 145 +- nx-X11/programs/Xserver/hw/nxagent/Image.c | 2 +- nx-X11/programs/Xserver/hw/nxagent/Keyboard.c | 2 +- nx-X11/programs/Xserver/hw/nxagent/X/NXglyph.c | 19 +- .../Xserver/hw/nxagent/X/NXglyph.c.NX.original | 19 +- .../Xserver/hw/nxagent/X/NXglyph.c.X.original | 14 +- nx-X11/programs/Xserver/hw/nxagent/X/NXrender.c | 18 +- .../Xserver/hw/nxagent/X/NXrender.c.NX.original | 18 +- .../Xserver/hw/nxagent/X/NXrender.c.X.original | 18 +- .../Xserver/hw/nxagent/X/NXresource.c.NX.original | 8 +- nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c~ | 1250 ++++ nx-X11/programs/Xserver/hw/nxagent/X/NXshm.c | 13 +- .../Xserver/hw/nxagent/X/NXshm.c.NX.original | 13 +- .../Xserver/hw/nxagent/X/NXshm.c.X.original | 13 +- 19 files changed, 1346 insertions(+), 6289 deletions(-) delete mode 100644 nx-X11/programs/Xserver/hw/nxagent/CHANGELOG.orig create mode 100644 nx-X11/programs/Xserver/hw/nxagent/X/NXresource.c~ 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 [] to [x]. - -- 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- 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 -#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 -#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 -#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 +#endif + +#include +#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 + +#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>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; -- cgit v1.2.3