Skip to content

Releases: beeware/toga

0.4.8

16 Oct 01:29
b987e88
Compare
Choose a tag to compare

This is a minor bugfix release, correcting an issue with Toga's support for Python 3.13 on Android.

Bugfixes

  • On macOS, apps that specify both document_types and a main_window no longer display the document selection dialog on startup. (#2860)
  • The integration with Android's event loop has been updated to support Python 3.13. (#2907)

Backward Incompatible Changes

  • Toga no longer supports Python 3.8. (#2888)
  • Android applications should update their Gradle requirements to use version 1.12.0 of the Material library (com.google.android.material:material:1.12.0). (#2890)
  • Android applications should update their Gradle requirements to use version 6.1.20 of the OSMDroid library (org.osmdroid:osmdroid-android:6.1.20). (#2890)

Misc

0.4.7

18 Sep 03:15
8bec404
Compare
Choose a tag to compare

Features

  • The GTK backend was modified to use PyGObject's native asyncio handling, instead of GBulb. (#2550)
  • The ActivityIndicator widget is now supported on iOS. (#2829)

Bugfixes

  • Windows retain their original size after being unminimized on Windows. (#2729)
  • DOM storage is now enabled for WebView on Android. (#2767)
  • A macOS app in full-screen mode now correctly displays the contents of windows that use a toga.Box() as the top-level content. (#2796)
  • Asynchronous tasks are now protected from garbage collection while they are running. This could lead to asynchronous tasks terminating unexpectedly with an error under some conditions. (#2809)
  • When a handler is a generator, control will now always be released to the event loop between iterations, even if no sleep interval or a sleep interval of 0 is yielded. (#2811)
  • When the X button is clicked for the About dialog on GTK, it is now properly destroyed. (#2812)
  • The Textual backend is now compatible with versions of Textual after v0.63.3. (#2822)
  • The event loop is now guaranteed to be running when your app's startup() method is invoked. This wasn't previously the case on macOS and Windows. (#2834)
  • iOS apps now correctly account for the size of the navigation bar when laying out app content. (#2836)
  • A memory leak when using Divider or Switch widgets on iOS was resolved. (#2849)
  • Apps bundled as standalone frozen binaries (e.g., POSIX builds made with PyInstaller) no longer crash on startup when trying to resolve the app icon. (#2852)

Misc

0.4.6

28 Aug 04:09
34e6b43
Compare
Choose a tag to compare

Features

  • Toga can now define apps that persist in the background without having any open windows. (#97)
  • Apps can now add items to the system tray. (#97)
  • It is now possible to use an instance of Window as the main window of an app. This allows the creation of windows that don't have a menu bar or toolbar decoration. (#1870)
  • The initial position of each newly created window is now different, cascading down the screen as windows are created. (#2023)
  • The API for Documents and document types has been finalized. Document handling behavior is now controlled by declaring document types as part of your toga.App definition. (#2209)
  • Toga can now define an app whose life cycle isn't tied to a single main window. (#2209)
  • The Divider widget was implemented on iOS. (#2478)
  • Commands can now be retrieved by ID. System-installed commands (such as "About" and "Visit Homepage") are installed using a known ID that can be used at runtime to manipulate those commands. (#2636)
  • A MainWindow can now have an on_close handler. If a request is made to close the main window, the on_close handler will be evaluated; app exit handling will only be processed if the close handler allows the close to continue. (#2643)
  • Dialogs can now be displayed relative to an app, in addition to be being modal to a window. (#2669)
  • An on_running event handler was added to toga.App. This event will be triggered when the app's main loop starts. (#2678)
  • The on_exit handler for an app can now be defined by overriding the method on the toga.App subclass. (#2678)
  • CommandSet now exposes a full set and dictionary interface. Commands can be added to a CommandSet using [] notation and a command ID; they can be removed using set-like remove() or discard() calls with a Command instance, or using dictionary-like pop() or del calls with the command ID. (#2701)
  • WebView2 on Winforms now uses the v1.0.2592.51 WebView2 runtime DLLs. (#2764)

Bugfixes

  • The order of creation of system-level commands is now consistent between platforms. Menu creation is guaranteed to be deferred until the user's startup method has been invoked. (#2619)
  • The type of SplitContainer's content was modified to be a list, rather than a tuple. (#2638)
  • Programmatically invoking close() on the main window will now trigger on_exit handling. Previously on_exit handling would only be triggered if the close was initiated by a user action. (#2643)
  • GTK apps no longer have extra padding between the menu bar and the window content when the app does not have a toolbar. (#2646)
  • On Winforms, the window of an application that is set as the main window is no longer shown as a result of assigning the window as App.main_window. (#2653)
  • Menu items on macOS are now able to correctly bind to the arrow and home/end/delete keys. (#2661)
  • On GTK, the currently selected tab index on an OptionContainer can now be retrieved inside an on_select handler. (#2703)
  • The WebView can now be loaded when using Python from the Windows Store. (#2752)
  • The WebView and MapView widgets now log an error if initialization fails. (#2779)

Backward Incompatible Changes

  • The add_background_task() API on toga.App has been deprecated. Background tasks can be implemented using the new on_running event handler, or by using :any:asyncio.create_task. (#2099)

  • The API for Documents and Document-based apps has been significantly modified. Unfortunately, these changes are not backwards compatible; any existing Document-based app will require modification.

    The DocumentApp base class is no longer required. Apps can subclass App directly, passing the document types as a list of Document classes, rather than a mapping of extension to document type.

    The API for Document subclasses has also changed:

    • A path is no longer provided as an argument to the Document constructor;

    • The document_type is now specified as a class property called description; and

    • Extensions are now defined as a class property of the Document; and

    • The can_close() handler is no longer honored. Documents now track if they are modified, and have a default on_close handler that uses the modification status of a document to control whether a document can close. Invoking touch() on document will mark a document as modified. This modification flag is cleared by saving the document. (#2209)

  • It is no longer possible to create a toolbar on a Window instance. Toolbars can only be added to MainWindow (or subclass). (#2646)

  • The default title of a toga.Window is now the name of the app, rather than "Toga". (#2646)

  • The APIs on Window for displaying dialogs (info_dialog(), question_dialog(), etc) have been deprecated. They can be replaced with creating an instance of a Dialog class (e.g., InfoDialog), and passing that instance to window.dialog(). (#2669)

Documentation

  • Building Toga's documentation now requires the use of Python 3.12. (#2745)

Misc

0.4.5

11 Jun 06:37
9a8d7a9
Compare
Choose a tag to compare

Features

  • The typing for Toga's API surface was updated to be more precise. (#2252)
  • APIs were added for replacing a widget in an existing layout, and for obtaining the index of a widget in a list of children. (#2301)
  • The content of a window can now be set when the window is constructed. (#2307)
  • Size and position properties now return values as a Size and Position namedtuple, respectively. namedtuple objects support addition and subtraction operations. Basic tuples can still be used to set these properties. (#2388)
  • Android deployments no longer require the SwipeRefreshLayout component unless the app uses the Toga DetailedList widget. (#2454)

Bugfixes

  • Invocation order of TextInput on_change and validation is now correct. (#2325)
  • Dialog windows are now properly modal when using the GTK backend. (#2446)
  • The Button testbed tests can accommodate minor rendering differences on Fedora 40. (#2583)
  • On macOS, apps will now raise a warning if camera permissions have been requested, but those permissions have not been declared as part of the application metadata. (#2589)

Documentation

  • The instructions for adding a change note to a pull request have been clarified. (#2565)
  • The minimum supported Linux release requirements were updated to Ubuntu 20.04 or Fedora 32. (#2566)
  • The first-time contributor README link has been updated. (#2588)
  • Typos in the usage examples of toga.MapPin were corrected. (#2617)

Misc

0.4.4

08 May 01:32
b86b462
Compare
Choose a tag to compare

Bugfixes

  • The mechanism for loading application icons on macOS was corrected to account for how Xcode populates Info.plist metadata. (#2558)

Misc

0.4.3

06 May 07:00
0c6a2b8
Compare
Choose a tag to compare

Features

  • A MapView widget was added. (#727)
  • Toga apps can now access details about the screens attached to the computer. Window position APIs have been extended to allow for placement on a specific screen, and positioning relative to a specific screen. (#1930)
  • Key definitions were added for number pad keys on GTK. (#2232)
  • Toga can now be extended, via plugins, to create Toga Images from external image classes (and vice-versa). (#2387)
  • Non-implemented features now raise a formal warning, rather than logging to the console. (#2398)
  • Support for Python 3.13 was added. (#2404)
  • Toga's release processes now include automated testing on ARM64. (#2404)
  • An action for a Toga command can now be easily modified after initial construction. (#2433)
  • A geolocation service was added for Android, iOS and macOS. (#2462)
  • When a Toga app is packaged as a binary, and no icon is explicitly configured, Toga will now use the binary's icon as the app icon. This means it is no longer necessary to include the app icon as data in a resources folder if you are packaging your app for distribution. (#2527)

Bugfixes

  • Compatibility with macOS 14 (Sonoma) was added. (#2188, #2383)
  • Key handling for Insert, Delete, NumLock, ScrollLock, and some other esoteric keys was added for GTK and Winforms. Some uses of bare Shift on GTK were also improved. (#2220)
  • A crash observed on iOS devices when taking photographs has been resolved. (#2381)
  • Key shortcuts for punctuation and special keys (like Page Up and Escape) were added for GTK and Winforms. (#2414)
  • The placement of menu items relative to sub-menus was corrected on GTK. (#2418)
  • Tree data nodes can now be modified prior to tree expansion. (#2439)
  • Some memory leaks associated with macOS Icon and Image storage were resolved. (#2472)
  • The stack trace dialog no longer raises an asyncio.TimeoutError when displayed. (#2474)
  • The integration of the asyncio event loop was simplified on Android. As a result, asyncio.loop.run_in_executor() now works as expected. (#2479)
  • Some memory leaks associated with the macOS Table, Tree and DetailedList widgets were resolved. (#2482)
  • Widget IDs can now be reused after the associated widget's window is closed. (#2514)
  • :class:~toga.WebView is now compatible with Linux GTK environments only providing WebKit2 version 4.1 without version 4.0. (#2527)

Backward Incompatible Changes

  • The macOS implementations of Window.as_image() and Canvas.as_image() APIs now return images in native device resolution, not CSS pixel resolution. This will result in images that are double the previous size on Retina displays. (#1930)

Documentation

  • The camera permission requirements on macOS apps have been clarified. (#2381)
  • Documentation for the class property toga.App.app was added. (#2413)
  • The documentation landing page and some documentation sections were reorganized. (#2463)
  • The README badges were updated to display correctly on GitHub. (#2491)
  • The links to ReadTheDocs were updated to better arbitrate between linking to the stable version or the latest version. (#2510)
  • An explicit system requirements section was added to the documentation for widgets that require the installation of additional system components. (#2544)
  • The system requirements were updated to be more explicit and now include details for OpenSUSE Tumbleweed. (#2549)

Misc

0.4.2

06 Feb 06:14
283e763
Compare
Choose a tag to compare

Features

  • Buttons can now be created with an icon, instead of a text label. (#774)
  • Widgets and Windows can now be sorted. The ID of the widget is used for the sorting order. (#2190)
  • The main window generated by the default startup() method of an app now has an ID of main. (#2190)
  • A cross-platform API for camera access was added. (#2266, #2353)
  • An OptionContainer widget was added for Android. (#2346)

Bugfixes

  • New widgets with an ID matching an ID that was previously used no longer cause an error. (#2190)
  • App.current_window on GTK now returns None when all windows are hidden. (#2211)
  • Selection widgets on macOS can now include duplicated titles. (#2319)
  • The padding around DetailedList on Android has been reduced. (#2338)
  • The error returned when an Image is created with no source has been clarified. (#2347)
  • On macOS, toga.Image objects can now be created from raw data that didn't originate from a file. (#2355)
  • Winforms no longer generates a system beep when pressing Enter in a TextInput. (#2374)

Backward Incompatible Changes

  • Widgets must now be added to a window to be available in the widget registry for lookup by ID. (#2190)
  • If the label for a Selection contains newlines, only the text up to the first newline will be displayed. (#2319)
  • The internal Android method intent_result has been deprecated. This was an internal API, and not formally documented, but it was the easiest mechanism for invoking Intents on the Android backend. It has been replaced by the synchronous start_activity method that allows you to register a callback when the intent completes. (#2353)

Documentation

  • Initial documentation of backend-specific features has been added. (#1798)
  • The difference between Icon and Image was clarified, and a note about the lack of an on_press handler on ImageView was added. (#2348)

Misc

0.4.1

21 Dec 02:07
01db558
Compare
Choose a tag to compare

Features

  • Toga images can now be created from (and converted to) PIL images. (#2142)
  • A wider range of command shortcut keys are now supported on WinForms. (#2198)
  • Most widgets with flexible sizes now default to a minimum size of 100 CSS pixels. An explicit size will still override this value. (#2200)
  • OptionContainer content can now be constructed using toga.OptionItem objects. (#2259)
  • An OptionContainer widget was added for iOS. (#2259)
  • Apps can now specify platform-specific icon resources by appending the platform name (e.g., -macOS or -windows) to the icon filename. (#2260)
  • Images can now be created from the native platform representation of an image, without needing to be transformed to bytes. (#2263)

Bugfixes

  • TableViews on macOS will no longer crash if a drag operation is initiated from inside the table. (#1156)
  • Separators before and after command sub-groups are now included in menus. (#2193)
  • The web backend no longer generates a duplicate title bar. (#2194)
  • The web backend is now able to display the About dialog on first page load. (#2195)
  • The testbed is now able to run on macOS when the user running the tests has the macOS display setting "Prefer tabs when opening documents" set to "Always". (#2208)
  • Compliance with Apple's HIG regarding the naming and shortcuts for the Close and Close All menu items was improved. (#2214)
  • Font handling on older versions of iOS has been corrected. (#2265)
  • ImageViews with flex=1 will now shrink to fit if the image is larger than the available space. (#2275)

Backward Incompatible Changes

  • The toga.Image constructor now takes a single argument (src); the path and data arguments are deprecated. (#2142)
  • The use of Caps Lock as a keyboard modifier for commands was removed. (#2198)
  • Support for macOS release prior to Big Sur (11) has been dropped. (#2228)
  • When inserting or appending a tab to an OptionContainer, the enabled argument must now be provided as a keyword argument. The name of the first argument has been also been renamed (from text to text_or_item); it should generally be passed as a positional, rather than keyword argument. (#2259)
  • The use of synchronous on_result callbacks on dialogs and Webview.evaluate_javascript() calls has been deprecated. These methods should be used in their asynchronous form. (#2264)

Documentation

  • Documentation for toga.Key was added. (#2199)
  • Some limitations on App presentation imposed by Wayland have been documented. (#2255)

Misc

0.4.0

03 Nov 04:08
fcd0f3c
Compare
Choose a tag to compare

This is a huge update, containing a massive collection of fixes and improvements. Every widget has been audited so that they each have complete API documentation and type annotations; APIs have been updated so that they're internally consistent (e.g., the attribute max is now used to describe maximum values everywhere); and every widget is accompanied by a test suite that provides 100% branch coverage.

This release contains a significant number of backwards incompatible changes and updates; details below.

Features

  • The Toga API has been fully audited. All APIs now have 100% test coverage, complete API documentation (including type annotations), and are internally consistent. (#1903, #1938, #1944, #1946, #1949, #1951, #1955, #1956, #1964, #1969, #1984, #1996, #2011, #2017, #2025, #2029, #2044, #2058, #2075)
  • Headings are no longer mandatory for Tree widgets. If headings are not provided, the widget will not display its header bar. (#1767)
  • Support for custom font loading was added to the GTK, Cocoa and iOS backends. (#1837)
  • The testbed app has better diagnostic output when running in test mode. (#1847)
  • A Textual backend was added to support terminal applications. (#1867)
  • Support for determining the currently active window was added to Winforms. (#1872)
  • Programmatically scrolling to top and bottom in MultilineTextInput is now possible on iOS. (#1876)
  • A handler has been added for users confirming the contents of a TextInput by pressing Enter/Return. (#1880)
  • An API for giving a window focus was added. (#1887)
  • Widgets now have a .clear() method to remove all child widgets. (#1893)
  • Winforms now supports hiding and re-showing the app cursor. (#1894)
  • ProgressBar and Switch widgets were added to the Web backend. (#1901)
  • Missing value handling was added to the Tree widget. (#1913)
  • App paths now include a config path for storing configuration files. (#1964)
  • A more informative error message is returned when a platform backend doesn't support a widget. (#1992)
  • The example apps were updated to support being run with briefcase run on all platforms. (#1995)
  • Headings are no longer mandatory Table widgets. (#2011)
  • Columns can now be added and removed from a Tree. (#2017)
  • The default system notification sound can be played via App.beep(). (#2018)
  • DetailedList can now respond to "primary" and "secondary" user actions. These may be implemented as left and right swipe respectively, or using any other platform-appropriate mechanism. (#2025)
  • A DetailedList can now provide a value to use when a row doesn't provide the required data. (#2025)
  • The accessors used to populate a DetailedList can now be customized. (#2025)
  • Transformations can now be applied to any canvas context, not just the root context. (#2029)
  • Canvas now provides more list-like methods for manipulating drawing objects in a context. (#2029)
  • On Windows, the default font now follows the system theme. On most devices, this means it has changed from Microsoft Sans Serif 8pt to Segoe UI 9pt. (#2029)
  • Font sizes are now consistently interpreted as CSS points. On Android, iOS and macOS, this means any numeric font sizes will appear 33% larger than before. The default font size on these platforms is unchanged. (#2029)
  • MultilineTextInputs no longer show spelling suggestions when in read-only mode. (#2136)
  • Applications now verify that a main window has been created as part of the startup() method. (#2047)
  • An implementation of ActivityIndicator was added to the Web backend. (#2050)
  • An implementation of Divider was added to the Web backend. (#2051)
  • The ability to capture the contents of a window as an image has been added. (#2063)
  • A PasswordInput widget was added to the Web backend. (#2089)
  • The WebKit inspector is automatically enabled on all macOS WebViews, provided you're using macOS 13.3 (Ventura) or iOS 16.4, or later. (#2109)
  • Text input widgets on macOS now support undo and redo. (#2151)
  • The Divider widget was implemented on Android. (#2181)

Bugfixes

  • The WinForms event loop was decoupled from the main form, allowing background tasks to run without a main window being present. (#750)
  • Widgets are now removed from windows when the window is closed, preventing a memory leak on window closure. (#1215)
  • Android and iOS apps no longer crash if you invoke App.hide_cursor() or App.show_cursor(). (#1235)
  • A Selection widget with no items now consistently returns a selected value of None on all platforms. (#1723)
  • macOS widget methods that return strings are now guaranteed to return strings, rather than native Objective C string objects. (#1779)
  • WebViews on Windows no longer have a black background when they are resized. (#1855)
  • The interpretation of MultilineTextInput.readonly was corrected iOS (#1866)
  • A window without an on_close handler can now be closed using the window frame close button. (#1872)
  • Android apps running on devices older than API level 29 (Android 10) no longer crash. (#1878)
  • Missing value handling on Tables was fixed on Android and Linux. (#1879)
  • The GTK backend is now able to correctly identify the currently active window. (#1892)
  • Error handling associated with the creation of Intents on Android has been improved. (#1909)
  • The DetailedList widget on GTK now provides an accurate size hint during layout. (#1920)
  • Apps on Linux no longer segfault if an X Windows display cannot be identified. (#1921)
  • The on_result handler is now used by Cocoa file dialogs. (#1947)
  • Pack layout now honors an explicit width/height setting of 0. (#1958)
  • The minimum window size is now correctly recomputed and enforced if window content changes. (#2020)
  • The title of windows can now be modified on Winforms. (#2094)
  • An error on Winforms when a window has no content has been resolved. (#2095)
  • iOS container views are now set to automatically resize with their parent view (#2161)

Backward Incompatible Changes

  • The weight, style and variant arguments for Font and Font.register are now keyword-only. (#1903)
  • The clear() method for resetting the value of a MultilineTextInput, TextInput and PasswordInput has been removed. This method was an ambiguous override of the clear() method on Widget that removed all child nodes. To remove all content from a text input widget, use widget.value = "". (#1938)
  • The ability to perform multiple substring matches in a Contains validator has been removed. (#1944)
  • The TextInput.validate method has been removed. Validation now happens automatically whenever the value or validators properties are changed. (#1944)
  • The argument names used to construct validators have changed. Error message arguments now all end with _message; compare_count has been renamed count; and min_value and max_value have been renamed min_length and max_length, respectively. (#1944)
  • The get_dom() method on WebView has been removed. This method wasn't implemented on most platforms, and wasn't working on any of the platforms where it was implemented, as modern web view implementations don't provide a synchronous API for accessing web content in this way. (#1949)
  • The evaluate_javascript() method on WebView has been modified to work in both synchronous and asynchronous contexts. In a synchronous context you can invoke the method and use a functional on_result callback to be notified when evaluation is complete. In an asynchronous context, you can await the result. (#1949)
  • The on_key_down handler has been removed from WebView. If you need to catch user input, either use a handler in the embedded JavaScript, or create a Command with a key shortcut. (#1949)
  • The invoke_javascript() method has been removed. All usage of invoke_javascript() can be replaced with evaluate_javascript(). (#1949)
  • The usage of local file:// URLs has been explicitly prohibited. file:// URLs have not been reliable for some time; their usage is now explicitly prohibited. (#1949)
  • DatePicker has been renamed DateInput. (#1951)
  • TimePicker has been renamed TimeInput. (#1951)
  • The on_select handler on the Selection widget has been renamed on_change for consistency with other widgets. (#1955)
  • The _notify() method on data sources has been renamed notify(), reflecting its status as a public API. (#1955)
  • The prepend() method was removed from the ListSource and TreeSource APIs. Calls to prepend(...) can be replaced with insert(0, ...). (#1955)
  • The insert() and append() APIs on ListSource and TreeSource have been modified to provide an interface that is closer to that list API. These methods previously accepted a variable list of positional and keyword arguments; these arguments should be combined into a single tuple or dictionary. This matches the API provided by __setitem__(). (#1955)
  • Images and ImageViews no longer support loading images from URLs. If you need to display an image from a URL, use a background task to obtain the image data asynchronously, then create the Image and/or set the ImageView image property on the completion of the asynchronous load. (#1956)
  • A row box contained inside a row box will now expand to the full height of its parent, rather than collapsing to the maximum height of the inner box's child content. (#1958)
  • A column box contained inside a column box will now expand to the full width of its parent, rather than collapsing to the maximum width of the inner box's child content. (#1958)
  • On Android, the user data folder is now a data sub-directory of the location returned by context.getFilesDir(), rather than the bare context.getFilesDir() location. (#1964)
  • GTK now returns ~/.local/state/appname/log as the log file location, rather than ~/.cache/appname/log. (#1964)
  • The location returned by toga.App.paths.app is now the folder that contain...
Read more

0.3.1

12 Apr 02:26
8413123
Compare
Choose a tag to compare

Features

  • The Button widget now has 100% test coverage, and complete API documentation. (#1761)
  • The mapping between Pack layout and HTML/CSS has been formalized. (#1778)
  • The Label widget now has 100% test coverage, and complete API documentation. (#1799)
  • TextInput now supports focus handlers and changing alignment on GTK. (#1817)
  • The ActivityIndicator widget now has 100% test coverage, and complete API documentation. (#1819)
  • The Box widget now has 100% test coverage, and complete API documentation. (#1820)
  • NumberInput now supports changing alignment on GTK. (#1821)
  • The Divider widget now has 100% test coverage, and complete API documentation. (#1823)
  • The ProgressBar widget now has 100% test coverage, and complete API documentation. (#1825)
  • The Switch widget now has 100% test coverage, and complete API documentation. (#1832)
  • Event handlers have been internally modified to simplify their definition and use on backends. (#1833)
  • The base Toga Widget now has 100% test coverage, and complete API documentation. (#1834)
  • Support for FreeBSD was added. (#1836)
  • The Web backend now uses Shoelace to provide web components. (#1838)
  • Winforms apps can now go full screen. (#1863)

Bugfixes

  • Issues with reducing the size of windows on GTK have been resolved. (#1205)
  • iOS now supports newlines in Labels. (#1501)
  • The Slider widget now has 100% test coverage, and complete API documentation. (#1708)
  • The GTK backend no longer raises a warning about the use of a deprecated set_wmclass API. (#1718)
  • MultilineTextInput now correctly adapts to Dark Mode on macOS. (#1783)
  • The handling of GTK layouts has been modified to reduce the frequency and increase the accuracy of layout results. (#1794)
  • The text alignment of MultilineTextInput on Android has been fixed to be TOP aligned. (#1808)
  • GTK widgets that involve animation (such as Switch or ProgressBar) are now redrawn correctly. (#1826)

Improved Documentation

  • API support tables now distinguish partial vs full support on each platform. (#1762)
  • Some missing settings and constant values were added to the documentation of Pack. (#1786)
  • Added documentation for toga.App.widgets. (#1852)

Misc