
When ClutterImage got merged into StImageContent with commit 64d5d01360 ("st: Merge ClutterImage with ImageContent"), a small error slipped in when copying over the update_image_size() function. Within ClutterImage, update_image_size() served a simple purpose: To call clutter_content_invalidate_size() in case the texture size would change. To check that, ClutterImage was storing the existing texture size in the priv->width and priv->height fields. When merging into StImageContent, those priv->width/height fields happened to overlap with priv->width/height of StImageContent, but there they are storing the preferred size, rather than the texture size. Copying update_image_size() as-is into StImageContent meant we now set the preferred size to the texture size, subtly breaking resource-scaled StIcons (where texture size is a multiple of the preferred size). The breakage isn't very apparent because StIcons manually set the size of their internal ClutterActor child to the requested icon-size via clutter_actor_set_size() in st_texture_cache_load_gicon(), and that makes the child actor report the correct size in get_preferred_width/height(). The child actor gets allocated via clutter_actor_allocate_align_fill() from ClutterBinLayouts vfunc_allocate(), and clutter_actor_allocate_align_fill() honors both the available size from the parent and the CONTENT_SIZE request-mode on the child. So when the StIcon has a larger allocation (aka extra available size), clutter_actor_allocate_align_fill() will fill that available space with the (too large) content size. To reproduce the issue, on a resource-scaled monitor, simply create an StIcon with a fixed width and height that's larger than the icon-size. The icon will be painted too large and blurry. Fix this fallout by avoiding to touch the priv->width/height properties on StImageContent, and instead simply comparing old texture size to new texture size, we have both textures around after all! Fixes: 64d5d01360 ("st: Merge ClutterImage with ImageContent") Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8287 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3680>
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:
- the #gnome-shell matrix room
- the
Desktop
category orshell
tag on GNOME Discourse
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
- Coding style and conventions for javascript
- Coding style and conventions for C code
- The GJS Developer Guide
- Building and Running
- Debugging
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.