-------------------- AmigaOS 3.1.4.(1) project ----------------------- Changes for 45.2 (25.5.2017) - EasyRequest() was allocating not enough stack. - Fixed an off-by-one error on allocating the pubscreens. - The new tag SA_OpenBorder allows screens to be configured such that windows can be partially dragged out of the screen. This feature requires layers V45. The tag is by default, for compatibility reasons, ON on the workbench and OFF on all other screens. Changes for 45.3 (17.6.2017) - IChangeBox() checked for the wrong elements in a box structure and thus did not clip the window sizes correctly when resizing windows. Changes for 45.4 (31.10.2017) - The IControl settings mis-used bit 5 of the flags to request a 1:1 gadget layout of the size gadget. Apparently, Os 3.9 did this by replacing the size and arrow gadget classes, though intuition should better do it itself. Strangely enough, all system images exist in a medres/lowres and hires version, of which the latter is not used by the workbench. Now hijacking the hi-res version to get a 1:1 layout. This requires fixing a couple of dependencies, and adjusting the sizes such that the layout looks right. Changes for 45.5 (25.2.2018) - Windows with WA_Autoadjust flag, a window width but no window position open now under the mouse pointer. Changes for 45.6 (28.4.2018) - Even if the screen border is open how, window dragging is now limited in vertical direction such that the title bar can never leave the screen in vertical direction. This avoids cases where the window drag bar is moved out into never-never land. Changes for 45.7 (21.5.2018) - In case the window border is open, the interactive window sizing now restricts the size of the window to the size of the screen the window is on. Changes for 45.8 (1.6.2018) - Fixed a potential race where intuition could call RectFill() with invalid coordinates upon drawing a new look bevel box. Changes for 45.9 (18.6.2018) - The new autoadjust function can no longer move the window under the drag bar of the intuition screen it is located on. - Furthermore, windows are no longer moved to the mouse if they do not have a dragbar. Changes for 45.10 (16.9.2018) - Resetting the view now not only resets the coplist pointers in the view itself, but also the cache pointers in all the viewports in the view. This avoids a race condition that has been formerly addressed in graphics, but there caused bad side conditions with legacy software. Changes for 45.11 (22.10.2018) - The windowLimits for MoveWindow() are now identical to that of the intuition swizzledrag function. I really wonder why there are two functions for the same functionality... Changes for 45.12 (2.11.2018) - OpenScreen() and friends attempts now to allocate a bitmap through the new AllocBitMap() with tag-parameter function. Failing that, intuition falls back to the original way of how to allocate a screen bitmap. Changes for 45.13 (3.11.2018) - Intuition now places the ModeID of the target mode explicitly on the tag list for AllocBitMap() in case it was not given on its input tag list. ---------------------------- AmigaOs 3.2 project --------------------- Changes for 46.1 (17.1.2019): - Bumped to v46 so the revision check in P96 allows the usage of the new AllocBitMap tags. Changes for 46.2 (16.2.2019): - Added the iconification image to the vector class - Added the ShowWindow() and HideWindow() functions from intuition V50, or rather, reimplemented them properly. Windows are hidden and shown now through the intuition input event handler, avoiding race conditions. - ShowWindow takes a second argument - the window in front of which the new window shall be shown. - Removed include file duplicates. Intuition now includes everything from the public includes, private includes are gone. Changes for 47.3 (22.2.2019): - Window moving blocks now shortly at screen borders before movement is released. Changes for 47.4 (23.2.2019): - The iconify gadget becomes now a first-class citizen. You can request it with WA_IconifyGadget,TRUE in OpenWindowTags, and windows will receive an IDCMP_WindowClose as soon as the gadget is pressed, though msg->Code is set to 1 instead of 0 to indicate that the window should only be hidden, not really closed. Multiview implements this new protocol. - Window gadget build-up is now more dynamic. Instead of depending on hard-coded system gadget dimensions, the built-up function now uses the proper dimensions of the images instead. Changes for 47.5 (2.3.2019): - In case the active window gets hidden, it did not get deactivated properly, thus leaving its menu strip active - which may cause a lot of confusion. Changes for 47.6 (16.5.2019): - The iconification gadget did not have a window flag, and it was not taken into account when adjusting the height of the top window border. Changes for 47.7 (17.5.2019): - Now supports the off-screen window dragging option of IControl. Changes for 47.8 (19.5.2019): - The frameiclass supports now the inclusion of a headline to create context frames for gadtools. Such frames need to set IA_Data and optionally IA_Font and IA_FGPEN. Changes for 47.9 (20.7.2019): - Intuition can now be expunged, to make room for a new version. Changes for 47.10 (4.9.2019): - Very minor design change in the iconification gadget to keep its white interior visible with topaz.8 as system font. Changes for 47.11 (11.11.2019): - Mutually exclusive menu items have now flags rendered as radio buttons and not as checkmarks. Changes for 47.12 (13.11.2019): - Fix that the window title drawing didn't take the new iconification into consideration. At the same time some duplicate code is eliminated. Changes for 47.13 (20.12.2019): - In case the user did not provide SA_Colors or SA_Colors32, Intuition creates now a SA_Colors32 lookalike for AllocBitMap() to give true-color screens a consistent pen map. Changes for 47.14 (31.12.2019): - The icontrol preference bit for off-screen dragging now also applies to the OpenScreen() default in case no tag is present. Changes for 47.15 (11.1.2020): - Added GA_Underscore and GA_ActivateKey to the gadget and button class (backported from OS4) - EasyRequest now supports button hotkeys via GA_Underscore and GA_ActivateKey (backported from OS4) Changes for 47.16 (12.02.2020) - Shift qualifier for menu items. By setting the the MIF_SHIFTCOMMSEQ flag in a menu item. Such shortcuts have precedence over other shortcut, so that you can have both Shift+Amiga+S and Amiga+S. Such menu items will have an additional shift sign drawn ahead of the Amigakey sign in the menu. Old applications should not be affected and you can still press shift to get old style shortcuts, as long as the application doesn't have a MIF_SHIFTCOMMSEQ shortcut shadowing the same key) Changes for 47.17 (18.02.2020) - If enabled through IPrefs there is now created 8 different sizing widgets (each corner/border). Only the traditional sizing widget is visible, the other 7 are invisible like the dragbar. There is a known problem with DOpus which has a gadget in the border that becomes shadowed when this feature on. A fix for this is underway, but it would be nice to spend some testing to identify other programs which has problems before making this fix. Changes for 47.18 (25.02.2020) - Fix a minior bug with window resizing via non-corners and the window is outside right or bottom border - Fix fix hits and freeze when hovering where there is no window - Fix crash when the hovered window is closed between detect and setting mousepointer Changes for 47.19 (06.03.2020) - Change to the size widgets in all corners, so that applications browsing through the window gadgets will not find these hidden gadgets ever. - Fix so GoldED imposing a size gadget will continue to work - hopefully fixed so other similar hacks will now work too Changes for 47.20 (09.03.2020) - Fix crash with the new mouse pointer when hovering gadgets. We queried non-BOOPSI gadgets - Implement new window sizers conflict sniffing - and disabling conflicting size gadgets. For now only DOpus5 is known to cause this, but the code is general enough that it should catch all cases. For now a debug statement is sent to serial so testers can see when it happens. - Fix crash when hovering gadtools gadgets that also report themselves as custom gadgets Changes for 47.21 (14.03.2020) - Corrected some inaccuracies in the routines dealing with border and gadget refresh upon a window resize. Among other things, this fixes bug #1401 (please verify). Changes for 47.22 (05.04.2020) - Implement maximize when shift clicking the zoom gadget Changes for 47.23 (07.04.2020) - Fix bug in new maximize window functionality where dimensions of the mode we came from wasn't remembered - Fix bug that could cause pointer to disappear when hovering a gadget that has GA_Underscore or GA_ActivateKey specified - Enable ESC as a means to dismiss easy requesters - trying it out so it may go away again - In string gadget ctrl + left/right now goes to the extreme ends The old shift+left/right still work Changes for 47.24 (12.04.2020) - Fixed wrong button gadget size in system requesters when using GA_Underscore - Don't choke on pointer types from iprefs with negative type id - Don't draw new mutually exclusive menu items pre newlook screens and prevent memoryleak - Fix some odd state change bug with new window maximize - now we store a real state flag in MoreFlags - Optimized MX and Shift glyphs to be always symmetric Changes for 47.25 (04.05.2020): - make hoverslugishness available for user configuring - ALSO make sure icontrol pref files are safe to use on any combination of iprefs and intuition - removed a debug kprintf no longer needed (related to removing sizers conflicts) Changes for 47.26 (12.05.2020): - Implement true OS level support for scrollwheel - Fix sluggishness setting didn't have any effect if windows outside screen was turned off Changes for 47.27 (25.05.2020): - Fix internal IECLASS_GADGETHELP clashed with NewMouse (maybe harmless but let's be safe) - Fix internal scroll event clashed with OS4 mouse (which synergy client also sends and that WAS a problem) Changes for 47.28 (27.05.2020): - Closed a safety hole in the internal PutMsgSafely() function. It was discovered and reported by Peter Cherna in 1993 but never actually fixed, very likely due to Commodore's bankruptcy (item B20838 in the old Commodore-Amiga bug database). - Now passes SA_ErrorCode to the tagged AllocBitMap() function called to allocate a screen's bitmap, in case the underlying RTG software supports it and wants to report some error code on failure. A new OSERR_NORTGBITMAP code has been added to intuition/screens.h, to be returned in this kind of situations. - Removed some leftover debug output in the proportional gadget hook routines. - Reserved a number of slots in the library jumptable to preserve the compatibility with the 68k jumptable of the OS 4.x intuition.library, and added the multi-purpose IntuitionControlA() function. - Added support for different, user-configurable aspect ratio settings aiming to make window borders look more pleasant on high resolution screens with (nearly or exactly) square pixels. It is now possible to select a sizing gadget size of 18x14, 18x16, 18x18 or 18x20; this should allow most users to get a suitable window border aspect ratio for their screen resolution and display device. - Added support for an external hook with the purpose of automatically rearranging the position of arrow gadgets and scroll bars in window borders. This is meant to only kick in when the window border aspect ratio correction is on, due to some applications still assuming the sizing and arrow gadget dimensions to forever be the fixed ones that Intuition enforced in all of its past releases. The default gadget rearrangement code (a slightly improved version of the one used in AmigaOS 3.9) is currently implemented in IPrefs and installed at boot time via IntuitionControl(). Having this as an external hook has two advantages: it helps reduce intuition.library's ROM space usage, and allows future third-party GUI enhancers to override the rearrangement algorithm with their own one in a clean way. - Implemented a new MENUSUB sysiclass image type which implements the arrow symbol displayed at the right side of a menu item to indicate it has a sub-menu. This replaces the "»" character (ASCII 187) used until now by GadTools for its menus (gadtools.library 47.8 or higher is required for this feature to work as intended). - Changed the value of a few constants defined in Intuition's include files (FRAME_CONTEXT, MXMENUIMAGE, SHIFTKEYIMAGE, MIF_SHIFTCOMMSEQ, MIF_COMMSEQEXTPARSE) since they clashed with already existing OS 4.x flags or ID numbers. This is unfortunate, but it had to be done now, before going public. System components using the above constants are going to work correctly again once they are rebuilt. - Also, the MXMENUIMAGE constant has now the same value as the MENUMX constant from the OS 4.x API, and has even been renamed as such for source level compatibility (the corresponding image has exactly the same purpose in both OS versions). Luckily, no system component will need any modifications due to this change (besides Intuition itself). - Added a new FRAMEF_MINIMAL flag for the IM_FRAMEBOX method, meaning "don't add empty padding around the contents". This makes the image return only the exact sizes of its horizontal and vertical borders, making it easier to support frames with variable border thickness. This flag is now taken into account by frameiclass. - Added the new frameiclass types FRAME_PROPBORDER, FRAME_PROPKNOB and FRAME_DISPLAY, although they are not used by anything yet. - The DrawInfo structure has now a DRI_VERSION of 3, and features one new pen (bringing NUMDRIPENS to 13) and a 'dri_Screen' backpointer. - The new BARCONTOURPEN DrawInfo pen can be used to specify the color of the left and top edges of the screen bar and menus. When this is done, the already existing BARTRIMPEN is used in turn for the right and bottom edges, allowing to achieve a 3D embossed look for screen bar and menus similar to the one of most other GUI elements. BARCONTOURPEN and BARTRIMPEN can also be mapped to the same palette entry, in which case the screen bar won't change, whereas the menus will have a thin flat border in the chosen color. To turn this feature off, it is enough to assign BARCONTOURPEN the same value as BARBLOCKPEN; both the screen bar and the menu borders will then be drawn in the (old) "new look" introduced in V39. - Note: the "newer look" menus with contour/trim pens are exclusive to SA_Pens-aware or Workbench-like screens for which the application is supplying either no pens or the full pen set including BARCONTOURPEN. Everybody else will get (at most) V39-style "new look" menus. Changes for 47.29 (08.06.2020): - Fix crash when hover of non boopsi gadgets - Introduce GA_Hidden, GA_ParentHidden GMORE_HIDDEN and GMOREPARENTHIDDEN Changes for 47.30 (09.06.2020): - Make scroll wheel on propgad actually work Changes for 47.31 (21.06.2020): - Change the offscreen window movement, now the mouse doesn't move while the window is sticky Changes for 47.32 (27.06.2020): - New Gadget method GM_QUERYHOVERED that is supposed to be like OM_GET but in composite gadgets it asks the hovered sub-gadget (as determined by latest GM_HELPTEST). - Use the new GM_QUERYHOVERED to figure out what mousepointer to show - Fix the resize from all corners after it was broken by the move outside window change Changes for 47.33 (15.07.2020): - Fix bug where menu (de)activation or switching screen could trick intuition to having the wrong mousepointer - Fix bug that would cause pointer depends on "window under pointer" Changes for 47.34 (27.07.2020): - Add support for WA_PointerType (as promised in includefiles many months ago, oops) Changes for 47.35 (31.08.2020): - Reduced the ROM space usage of intuition.library by about 128 bytes, by commenting out some initializer tag items for system gadgets that were specifying default values anyway. - Converted a few one-line wrapper functions to macros, which further shrank intuition.library by 144 bytes. - Simplified the lookup of a screen's arrow image sizes, resulting in 96 more bytes of ROM space being saved. - New code has also been added, though, so all the above actually only makes the binary 140 bytes shorter than the previous version. - Reduced the stack usage of OpenScreenTagList() by about 170 bytes to compensate for the additional consumption due to all the patches the function is usually subject to (IPrefs, RTG software, DirOpus...). - Looks like the optimizer was acting up on the very long and complex realOpenScreenTagList() function, leading to random lockups in some occasions. Worked around the issue by moving some of the code into a separate function in a different module (to prevent inlining). - The protocol employed by AddGadget() to pass internal information to AddGList() is no longer exposed to potential concurrency issues. - Pressing the right mouse button while dragging a screen now cancels the operation and makes the screen jump back to its initial position, for consistency with window and icon dragging (which can be aborted the same way since OS 2.0). - Added an experimental optimization to the core routine which handles the rendering of multiple gadgets. The list of gadgets to be drawn is scanned backwards (i.e. last to first) and the time spent on that used to increase quadratically with the number of gadgets involved. Now the increment is linear. This is unlikely to show any noticeable speedup when having just a few gadgets in a window, however it might have some impact with very complex GUIs, especially on slower CPUs. - DoGadgetMethodA() would leave a stale GadgetInfo pointer in whatever message structure was passed to it; now that field is being properly cleared before the function returns. - The tag-based screen bitmap allocation code wasn't initializing all the entries of the fallback color table; now fixed. Changes for 47.36 (08.09.2020): - Added special API support for P96, making it no longer necessary for it to directly access private Intuition structure fields. - Also added special API support for P96 screen dragging. - SetIPrefs() no longer allows ScreenMode preferences to set a screen depth greater than 8. It was never necessary anyway for hicolor and truecolor screens to work. This removes the need for P96 to correct the value by writing into a private IntuitionBase field. - OpenScreenTagList() now limits the requested depth to a maximum of 8 as well for hicolor and truecolor screens. - Re-aligned all fields of the internal XScreen structure so that they now have the same offsets as in pre-3.2 intuition.library. This will restore compatibility with any existing software that peeks XScreen expecting it to have a specific layout. Changes for 47.37 (17.09.2020): - The hovered state only checked for physical mousebuttons, not the keyboard simulated ones. This mean that hovered gadget would change even while "mousebuttons" were pressed which in turn meant that events were sent and this for some reason messed up workbench icon dragging via keyboard. Changes for 47.38 (03.10.2020): - The hovered state fix above was not good enough as left/right side combinations of keys were not taken into consideration - fixed Changes for 47.39 (25.10.2020): - On second thought, disabled the experimental optimization introduced in version 47.35 for multiple gadgets rendering. While it might give some marginal speedup on slow machines, there's not enough time left right now to investigate all potential compatibility issues it could cause, which makes it too risky to leave in. Maybe next time... - NewModifyProp() does now go through the proper gadget hook to update the rendering of a single gadget's knob, which is more OOP and saves a few bytes of ROM space as well. - All instances of gadgetclass, or any of its subclasses, have now the new GMORE_BOOPSIGADGET flags in their MoreFlags field. This makes it possible to distinguish actual BOOPSI gadgets from custom gadgets as both are GTYP_CUSTOMGADGET. - The PGA_Top, PGA_Total and PGA_Visible attributes of propgclass will now support 32-bit values without overflowing. This change only eats 12 bytes thanks to utility.library's new 64-bit division function. - On screens where SA_OffScreenDragging was set to FALSE, it was still possible to drag window frames past the screen borders, although the actual window would then only move within the screen. Now fixed. - Removed the existing P96 screen dragging support API and replaced it with a new one by request. - Further reduced inlining in the screen routines, as their complexity was still making the optimizer generate faulty code. - Intuition sources now include instead of a local version of that file. This allows to share private structure and tag definitions between Intuition and IPrefs without code duplication. - Reworked the IntuitionControlA() code dealing with GUI support hooks to make it automatically support new ones (up to 24) without further changes. This also helps keep the binary size in check. - Intuition now supports an user-definable exception list, allowing to selectively turn off certain global appearance settings for programs and screens unable to adapt to a non-hard-coded GUI geometry. This functionality is handled by an external GUI support hook IPrefs installs at boot time, and therefore requires the latest versions of IPrefs and IControl (to actually edit the list). - The user can now select automatic aspect ratio correction for window border gadgets, with their sizes being computed relative to both the window titlebar height and the actual proportions of screen pixels. This is an alternative to the already available aspect ratio options and (unlike those) applies to all resolutions, including low res and super high res with or without interlacing. The effects of this setting can be disabled for any given program or screen by means of the GUI exception list. - The user can now also specify an (optional) increment for the height of screen and window title bars, which depending on the font in use can be desirable for aesthetic reasons. Note that the width of title bar gadgets is (currently) not affected by the height increment. The effects of this setting can be disabled for any given program or screen by means of the GUI exception list. - The vectors for the aspect ratio corrected (sizing and arrow gadget) images of sysiclass are now designed for a higher definition. Also, the 1:1 arrows should now look symmetrical even at odd sizes. - The IA_FrameType attribute of frameiclass is now gettable. - Added new GMORE_FREEIMAGE flag asking gadgetclass to free a gadget's GadgetRender object automatically on OM_DISPOSE. This helps simplify the work of both application and class implementors. Do not use this flag with gadget classes that already free their images themselves! - Omitting to pass SYSIA_DrawInfo when instantiating sysiclass will no longer cause a crash, but rather produce a monochrome image. This is just as noticeable by the programmer, while hopefully providing some better hint as to where the error lies. - Applied a number of size optimizations to the code, which allowed to reclaim about 400 bytes of ROM space after all the above changes. Changes for 47.40 (27.10.2020): - Fixed an idiotic bug I introduced in version 47.28 which would cause illegal memory accesses in case a color greater than 63 was assigned to a screen's DrawInfo pen (bug #1581). Changes for 47.41 (12.11.2020): - Make sure active pointer is updated quickly if a gadget changes it's mousepointer - Use the new GMORE_BOOPSIGADGET to detect boopsigadgets instead of a more risk combination of flags Changes for 47.42 (20.11.2020): - Fix mousepointer not changing if gadget being clicked changed its pointer Changes for 47.43 (27.11.2020): - Removed the check for non-BOOPSI system gadgets to be deallocated on window closing, since no such system gadgets exist since decades. - Removed some dead code from the proportional gadget routines. - Removed some more redundant code, which was inadvertently introduced as part of the GUI exception list support. - Hopefully improved a little the P96 screen dragging support code. - The semaphores protecting the GUI support hooks were initialized too late during Intuition's startup, thus causing the early usage of one of them to access random memory addresses. This had the potential of making the system hang during boot. Now fixed (bug #1910). - Fix a concurrency problem with mouse pointers and state of intuition. Re-enables an optimization - but this time mostly because it avoids a call to WaitTOF which can be very problematic, when setMousePointer is called in the middle of a state change. Applications would be notified while the state change is not complete Changes for 47.44 (8.12.2020): - The correct locking order of the ISTATE and IBASE semaphores was not always respected in a couple of places, which could lead to deadlock situations with tasks calling LockIBase(). A fallback code path will now be followed whenever such a condition is detected, which removes the possibility for those deadlocks to occur (bug #1949 et al.). - Performed some more minor code cleanups and optimizations. - As envisioned and (almost) promised by Commodore-Amiga some 30 years ago, proportional gadgets can now automatically resize a BOOPSI knob image, provided it supports IM_DRAWFRAME. This is enabled by setting the new SMARTKNOBIMAGE PropInfo flag (for compatibility reasons). A new PGA_KnobImage tag is also provided for propgclass, allowing to set both the image and the flag at the same time. Changes for 47.45 (22.12.2020): - The OM_SET/OM_GET methods of gadgetclass now use PackStructureTags() and UnpackStructureTags() also for new (V47+) attributes, instead of processing them manually; this makes the binary 272 bytes shorter. - Disabled the sysiclass code handling the no longer used 18x20 border gadget imagery, which trimmed another 100 bytes off the library. - Also disabled some redundant code that was called by icclass' OM_GET method. This gives us back 52 more bytes of ROM space. - When using a window title bar height increment, the thickness of the top border of windows without a title bar would be calculated larger than it should (with aspect ratio correction enabled) for screens in LORES mode and screens with non-square pixels. Now fixed. - The text of EasyRequester buttons would be laid out incorrectly when having an underscored character, unless that character was the first one, or the text used the system default monospaced font. Now fixed. - The first window being opened on a hi/truecolor screen now refreshes the screen's title bar, just in case it was initially drawn in wrong colors (which can happen e.g. with MUI public screens). - Selected FRAME_PROPKNOB images are no longer drawn recessed. They're still highlighted in FILLPEN color, though. - The GA_ReadOnly attribute of gadgetclass could be read, but not set, whereas GA_ParentHidden could be set, but not read. Both now fixed. - It's now possible to set and read the new IA_Orientation frameiclass attribute, although the class itself doesn't use it for anything yet (however, subclasses could). Changes for 47.46 (31.12.2020): - Send scrollwheel events to the nearest vertical scrollbar if none of the more modern methods succeeded. - Exclude MUI windows from scrollwheel treatment. They will just get the event and do their own thing. Changes for 47.47 (1.1.2021): - Applied a few small code optimizations to frameiclass, sysiclass and frbuttonclass, which overall saved 124 bytes of ROM space. - Added support for the new IA_EraseBackground attribute (OM_SET only) to sysiclass. If set to FALSE (default is TRUE), irregularly shaped images are blitted through a mask to avoid clearing the background of the whole destination rectangle. Only heeded by MXIMAGE for now. - The headline text and color for a FRAME_CONTEXT frame were being set with the IA_Data and IA_FGPen/IA_BGPen attributes. However, this was posing a potentially serious compatibility issue because frameiclass always allowed applications and sub-classes to use those for their own purposes. If fact, even gadtools.library does so in its internal frameiclass subclass and it's only by sheer luck that this caused no crash (frameiclass was actually treating a Border structure as if it were a string, but a zero in its first byte saved the day). Redefining those attributes thus looks unsafe, as there's no telling what existing software might be doing with them. Therefore, the FRAME_CONTEXT headline text is now specified with the new IA_Label attribute, and its color is passed via the equally new IA_LabelPen attribute, both backported from the OS 4.x API. IA_BGPen doesn't get a replacement for now, since it is not used for anything by the current frameiclass (the headline is rendered in JAM1 mode). Note well: gadtools.library/DrawBevelBoxA() has also been adapted to support this change. This means gadtools.library 47.13 or higher is now required for frame headlines to be displayed in GadTools GUIs. - Happy New Year :-) Changes for 47.48 (3.1.2021): - Switched to a different way of handling IA_EraseBackground since the previous solution broke DeluxeMusic 2 by exposing a bug in its code. This costs us 56 extra bytes, but compatibility with legacy programs of such relevance should definitely be preserved. Changes for 47.49 (20.2.2021): - The MIF_SHIFTCOMMSEQ now also applies to non COMMSEQ strings Changes for 47.50 (21.3.2021): - It's now possible to open windows already in hidden state by passing { WA_Hidden, TRUE } to OpenWindowTagList(). - Added a currently private mechanism to allow specific windows to get RAWKEY NewMouse codes instead of having them filtered out by the new scroll wheel handling. This can be used to retain compatibility with programs whose GUI relies on that kind of events (e.g. AWeb). - Made some minor code adjustments and shrunk the binary size a little through a few small optimizations. Changes for 47.51 (3.4.2021): - Integrated a private API extension for better sprite support on RTG, whose code was kindly provided by Thomas Richter: 1) Updated pointerclass to be RTG aware and support multiple sprite resolutions through a series of private flags in the DisplayInfo. 2) The display mode coercion code now derives the sprite resolution from pointerclass. 3) Intuition's shutdown function will now clean up all sprite sizes, not just the ones supported by the machine's native chipset.