Xojo 2024r2 Release Notes

Release Date: 2024-06-26

Highlights

Statistics

  • Bugs fixed: 136

  • Features added: 42

  • Documentation changes: 1

  • Examples changed: 2

IDE

New Features

  • Fixed the minimum height of the Choose a Project dialog, so all items are displayed at first glance. (76122)

  • Debugger: the Picture content viewer now live scrolls when using the scrollbars. (75857)

  • For SQLite Database Connection items, the SQLite database file is now bundled in the Resources folder of the built app. (76692)

  • Desktop: New Database Connection project items can now be added to your project. These connection settings can be modified with the ability to select which connection to use and whether or not to auto-connect. (73926)

  • iOS: Added the AllowPopover property from MobileChart to the Inspector Panel on iOS projects. (76234)

  • iOS: Added a Privacy Manifest Editor in the IDE for iOS Projects. (75903)

  • macOS: Added DTSDKBuild key to macOS plist file. (76104)

Resolved Issues

  • Now it is possible to display the Add Event Handler panel when double-clicking a Window in the Layout Editor after deleting a Menu Handler, Property or Note from such Window in the Navigator. (70736)

  • Fixed an issue when exporting a previously added class via drag & drop with Command-Option keys pressed, that could lead to deleting the selected target folder if the project was not previously saved. (76340)

  • Script Editor no longer loses changes when quickly trying to do menu action after typing some code. (72538)

  • Double-clicking an empty area of the Listbox in the Add Event Handler dialog doesn't closes the window. (76281)

  • Now the Inspector Behavior displays previously disabled properties for intrinsic classes. (76260)

  • Avoid an OutOfBoundsException that could occur when using code folding in the code editor. (76257)

  • The Title property for a Screen object on iOS only displays the first available line of the text assigned. (70461)

  • Fixed a regression so {U+03BC} character can be used again as part of any of the enum values names. (76135)

  • The deprecated Variant.TypeInteger no longer shows up in the Autocmplete list. (76100)

  • Fixed a display issue with code folding when collapsing sequential Case statements within a Select Case block. (76023)

  • Fixed showing debugger variables in its own separate windows. (75982)

  • Profiling Windows/Linux 32-bit apps now works again. (75970)

  • Using the swap lines feature from within a Build Script code editor no longer causes an IDE exception. (75956)

  • Now it is not possible to paste an image in a Method Definition in the IDE on Windows. (75899)

  • Updating the ListBox FontSize/FontUnit now correctly updates the vertical Scrollbar to reflect this change in the layout editor. (61645)

  • IDE's Layout Inline Editor (popover editor) doesn't remove the first item from the control edited values (DesktopPopupMenu, DesktopListbox, DesktopRadioGroup) when it is a return character. (75880)

  • Fixed an exception when creating a new project that could occur on Windows if you clicked too many times on the desktop icon while starting Xojo. This could cause the Project Chooser to appear before the app had finished initializing. (73048)

  • Fixed an exception that could occur when changing color group properties when multiple items are selected. (75828)

  • Remove the Libs folder from the debug build folder of a console app on macOS after the debug app disconnects. (75813)

  • The name of the ColorGroup item is no longer written out twice for Binary/XML project formats. (65749)

  • The name of the Enumeration item is no longer written out twice for Binary/XML project formats. (65244)

  • Android: Settings/Preferences -> Clear Caches now deletes the entire Android cache (when available) to prevent possible library sync problems. (76585)

  • Android: Fixed the case of some TextEncoding properties names for autocomplete. (73549)

  • Desktop: DesktopScrollbar: when embedded inside a TabPanel, the scrollbar no longer always appears on the first tab when that wasn't the tab it was assigned to. (76125)

  • iOS: Added MaximumCharactersAllowed property to the Inspector Panel for MobileTextArea and MobileTextField on iOS projects. (76228)

  • iOS: Better handling of iOS Compiling errors returned as XML, so they are presented in a better / more readable way. (76199)

  • Linux: Linux IDE: the debugger hyper links are now more readable in dark mode. Also updated the default code editor background color so that it isn't so bright in dark mode. (75950)

  • macOS: SegmentedControl honors now the width value on Mac both in the Layout Editor and at runtime. (76428)

  • macOS: Fixed Select All when applied on a text that includes emojis on a TextField on macOS. (76415)

  • macOS: Fix for properly reading as a Plist file an external item that has been saved in a project using an old Xojo Release (2019) (76102)

  • Web: WebSegmentedButton inspector editor won't ignore the Selection Style anymore. (76350)

  • Web: Fixed a WebImageViewer issue requiring to enter the URL twice in the IDE Inspector, when its Image property wasn't empty. (76320)

  • Web: Fixed a NilObjectException that could happen when closing a project window while another was still loading at the same time. (76279)

  • Web: Fixed an issue causing copying and pasting elements on web projects to lose most of their properties, on some type of controls. (76118)

  • Windows: The compilation build failure dialog now appears modally, instead of appearing briefly and disappearing just as quickly, when a compilation (typically a file system) error occurs. (68458)

  • Windows: Windows IDE: the Launching Application progress bar is no longer missing part of the bottom edge due to an errant label overlapping it. (54219)

Framework

New Features

  • Added ColorGroup support to ChartDataset.DataColor on Desktop, Web and Mobile. (76352)

  • Kanji support has been added to Barcode class for macOS and iOS. (76380)

  • Added an overloaded Database.AddRow(tableName As String, row As DatabaseRow, idColumnName As String = ) As Integer This returns a unique id of the newly inserted row. This API should be preferred over using the more specific SQLiteDatabase.LastRowID and MySQLCommunityServer.LastInsertedRowID which are now deprecated. (76031)

  • Added an IsConnected method to our SQLiteDatabase, ODBCDatabase, PostgreSQLDatabase, and MySQLCommunityServer database classes. This method returns true if the connection is still active, and false otherwise. (75469)

  • String.Characters now returns a String array. This is more optimized than our Iterator approach. (76078)

  • String.Codepoints now returns an array of Integers instead of an Iterable. (76166)

  • Added String.CharacterCount which returns the number of Characters/Glyphs in the string. (76172)

  • Plugins SDK: added REALInsertArrayValuePtr and REALGet/REALSetArrayValuePtr methods. (76149)

  • Added optional Animated parameter to ShowPopover to display the Popover with or without animation. This parameter is supported for macOS, iOS and Linux. (75977)

  • Android: TCPSocket is now available for Android. (73251)

  • Android: ShadowBrush class and Graphics.ShadowBrush property. (66653)

  • Android: Added Graphics.LineCap, LineCapTypes, LineJoin, LineJoinTypes, LineDash, LineDashOffset properties for Android. (66652)

  • Android: Added Graphics.Outline property for consistency with other platforms. (67370)

  • iOS: Added MobileSegmentedButton.LastSegmentIndex As Integer property to match what is on desktop and web. (76312)

  • iOS: #76203 - Added Inline and Compact styles to MobileDateTimePicker on iOS. (76203)

  • iOS: Added HEIC format support for saving Picture instances on iOS; also when used in Picture.FromData and Picture.ToData. (76036)

  • iOS: Now PDFViewer scales the assigned PDF document so it fully fits into the view. (76024)

  • iOS: Added HasInlineLabels property to ChartCircularDataset on Desktop and iOS targets. (72791)

  • iOS: Moved iOS Barcode implementation from iOSFramework to Barcode plugin. (75835)

  • iOS: Added MaximumCharactersAllowed property to MobileTextField and MobileTextArea on iOS. (75824)

  • iOS: Added support for Graphics.CharacterSpacing (62059)

  • Linux: Added Barcode support for Linux x86_64 and arm64, which requires at minimum glibc 2.31 (i.e. Ubuntu 20.04 or later) (75841)

  • Web: WebButton can now have a different height. (70411)

  • Web: Improved WebListBox performance when using a DataSource on large datasets. (76029)

  • Web: Added WebListBox support for HasBorder and GridLineStyle. (76356)

  • Web: Added support for DefaultRowHeight and HeaderHeight in WebListBox. (71427)

  • Web: Added an option to center WebDialogs vertically. (74667)

  • Web: Added support for ColorGroup in WebMenuItem.TextColor. (76221)

  • Web: Added support in WebPagePanel and WebTabPanel to Add and Remove panels at runtime. Renaming tabs is also possible in WebTabPanel. Web controls PanelIndex property can now be modified, adding support to embed controls in panels, at runtime. (63119)

  • Web: Individual segments of WebSegmentedButton control can have a different Indicator now. (62438)

  • Web: Added support for Control Sets in Web projects. (70810)

  • Web: Added IsGridVisible, IsYAxisVisible and IsXAxisVisible properties to Chart control on Desktop and iOS. (76049)

  • Web: Added a property for WebButton and WebSegmentedButton controls to make them appear outlined. (60051)

  • Web: WebToolbar.Icon doesn't needs to be a square now. Its width will grow as needed. (72347)

  • Windows: DesktopMenuItem.Visible is now supported for Windows. Note: this does not affect the deprecated MenuItem. (72468)

Resolved Issues

  • XmlNode: getting/setting properties of a non-existent node no longer crashes. This also fixes a crash when viewing the XmlNode in the debugger. (76597)

  • Fixed getting the appropiate values for Graphics.Width and Graphics.Height when PDFDocument.Landscape property is set. (76531)

  • Fixed AutocalculateYAxis for Desktop/MobileChart. (75248)

  • PDFDocument will only ask for the password when opening the generated PDF if the password is set for the User (PDFPermissions), and for the Owner passord if the user tries to do some of the actions disabled in the PDFPermissions settings. (76327)

  • Picture.Constuctor(width As Integer, height As Integer, depth As Integer) now raises a deprecation warning. (76277)

  • ODBCDatabase: iterating the Tables, TableIndexes, and TableColumns now works correctly because we're setting the state of AfterLastRow properly now. (76034)

  • TCPSocket.Flush no longer hangs in an infinite loop when the connection is lost, or when trying to reconnect/listen before Flush finished. (75595)

  • Fixed setting Rect HorizontalCenter/VerticalCenter so that it centers the Rect according to the newly assigned Horizontal/Vertical center instead of being half that. (20671)

  • ODBCDatabase: iterating an empty RowSet no longer enters the iteration loop unnecessarily. (75883)

  • Android: String.Middle() now returns "" when the index and/or length exceed the string in some way. This matches behavior on other platforms. (76616)

  • Android: String.Right() and RightBytes() behavior now matches other platforms. (76621)

  • Android: String.LeftBytes() behavior now matches other platforms. (76619)

  • Android: Fixed a runtime exception that would occur when setting shared property values via introspection. (76449)

  • Android: We now exclude an internal Android table from the SQLiteDatabase.Tables query. (76565)

  • Android: SQLiteDatabase.TableIndexes now returns the correct information. (76566)

  • Android: The column types for DatabaseRow columns that are not yet saved to the database are now correct. (76563)

  • Android: Removed MethodInfo.InvokeReturns from autocomplete as it is no longer needed. (74246)

  • Android: Converting a color value with an alpha to an Integer now has the expected Xojo integer value. (76554)

  • Android: Getting the Int32Value of a ColorValue in a MemoryBlock now matches standard Xojo behavior. (76544)

  • Android: You can now tap into and type text into form fields on pages in HTMLViewer. (76527)

  • Android: Graphics.ClearRectangle should now work properly. (76375)

  • Android: ConstructorInfo.Name now contains Constructor instead of being blank. (76337)

  • Android: TypeInfo.IsArray now recognizes ParamArray parameters as arrays. (76115)

  • Android: TimeZone.SecondsFromGMT now properly accounts for daylight saving time. (76345)

  • Android: Added Graphics.Transparency and MiterLimit properties. (66654)

  • Android: Marked MemoryBlock.Short and UShort as deprecated so that they do not show in autocomplete. (76255)

  • Android: Array.Count(index As Integer) method no longer causes a compile error. (76144)

  • Android: Calling GenerateJSON on a cloned Dictionary no longer causes an exception. (76200)

  • Android: Using Timer.Calllater and CallLaterWithValue delegates as variable types no longer cause a compile error. (76148)

  • Android: TypeInfo.GetMethods() no longer includes Constructors. (74558)

  • Android: Fixed some issues with Introspection, Constructors and IsNull() with a Variant. (76113)

  • Android: Using Object as the For Each loop type when iterating over an iterator now results in more accurate behavior when using IsA. (75817)

  • Android: Fixed a compile error that would occur when subclassing MobileToolbarButton. (75974)

  • Android: Fixed a compile error that would occur when subclassing MobileSegment. (76012)

  • Desktop: DesktopTextField sends the TextChanged event on Windows when clicking the clear button; also, doesn't fire the TextChanged event after pressing the return key. (75825)

  • Desktop: Fixed DesktopSearchField reporting the right value in the KeyDown event for Return / Enter on macOS. (75259)

  • Desktop: DesktopChart Popovers aren't clipped when the Chart area is small. (76246)

  • Desktop: Resizing ListBox columns, while editing a cell, now correctly resizes the editable cell. (76094)

  • Desktop: Assigning a DesktopToolbarButton subclass to a DesktopToolbar now works instead of raising compile errors. (75972)

  • Desktop: Fixed a memory leak when drawing Pictures using PDFGraphics.DrawPicture. (75915)

  • Desktop: No longer leaking MenuBar objects when a Window is closed. (75916)

  • Desktop: DesktopListBox.ScrollPosition is now updated properly when the vertical scrollbar is removed, with rows being removed after, and then the scrollbar is added back. (75888)

  • Desktop: DesktopSeparator now receives MouseDown, MouseDrag, and MouseUp events. (75812)

  • Every OS: Setting the by default background color for DesktopTextArea / DesktopTextField so controls added by code are correctly drawed when using DrawInto, or when these are added to the Window layout. (68296)

  • Every OS: PostgreSQLDatabase: Connect As Boolean is now marked as deprecated in favor of Connect which throws an exception on error. (68003)

  • Every OS: DesktopHTMLViewer now clearly indicates that WebKit is used for HTML rendering on all desktop platforms. (67088)

  • iOS: MobileMoviePlayer displays the the movie controller on iOS 16+. (70055)

  • iOS: Fixed retrieving URLPath from FolderItem saved to Temporary directory on iOS. (66738)

  • iOS: Mobile sharing panel is now centered in the Screen when it is displayed on an iPad. (75869)

  • macOS: Fixed getting the appropiate X/Y coordinates of a window shown as Popover on macOS. (76418)

  • macOS: Setting Window.Visible to True on macOS in a previously hidden window shows it again. (29638)

  • macOS: DesktopContainer returns the expected index on macOS when accessing the TabPanelIndex and PanelIndex properties. (74507)

  • macOS: Fixed a visual glitch when setting a CheckBox cell type in a Listbox during the Opening event. (76168)

  • macOS: Now, DesktopTextField scrolls the view to the visible area on macOS when using SelectionStart method to set the cursor position beyond the visible limits. (75958)

  • macOS: DesktopMenuItems no longer remain enabled (when they shouldn't be) after switching between windows. (75955)

  • Mobile: Now MobileDateTimePicker Calendar is based on user settings on iOS. (76396)

  • Web: Fixed an issue causing some events to lose the WebSessionContext, when using the experimental Send Events in Batches setting. (76671)

  • Web: Fixed an issue causing WebImageViewer to ignore its URL property, when being set from the Inspector panel. (76321)

  • Web: Fixed a WebChart issue causing charts of bar type to be unable to set the grid color option, or font settings. (76354)

  • Web: Fixed a WebFileUploader issue causing its button to ignore raw HTML content. (76555)

  • Web: Fixed a WebCheckBox issue causing the control to be wrongly positioned, when not being locked to the left side. (76549)

  • Web: Fixed an issue causing a horizontal scrollbar to appear in the WebListBox control unnecessary. (76254)

  • Web: Fixed an issue causing WebListBox to be unable to remove rows after changing the column count. (76303)

  • Web: Fixed an issue causing calling applyTooltip() from the Web SDK to raise a JavaScript exception, when the element was undefined at runtime. (76284)

  • Web: Fixed a WebUIControl issue causing setting Width or Height properties at runtime to be ignored sometimes. (76198)

  • Web: Deprecated System.WebCursors in favor of WebStyle.Cursors. (75636)

  • Web: The debugger won't break anymore, when receiving a malformed request for events. (76176)

  • Web: Fixed a WebDatePicker issue that could cause the control to throw exceptions, when the language code wasn't recognized. (76079)

  • Web: Fixed an issue causing the WebFileUploader control to be able to raise the UploadFinished event before UploadStarted. (76096)

  • Web: WebTabPanel.HasBorder can now be changed at runtime. (76080)

  • Web: Fixed an issue causing WebDialogs to not be completely cleared after closing its parent control. (76039)

  • Web: Improved the internal Xojo Web server to make a more efficient use of the CPU. (75894)

  • Web: Fixed a WebListBox issue when trying to get the row tag of a row that has not been shown yet, when using a WebDataSource. (76047)

  • Web: Fixed a WebListBox issue causing the control to ignore selecting the first row, when using DataSources with zero based PrimaryKey. (76035)

  • Windows: Labels, on a TabPanel, no longer longer draw with an incorrect background color when a high contrast theme is selected. (75160)

  • Windows: Popover window no longer shows up in the taskbar when DesktopWindow.ShowPopover is called. (75745)

  • Windows: Fixed getting the proper font descriptor for PDFDocument on Windows when setting the Bold property for the same font name. (74367)

  • Windows: DesktopSearchField fires the TextChanged event on Windows after pasting text. (68947)

  • Windows: Popovers, initiated with DesktopContainer.Popover, now appear over global floating windows. Popovers that are initiated with DesktopWindow.Popover now appear over global floating windows only if the DesktopWindow.Type is set to Global Floating Window. (76120)

  • Windows: Graphics.Rotate now correctly draws items at the correct position when printing. (76009)

  • Windows: Locked controls no longer lose their positions when the DPI changes. (46743)

  • Windows: In specific cases where you need to draw the outline of the text on top of already rendered text, we've added the ability to opt into this specific way of rendering text by setting up the XOJO_GRAPHICS_DRAWTEXT_MODE environment variable. A value of 1 will enable Graphics.DrawText to render the text with similar metrics, regardless of whether Outline is enabled or not. This environment variable must be setup before the Graphics object is instantiated. (73748)

  • Windows: The RadioButtons in the DesktopRadioGroup now honors the transparency setting. (74050)

  • Windows: Graphics.DrawText now properly renders colored emojis on Windows and Linux. This also affects the ListBox output as well. (63604)

Compiler

Resolved Issues

  • Static variables, of the same name, in overloaded methods are no longer treated as a single variable between the various overloaded methods. Static variables are independent within their scope, even for overloaded methods, as they should be. (52943)

  • Toolbar: assigning an Icon to a Toolbar button no longer throws a compile error if the name of the Picture conflicts with a property of the same name (such as Index). (67995)

  • Android: CType usage with Boolean and numeric constants no longer causes a compile error. (76591)

  • Android: Introspection.MethodInfo.IsShared is now correct for shared methods. (76448)

  • Android: Fixed a compile error that could occur when using Me or Self in Container events. (75578)

  • Android: Fixed a compile error that could occur with methods that had attributes. (76400)

  • Android: Fixed a compile error that could occur with methods on a screen that declare a multidimensional array parameter. (76225)

  • Android: Fixed a compile error that would occur when assign an enum value to a variable. (76264)

  • Android: Fixed a compile error that could occur when using ByVal on some module methods. (76209)

  • Android: Fixed a compile error that could occur with Delegates that specify parameter default values. (76150)

  • Android: Fixed a compile error that could occur when using Color default values in a method declaration. (76162)

  • Android: Fixed compiler issues related to casting to interfaces within modules and casting to MobileSlider. (76196)

  • Android: Fixed some compile errors related to casting to MobileUIControl and when parsing hidden class members. (76119)

  • Android: Fixed an issue when using AddHandler to call an event method that is not on the class itself. (76109)

  • Android: Display a better compile error message when there is a type mismatch error caused by incompatible Declare syntax. (76020)

  • Android: Shared computed properties now work properly. (76042)

Documentation

New Features

  • MobileDateTimePicker allows modifying the Height constraint on iOS; useful when it is subclassed or when using Declares. (76202)

Examples

New Features

  • Android: Added Android HTMLViewer-JavaScript example to demonstrate usage of ExecuteJavaScript. (76159)

Resolved Issues

  • Android: Updated Android container example to use RemoveControl instead of RemoveContainer. (76041)