Skip to content

0.4.6

Compare
Choose a tag to compare
@github-actions github-actions released this 28 Aug 04:09
· 447 commits to main since this release
34e6b43

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