Xojo 2024r1 Release Notes

Release Date: 2024-03-26

Highlights

Statistics

  • Bugs fixed: 258

  • Features added: 31

  • Documentation changes: 4

  • Examples changed: 1

IDE

New Features

  • Added PasswordField to the Library on iOS and Android, so it is consistent with Desktop and Web. (74821)

  • Deprecated interfaces are no longer listed in the Interfaces dialog list, unless already implemented. (70522)

  • Added a new Preference so the user can set the Font / Font Size used by the Debugger panel. (75103)

  • Removed various unused iOS related resources from the Windows/Linux IDE. (44669)

Resolved Issues

  • Help text area background color properly updates when changing Dark/Light mode. (75932)

  • Duplicating a GroupBox on a TabPanel now properly duplicates its child controls. (75821)

  • Allow controls on a panel of TabPanel/PagePanel to be copied and then pasted onto a different panel, instead of being copied onto the same panel they were copied from. (75751)

  • Now it is possible to set the name of a control instance to the same name of a class created in the project. (75726)

  • Prevent an IllegalCastException that could occur in some situations when copying a database project item to another project. (75703)

  • Debugger variable listbox columns can no longer be resized to 0 width. (54033)

  • Added a new check when adding new enum items, so they can't start with a number or sign, or contain non alphanumeric characters when the previous rules are meet. (74849)

  • Prevent code block selection from changing in some situations when expanding/collapsing the block. (67693)

  • Avoid an OutOfBoundsException that could occur when adding blocks to existing code. (75596)

  • Unified ColorGroup editor in the Inspector Panel for iOS projects, so it is the same used in Desktop / Web projects. (65922)

  • The code editor autocomplete no longer mistakenly colors object property/method names that start with REM. (75468)

  • Brought back the limit to display only last 1500 messages in the Messages Panel. Also added an option in the Messages Panel to save the full list of messages to a file, not just the last 1500 ones. (75423)

  • ProjectConsole, ProjectDesktop, ProjectWeb, ProjectiOS methods for use with Code Asssistants now work properly. Added ProjectAndroid and ProjectMobile now returns True for iOS or Android. (74950)

  • To better match standard macOS behavior, on Ventura and later the Settings window title bar text now reflects the name of the setting group that is selected. (72711)

  • Fixed a NilObjectException when trying to paste other content than a picture from the Clipboard in the Icon Editor. (75262)

  • Avoid an OutOfBoundsException when double-clicking in an empty area of the Inspector Behavior property list. (68586)

  • Avoid an OutOfBoundsException that could possibly occur when changing signatures of overloaded methods. (67458)

  • Fixed an OutOfBoundsException that could occur when processing doc entries for some properties on nested modules. (68826)

  • Fixed a OutOfBoundsException that could possibly occur when dragging code in the code editor. (71672)

  • Fixed a possible exception that could occur during IDE searching with Match Case selected. (74582)

  • Fixed an OutOfBoundsException that could possibly occur when reordering Structure fields. (75114)

  • Debug runs now always use Default optimization level (aka no optimization). This prevents odd debugging behavior. The Optimization Level setting will now only be used when Building. (75212)

  • Fixed an OutOfBoundsException that could occur when typing (or pasting) unusual text into the Constant Editor name field. (74660)

  • Reduced the time it takes to duplicate controls in a large control set. (66961)

  • Avoid a NilObjectException that could occur when stopping the debug run of an app while things are still starting up. (71679)

  • Attempt to avoid a NilObjectException that could occur when adding a control from the Library to a layout. (75097)

  • Avoid a NilObjectException that could occur when there is a startup/connection error when launching an iOS app. (70514)

  • Attempt to avoid a NilObjectException that could occur when drawing resize handles in the layout editor. (74786)

  • Attempt to avoid a NilObjectException that could occur when adding an event handler. (74801)

  • The contrast has been increased in the Add item icon from the Toolbar editor in the IDE, so it doesn't look like disabled. (75150)

  • Fixed a possible exception that could occur when the IDE (or a project window) is closed while debugging. (71602)

  • Fixed an issue where some changes made to a control, for Web projects, did not get saved properly. (75030)

  • We now clear out all the Plugin cache if just one of them has changed, since this one change may also affect other related Plugins too. (75158)

  • Prevent NilObjectExceptions from occurring in certain situations where the Navigator tries to display an item that does not exist. (72379)

  • Attempt to fix an exception that could sometimes occur when shutting down the IDE while debugging. (74758)

  • Attempt to fix an unreproducible exception that occurs for some when switching to show a layout editor. (74185)

  • In the Layout Editor, when dragging or resizing controls these keyboard keys are now ignored: Enter/Return, Tab, arrows. Previously these were processed leading to odd behavior and the occasional exception (particularly with pressing tab). (75159)

  • Fixed a NilObjectException that could occur when entering an invalid Xojo Cloud app name. (66929)

  • Prevent a desktop menu bar from being dragged to a non-desktop project. Prevent a Color Group from being dragged to an Android project. (75016)

  • Autocomplete no longer shows Delegate methods that are marked as Hidden. (74797)

  • The Code Editor doesn't display cropped the last line of a long method when the code is displayed while debugging. (74942)

  • Debugger no longer crashes when viewing the contents of an object that is going out of scope. (54447)

  • Android: Code signing an Android app on Windows for the Google Play Store is now working again. (75884)

  • Android: Debugger is now better able to display information about some end-user classes. (75374)

  • Android: Android Debug Device list no longer shows a useless INFO entry when newer versions of Android Studio are installed. (75799)

  • Android: Fixed regression on iOS projects that was impedding to set the super of a ContainerControl to another ContainerControl class. (75723)

  • Android: Fixed an issue with resizing Android container controls that could cause an IDE exception. (75624)

  • Android: MobileScreen in the Android Library now has a contextual menu to create a subclass. (75579)

  • Android: Stopping the Android debugger while it is in the processing of starting up no longer causes an IDE exception. (75440)

  • Android: Dragging the resize handles of a MobileScreen (which does not change the screen's size) no longer adjusts the size of controls that are locked to the screen's edges. (74962)

  • Android: Fixed an exception that could occur with some Android compilation errors when building a standalone app. (75125)

  • Android: Now display a better compile error if the Java version needed for Android is incorrect. Clearing the cache (from Preferences) also clears additional Android cache folders which can sometimes cause odd compile errors when they get stale. (75146)

  • Android: Non-UI controls added to a screen now display a standard compile error if there is no public constructor. (74926)

  • Android: Prevent pasting of desktop controls, web controls and unsupported controllers onto a MobileScreen. (75017)

  • Android: Attempt to avoid a possible NilObjectException that might occur when terminating an Android debug session as it is starting up. (75270)

  • Android: iOS launch image can no longer be pasted into an Android project. (75011)

  • Android: An iOS Icon project item can no longer be pasted into an Android project. (75012)

  • Android: iOS Notification Center can no longer be pasted into an Android project. (75009)

  • Android: An iOS Layout can no longer be pasted into an Android project. (75010)

  • Android: Desktop toolbars can no longer be pasted into Android projects. (75014)

  • Android: A desktop report project item can no longer be pasted into an Android project. (75015)

  • Android: Worker project items can no longer be pasted into Android projects. (75013)

  • Android: Debugger tracks variable scope better and no longer attempts to show a variable value that is out of scope, which would sometimes result in the wrong value being shown or the debugger crashing. (75108)

  • Android: The running app no longer crashes when the debugger tries to display a value for a computed property that has raised an exception. (74987)

  • iOS: Now the LayoutEditor displays the text as hidden for MobileTextField on iOS when the Password property is set to True. (75743)

  • iOS: Within the Library on iOS, creating a new subclass using the contextual menu from the Screen icon now sets the correct superclass of MobileScreen. (75582)

  • iOS: Fixed misspelled TextArea/TextField.SelectionLength on iOS. (75217)

  • Linux: Prevent a NilObjectException that could sometimes occur when the layout editor is resized. (74369)

  • macOS: Fixed DesktopButton with Round style being displayed clipped on macOS (layout and runtime). (75327)

  • macOS: Improved the response to edit the entries of the Segmented and TabPanel controls in the Inspector Panel via double-clicking the listbox cells in their respective Editors. (75417)

  • macOS: Fixed the Inspector tip crashing the IDE when it is shown under macOS Sonoma 14.3. (75351)

  • Web: For Web projects, changing the Super of a control now properly updates the inspector to reflect this new change. (75787)

  • Web: Fixed an issue causing Unparented controls to be assigned to the closest WebView, when re-loading the project. (60161)

  • Web: Fixed an IDE issue happening when saving and loading Web projects with nested controls. Some properties weren't working after reloading, affecting also these controls at runtime. (75719)

  • Web: Fixed a compilation issue happening when using Localized String Constants in the WebRadioGroup.InitialValue property. (75174)

  • Web: Fixed an IDE issue causing an unneeded high CPU usage, when working on Web Projects. (75216)

  • Web: Fixed a bug when previewing some type of buttons in the IDE, when the Enabled property was set to False. (74418)

  • Web: The WebButton preview in the IDE will display an ellipsis, if the button is too narrow, to match what will happen at runtime. (70812)

  • Windows: Remote Debugger CheckBox label is now readable when in Dark Mode. (75761)

  • Windows: Windows IDE: the label heading on the Copy Files Build step editor is now readable in dark mode. (67728)

  • Windows: Fixed an unhandled NilObjectException that was raised in Document.GetScratchDir (75590)

  • Windows: Reduced the amount of file access that occurred when moving controls and typing in the code editor. This should help improve the overall experience while performing these tasks. (70571)

  • Windows: IDE no longer crashes depending on what controls are on the layout and when tabs/windows are closed. (74049)

  • Windows: Adding a double ampersand (i.e. &&) to a multiline label now renders correctly to a single ampersand in the layout editor. This also affects calls to Label.DrawInto (75028)

Framework

New Features

  • Deprecated all the numeric (Double, Integer, etc.) FromText functions in favor of FromString. (75458)

  • TextShape: deprecated Value in favor of Text. (74594)

  • Added a wait for silence time to Barcode scan on iOS, so code reads are not sent in a row when scanning the same code. (75613)

  • Added DatasetLastIndex and LabelLastIndex properties to Desktop/MobileChart. (75550)

  • Added Datasets and Labels methods to Desktop / Mobile Chart to iterate over all the Datasets and Labels of a Desktop / Mobile Chart instance. (75537)

  • Reduce PDF file size when the same File Attached annotation is used more than once in the same document. (75475)

  • Updated SQLite library to 3.45.1. (75479)

  • EncodeBase64 now returns a string whose text encoding is set to UTF8 instead of ASCII. (74883)

  • FolderItem.Zip/Unzip now supports the standard (ZipCrypto/PKWARE) Zip/Unzip password encryption. (74399)

  • Desktop: Added RemoveControl(control As DesktopUIControl/DesktopContainer) to DesktopWindow and DesktopContainer. (69462)

  • Desktop: Removed unused DesktopMoviePlayer.PlayerType property. (68913)

  • Every OS: Added FolderItem.RemoveFolderAndContents. Unlike FolderItem.Remove, this function will recursively remove the folder and all of its contents. (75388)

  • Every OS: Added FolderItem.Extension property to get/set the file extension of a file. (75378)

  • Every OS: Added String.ToBoolean extension method. This will return True if the string contains 1 or True and False otherwise. (75377)

  • iOS: Constraints added automatically to a MobileContainer shown as Popover. (75807)

  • iOS: Overloaded ShowPopover method on iOS so it accepts a MobileToolbarButton as its parent control. (75573)

  • iOS: Fix in MobileChart to deal with NaN values in Datasets (Line, Bar, Scattered, Bubble). (73141)

  • iOS: Added Barcode class to iOS. (74788)

  • macOS: Now the user can mirror the video stream of the Barcode scan UI on macOS. (75639)

  • macOS: Added Barcode class support to macOS (creating QR / Bar128 codes, and scanning images). (75225)

  • Web: Added WebMenuItem.PopUp to display a contextual menu programmatically, like in DesktopMenuItem. (75509)

  • Web: Added WebChart.Datasets and WebChart.Labels iterators, and the WebChart.LabelCount read-only computed property. (75539)

  • Web: Added RemoveControl(control As WebUIControl) to WebView. (69463)

  • Web: WebResponse will attempt to use a memory buffer now, if possible, instead of temporary files. (75208)

  • Web: Added WebContainer.ShowPopover, to display custom popovers. (18355)

Resolved Issues

  • The deprecated Variant.TypeDate and TypeText no longer shows up in auto-complete. (75862)

  • Assigning a DateTime object, to a subclass of a DateTime, now correctly preserves the nanoseconds. (73474)

  • Fixed DesktopChart in Line mode leaving a blank area to the right. (73774)

  • MySQLCommunityServer: ExecuteSQL/SelectSQL now returns a more useful error code on failure (instead of always -1), especially if the connection to the database server was lost. (73351)

  • ODBCDatabase.BeginTransaction no longer prevents table creation. (75156)

  • Fixed getting TextHeight with additional WrapWidth paramenter in PDFDocument graphic context. (75136)

  • Android: MobileContainer now resizes properly when locked to bottom of screen. (75452)

  • Android: Column names accessed on RowSet or DatabaseRow are now case-insensitive. (75709)

  • Android: TabPanel contents are now shown for tab panels that are on containers. (75176)

  • Android: Prevent an exception when attempting to display large images in MobileImageViewer. (75223)

  • Android: MobileImagePicker.Show now better matches iOS. Removed unused Constructor from autocomplete. Note that the Show parameter is not actually used on Android. (75299)

  • Android: Fixed a runtime exception that could sometimes occur when an Object variable becomes Nil. (75574)

  • Android: Fixed a startup crash that could occur when using System.DebugLog in the constructor of a container. (75580)

  • Android: Introspection no longer reports doubled method and properties on MobileScreens. (75437)

  • Android: MobileScreen.Size and ContentSize now more accurately exclude the status bar size. (75205)

  • Android: Introspection.TypeInfo.BaseType property now reports correct values for mobile classes and controls. (75058)

  • Android: Force MobileHTMLViewer to ask for focus when page loads to avoid possible issues with software keyboard not allowing input on some web sites. (75076)

  • Android: MobileTabPanel animations now run after the PanelChanged event has completed. (75204)

  • Android: Introspection.PropertyInfo.Value now properly uses the base parameter. (75424)

  • Android: MobileLocation requires Google Play Services (GPS). Added more checks to ensure that location access via GPS will work. Failure results in the state being set to AuthorizationStates.Restricted. (75081)

  • Android: Fixed an issue with calling certain Methods that have the same name as a Property on a class. (75320)

  • Android: Added MemoryBlock.Operator_Add to match other platforms. (74955)

  • Android: When URLConnection.AllowCertificateValidation is False, also skip checking host verification to match how other platforms work. (75344)

  • Android: Attempting to create a New MobileToolbar now displays a standard compile error instead of an internal Android compile error. (75362)

  • Android: Fixed an issue when using a For Each loop with certain ParamArray parameters. (75123)

  • Android: To match behavior on other platforms, Variant math operations using Nil no longer cause an Android compile error and instead raise NilObjectExceptions at runtime. (74808)

  • Android: TypeInfo.Name and FullName are now correct for MobileScreens. (75338)

  • Android: Multi-dimensional arrays now return the correct value with VarType. (74429)

  • Android: VarType on a currency array now returns the correct value. (75335)

  • Android: Fixed an issue where DatabaseColumn.NativeValue/BlobValue could have the wrong number of bytes. (74989)

  • Android: JSONItem.IndentSpacing now defaults to 2. (75298)

  • Android: With a DatabaseRow that is not connected to a RowSet, column value changes are now properly retained and retrieved. (74994)

  • Android: DatabaseRow.ColumnCount and LastColumnIndex are now correct for rows that are created manually. (74991)

  • Android: RowSet.ColumnType now returns 5 for SQLite TEXT/STRING/VARCHAR columns to match behavior on other platforms. (74995)

  • Android: BinaryStream.ReadCurrency now turns correct currency value. (75026)

  • Android: BinaryStream.ReadPString method no longer causes a compile error, but it does raise an AndroidException at runtime since PString is not a supported type. (75023)

  • Android: BinaryStream.BytePosition is now properly updated when reading data. (75024)

  • Android: BinaryStream.ReadUInt8 now returns the correct value. (75025)

  • Android: TextInputStream.BytePosition is now updated after calling ReadAll. (75027)

  • Android: MobileApplication.Actived and Deactivating events now work on Android. (75317)

  • Android: To match behavior on other platforms, added MemoryBlock.Long, Short and UShort methods. (74956)

  • Android: To match behavior on other platforms, adding two Nil values to a Variant now raises a NilObjectException. (75036)

  • Android: FolderItem.Locked return value is no longer reversed. (75068)

  • Android: Screen startup event order is more consistent across devices. (75227)

  • Android: Calling SQLiteDatabase.CreateDatabase with a file in an invalid location now properly raises a DatabaseException. (75201)

  • Android: Removing controls from MobileContainers now works properly. (75257)

  • Android: To match desktop behavior, added MobileTabPanel.AddPanelAt() method. (75179)

  • Android: To match other platforms, calling SQLiteDatabase.ExecuteSQL with an empty SQL string now does nothing instead of raising a DatabaseException. (75202)

  • Android: Added MobileContainer.Objects iterator. (75235)

  • Android: Encodings.DOSGreek1/MacDevanagari/MacEthiopic/MacExtArabic/MacGaelic/MacGeorgian/MacGujarati/MacGurmukhi no longer cause compile errors. (75084)

  • Android: Locale.CurrencySymbol has been updated to better match what is returned on other platforms. (75069)

  • Android: GenerateJSON now handles dictionaries with nested arrays properly. (75144)

  • Android: Fixed a compile error when using Point.DistanceTo. (75031)

  • Android: Fixed a compile error when using Encodings.MacDingbats. (75093)

  • Android: Fixed a compile error when using Encodings.MacRomanian property. (75095)

  • Android: Exceptions that occur within the framework now generate a more useful stack trace. Also fixed an unhandled internal SQL exception that could occur when trying to commit without a transaction. (75126)

  • Android: Internal RowSet properties no longer are shown in the Xojo debugger. (75106)

  • Android: URLConnection.SendSync() now works better with binary data. Send() now handles some text data better. (75082)

  • Android: Fixed a runtime exception that would occur when trying to get the value of a shared property. (75019)

  • Desktop: DesktopMenuItems now correctly honors the AutoEnabled state, especially when set to False. (75180)

  • Desktop: To match docs, DesktopListBox.CellTextAt() now accepts -1 to refer to an entire row, column or both. (72152)

  • Desktop: DesktopListBox: dragging an already selected row that contains an TextField/CheckBox CellType now works, instead of entering editable mode. (74882)

  • Desktop: Tabbing into a DesktopTextField that has a format applied to the Format property has the same behavior than when Format is empty. (74951)

  • Every OS: DateTime.FromString no longer throws an InvalidArgumentException when the date (without a time specified) falls within the DST transition period. (71555)

  • Every OS: The Pressed event has been renamed to ValueChanged on DesktopDisclosure to keep consistency with other controls. You will need to manually move your event code to the new event. (67597)

  • Every OS: DesktopContainer: no longer raises a Resized event before the Opening event is fired. Note: this change does not affect ContainerControls. (55578)

  • Every OS: Updated Integer ToHex/ToBinary/ToOctal to return String instead of Text. (65120)

  • iOS: Fixed an odd behavior taking place under certain circumstances when executing JavaScript on an HTMLViewer instance on iOS. (75837)

  • iOS: The iOS Layout honors the Dark Mode / Light Mode set on macOS, so the ColorGroups assigned to the iOS controls are correctly displayed in the Layout Editor. (75384)

  • Linux: Playing sounds no longer crashes on newer versions of Linux (like Ubuntu 23.10), or Raspberry Pi5. (75775)

  • Linux: MoviePlayer no longer crashes on newer versions of Linux (like Ubuntu 23.10 or Raspberry Pi5). However, Wayland is not supported so you will need to disable Wayland to play movies using our MoviePlayer. As an alternative you may be able to play movies using our HTMLViewer instead. (75722)

  • Linux: Rotated StringShape, on a Canvas/Windows Graphics, no longer draws at the wrong position. (75651)

  • Linux: Threads no longer eat up 100% CPU, unless the thread Priority is set to 9 or higher. (74976)

  • Linux: The default System font no longer looks condensed on Ubuntu 23.x (75040)

  • Linux: MySQLCommunityServer can now connect to servers that require versions of TLS that is greater than 1.0 (69197)

  • macOS: macOS/iOS: String functions (Left/Mid/Right/etc.) no longer uses the system encoding to do its calculations when the String.Encoding is Nil. (54638)

  • macOS: Calling DesktopWindow.Minimize no longer raises the Minimized event twice. (56933)

  • macOS: For exceptions that are triggered from a Plugin (like RegEx), the IDE now properly shows the function call stack on M1 Macs. (67923)

  • macOS: Assigning new Text to a DesktopTextField now maintains the current selection on Windows/Linux. This now mimics the same behavior as macOS. (74954)

  • Web: Fixed some reported memory leaks in the Web Framework. (75604)

  • Web: Fixed a WebView.Controls issue causing this iterator to return also non-visual WebSDK controls. (75768)

  • Web: Fixed some WebView issues causing Controls, ControlAt, ControlCount and LastControlIndex to ignore controls inside other views, like tab panels or rectangles. (75737)

  • Web: Fixed a WebFileUploader issue preventing the Caption property to be updated at runtime. (75664)

  • Web: Fixed a WebMenuItem issue causing empty row height to be much smaller than others. (75641)

  • Web: Fixed a WebFileUploader issue preventing the end user to drop a file into the browser control, at runtime. (75297)

  • Web: The Web framework won't cut the connection too early anymore, when the user is uploading a file with WebFileUploader. (75447)

  • Web: Fixed a WebPopupMenu issue that was causing the focus to jump into another dropdown menu, when navigating using the keyboard. (75467)

  • Web: The Web SDK won't discard duplicated events anymore, when using triggerServerEvent method. (75466)

  • Web: When navigating the layout using the keyboard, hidden WebViews won't receive the focus anymore. (75455)

  • Web: Fixed a WebTimer issue causing the control to ignore its Enabled property from the inspector. (75229)

  • Web: The web framework will prevent displaying multiple WebMessageBox above each other, when quickly pressing Enter/Esc key repeatedly. (64278)

  • Web: Fixed an issue causing some Web SDK controls to not appear inside WebTabPanel or WebPagePanel views. (75389)

  • Web: WebPopupMenu will display the focus ring now, when it receives the focus. (75380)

  • Web: Fixed a WebStyle bug causing AddTransition with a delay to use a wrong value. (75372)

  • Web: Calling SetFocus on a WebControl will wait the control to be rendered, if needed, before trying to set the focus. (75358)

  • Web: WebSearchField will raise TextChanged and Pressed events when the user clears the field with the clear button. (75316)

  • Web: Fixed a few tab engine issues that wasn't detecting the focused control, in some kind of Web SDK controls. (75263)

  • Web: Setting WebListBox.SelectedRowColor at runtime won't make the whole control to refresh, it will just set the new color. (75313)

  • Web: Fixed a WebFile issue that was raising a NilObjectException, when trying to get the underlying file from an unknown Session. (75314)

  • Web: Fixed an issue causing WebMapViewer.LocationSelected to pass a wrong WebMapLocation object. (75305)

  • Web: Fixed an issue causing the web framework to unnecessary keep in memory a temporary file path for 2 hours in some places, like in the WebApplication.HandleURL event. (75302)

  • Web: WebCanvas inside a WebTabPanel will be rendered faster now, when switching between tabs. (71288)

  • Web: Fixed an issue that could cause WebResponse.Write to raise a NilObjectException in some situations. (75189)

  • Web: Fixed an issue causing WebView children, like a WebDialog, to raise the Shown event before it was actually visible. (74412)

  • Web: Fixed the WebRequest.MIMEType issue where the value was always returning text/html, instead of the actual value. (69842)

  • Web: Fixed a WebListBoxImageRenderer issue that was causing HiDPI images to be shown larger than it should. (74937)

  • Web: WebLink.TextAlignment will also be applied when the WebLink button style is used. (71183)

  • Web: Fixed a WebView issue causing subclassed items to position their controls based on their super class dimensions. (73006)

  • Web: Fixed a WebCheckbox vertical alignment issue, causing the checkbox to appear far above than we want, when embedding the control at runtime. (74877)

  • Web: WebContextualMenu arrow indicator for submenus are vertically centered now. (69215)

  • Web: Fixed a WebSegmentedButton issue causing Enabled to not be applied at runtime. The whole control or individual segments can be disabled now. (75089)

  • Web: WebPopupMenu can now make use of localized constants when using the Initial Value property. (71971)

  • Web: Fixed a WebMessageDialog issue causing the event handlers to not be properly configured when being created with code at runtime. (75060)

  • Web: Modified the WebMessageDialog look and feel to match the current Bootstrap 5 guidelines. (69575)

  • Web: WebMapViewer can be disabled now, allowing the developer to disable user interactions on the map. (75006)

  • Web: Fixed a WebImageViewer issue causing updating the URL parameter to be ignored when the Image property wasn't empty. (74747)

  • Web: Fixed an issue causing WebUIControl to not be able to update the original Tooltip at runtime. (74748)

  • Web: Fixed an issue causing every new web app session to be leaking some memory. (74998)

  • Windows: Graphics.DrawText with Outline enabled, now properly outlines the text using fonts that are weighted (i.e. the boldness level) more heavily, like Arial Black. (73748)

  • Windows: Iterating through the SerialDevice list no longer causes the serial ports to be temporarily open. (75740)

  • Windows: Prevented multiple instances of a Popover window to show before one is completely closed. (75741)

  • Windows: Windows/Linux: a RuntimeException is now raised (instead of an assertion), if the Resources folder cannot be found while attempting to load up all the picture resources that were added to your project. (73630)

  • Windows: The DesktopUIControl.ConstructContextualMenu event no longer incorrectly fires a second time immediately after the first on various controls, like the DesktopTextArea, DesktopPushButton, etc. (75449)

  • Windows: DesktopChart.DrawInto no longer throws an UnsupportedOperationException on Windows/Linux. (75382)

  • Windows: A TextArea, that's hidden behind a non-visible page/tab of a PagePanel/TabPanel, no longer reveals itself when retrieving the StyledText.RTFData (75405)

  • Windows: ODBCDatabase: storing and retrieving large BLOB values now works properly instead of raising errors or being truncated. (75322)

  • Windows: Window is now resized/positioned correctly when entering fullscreen mode, instead of being offset at the top and leaving visible gaps near the bottom. (67168)

  • Windows: DesktopNotePlayer: the Drum Kit instrument now works correctly, instead of sounding like a piano. (16466)

  • Windows: DateTimePicker.DrawInto now renders the control instead of drawing nothing. (75213)

  • Windows: TabPanel.DrawInto no longer fails to draw all controls when a DisclosureTriangle exists on the current tab. (75210)

  • Windows: Implemented support for TabPanel in Dark Mode. (66629)

  • Windows: App no longer locks up when a modal dialog is displayed while a drag is in-progress. (62434)

  • Windows: Passing in an (X, Y) offset to DesktopWindow.DrawInto now offsets Canvas drawing correctly. (75003)

Compiler

New Features

  • Updated iOS SDK to 17.2. (75720)

  • Plugins: additional library dependencies can now be included along with your plugin shared library. This allows you to include external shared library dependencies without having to build it into your main library. Refer to the Plugin Package Format in the Plugins SDK documentation for more details. (75143)

Resolved Issues

  • The deprecated Variant.DateValue no longer shows up in auto-complete. (75101)

  • The deprecated Variant.TextValue no longer shows up in auto-complete. (75102)

  • Windows app name that contains an ampersand can now be built/run properly, instead of the app not being able to launch at all. (67743)

  • The DateTimePicker plugin is no longer included for all built apps, unless of course it's being used. (75589)

  • Compiler now raises an error when it encounters enumerations that share the same name, but with different types, while rendering Windows/Controls for Desktop apps, instead of running into failed assertions at runtime. (56486)

  • A compile error is now raised (instead of an assertion) if we were unable to create a build folder during the compilation process. (75373)

  • Calling Array.Pop, on an array of Structures, no longer returns the wrong data or throws an OutOfBoundsExceptions incorrectly for ARM64 builds. (75286)

  • Assigning an Array of Structures (using the Array keyword) now populates the Array correctly for ARM64 builds. (68517)

  • Android: Fixed a compile error that could occur with some expressions within a single-line If. (75858)

  • Android: Fixed a compile error that can occur when overriding a method from a superclass that is not the immediate superclass. (75840)

  • Android: Clarified the Android duplicate method overload compiler error message and fixed an issue where arrays where not being treated as separate types when checking for duplicate method overloads. (75804)

  • Android: Fixed an issue when using the Array function while casting the first value. (75789)

  • Android: Fixed a compilation issue where some methods named like operator overloads didn't match the expected signature. (75453)

  • Android: Fixed an issue where certain Kotlin declares could require an unnecessary extra parenthesis. (75439)

  • Android: Fixed an issue when assigning certain variables initialized with Global to other values. (75425)

  • Android: Fixed an issue when defining certain Constants while using Global. (75400)

  • Android: Fixed an issue with certain uses of Global with Constructors that have parameters passed in. (75399)

  • Android: Fixed an issue with certain Classes that have a ParamArray in their Constructor. (75386)

  • Android: Fixed an issue when calling a MobileScreen Constructor from within that MobileScreen, and fixed an issue when accessing certain Class Constants from outside the Class. (75331)

  • Android: Fixed an issue when using an empty enumeration as a method parameter type. (75198)

  • Android: Fixed an issue with method parameters that use Global.Variant/Object. (75197)

  • Android: Fixed an issue when calling certain methods with a Variant/Object ParamArray type. (75196)

  • Android: Fixed an issue when using other Array methods on a ParamArray parameter. (75194)

  • Android: Fixed an issue when using certain Array methods on a ParamArray parameter. (75192)

  • Android: Fixed an issue when using certain expressions when defining constant values in code. (75155)

  • Android: Fixed an issue with using class constants from a shared method. (75339)

  • Android: Fixed certain uses of Object arrays when used as parameters. (75140)

  • Android: Fixed an issue when comparing certain String properties with explicit Variant.StringValue calls. (75127)

  • Android: Fixed an issue with using some Operator overload names in a module, as well as using App as a name of a parameter. (75066)

  • Android: Project Item Number Constants no longer cause a compile error if they don't have a specified default value. (75352)

  • Android: Fixed an issue when declaring certain Arrays with &b/&h/&o literals. (75048)

  • Android: Fixed an issue when declaring a single dimension array after a multi dimensional array in the same line. (75046)

  • Android: Fixed an issue when using Me/Self as a value during certain variable initialization. (74887)

  • Android: Give a clearer error message if you try to use Object with GetTypeInfo. (75021)

  • Android: Fixed an issue with certain multiple uses of IsA inside of a single If expression. (75018)

  • Android: Fixed an issue when using Raise with an Event that returns an exception. (74135)

  • Android: Prevent duplicate compile errors from being shown. (75145)

  • Android: Display a friendlier error message when there is an unknown/unresolved reference, which can happen with object Declares. (75120)

  • Android: Verify that the first part of the bundle ID is not the same as the App name as that can cause an Android compile error. (75238)

  • Android: Variables used inside or with certain for loops are now visible in the debugger. (73394)

  • Web: Fixed a WebListboxCellRenderer bug causing the project to refuse to compile when creating subclasses inside a Module. (75356)

Documentation

Resolved Issues

  • The Use WinUI (experimental) build option has been documented. (75277)

  • The code samples on the various Object2D subclass pages have been made more clear. (75330)

  • Added a note to Mutex.Constructor to make it clear that the name passed will be used to create a file and therefore must be a valid filename for the host OS. (75368)

  • MobileApplication.CurrentScreen is now documented. (75763)

Examples

Resolved Issues

  • Passing an empty Value to Barcode.Image now raises an InvalidArgumentException instead of crashing on Windows. (75876)