0.4.6
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 anon_close
handler. If a request is made to close the main window, theon_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 totoga.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 thetoga.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-likeremove()
ordiscard()
calls with a Command instance, or using dictionary-likepop()
ordel
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 triggeron_exit
handling. Previouslyon_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 anon_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 ontoga.App
has been deprecated. Background tasks can be implemented using the newon_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 subclassApp
directly, passing the document types as alist
ofDocument
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 calleddescription
; 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 defaulton_close
handler that uses the modification status of a document to control whether a document can close. Invokingtouch()
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 toMainWindow
(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 aDialog
class (e.g.,InfoDialog
), and passing that instance towindow.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