Features
- Toga now provides a Qt backend for KDE-based desktops. (#1142, #3914)
- GTK now provides a DateInput widget. (#1939)
- Apps can now register a handler that is notified when a window is resized. (#2304)
- During application startup, the locale will now be set to match the system's language setting. (#2773)
- GTK apps can now detect if the user has expressed a preference to be displayed in dark mode. (#2841)
TableandTreewidgets on desktop platforms can now accept focus programmatically. (#2972)- The
ActivityIndicator,Box,Button,Canvas,DateInput,LabelandTextInputwidgets are now supported with GTK4, along with improved container handling and the added handling of icons. (#3069) ListSource.findnow has adefaultparameter which is returned when no match is found. (#3609)- Pack now has a
fontshorthand property for specifying all font properties at once. (#3631) - Toga's web backend now provides deployment configuration information as part of the packaged wheel. This information can be used by tools like Briefcase to control how web content will be rendered. (#3666)
- On macOS, if the text for a column doesn't fit in the available space, a tooltip will be shown with the full text. (#3673)
- The Android backend now provides an
ActivityIndicatorwidget. (#3729) - Support for Python 3.14 was added. (#3867)
- macOS and iOS
WebViewwidgets now support displaying JavaScriptalert()andconfirm()dialogs. (#3927) - GTK
WebViewwidgets now support the use ofSharedArrayBufferin JavaScript. (#3927)
Bugfixes
- Buttons and other interactive widgets in scroll containers now respond properly to touch events on iOS when scrolled into view. (#2411)
- The performance of the
asyncioevent loop on Winforms has been slightly improved. (#2613) - The
NumberInputwidget now uses the correct localization for decimal separators. (#2773) - Deprecation warnings on style handling will no longer be produced when using GTK4 >= 4.10. (#3069)
- Toga's Winforms wheel is now correctly tagged to indicate that it is x86_64-specific (as it contains an x86-64 DLL for
WebViewsupport). (#3179) - Registering a font with a name that shadows a built-in font family name now raises an error instead of falling back to the system font silently. (#3567)
- The minimum width hint of the iOS
DateInputandTimeInputwidgets will now fit to the actual displayed size of the picker. (#3580) - The
rgbandhslclasses now have gain a__str__that uses modern CSS syntax. Forrgbthis is simply a nice update, but forhslit corrects color rendering issues when using the web backend. (#3611) - On GTK, the scroll position will now be correctly reflected if a
MultilineTextInputis programmatically scrolled immediately after changing text content. (#3658) - On GTK, mouse drag events are now triggered when modifier keys (e.g. NumLock, Shift) are active. (#3661)
- On macOS, the origin of non-primary screens is now correctly calculated when screens are not vertically aligned and the same size. (#3667)
- App path attributes were unintentionally made writable in 0.5.2 (e.g. i.e.,
app.paths.config = <something>was permitted). This has been fixed. (#3669) - The text of
OptionContainertab labels is now guaranteed to bestron macOS, instead of an Objective C String. (#3672) - On macOS, pressing Enter or Tab when a row is selected on a table no longer starts row editing mode. (#3673)
- Backwards compatibility code in Travertino that allows it to function with pre-0.5 versions of Toga has been made more specific, to prevent it from masking other, unrelated errors. (#3683)
- Running a single-file app without an explicit app name under PDB no longer crashes. (#3686)
- The interaction between visibility and starting an
ActivityIndicatoron iOS has been resolved. (#3729) - On macOS, the Close and Minimize menu options use the system-provided handlers, ensuring better adherence to system style guides. (#3775)
- The show/hide cursor test was made more reliable on Winforms. (#3783)
OptionContainerandScrollContainerwidgets will now resize continuously during the drag of a parent SplitContainer on macOS. (#3787)- The
toga-demoapp now correctly identifies its icon when run as a Python module. (#3926)
Backward Incompatible Changes
- In order to better match CSS, the
rgbandhslconstructors now silently clip (or in the case of hue, wrap) out-of-range values rather than throwing errors. They also convert them to consistent types: integers for red, blue, green, and hue; and floats for saturation, lightness, and alpha. (#3611) rgbandhslcolor objects are now read-only; theirr/g/b/aorh/s/l/aattributes can't be altered after creation. Because of this, format conversions (rgb(...).hslorhsl(...).rgb) can now cache their results, only performing calculations once. "Converting" a color object to its own type (rgb(...).rgborhsl(...).hsl) now returns the original object, rather than a new instance with the same values. (#3611)- Travertino's color-parsing
color()function interprets hex strings, e.g.#123,#112233, as well as predefined named colors. Previously, while this was never documented, it also parsed CSS-like declarations like"rgb(...)"; this feature has been removed. (#3611) - Previously, Travertino provided an
rgbaand anhslaclass, as well asrgbandhslsubclasses that enforce opaque alpha. In order to better match CSS, there is now no difference between these names; the shorterrgbandhslare the preferred forms, butrgbaandhslaare direct aliases for them. This can have backwards-incompatible implications; for instance,rgba(255, 255, 255, .5).rgbwould previously have returned a fully opaquergbinstance, while now it will preserve its alpha channel information. (#3611) - Toga (and Travertino) no longer support Python 3.9. (#3682)
- If an app provides distribution metadata, the app name will be set based on that metadata, rather than using the app ID or module name as an assumed name. If an app explicitly provides an app ID, the app name will be derived from the last part of an explicitly-provided App ID, rather than being implicitly derived from the module name. (#3926)
- Static Positron apps now apply a Cross Origin Opener policy of
same-origin, and a Cross Origin Embedder Policy ofrequire-corp. (#3927)
Documentation
- Toga's documentation was migrated to Markdown format. (#3719)
Misc
- #3138, #3582, #3613, #3625, #3632, #3636, #3638, #3649, #3650, #3651, #3653, #3654, #3655, #3659, #3662, #3663, #3664, #3668, #3670, #3676, #3687, #3688, #3689, #3690, #3693, #3697, #3699, #3700, #3702, #3703, #3704, #3705, #3706, #3707, #3708, #3710, #3711, #3712, #3713, #3714, #3716, #3717, #3720, #3721, #3722, #3723, #3724, #3729, #3731, #3735, #3736, #3737, #3738, #3739, #3740, #3741, #3742, #3744, #3754, #3755, #3756, #3757, #3758, #3761, #3764, #3765, #3766, #3770, #3771, #3772, #3776, #3784, #3789, #3790, #3795, #3796, #3797, #3798, #3799, #3800, #3801, #3802, #3803, #3804, #3805, #3806, #3807, #3808, #3809, #3810, #3811, #3812, #3813, #3814, #3815, #3816, #3817, #3818, #3821, #3821, #3824, #3825, #3826, #3827, #3828, #3829, #3830, #3831, #3833, #3836, #3837, #3840, #3841, #3842, #3843, #3844, #3845, #3846, #3847, #3848, #3849, #3850, #3851, #3852, #3853, #3855, #3856, #3858, #3860, #3864, #3865, #3866, #3874, #3875, #3876, #3877, #3878, #3879, #3880, #3882, #3883, #3884, #3885, #3887, #3892, #3893, #3894, #3895, #3898, #3899, #3902, #3908, #3909, #3910, #3911, #3912, #3913, #3933, #3934, #3936, #3937, #3938, #3940