Will Thompson 3d06134545 Make startup animation use async functions throughout
During session startup, we have the following chain:

    LayoutManager._prepareStartupAnimation()
    `- LayoutManager._startupAnimation()
       `- LayoutManager._startupAnimationComplete()       (a)
       | or
       `- LayoutManager._startupAnimationGreeter()        (b)
       | or
       `- LayoutManager._startupAnimationSession()        (c)
          `- Overview.runStartupAnimation()               (d)
             `- OverviewActor.runStartupAnimation()       (e)
                `- ControlsManager.runStartupAnimation()  (f)

Branch (b) calls LayoutManager._startupAnimationComplete() once the
animation is complete. Branch (c) does the same, except that
ControlsManager.runStartupAnimation() is an async function that awaits
LayoutManager.ensureAllocation().

LayoutManager._prepareStartupAnimation() is an `async` function, and its
caller catches & logs any error it raises.

Previously, ControlsManager.runStartupAnimation() – (f) in the above
diagram – was declared `async`, because it uses `await` internally, but
also accepted a callback, which was called on successful completion of
the function and the animation it triggers.

If an exception is raised during execution of the function, its callback
would never be called, and because the promise it implicitly returns is
discarded, the exception would never be logged either. And, stepping a
few levels up the call stack, the callback that
LayoutManager._startupAnimationSession() (c) provided would never be
called, and so LayoutManager._startupAnimationComplete() would never be
called, meaning the cover pane that prevents input would never be
removed and the session would be unusable.

Remove the callback parameter from ControlsManager.runStartupAnimation()
(f), and instead make it resolve in the case where the callback would
previously have been called.

Remove the callback parameter from OverviewActor.runStartupAnimation()
(e) – it is just a wrapper around ControlsManager.runStartupAnimation().

Adjust Overview.runStartupAnimation() (d) accordingly: rather than
passing a callback to OverviewActor.runStartupAnimation(), await its
return and then proceed. There is a slight behaviour change here:
previously, in the branch where this._syncGrab() is false, the callback
would be called before calling this.hide(), whereas now this.hide() is
called before the async function returns.

Adjust LayoutManager._startupAnimationSession() and its siblings to be
async, rather than each calling _startupAnimationComplete() directly.
Finally, in _prepareStartupAnimation()  await _startupAnimation() either
succeeding or failing, and in either case call
_startupAnimationComplete(), removing the cover pane that prevents all
input.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3428>
2024-07-28 18:49:59 +01:00
2023-08-09 15:10:38 +00:00
2024-07-26 11:36:44 +00:00
2024-06-29 21:45:07 +02:00
2024-01-25 16:53:36 +00:00
2023-08-06 13:02:49 +02:00
2023-08-09 15:10:38 +00:00
2024-07-19 18:34:25 +00:00
2023-04-21 18:28:32 +00:00
2024-06-27 16:39:08 +02:00
2014-01-08 04:35:14 +07:00
2024-06-29 21:45:07 +02:00
2024-05-28 17:31:15 +00:00

GNOME Shell

GNOME Shell provides core user interface functions for the GNOME desktop, like switching to windows and launching applications. GNOME Shell takes advantage of the capabilities of modern graphics hardware and introduces innovative user interface concepts to provide a visually attractive and easy to use experience.

All interactions with the project should follow the Code of Conduct.

Supported versions

Upstream gnome-shell only supports the most recent stable release series, the previous stable release series, and the current development release series. Any older stable release series are no longer supported, although they may still receive backported security updates in long-term support distributions. Such support is up to the distributions, though.

Please refer to the schedule to see when a new version will be released.

Reporting bugs

Bugs should be reported to the issue tracking system.

The GNOME handbook has useful information for creating effective issue reports.

If you are using extensions, please confirm that an issue still happens without extensions. To properly disable extensions you can use the extensions-app and then restart your session. Disabling extensions without a restart is not sufficient to rule out extensions as the cause of a bug. If an issue can only be reproduced with a certain extension, please file an issue report against that extension first.

Please note that the issue tracker is meant to be used for actionable issues only.

For support questions, feedback on changes or general discussions, you can use:

Feature requests

gnome-shell is a core compoment of the GNOME desktop experience. As such, any changes in behavior or appearance only happen in accordance with the GNOME design team.

For major changes, it is best to start a discussion on discourse and reach out on the #gnome-design matrix room, and only involve the issue tracker once agreement has been reached.

In particular mockups must be approved by the design team to be considered for implementation.

For enhancements that are limited in scope and well-defined, it is acceptable to directly open a feature request.

When in doubt, it is better to ask before opening an issue.

Contributing

To contribute, open merge requests at https://gitlab.gnome.org/GNOME/gnome-shell.

It can be useful to first look at the GNOME handbook.

If a change likely requires discussion beyond code review, it is probably better to open an issue first, or follow the process for feature requests. Otherwise, creating a separate issue is not required.

The following guidelines will help your change to be successfully merged:

  • Keep the change as small as possible. If you can split it into multiple merge requests, please do so.
  • Use multiple commits. This makes it easier to review and helps to diagnose bugs in the future.
  • Use clear commit messages following the conventions.
  • Pay attention to the CI results. Merge requests cannot be merged until the CI passes.

There's also a small guide for newcomers with a few more basic tips and tricks.

Documentation

API Reference

  • Meta: Display server and window manager
  • St: Shell toolkit
  • Clutter: OpenGL based scene graph
  • Shell: Non-ui shell objects and utilities
  • See the mutter page for additional documentation

License

GNOME Shell is distributed under the terms of the GNU General Public License, version 2 or later. See the COPYING file for details.

Description
Languages
C 49.2%
JavaScript 47.4%
SCSS 1.4%
Meson 0.8%
Python 0.6%
Other 0.4%