Files
godot-docs/tutorials/inputs/handling_quit_requests.rst
Raul Santos b319da3f07 Update some C# examples for 4.0 (#6693)
* Update some C# examples

- Rename members that have been renamed in Godot's C# API for 4.0.
- Change `delta` parameter type to `double`.
- Ensure parameters match base declaration.
- Other minor code fixes.

---------

Co-authored-by: Paul Joannon <437025+paulloz@users.noreply.github.com>
2023-02-04 17:03:03 +01:00

91 lines
2.9 KiB
ReStructuredText

.. _doc_handling_quit_requests:
Handling quit requests
======================
Quitting
--------
Most platforms have the option to request the application to quit. On
desktops, this is usually done with the "x" icon on the window title bar.
On Android, the back button is used to quit when on the main screen (and
to go back otherwise).
Handling the notification
-------------------------
On desktop and web platforms, :ref:`Node <class_Node>` receives a special
``NOTIFICATION_WM_CLOSE_REQUEST`` notification when quitting is requested from
the window manager.
On Android, ``NOTIFICATION_WM_GO_BACK_REQUEST`` is sent instead.
Pressing the Back button will exit the application if
**Application > Config > Quit On Go Back** is checked in the Project Settings
(which is the default).
.. note::
``NOTIFICATION_WM_GO_BACK_REQUEST`` isn't supported on iOS, as
iOS devices don't have a physical Back button.
Handling the notification is done as follows (on any node):
.. tabs::
.. code-tab:: gdscript GDScript
func _notification(what):
if what == NOTIFICATION_WM_CLOSE_REQUEST:
get_tree().quit() # default behavior
.. code-tab:: csharp
public override void _Notification(int what)
{
if (what == NotificationWmCloseRequest)
GetTree().Quit(); // default behavior
}
When developing mobile apps, quitting is not desired unless the user is
on the main screen, so the behavior can be changed.
It is important to note that by default, Godot apps have the built-in
behavior to quit when quit is requested from the window manager. This
can be changed, so that the user can take care of the complete quitting
procedure:
.. tabs::
.. code-tab:: gdscript GDScript
get_tree().set_auto_accept_quit(false)
.. code-tab:: csharp
GetTree().SetAutoAcceptQuit(false);
Sending your own quit notification
----------------------------------
While forcing the application to close can be done by calling
:ref:`SceneTree.quit <class_SceneTree_method_quit>`, doing so will not send
the ``NOTIFICATION_WM_CLOSE_REQUEST`` to the nodes in the scene tree.
Quitting by calling :ref:`SceneTree.quit <class_SceneTree_method_quit>` will
not allow custom actions to complete (such as saving, confirming the quit,
or debugging), even if you try to delay the line that forces the quit.
Instead, if you want to notify the nodes in the scene tree about the upcoming
program termination, you should send the notification yourself:
.. tabs::
.. code-tab:: gdscript GDScript
get_tree().get_root().propagate_notification(NOTIFICATION_WM_CLOSE_REQUEST)
.. code-tab:: csharp
GetTree().Root.PropagateNotification((int)NotificationWmCloseRequest);
Sending this notification will inform all nodes about the program termination,
but will not terminate the program itself *unlike in 3.X*. In order to achieve
the previous behavior, :ref:`SceneTree.quit <class_SceneTree_method_quit>` should
be called after the notification.