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
----
* 2382, 2635, 2640, 2647, 2648, 2654, 2657, 2660, 2665, 2668, 2675, 2676, 2677, 2682, 2683, 2684, 2689, 2693, 2694, 2695, 2696, 2697, 2698, 2699, 2709, 2710, 2711, 2712, 2722, 2723, 2724, 2726, 2727, 2728, 2733, 2734, 2735, 2736, 2739, 2740, 2742, 2743, 2755, 2756, 2757, 2758, 2760, 2771, 2775, 2776, 2777, 2783, 2788, 2789, 2790