9009 Commits

Author SHA1 Message Date
Florian Müllner
a8d4c679eb searchController: Adjust to Clutter.Stage.get_key_focus() change
The method is now a plain getter of the `key-focus` property,
so handle the case where it returns null.

See https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4256

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3633>
2025-02-14 20:22:59 +01:00
Florian Müllner
852a0a89ac appDisplay: Filter apps in default folder
We currently create the default folder with the corresponding
app list, regardless of whether the apps are actually part of
the default install or not.

This matters when a user explicitly install such an app later,
as it will be hidden away in the folder rather than appended
to the app grid as expected.

To avoid that, only add currently-installed apps to the folder
when creating it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3632>
2025-02-13 19:59:17 +00:00
Florian Müllner
38c6293f4f data: Generate dash/app-grid defaults from text files
Defining default apps as serialized GVariants isn't very human-friendly,
which likely contributes to the fact that the lists are in parts horribly
outdated (Books! Cheese! Screenshot! gedit!).

Instead, generate the lists at build time from simple text files, which
should be much easier to update.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3632>
2025-02-13 19:59:17 +00:00
Keyu Tao
33354c718f windowPreview: Adjust WindowPreview stack when stackAbove overlay shown
When there are 3 or more windows in WorkspaceLayout, showing or hiding
window preview overlay in some certain orders could cause
inconsistencies in windows' vertical arrangement.

Let's take window A, B, C as an example. Initially, A is above B and B
is above C in workspace layout like this: A -> B -> C.

After opening activities, user could:

1. Move cursor to B preview, which would move B above all in layout:
   B -> A -> C
2. Move cursor from B to C preview. When C's showOverlay() is called
   before B's hideOverlay(), _restack() would move C above all and don't
   change B's arrangement:
   C -> B -> A
3. Finally, move cursor away from C's preview:
   B -> A -> C

In this case, when user closes Activities, they would see window
stacking wrong for a while.

This commit adds some extra logic in _restack, checking the
_stackAbove's _stackAbove when this._stackAbove._overlayShown is true.
Though it's still not guaranteed to be always consistent as there could
be several WindowPreview with _overlayShown as true if pointer moves
really fast, this helps avoid glitches in many cases.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4638.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3460>
2025-02-13 12:38:19 +00:00
Sebastian Wick
a7cc1e626a keyboard: Rely on tecla to figure out the current layout
Tecla shows the current layout, and keeps track of layout changes, if no
arguments are passed to it. This is exactly the behavior we want for the
"Show Keyboard Layout" button.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3635>
2025-02-13 03:58:23 +00:00
Julian Sparber
ef4af961bf messageList: Floor preferred height of LabelExpanderLayout
This fixes the flickering when expanding/collapsing an expandable
message inside a NotificationMessageGroup.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
b4113b1ee2 messageList: Highlight expanded group
The new design requires that other messages and groups are faded when the user
has a group expanded. This introduces a new GLSL shader to provide the
desired effect. The new shader is used for the already existing scroll
fade and the previous one is removed. The two fades need to work together to
ensure that resulting fade looks good.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
a795dfb2ff messageList: Center expanded notification group in view
Ensure that when the user expends a group, it is scrolled to and centered
in the in the `MessageListView`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
aac7c125ce messageTray: Increase max messages per source to 10
After introducing message grouping by source we can safely show much
more messages per source.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
47de83a922 messageList: Make notification groups expandable/collapsible
This implements the new expand/collapse feature for notification groups
according to the new notification designs [1].

[1] 9e2bed6f37/notifications-calendar/notifications-grouping.png

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
dae4179b3d messageList: Add grouped notifications to MessageView
This makes use of the NotificationMessageGroup widget introduced in the
previous commit to add notifications to the MessageView.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
219cd88c82 messageList: Add notification group
This add a widget for the new notification grouping
according to the new designs [1], but the expand behavior will be added
in a future commit.

[1] 9e2bed6f37/notifications-calendar/notifications-grouping.png

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
0ac129bbd6 messageList: Prepare MessageView for notification groups
We need to track message order separate from the widget children order,
because of how notification groups will add a cover over other messages
when a notification group is expanded that will prevent interaction with
any message other then the expanded notification group.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
95c21bbb19 messageList: Allow disabling automatic resizing of ScaleLayout
For notification grouping we don't always want to resize the message
container when adding or removing a message. This adds the option so it
can be disabled when not wanted.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
b4c74ee168 messageList: Add back media source to MessageView
Adds back the media/mpris message source to the MessageView, it was
previously dropped because of the widget restructure needed for message
grouping.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
b2829ac066 calender: Use MessageList.MessageView to display messages
Fully drop message list sections, since we don't use them anymore.
The messages and notifications of different sources will be added to the
MessageView in a later commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
996480908d messageList: Cleanup MessageView before adding new features
This removes some unneeded children, cleans up the API of the
MessageView and changes legacy coding style.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
6e86110dfd messageList: Rename MessageSection to MessageView
For message grouping by source we need more control over the list of
messages to reflect this change rename the MessageSection to
MessageView. Message from different sources will be added to the
MessageView directly in a future commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Julian Sparber
9b13bf552a messageList: Drop all subclasses of MessageListSection
For message/notification grouping by source we need more control over
each single message therefore in a future commit the
MessageListSection will contain all messages directly instead of having
a separate section for different source (notifications and media).
The lost NotificationSection and MediaSection will be readded in a
future commit as well.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3012>
2025-02-11 11:30:29 +00:00
Daniel van Vugt
c9cd4fbcd0 animation: Add (integer) geometry scaling support to Spinner
Until now it only supported (float) fractional scaling.

Since the SpinnerContent requires a Clutter size in logical pixels,
we need to specify that at map time when the scaling factor is known.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8126
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3634>
2025-02-11 12:00:08 +08:00
Florian Müllner
4f5cd433b2 screenshot: Fix notification
St.ImageContent.set_bytes() now has an additional Cogl.Context
parameter.

Fixes: 44b84e458a ("st/image-content: Take a CoglContext on set_bytes/set_data functions")
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8190
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3631>
2025-02-09 09:49:02 +00:00
Marco Trevisan (Treviño)
71da3048a1 status/powerProfiles: Use newer DBus API
Since some time the power-profiles-daemon project has been moved under
the upower umbrella and renamed its API to follow that.

While the legacy name is still supported, there are plans to not support
it anymore in future [2]. So let's update gnome-shell code to use the
current main name instead.

[1] https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/merge_requests/148
[2] https://gitlab.freedesktop.org/upower/power-profiles-daemon/-/merge_requests/166

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3629>
2025-02-07 01:03:27 +01:00
Julian Sparber
03e5d4bdd8 messageList: Drop unused Message._onDestroy()
This method isn't used and users (e.g extensions) of `Message` can connect
to the destroy signal if they need it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
88f551d0a8 messageList: Reduce flexibility of section visibility
Section visibility has become less complex when moving events
out of the message list. We no longer need different behavior
in different sections, so we can instead control the visibility
of the entire list in a single place.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
0c6f896d4b mpris: Move widgets to messageList.js
Widgets for other type of messages (notifications) are already in
`messageList.js` therefore move widgets for mpris also there.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
c102d8c5ba mpris: Split widgets from data objects
Separate widgets from data objects so that in a future commit the
widgets can be moved to messageList.js

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
45d7b9673a messageList: Fix warning when user activates a message while removing
The `Notification` object is destroyed before the `Message` widget so
during the removal animation the user still could click on the `Message`
and activate the notification. This ensures we don't warn about it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
bf76553287 messageList: Use default signal handler for closing notifications
And change the `close` signal on `Message` to run the default handler
last, which allows other signal handers to stop the signal emission
chain.

This change shouldn't have much effect on existing code but will be
needed for by-source notification grouping.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
6fa76cd8f4 messageList: Use notification-removed signal in MessageListSection
Since we have now the `notification-removed` signal on
`MessageTray.Source` we can use it instead of connecting to the
`destroy()` signal for each single notification in the
`MessageListSection`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Julian Sparber
64aadeece3 messages: Move message widgets from calendar.js to messageList.js
The widgets `NotificationMessage` and `NotificationSection` in `calendar.js`
aren't used only by the calendar.

Move the two widget to messageList.js since once we add by-source grouping for
messages (which will happen in a future commit) we need a much tighter
coupling between them and the rest of the MessageList. In future the
`NotificationSection` will need to be removed to make expanding of
groups work.

This also removes a circular import of files: `calender.js` imports
`messageTray.js` and it imports `calender.js`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3429>
2025-02-02 17:40:14 +00:00
Florian Müllner
e5b81e19f5 quickSettings: Hide separator when menu button is hidden
Since commit eeddf49371, the menu button in toggles is separated
by an actual widget rather than just CSS borders.

However the menu button can be hidden, in which case the menu toggle
acts as a regular quick toggle. The separator shouldn't be visible
either in that case, so hide it.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8159
Fixes: eeddf49371 ("style: Improve the styles for the separation in quick setting buttons")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3621>
2025-01-30 13:09:05 +01:00
Florian Müllner
17ce108a35 js: Switch more boxes to new orientation property
There are two instances where we set the deprecated `vertical`
property with a `{vertical}` shorthand that escaped previous
greps; move those to the new `orientation` property too.

Fixes: b75b4abaf0 ("js: Set BoxLayout orientation")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3618>
2025-01-28 13:01:47 +00:00
Carlos Garnacho
e6e0ccdf27 ibusCandidatePopup: Fix live orientation changes based on IBus info
This is rare, and was missed in the replacements towards the new
'orientation' property.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8177
Fixes: b75b4abaf ("js: Set BoxLayout orientation")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3618>
2025-01-28 13:01:47 +00:00
Florian Müllner
f24a624335 animation: Remove now unused classes
Since `Spinner` is no longer a subclass of `Animation`/`AnimatedIcon`,
the latter are now unused. Apparently that's not only true for
gnome-shell itself, but also extensions, so there's little reason
for keeping the former base classes around.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3612>
2025-01-28 12:50:00 +00:00
Carlos Garnacho
fecd5cdd6c shellDBus: Actually emit AcceleratorDeactivated signal
Add the missing plumbing to have this signal emitted via D-Bus.

Fixes: e53f69f9d ("shellDBus: Add AcceleratorDeactivated D-Bus signal")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3617>
2025-01-28 11:56:56 +00:00
Carlos Garnacho
8f53096cfa shellDBus: Allow GNOME portal to access Shell D-Bus API
This will be necessary for a global shortcuts implementation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3598>
2025-01-27 14:09:00 +00:00
Carlos Garnacho
e53f69f9d3 shellDBus: Add AcceleratorDeactivated D-Bus signal
Add this signal to complement AcceleratorActivated, meant to happen
on the release action of shortcuts, e.g. on push-to-talk.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3598>
2025-01-27 14:09:00 +00:00
Florian Müllner
b75b4abaf0 js: Set BoxLayout orientation
Use new `orientation` property instead of `vertical`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3614>
2025-01-27 13:55:39 +01:00
Florian Müllner
0f9c13c55d windowPreview: Set window container during construction
The container is tightly coupled with the preview, and there is
never a need to replace it at a later point. Set it directly
during construction, so the underlying base class can make
this explicit by marking the property as construct-only.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3615>
2025-01-27 12:06:04 +00:00
Adam Williamson
4bef27d85c data: Correct Utilities category ordering, add comments
This adds a comment to make clear that the Utilities category is
intended to be organized alphabetically by the display name of
the apps (*not* by the desktop file names), and adds comments
with the current display name of each app.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3609>
2025-01-23 16:28:04 -08:00
Adam Williamson
ca136d1c62 data: List Characters and Logs in the Utilities group
These have (Logs) or previously had (Characters) the
X-GNOME-Utilities category in their .desktop file and so showed
up in the Utilities folder (despite 152faae claiming that the
category was "completely unused"). Characters had the category
removed in
https://gitlab.gnome.org/GNOME/gnome-characters/-/commit/210eb09
in apparent expectation that it would be added to the list, but
it seems it was not.

We could restore consideration of the category, but I guess let's
just list the apps instead? I don't know if any others are
missing.

Signed-off-by: Adam Williamson <awilliam@redhat.com>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3607>
2025-01-21 14:54:01 -08:00
Bilal Elmoussaoui
b3f5f9601b Go through global stage for getting ClutterBackend
Instead of using the default backend.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3528>
2025-01-20 11:50:29 +00:00
Bilal Elmoussaoui
fea29eb490 Get ClutterBackend/CoglContext from the Actor/Texture
Avoids going through the global backend helper.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3528>
2025-01-20 11:50:29 +00:00
Daniel van Vugt
dee6cf3f6b panel: Ensure already destroyed panels don't receive callbacks
To prevent sporadic shutdown failures:
```
** Message: 17:08:37.707: Shutting down GNOME Shell

(gnome-shell:91892): Gjs-CRITICAL **: 17:08:37.728: Object .Gjs_ui_panel_Panel (0x5b53524fb030), has been already disposed — impossible to access it. This might be caused by the object having been destroyed from C code using something such as destroy(), dispose(), or remove() vfuncs.
```

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3601>
2025-01-20 16:18:37 +08:00
Philip Withnall
212e098da1 timeLimitsManager: Add new state machine for screen time limits
This implements wellbeing screen time limits in gnome-shell. It depends
on a few changes in other modules:
 - New settings schemas in gsettings-desktop-schemas
 - A settings UI in gnome-control-center
 - User documentation in gnome-user-docs

It implements the design from
https://gitlab.gnome.org/Teams/Design/settings-mockups/-/blob/master/wellbeing/wellbeing.png.

The core of the implementation is `TimeLimitsManager`, which is a state
machine which uses the user’s session state from logind to track how long
the user has been in an active session, in aggregate, during the day. If
this total exceeds their limit for the day, the state machine changes
state.

The user’s session activity history (basically, when they logged in and
out for the past 14 weeks) is kept in a state file in their home
directory. This is used by gnome-shell to count usage across reboots in
a single day, and in the future it will also be used to provide usage
history in gnome-control-center, so the user can visualise their
historic computer usage at a high level, for the past several weeks.

The `TimeLimitsDispatcher` is based on top of this, and controls showing
notifications and screen fades to make the user aware of whether they’ve
used the computer for too long today, as per their preferences.

Unit tests are included to check that `TimeLimitsManager` works, in
particular with its loading and storing of the history file. The unit
tests provide mock implementations of basic GLib clock functions, the
logind D-Bus proxy and `Gio.Settings` in order to test the state machine in
faster-than-real-time.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>

See: https://gitlab.gnome.org/Teams/Design/initiatives/-/issues/130
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3397>
2025-01-13 14:24:02 +00:00
Sam Hewitt
eeddf49371 style: Improve the styles for the separation in quick setting buttons
- remove the highlighting js in favour of color definitions, to fix it not really working in light theme or high contrast
- add a bunch of color definitions to set the color of the menu button in the different styles
- drop the border drawing for a separator, to fix visual issues with the high border radius, in favour of a separator element
- change the class names of some things to make it understandable
- bit of overall css tidying

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3554>
2025-01-10 18:22:09 +00:00
Sam Hewitt
f9b231beb3 style: Clean up the keyboard stylesheet
- remove a lot of unused styles and deprecated class definitions
- fix the padding and spacing of subkeys popover
- fix the lack of vertical padding on word-suggestions

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3553>
2025-01-10 17:58:15 +00:00
Sam Hewitt
b73159f414 keyboard: New and updated symbolic assets
- renamed all assets to start with osk- disambiguate them from other keyboard status icons
- updated the design of hide, enter and keyboard layout icons to be more rounded
- new symbolic assets for emoji and delete actions to move away from using 16x16
- updated keyboard scss to use the scalable icon definition
- updated the zwnj asset to align with GNOME icon style
- changed all references to icons in layouts

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3555>
2025-01-10 14:22:01 +00:00
Jakub Steiner
e55820cb1f data: Ship local copy of a cog wheel icon
Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8135

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3589>
2025-01-06 22:10:54 +00:00
Matthijs Velsink
1e6c92a083 status/a11y: Block 'toggled' signal when manually toggling
When the 'text-scaling-factor' key changes and it's set bigger than 1.0,
the corresponding switch is activated in the a11y menu. However, since
commit 946ee936926a0e14fa5f86f62da757bcb581a147, setting the state using
`setToggleState()` also fires the 'toggled' signal, which is I think
correct and intended.

However, that means the GSettings handler for 'text-scaling-factor'
should block that 'toggled' handler when it sets the switch active, as
otherwise the 'text-scaling-factor' is always set to 1.25 when it is
first made bigger than 1.0.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3574>
2025-01-04 22:41:47 +01:00