Intuition 39.2192:

Menus are now brought on-screen much faster than before.  The extra
memory required to do this is freed immediately after the menu is
drawn onto the display.  If that memory isn't available, menus are
brought on-screen the old way.  Menus are removed from the screen
several times faster than before (no new memory requirement for this).

The menu code has been massaged (mostly unifying item-panels and
subitem-panels), which saved a bunch of code.  All the edge cases I
could find have been tested.

When a window is resized, the window drag-bar no longer flashes in an
ugly manner.

If a screen is opened before DOS sends Intuition the first SetPrefs(),
the pointer will be the ROM default pointer, instead of being blank.

If you used a boopsi string gadget as an integer gadget, with
Intuition supplying the buffer, and you specified a STRINGA_MaxChars
of > 15, you would get a mismatched FreeMem() when the gadget is
disposed.  This is now fixed.

Certain OpenScreen() failures would erroneously CloseFont()
GfxBase->DefaultFont even though it had not been opened.  This is now
fixed.

For 3.0, there were some changes to clean up autoscroll, in particular
to fix bugs when an absolute input device (such as a tablet) is used.
Mostly incidental to that change, I caused a problem because I
inadvertently switched the autoscroll boundary to be the DClip of the
active screen, where it used to be the "hull" of the DClips of all the
screens.  If there are two screens in the system with different
DClips, the mouse can be way outside the DClip of the smaller screen.
If that screen is active, it will AutoScroll at a ridiculous rate.
For example, if the mouse is seventeen pixels below its DClip, moving
it down one pixel causes the screen to autoscroll by eighteen, instead
of one.  This is now fixed.
Intuition 39.2210

Intuition now updates its internal time values based on (nearly) _any_
InputEvent it receives, instead of just IECLASS_TIMER ones.  The
problem was that outgoing IntuiMessages get their time from this
internal time, which meant that IntuiMessage time was the time-stamp
of the most recent timer tick, instead of the time-stamp of the event
that actually triggered this IntuiMessage.  This problem completely
precludes correlating an IntuiMessage with the InputEvent that caused
it, which is important for tablet people, for example.

If the TimeStamp of an event would be a step backwards in time or
farther forward than one second, Intuition doesn't heed it.  However,
Intuition _always_ respects IECLASS_TIMER TimeStamps, which allows
changes to system-time to be picked up.

Expect a corresponding patch for 3.00 and 2.0x, and maybe for 1.x too.
(I have a prototype of the patch working).

If a child screen is dragged off the bottom of the display, and the
scan-rate changes (say by Amiga-M changing to a screen of a different
scan-rate), the child screen would be accidentally brought up so one
scan line was visible.  This bug is now fixed.
Intuition 39.2256

In frameiclass, the IM_FRAMEBOX method now accounts for the extra room
of the new-for-V39 frame types.  In the initial V39, frameiclass
ignored the new frame types when computing how much bigger the frame
box needed to be when compared to the contents.

After creating the BarLayer of a SCREENQUIET screen, Intuition now
changes its backfill hook to the screen's LayerInfo backfill hook.
This fixes the bug where the part of a window obscuring the title-bar
area of a SCREENQUIET screen wasn't erased when the window was closed.
(Effectively, Intuition was relying on a layers side-effect that was
optimized out for V39).

Fixed the bug where changing coercion Preferences (specifically the
"Avoid Flicker" option) could leave a screen illegally positioned.

Clarified some comments and removed a redundant test in Intuition's
MakeVPort() code.  Intuition is verified ready for the graphics fix
that prevents minor display garbage if a ViewPort is completely off
the bottom of the display.

The ImageClass OM_GET method now uses UnpackStructureTags() (the
packing table already existed for the OM_SET method).
Intuition 39.2275:

A child screen fully off the bottom of the display no longer
autoscrolls up.  The old way, it could trap a parent/child pair of
screens in an undraggable condition.

Fixed a recent bug where an overscanned screen could get pulled down
by autoscroll under certain conditions.  (Autoscroll isn't supposed to
pull screens down below their DClip top).

An off-the-bottom child screen can no longer mess up Intuition's mouse
limits (which could leave a screen unreachable under certain
conditions).

ScreenPosition(SPOS_MAKEVISIBLE) of a coerced screen now works right.

The mouse scaling factors are now correct for double-NTSC monitors.
These parameters really need to go into the graphics database, because
Intuition currently "knows" the right numbers on a per-mode basis.  In
the meantime, I've extended Intuition's knowledge by one mode.

Keyboard control of the mouse cursor moves the mouse exactly one
screen pixel at a time.  This only worked when a window was active,
but now it works even if no window is active.
Intuition 39.2332

Fixed several bugs with non-draggable child screens:
- Non-draggable child screens whose DClips don't match their parent's
  come up in the right place.
- Non-draggable child screens whose widths don't match their parent's
  no longer wrap when you drag the parent.
- SPOS_FORCEDRAG now allows non-draggable child-screens to move
  horizontally.
- Non-draggable child screens didn't have their top edge validated
  correctly against their parent's when they are first opened.

Attached screens which are opened as SA_Exclusive now form an
exclusive family, allowing the benefits of both.  This used to fail.

When resizing a window, the erasing of the old border and old GRELxxx
gadgets has been optimized to flash a lot less and be faster.  When
changing the activation state of a window, the border re-rendering
has been optimized.

Fixed a hole in the state machine where a task whose priority exceeds
that of input.device could get into trouble calling Intuition if a
function it called (eg.  ScreenToBack()) got deferred because of the
state Intuition was in (eg.  user was dragging a screen).  Intuition
was missing a lock and was implicitly relying on task priority for
things to clean up in the right order.

If OpenWindow() failed to create the window layer(s), Intuition would
fail to repair any damage that might have been caused in to other
windows of the screen.

If a MENUVERIFY window was ever sent a MENUVERIFY/MENUWAITING message
(because the user accessed the menus of some other window on the same
screen), then every normal MENUPICK from that point on would be
immediately preceded by a spurious MOUSEBUTTONS/MENUUP message.

While processing a menu command-key, if Intuition timed out waiting
for the application to reply the MENUVERIFY, Intuition would fail to
send a MENUPICK/MENUNULL message.  Also, two memory-allocation failure
paths in the MENUVERIFY code had the same problem.  These are all
fixed, as MENUVERIFY applications need the guarantee of receiving a
MENUPICK and/or a MOUSEBUTTONS/MENUUP for every MENUVERIFY.

SetIPrefs() now bounds-checks the Overscan values it receives, which
could be illegal if the user added or removed the VGAOnly monitor, or
changed between PAL and NTSC in BootMenu.
Intuition 39.2339

When Intuition splits a single InputEvent into button and movement
components, the button event is now sent first.  This fixes some
inconsistencies with extended input information like pressure, as well
as odd behavior of the qualifiers, in particular IEQUALIFIER_MIDBUTTON.

One of the important input token fields is now longword aligned.
Intuition 39.2369

Important change to the way ScrollRaster() sniffing for gadgets is
done:

The code to detect damage caused when a gadget method performs
ScrollRaster() or ScrollRasterBF() turns out to be in fundamental
conflict with an application using ScrollRaster() or ScrollRasterBF()
in an Intuition window.  It turns out that Intuition can throw away
damage that the application needs.  ScrollWindowRaster() is safe.

So the change is that until a gadget with the GMORE_SCROLLRASTER
property is added to a window, the ScrollRaster() damage detection
code does not run for that window.  This means that we're
V37-compatible until a GMORE_SCROLLRASTER gadget enters the picture.
If your app uses one of those, you must switch any use of
ScrollRaster[BF]() within the application to ScrollWindowRaster().
The gadget must continue to use ScrollRaster[BF](), however.  The
biggest complication would come from using some gadget class you don't
control the source to.  How do you know if it currently uses
GMORE_SCROLLRASTER, or might in the future?  If you use such a class,
switch to ScrollWindowRaster().  Sorry folks, this got messier than I
hoped.

IESUBCLASS_PIXEL NEWPOINTERPOS events with IEQUALIFIER_RELATIVEMOUSE
were broken.  This is now fixed.

The WBenchToFront() and WBenchToBack() functions were supposed to call
ScreenDepth() through the LVO, but didn't under 3.00.  They do now.

RefreshWindowFrame() now correctly redraws the window title if someone
pokes the title string or title string pointer directly.  Apparently,
some people have never heard of SetWindowTitles()...

When an application obtains use of a sprite other than the pointer
sprite, by using the old GetSprite() call, Intuition now arranges for
the sprite pixel resolution to fall back to ECS compatibility.  Users
of ExtSprites are unaffected.

FreeScreenBuffer() now does a WaitBlit() before FreeBitMap().

Figuring out where the user clicked in a string gadget now uses
TextFit() instead of successive TextLength()s.  We need this in part
for the Kanji stuff.

Calls to MoveScreen() or ScreenPosition() have always been ignored
while the user is dragging a screen or sizing/dragging a window.
These calls are now deferred, which is preferable and fixes a problem
encountered with the new Palette Prefs when it opens the color wheel
on a separate screen.

I did a general autodoc cleanup, including proof-reading of all V39
references.  Also, there was some minor cleanup to the include files.
Notable changes:
- The ScrollWindowRaster() autodoc has been elaborated
- There are now definitions for 2.0-style system gadgets
  (GTYP_WZOOM, GTYP_WDEPTH, etc.).  The 1.3-style definitions
  are now defined in terms of the new ones.
- pointerclass.h|i contains notes on the compatibility fallback
  techniques used by Intuition/graphics when sprites other than
  the pointer sprite are used.
Intuition 39.2415:

Calling NewModifyProp() while the user is dragging the slider knob can
no longer leave behind trash remnants of the knob.

Intuition used to hard-code relationships between monitors and how
many "database ticks" to move the pointer when the mouse itself moves.
Intuition now obtains this information from the MonitorInfo structure,
if it is there, and falls back to the old way if it is absent.  This
data still needs to be added to the graphics database.

The string "Workbench Screen" is now localizable.

Fixed a long-standing enforcer hit which can occur if you click the
mouse after the last screen has closed (say during Workbench reset).

Fixed a long-standing enforcer hit which can occur if you activate a
window with a requester in it by clicking on a system gadget in that
window.  (The bug is most detectable if no active window has had a
requester in it since the computer was turned on).

Graphics will be adding a performance enhancement via VideoControl()
which allows an application to request that its ViewPort's
intermediate copper-lists not be kept up-to-date.  Intuition now
detects and handles such ViewPorts correctly by ensuring that
MakeVPort() is always invoked on such a ViewPort if MrgCop() is going
to be called.

The public screen list is now case-insensitive.
Intuition 40.29:

Bumped the version number to V40.

Fixed a race condition with closing the Workbench which could cause
LockPubScreen(NULL) to return garbage.  Fixed a hole in the public
screen uniqueness test where if two screens tried to open
simultaneously with the same public screen name, it was possible that
both would succeed, instead of the second one failing with
OSERR_PUBNOTUNIQUE.

Screens whose bitplanes are not sufficiently aligned to be promoted
are now promoted into a lower resolution, instead of being shown
scrambled.  This fix requires the latest graphics.library and a new
DblNTSC and DblPAL monitor.  This ought to allow Boing! to come up
promoted (albeit in extra-lores).

Added a new tag, SA_MinimizeISG, which requests that Intuition give
the smallest possible inter-screen gap, instead of enforcing the old
compatible minimum.  This is required to use the new graphics
VC_NoColorPaletteLoad VideoControl() tag.

The calculation of the menu panel size now takes into account the
height of the Amiga-key symbol, and the IntuiText TopEdge.  This fixes
some possible crashes when using a too-big Amiga-key.

Fixed a bug where if a window failed to zoom due to lack of memory,
Intuition would nevertheless update the future zoom size/position to
the current size/position.  A window which uses title-bar zooming
(like our Prefs editors do) could have been stranded in its small
state.

Removed code that calls OpenMonitor() and CloseMonitor(), since
they're unnecessary.

Fixed a small bug in border redrawing when resizing a window which had
no depth gadget.  This bug crept in with the V40 border redraw
optimizations.

All non-essential Alert()s are now gone, to save space.
Intuition 40.34:

Fixed a bug in AllocScreenBuffer() failure where it called
FreeScreenBuffer() badly.

Fixed a hole in UnlockPubScreen() where it could race with
CloseScreen() and die with enforcer hits.
Intuition 40.37:

The existing kludge to handle applications which poke their screen
BitMaps fails if the application pokes its Screen's RastPort's BitMap.
This case is now handled.
Intuition 40.45:

Holding a gadget down no longer blocks OpenWindow() from completing.

frbuttonclass no longer crashes if the OM_NEW taglist includes
GA_Width or GA_Height.
Intuition 40.47:

Fixed a small window of vulnerability when ModifyIDCMP() connects the
window's WindowPort.  This could cause enforcer hits if input.device
got to run at the wrong time with respect to the client's call to
ModifyIDCMP() or OpenWindow().
Intuition 40.65:

Fixed a bug where a non-draggable child screen could inadvertently be
moved by the system if the active monitor changed.  The bug occurred
because the same loop which updates the resolution scale factors based
on the active monitor calls a function which checks resolutions across
screen families.  That loop is now two loops, so the resolutions are
always good.
Intuition 40.68:

Added private field that CDUI can use to better hijack the Intuition
sprite in a manner that makes it very safe to relinquish later.
Intuition 40.71:

The previous release's pointer hijack feature requires that I poke
the SimpleSprite->num field of the pointer before I MoveSprite() it,
since it's possible that ChangeExtSprite() was never called on it (due
to hijack).
Intuition 40.85:

OpenScreen() now fails if AttachPalExtra() fails.  Otherwise, enforcer
hits and awful death may result.

If sysiclass fails to allocate its TmpRas, it would fail to release
the semaphore which protects class-data, locking out subsequent users.

Minor cleanup to some autodocs (QueryOverscan() and OpenScreen()'s
discussion of left/top/width/height defaults, description of
WFLG_NEWLOOKMENUS, and a few other things).
