Drawing to a Graphics object whose backing has been destroyed (for example if the Graphics object came from a Picture and that Picture was destroyed before the Graphics object was) a NilObjectException is now raised instead of crashing.

WebLabels and WebLinks whose MultiLine property is set to True will now refresh their appearance when visibility is set to True so text changes made while the control was invisible will appear correctly.

WebImageViews whose Picture property is defined by an Image object will now transfer the image that best matches the resolution of the current session when behaving as the source of a drag and drop operation.

Fixed a loss of precision issue when converting some mouse coordinates. This fixes an issue where the MouseDrag event no longer fires if the mouse didn't move after MouseDown, this occasionally happened at fractional HiDPI scale factors depending on the mouse location.

Made it so that the "choose a project window" (template chooser) is in the window menu so that if you open it, switch to another project, you can get back to the choose project window by selecting it from the window menu (which you can’t do easily right now).

Fixed a long standing and hard to track down bug in the code editor where if you have a long method, edited it, then tried to select you would get this weird bouncing behaviour and not be able to select past the current screen full of code

With autocomplete, the Declare word can now be used either at the beginning of a declare or following Soft. Note that this, like the other verbs that can only be used in a declare, does not mean that it suggests things in the correct syntactic order just that it will now suggest it after typing "soft”.

Pasted text is not handled immediately but when the insertion point moves, or would move in the case of a multiline paste. This way pasting into a quoted string or comment no longer has the standardize format applied to it incorrectly.

Summary of things improved in the code editor: made changes to how code items cache their set of local vars to improve speed, better caching and updating of using clauses, makes it so lines that start with "catch" and "exception" are considered as declaring local variables which they weren’t before, sped up class name lookup.

Changes to Shared Build settings: - "Long Version" is renamed as "Copyright" in the Shared build settings - "Short Version" is renamed "Version" in the Shared build settings - "Package Info" is renamed "Description" in the Shared build settings and add new accessors for GUI and Console apps so - App.Version gives back the short version (ShortVersion still works) - App.Copyright gives back the long Version (LongVersion still works) - App.Description gives back packageInfo (PackageInfo still works) IDE Scripts can set and get these values as well. Note that this does not alter old behavior on each OS. For instance, PackageInfo never returned any value on macOS, so Description doesn’t either.

Fixed up the handling of names changes in menu items so that the first time there is a duplicate name both the existing item and newly renamed item both get index values (as neither would have had one). The next time there is a new item renamed to an already existing name it gets the "next" index (one larger than the highest one used so far). And these fixes mean that simply renaming an item will not get an index of 0 assigned.

User set menu shortcuts can be in these locations: * Application Data > Xojo > Xojo <version> > Overrides > Keyboard shortcuts (for ONE user for ONE specific version) * Documents > Xojo > Overrides > Keyboard shortcuts (for ONE user for all versions that support this functionality) * SharedDocuments > Xojo > Overrides > Keyboard shortcuts (for all users for all versions that support this functionality) This override of shortcuts will be located and used in the order listed above. More specific settings override more general ones. </version>

APFS volumes now correctly retain tags (and other meta data like extended attributes, ACLs, custom icons, and some other low level metadata) since we've moved to a newer API for atomically swapping files.

A 64-bit stub can correctly receive either a 32 or 64-bit app from the IDE. 32-bit stubs only receive 32-bit versions. Previously, since 64-bit debugging was not possible on Windows, only 32-bit versions would ever be sent to remotes regardless of whether the remote was running on a 32 or 64-bit version of Windows.

Updated to support per monitor awareness v2 that was introduced in the Creators Update. This fixes many of the Win32 control issues on a per-monitor setup, but even on a single monitor setup where the user would switch DPIs without logging out. Some highlights: - All menus create in Per Monitor v2 contexts will be scaling on a per-monitor fashion - Win32 dialogs now automatically respond to DPI changes - Various Win32 controls have improved DPI scaling behavior in Per Monitor v2 contexts - Theme handles opened in the context of a Per Monitor v2 window will operate in terms of the DPI associated with that window

Updates to support Wayland backend, and others besides X11. As with any backends (in combination with differing versions of GTK+), mileage may vary in what works and what doesn't. Currently the major differences noticeable in the Wayland backend are: - Cannot restrict to a maximum size of a resizable window - Getting the Window left/top will return 0, conversely setting the Left/Top will not move the window

Made it so that when you click on an item contained by another (such as a code item like a method, constant, property, etc contained by a class, layout, etc.) one of the contextual men items is to open the container in a new tab. This is particularly handy when you’ve applied a filter and want top open the item in a new editor.

Export of localizable values is scriptable using IDE scripting syntax like this:

If ExportLocalizableValues("english", "/Users/username/Desktop/untitled folder/english.xojo_locale") Then
Print "success”
Else
Print "fail”
End If

The names of the languages are as presented in the popup menus in the IDE for exporting. The path to the destination is a native path and so is necessarily platform specific. The destination file will be created or overwritten if it already exists. This can fail if the path to the destination does not exist or the language is not in the list of known languages the IDE supports.

CloseProject now has two forms: CloseProject with no parameters behaves just as always and will prompt for saving if the project has changed. CloseProject(true) also behaves this way. CloseProject(False) closes all windows that the project has open but does not prompt to save any changes.