Xojo 2024r3 Release Notes

Release Date: 2024-10-01

Highlights

  • Preemptive Threading

  • Web supports adding CSS classes to controls

  • Android tablet support

  • Android declare improvements

  • Code Editor improvements: Row highlighting, command bar button for Standardize Format, and Syntax Help area size control

  • SQLite support for SOUNDEX

Important

With this release, we are deprecating 32-bit builds for Linux and Windows. We are not removing them from Xojo right now, but we do intend to remove them in a future release.

Statistics

  • Bugs fixed: 164

  • Features added: 43

  • Documentation changes: 3

  • Examples changed: 1

IDE

New Features

  • Minor tweak to the message error displayed when a Xojo Cloud subdomain is already in use. (77136)

  • Changed the Tab Order Editor window frame so it is displayed in the current screen instead of the main screen when the IDE is running in a multi-display setup. (76827)

  • Added a Code Editor command bar item for Standardize Format. If something is selected, it formats the selection. If nothing is selected, it formats the entire method. (11478)

  • The entire line with the cursor is now highlighted by default, with its own Coding setting to turn it on or off. This uses the Row Highlight color from the Code Editor settings (previously this was the Debugger Highlight color - the color is now used for both things). (56183)

  • The IDE now checks that newly saved text projects are being saved into an empty folder. If the folder is not empty, then a dialog appears offering to save the project into a newly created folder, save it anyway at the specified location or cancel. (71145)

  • Android: The Layout Editor in Android projects now supports tablet-sized layouts. The App inspector now had an additional property to specify the default tablet screen, which is used when the app starts on tablet-sized devices. (75350)

  • macOS: Added Hover effect to toolbar items in the IDE for macOS. (76727)

  • Web: Added a property in the inspector to allow entering CSS classes for visual controls. (72204)

  • Web: Added a setting to Web Projects to avoid launching the browser when debugging the project. (76276)

Resolved Issues

  • Fixed an issue that could cause the IDE to crash, when trying to run and stop different Web projects using the same Debug Port. (77175)

  • Tabbing through the property list in the Inspector is now more reliable, particularly when navigating through the property list of specific controls such as DesktopListBox. (69571)

  • Fix: Now the IDE Script editor on macOS does show the last line as expected when code is longer than the editor window (71249)

  • Now the code from IDE Scripts, added as a Build Step to the project, is also printed when choosing the Print command. (77170)

  • Fixed an IllegalCastException that could occur when the Database Connection items are in the process of becoming deselected. (77118)

  • Added Ptr, WString, PString, CString and CFStringRef as datatypes for standardize format to case correct. (67058)

  • Attempt to avoid a NilObjectException that seems to sometimes occur when the debugger is shutting down. (71643)

  • Removed the Short data type from autocomplete since Short has been deprecated since 2015. (77004)

  • The Code Editor Syntax Help area now defaults to a fixed size of 3 lines. A scroll bar appears if there are more entries than will fit in the available area. This size can be changed in Code Editor Settings to 2, 3, 4, 5, 6 or Resizeable (which itself maxes out at 6 lines). (76674)

  • Display an error if you try to use Extract Interface using the name of something that already exists in the project. (76999)

  • An error is now displayed if you try to Extract Superclass using the name of a class that already exists in the project. (77000)

  • Fixed updating properly the IDE's Navigator when un-parenting a member from a ControlSet (77001)

  • Autocomplete now excludes unnecessary and unused On/Off values. (77012)

  • Fixed a potential NilObjectException when closing the IDE while the code editor is performing an autocomplete action. (76986)

  • Event Handler Descriptions are now properly saved/loaded. (67604)

  • Now the Document window search field visibility honors its associated tab lock state when opening a project file. (76873)

  • Desktop, Web and Console projects no longer show classes in autocomplete that are not applicable to the project type. For example, Desktop projects won't show Web control classes, Web projects won't show Desktop control classes and Console projects won't show either Desktop or Web control classes. (62046)

  • Dragging in a project item from an outside file now inserts it at the drop position in the Navigator. (66469)

  • When running on Mac, the web debug and console debug folders are now removed when the app is quit or terminated. (76707)

  • Fixed copying / pasting a WebTabPanel so the child controls keep their original TabPanelIndex value. (60220)

  • SQLite Database Connection items can now be added for Mobile projects (using the Insert Database Connection menu item). The selected SQLite database connection file with also be bundled along with the built app. (76645)

  • TargetWin32 and TargetCocoa (which both have been deprecated since 2018) no longer auto-completes. (76561)

  • Debugger picture viewer now correctly centers/renders pictures with Horizontal/Vertical resolutions that are greater than 72. (68814)

  • Autocomplete improvements: XojoVersion and XojoVersionString now show in syntax help area and autocomplete will suggest members for them. CType now shows in syntax help area. Class constants of type Number now show in syntax help area and autocomplete will suggest members for them. (76630)

  • Clicking the Edit Code command bar item while debugging now correctly positions the IDE to the exact line of code that the debugger is on. (42511)

  • Android: Xojo Android Debug Bridge app (xadb) now works when Xojo is installed on Linux using the Debian package. (76601)

  • Android: Cleaned up incorrect information the was showing in Code Editor syntax help for MobilePanel.RemovePanelAt method. (76589)

  • Android: Attempt to avoid an OutOfBoundsException that can sometimes happen when compiling globals. (77095)

  • Android: Includes In settings for Android mobile controls/classes are now set to indicate they are Android-only. (77002)

  • Android: Android projects no longer show MobileContainer instance members in autocomplete when not using an instance. (76906)

  • Android: Layout Editor landscape size now matches the aspect ratio of the corresponding portrait size. (72926)

  • Android: Fixed a build error that could occur with project names that have / in them. (76593)

  • iOS: Now it is not possible to resize a control in the Layout Editor when it is locked for iOS Projects. (77094)

  • iOS: iOS projects now autocomplete Picture.Formats.HEIC. (76810)

  • macOS: Fixed an issue where the IDE sometimes didn't update all Desktop project Windows when switching between light and dark mode. (77074)

  • macOS: Now the Inspector Panel tabs are properly shown when displayed as a floating window. (69112)

  • Web: WebSDKUIControl.Indicator will be Default by default now, instead of being blank. (77282)

  • Web: Fixed a visual issue in the IDE when previewing a WebButton having Outlined and the Link Indicator at the same time. (77266)

  • Web: Default event for WebPicture was missing. Downloaded will always be highlighted by default now, as it was the only one available. (74593)

  • Windows: Windows/Linux IDE: The readability issue of a label in the Options dialog when using dark mode has been resolved, making it easier to read now. (77258)

Framework

New Features

  • Added new functions on MemoryBlock to compress and decompress data using gzip. (1057)

  • New Thread.Type has been added, allowing you to specify whether a thread is cooperative or preemptive. Similarly, this new Type property has also been added for Semaphore and CriticalSection, allowing the creation of two distinct locking mechanisms: one for interactions between the main thread and preemptive threads, and another for interactions with cooperative threads. (71681)

  • Added ToPicture method to Desktop/Web/MobileChart. (77063)

  • SQLiteDatabase: added support for SOUNDEX. This is supported for all platforms except for Android. (48028)

  • MySQLCommunityServer: We now encode RowSet string values in UTF-8 if the database character set is set to UTF-8; otherwise, we leave the encoding as Unknown, as we did previously. (18906)

  • Now it is possible to programmatically resize Popovers on macOS. (76816)

  • Added System.CoreCount which returns the number of available cores. Note, this may not necessarily match the number of CPU cores. (76239)

  • Android: Added MobileToolbarButton.Handle property for Declares. (77027)

  • Android: Added FolderItem.Handle for Declares. (77205)

  • Android: Added Locale.Handle for Declares. (77206)

  • Android: Added TimeZone.Handle for Declares. (77207)

  • Android: Added Font.Handle As Ptr property for Declares. (77189)

  • Android: Added MobileApplication.BuildDateTime As DateTime property. (76386)

  • Android: Added Picture.Handle(type As HandleTypes) method and HandleTypes enum with elements: AndroidBitmap and AndroidDrawable. (77150)

  • Android: Added GraphicsPath.Handle As Ptr. (77149)

  • Android: Improvements to Declare usage with Libraries: It is now possible to call instance methods on library classes, the App Permissions can now specify additional attributes, libraries can call back to Xojo methods, added most Ptr methods. (76934)

  • Android: Added Graphics.Handle(HandleTypes) with HandleTypes enum. (77026)

  • Android: MobileTextArea/Field.SelectionStart and SelectionLength properties are now settable. (76417)

  • Android: Added MobileTextField/Area.FocusLost/FocusReceived events to match iOS. (73627)

  • Android: Added AndroidMobileTable.LastRowIndex property. (76195)

  • Android: Added RegEx support for Android. (76341)

  • Every OS: Pressed event will be fired now when pressing on Chart labels. ChartDataset.IsVisible property has been added to detect if the dataset is visible or not. Supported in Desktop, iOS and Web project types. (76957)

  • iOS: Now ChartCircularDataset filling is draw consistently as ChartLinearDataset does, what means that is possible to set also the desired value for the Transparency property. By default, such property changed from the previous 70% value to 50%. (77173)

  • iOS: Refactored MobileMessageBox on iOS to use UIAlertController as the underlying object instead of the very deprecated UIAlertView. (76796)

  • iOS: Now MobileImageViewer.URL loads asynchronously the image from the received URL on iOS. (76695)

  • iOS: Added the ability to get / set Metadata info (including Location) from Pictures on iOS. Also added the ability to save a Picture directly to the user Photo library. (76454)

  • Web: Updated Bootstrap to v5.3.3 and Bootstrap Icons to v1.11.3. (77168)

  • Web: Added WebUIControl.CSSClasses, to allow adding and removing CSS classes programmatically. (71233)

  • Web: Added a WebCombobox.FilteringMode property, to control the filtering behavior of the control. (76925)

  • Web: WebSession ClientWidth and ClientHeight properties will be updated now, when the user resizes the browser. (76974)

  • Web: Web Basic, Web Extended and Bootstrap named colors can be used now in the Web ColorGroup editor and, programmatically, with ColorGroup.NamedColor. (76258)

  • Web: Added WebRectangle support for BorderColor, BorderThickness and CornerSize. (68203)

  • Windows: DesktopHTMLViewer: enabled support for accessing the camera and microphone. (57253)

Resolved Issues

  • DesktopMoviePlayer: the MouseDown, MouseDrag, and MouseUp events have been removed, as they were not meant to be exposed. (73556)

  • Fixed a PDFGraphicsPath.FillPath bug that happened when a RoundRectangle intersected another path (mostly a Rectangle or another RoundRectangle). (77209)

  • XojoScript: Color.ToString and Currency.ToString now works correctly instead of raising a compile error. (77198)

  • XojoScript: Double.ToString now works correctly instead of raising a compile error. (77169)

  • Trying to invoke SelectSQL or ExecuteSQL on a closed database now throws a DatabaseException. (69664)

  • DesktopHTMLViewer: the MouseDown, MouseDrag, and MouseUp events have been removed, as they were not meant to be exposed. (77109)

  • Fixed a scenario when using PDFDocument.DrawText with a wordwrap value set (77039)

  • Fixed setting the proper PDFGraphics page size internal state when the PDFDocument instance is created using the PDFDocument.PageSizes enum. (77035)

  • Removed unused MessagesCounted event on POP3SecureSocket. Use MessageCount instead. (77008)

  • Now CellAction is called again on DesktopListbox when modifier keys are held. (76927)

  • The REALGetPropValue(Integer/Int8/etc.) and REALSetPropValue(Integer/Int8/etc.) functions now works for enum properties. (76922)

  • Fixed a bug in Barcode macOS where it was not possible to display a Sheet window after using the Barcode Scan window. (76797)

  • Fixed a bug in PDFGraphics when the drawing is using a brush after color has been set to color.clear. (76791)

  • Changed parameter name in method signature for ContainerControl.ShowPopover. (76739)

  • Fixed a bug retrieving the LastRowIndex from a JSONItem storing an array value, under some circumstances. (76026)

  • Android: Fixed a compile error that would occur when assigning Dictionary.Values to a variant array. (76253)

  • Android: TCPSocket/SSLSocket data transmission is now more precise, particularly when dealing with encodings and binary data. (76855)

  • Android: Attempting to call Listen() on a TCPSocket that was previously disconnected (manually or due to an error) no longer causes an internal exception. (77338)

  • Android: Allow up to 6 buttons on the bottom toolbar before they start overflowing to the menu. (76689)

  • Android: More TCPSocket error situations, such as a connection being lost, now call the Error event handler. The SendCompleted event handler is no longer called when data was not sent due to not being connected. (76710)

  • Android: MobileTextControl/Label/TextField/TextArea.Alignments can now be converted to/from Integer. (77197)

  • Android: Graphics.LineJoinTypes Bevel and Miter integer values now match other platforms. (77186)

  • Android: Ensure that MobileContainer.Opening event is only called once. (77120)

  • Android: MobileScreen.OrientationChanged event is now called more reliably so that results are more accurate. (77134)

  • Android: String.IndexOf() signatures now match other platforms. (74699)

  • Android: Graphics.LineDashOffset type is now Double to match other platforms. (76903)

  • Android: MobileScreen.ContentSize() now subtracts the toolbar size even when there is no navigation bar. (77021)

  • Android: Graphics.Draw methods that use a LineDash now draw correctly without requiring a DrawLine() call beforehand. (76904)

  • Android: MobileSegmentedButton.Pressed event parameter name is now segmentedIndex to match iOS. (76952)

  • Android: BinaryStream.Length can now be set to truncate the file. (76725)

  • Android: DictionaryEntry.Key and Value properties no longer show as read-only in introspection. (76831)

  • Android: Fixed a compile error that could occur when casting to various Introspection types. (76664)

  • Android: Added missing FolderItem.DisplayName property. (76829)

  • Android: Picture.RGBSurface property now shows as read-only in introspection. (76837)

  • Android: SQLiteDatabase.LibraryVersion now shows as read-only in introspection. (76836)

  • Android: TCPSocket.ByteAvailable, BytesLeftToSend and RemoteAddress now show as read-only in introspection. (76835)

  • Android: StackFrame.Address and Name properties now show as read-only in introspection. (76832)

  • Android: SocketCore.IsConnected and LocalAddress now show as read-only in introspection. (76830)

  • Android: TypeInfo.GetElementType now works with arrays. (76802)

  • Android: SQLiteDatabse.IsConnected now returns True when connected to an in-memory DB. (76735)

  • Android: String.MiddleBytes now returns instead of an OutOfBoundsException when the values are outside the string's range. (76697)

  • Android: Raise an InvalidArgumentException when accessing Column values outside the RowSet range to match desktop behavior. (76609)

  • Android: Added ReadError() and EOF() methods to Readable interface for compatibility with other platforms. Updated the classes that use Readable (BinaryStream, TCPSocket and TextInputStream) to include the new methods. (76387)

  • Android: Fixed a compile error that could occur when subclassing System.DeviceData or System.VersionData. (76366)

  • Android: Fixed a compile error that could occur when subclassing Point. (76365)

  • Android: Fixed a compile error that could occur when subleasing MobileToolbarButton. (76364)

  • Android: Fixed a compile error that could occur when subclassing MobileSegment. (76363)

  • Android: Fixed a compile error that could occur when subclassing MobileMotion. (76362)

  • Android: Fixed a compile error that could occur when subclassing JSONItem. (76361)

  • Android: Fixed a compile error that could occur when subclassing FolderItem. (76360)

  • Desktop: Now DesktopChart honors the colors set to the BackgroundColor, TextColor and GridColor properties using the Inspector Panel in the IDE. (76676)

  • Every OS: Single.IsNotANumber and IsInfinite now works correctly. (66892)

  • Every OS: ListBox: When RequiresSelection is set to True, clicking on an empty area of the ListBox no longer causes the SelectionChanged event to trigger repeatedly. (48908)

  • iOS: Now Graphics.DrawText on iOS draws the text at the appropriate Y coordinate when a value is provided for the WrapWidth parameter (77171)

  • iOS: Picture.FromHandle now returns Nil when given a Nil handle. (69736)

  • iOS: FolderItem.RemoveFolderAndContents now works properly on iOS. (77135)

  • iOS: Fixed setting the appropiate constraints when a MobileContainer is the source of a Popover on iOS, and the parent control is a MobileToolbarButton. (77031)

  • iOS: Added missing IllegalLockingException class. (77011)

  • iOS: Setting a MobileSegmentedButton's MobileSegment Caption on iOS honors the SelectedIndex instead of reseting it to the first one. (76845)

  • iOS: GraphicsPath.AddRoundRectangle offers now the same behavior that Graphics.AddRoundRectangle on iOS. (76653)

  • Linux: Reverted a change that affected the event order (with respect to the Resized and Opening event) of DesktopContainer. This order now more closely matches the behavior of the legacy ContainerControl. (76025)

  • Linux: BevelButton: now draws the caption using the specified font name instead of always using the default font. (77166)

  • Linux: DesktopMoviePlayer: PlaybackStarted is now triggered correctly, and PlaybackStopped is properly fired when the movie is paused. (77090)

  • Linux: Writing to an RGBSurface, obtained from an alpha supported Picture, now works properly. (76913)

  • Linux: Setting the Sound Volume and Pan now works correctly, especially when looping. (76729)

  • Linux: DesktopCheckBox: setting the VisualState to Indeterminate now works properly on distros like Debian 12+ (i.e. LMDE 6 Faye and Raspberry Pi). (69043)

  • Linux: A disabled ListBox now draws the heading and row text properly, instead of looking like they've disappeared in light mode. (73862)

  • macOS: Fixed an issue with offseted contents along the Y axis when a Popover window has the background color set on macOS. (77350)

  • macOS: macOS/iOS: URLConnection.SendingProgressed now correctly reports the actual bytes left to send, as the parameter name suggests, rather than incorrectly reporting the total bytes. (63950)

  • macOS: HTMLViewer.Print no longer crashes with a failed assertion when the printing completes. (70696)

  • macOS: Fixed DesktopListbox.PaintCellBackground leaving a gap in the first column on macOS (77055)

  • macOS: Fixed showing a Sheet type window as modal on macOS passing a parent Window as parameter, when such parent is not the frontmost one. (77029)

  • macOS: Removed the Focus Ring from DesktopSegmentedButton on macOS. (76919)

  • macOS: Fixed a bug when a ContainerControl is shown as Popover on macOS and the ContainerControl has the HasBackgroundColor set to True. (76736)

  • macOS: Now the Barcode class adds the required Key/Value entry in the macOS app Plist.file when it is instantiated via code. (76414)

  • Web: Fixed a WebRadioGroup issue causing the control to be misaligned, when locking the control to the right side. (77295)

  • Web: Fixed the apple-mobile-web-app-capable deprecation warning appearing in some browsers, like Chrome. (77247)

  • Web: Fixed a WebPagePanel and WebTabPanel issue allowing its children to grow outside of the boundaries. (77117)

  • Web: Fixed a ContextualMenu blink issue when trying to display the menu, using the Ctrl key, on some browsers. (77126)

  • Web: Fixed some WebListBox issues when working with relative widths, in the IDE preview and at runtime. (74980)

  • Web: Fixed a WebSearchField issue that was causing the Pressed event to be fired incorrectly. (77110)

  • Web: Fixed a WebListBox issue that was preventing the control from selecting the row, when displaying a contextual menu. (77084)

  • Web: Fixed a WebListBox visual issue happening in Safari, in Dark Mode. Part of the background was being shown as the scrollbar background. (76746)

  • Web: Fixed a WebPagePanel issue causing the control to raise the PanelChanged event several times, with the same SelectedPanelIndex value. (76933)

  • Web: Fixed an issue that could cause closing a WebDialog to enter in an infinite loop raising the Dismissed event. (77056)

  • Web: Fixed a WebToolbar issue causing buttons with WebMenuItem to ignore their Position property. (76935)

  • Web: When receiving an UnsupportedOperationException by calling WebListBox.CellTextAt with a DataSource, the message won't mention CellValueAt anymore, it will mention CellTextAt. (76834)

  • Web: Prevented WebCanvas to overfire the Resized event, when resizing the browser window. (76975)

  • Web: Fixed a WebStyle issue causing AddTransition to not be applied unless other styles are present. (76977)

  • Web: WebStyle.AddTransition will also add the transitions to the containing element, so compound controls can have animations in properties like Left and Top. (76978)

  • Web: Fixed an issue that was causing WebButton controls to not be displayed in some older browsers. (76947)

  • Web: Fixed a WebListBox issue causing the ProcessingMessage property to be ignored. (72391)

  • Web: Fixed an issue causing WebView.Overflowed event to not be fired. (75361)

  • Web: WebGraphics will now wrap the text in WebCanvas like it wraps it in DesktopCanvas, when using DrawText. (71471)

  • Web: Opening Event will be raised on WebSDKUIControl that has been added at runtime. (71226)

  • Web: Fixed an issue causing Popovers to be closed, when the user was interacting with WebDatePicker controls inside them. (76637)

  • Web: WebListBox can receive the focus now, using its SetFocus method. The navigation using the keyboard on this control has also been improved. (75991)

  • Web: Fixed a WebCheckbox issue causing the control to be misaligned, when locking the control to the right side. (77062)

  • Windows: Strings that can't be correctly encoded as UTF-8 no longer trigger a failed assertion when using APIs that didn't actually require proper UTF-8 encoding in the first place. (77116)

  • Windows: Fixed the regression when it is about painting the cells background in a DesktopListbox. (77364)

  • Windows: DebugLog no longer stops working on Windows after receiving ASCII 0. (76792)

  • Windows: TextEncoding.InternetName now correctly reports the internet name for all supported text encodings, rather than just a select few on Windows/Linux. (30712)

  • Windows: DesktopSeparator: swapped the primary color of the DesktopSeparator in dark mode to enhance its distinctiveness, especially noticeable when the width or height is just a single pixel. (77088)

  • Windows: DesktopHTMLViewer: changing the UserAgent now works. (76648)

Compiler

New Features

  • Android: Added Declare Import command to import a class that is referenced using the Alias in a Kotlin command so that parameter types can be cast to their correct types. (77092)

Resolved Issues

  • XojoScript: The methods String.TrimLeft and String.TrimRight can now be used without causing an error. (65115)

  • Android: Shared computed properties in a class that is in a module now work properly. (76694)

  • Android: Calling a Declare on a MobileScreen from outside the screen no longer causes a compile error. (76567)

  • Android: Fixed a compiler error that could occur with the use of some Attributes. (77218)

  • Android: Declares to java.lang.* no longer cause a compile error. (76793)

  • Android: Incomplete Color literal values, such as &c0, are now compiled properly. (77172)

  • Android: Fixed a compile error regarding the Material icon dependency. (77124)

  • Android: Avoid a possible OutOfBoundsException that sometimes occurs when processing a single-line If expression. (77111)

  • Android: Added support for Using clauses on screen, class and container. The Using command in code is not supported. (76860)

  • Android: Var/Dim/Static declarations that use New and are followed with other variable declarations on the same line no longer cause a compile error. (77048)

  • Android: Fixed a compile error when implementing the Iterator method on an Iterable. (77052)

  • Android: Using Not without parentheses with IsA no longer results in a TypeMismatchException at runtime. (76960)

  • Android: Fixed an OutOfBoundsException that could occur when processing a Try/Catch block. (77015)

  • Android: Shared computed properties on MobileContainers now work properly. (76943)

  • Android: Added TargetRemoteDebugger constant, which always returns False for Android. (77003)

  • Android: Fixed a compile error that would occur when trying to call methods directly on a CType expression. (76592)

  • Android: Fixed a compile error that would occur when a generic Object was added to a MobileScreen. (76687)

  • Android: Overloaded methods with an extension method are now permitted on Android. (75911)

  • Android: Since Byte datatype is not technically deprecated yet, added support for it so that it does not cause runtime exceptions or compile errors. (76748)

  • Android: Fixed a compile error that could occur when a property name on App had the same name as a class in the project. (76673)

Documentation

Resolved Issues

  • Color now appears in the Data Types section as it's an intrinsically recognized type by the compiler. Pair is now in the Language section because it's not an intrinsically recognized type by the compiler. (76731)

  • Web: The missing icon parameter has been added to WebPicture.BootstrapIcon. (76294)

  • Web: ConnectionType and FrameOption properties of WebAppSecurityOptions are both now documented. (76463)

Examples

Resolved Issues

  • Android: Fixed Kind/Platform fields for descriptions of Android database examples. (76691)