9928 Commits

Author SHA1 Message Date
Philip Withnall
df3b4d302d breakManager: Add new state machine for screen time/health breaks
This implements health break reminder support in gnome-shell. It depends
on a
few bits and bobs from other modules:
 - New settings schemas in gsettings-desktop-schemas (released in
   47.beta, which Mutter already depends on)
 - 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 `BreakManager`, which is a state
machine which uses the Mutter `IdleMonitor` to track whether the user
is, or should be, in a screen time break.

The `BreakDispatcher` is based on top of this, and controls showing
notifications, countdown timers, screen fades, the lock shield, etc. to
make the user aware of upcoming or due breaks, as per their notification
preferences.

Unit tests are included to check that `BreakManager` works. These
provide mock implementations of basic GLib clock functions, the
`IdleMonitor` 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/3251>
2024-11-28 10:44:10 +00:00
Philip Withnall
03e3d9f435 messageTray: Add removeAction() method and allow references to actions
Internally in gnome-shell it may be useful to modify the actions
available on a notification while it’s still visible, but without
clearing them all and re-creating them.

Allow that by returning the action object when adding it, and adding a
`removeAction()` method which takes that object and removes it.

Signed-off-by: Philip Withnall <pwithnall@gnome.org>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3251>
2024-11-28 10:44:02 +00:00
Daniel Rusek
de4f1c3f9f appDisplay: Remove deprecated apps from Utilities, fix desktop file name
gnome-system-log, vinagre and gnome-dictionary were deprecated a long time ago

The gnome-abrt desktop file name was also changed a long time ago to a rDNS one

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3539>
2024-11-23 13:35:02 +00:00
Jonas Dreßler
12d2532154 keyboard: Switch back from shift to default level on more situations
If the shift key was pressed, we should switch back to the default level
after the next commit. It seems that this only worked due to a superfluous
signal emission so far (see https://gitlab.gnome.org/GNOME/mutter/-/issues/3448).

When the keyboard is in this "shift" level (note: only "shift", not
"opt+shift" level) without being latched, there are certain events that
should put it back into the default level:

- A normal character key on the OSK being pressed
- A keyval on the extended OSK (eg. TAB key or an arrow key) being pressed
- The backspace key being pressed
- The OSK being hidden
- The user moving focus in the entry

The `_updateLevelFromHints()` function already takes care of updating the
active level after certain kinds of events, we can achieve the desired
behavior by adding a fallback case to that function where it moves the level
back from "shift" to "default".

Since we only want this switch back to the "default" layer as a response to
actual user input, add a `userInputHappened` boolean to
`_updateLevelFromHints()` and don't set that when the application simply
changes its content hints.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3286>
2024-11-19 20:23:25 +01:00
Jonas Dreßler
cae8b745ca keyboard: Don't press and release keyval if it's a modifier key
Looks like we currently do the press-and-release dance for keys that specify
both a keyval and the "modifier" action. So when pressing CTRL in the
extended OSK, not only is the CTRL modifier set together with the next key
pressed, but the actual CTRL keyval quickly gets pressed and released,
similar to how we'd do it for the TAB key.

This seems unintentional, as the press-and-release behavior should probably
be specific to keys like TAB, and not apply to modifier keys, so limit that
behavior to only keys without an action specified.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3286>
2024-11-19 20:23:25 +01:00
Jonas Dreßler
91ffc4c06b keyboard: Don't check for key.action using strict equality operator
A lot of keys have no action set. In that case key.action is `undefined`,
but the strict equality check of `action !== null` here will return true and
we'll enter the if-case anyway.

That's quite confusing and was not intended like that, so change the
comparison to a less-strict operator.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3286>
2024-11-19 20:23:25 +01:00
Florian Müllner
4ebc7113ab main: Make notify() details optional again
The parameter used to be optional until commit d54219c0982, but
after GObjectifaction `undefined` is no longer interchangeable
with `null` here.

Restore the old behavior, as it's used by extensions (including
one of our own templates).

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8068
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3548>
2024-11-19 18:13:34 +00:00
Florian Müllner
83a8810003 status/backlight: Fix a11y label of discrete level buttons
Point the discrete level buttons to the corresponding labels,
so that they don't appear as plain "button" in screen readers.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3545>
2024-11-13 12:32:57 +00:00
Florian Müllner
64c9baf412 status/backlight: Fix keynav within discrete item
When representing the keyboard backlight levels as discrete items,
it is currently not possible to keynav past the first button.

Fix this by bypassing the usual event bubbling and passing key press
events directly to the focus manager, similar to what we do for
popup menu items.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3545>
2024-11-13 12:32:57 +00:00
Lukáš Tyrychtr
685a7948a5 backlight: Allow operating the keyboard backlight slider by keyboard
Also, hide its menu item from the a11y tree, similarly to the volume and
other sliders.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6894

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3538>
2024-11-13 00:57:11 +01:00
Florian Müllner
3d560909ea status/volume: Don't show OSD when initializing
The OSD should only be shown when switching to or from headphones,
not when initializing the volume indicator during startup.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/8054
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3543>
2024-11-12 11:45:23 +00:00
Florian Müllner
fbaead359a dialog: Wrap titles
Dialogs should not use titles that are too long to fit, but if
they do, wrapping is more appropriate than ellipsizing.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3540>
2024-11-12 11:21:02 +00:00
Sundeep Mediratta
69bb44563d status/volume: Show OSD volume slider on plugging unplugging headphones
OSD Volume popup appears when a user connects or disconnects
earphones/headphones/headsets.

Shows and warns the user that the volume may be set to high
or low when headphones are connected or disconnected.

This is a nice bit of feedback to the user that something has
changed, and something that other platforms do.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7931
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3531>
2024-11-11 00:28:48 +01:00
Sundeep Mediratta
9f8cb2faba status/volume: Create global showOSD() method for StreamSlider
Abstract the Volume slider OSD display as a global method in the
base class, so that can be reused in all derived classes without
duplicating code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3531>
2024-11-11 00:28:44 +01:00
Daniel Rusek
b3c16a48ca appDisplay: Fix Fonts desktop file name
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3532>
2024-11-06 19:24:44 +00:00
Bilal Elmoussaoui
d92f8daf62 magnifier: Use the new get_client_content_rect API
As we have removed is_client_decorated from Mutter in the last release.
Instead of re-adding it and re-exposing SSD/CSD differences and making
gnome-shell deal with that, we created a new API that does exactly what
is_client_decorated was used for, so switch to using that.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7984

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3522>
2024-11-06 11:03:24 +00:00
Pablo Correa Gómez
152faae6f9 data: Add X-GNOME-Shell-Utilities.directory file to allow showing real name
Instead of having the name of the directory be X-GNOME-Utilities. This
also allows translating the name to the user's language. The name is
chose to be different to X-GNOME-Utilities from GNOME Menus.

In the process, also remove the categories. The menu definition from
gnome-menus is not used, and it's not a category that apps list
themselves, so it's completely unused anyway.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3526>
2024-11-04 20:46:29 +01:00
Bilal Elmoussaoui
715b47bddc Adapt to renamed Clutter threading functions
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3501>
2024-10-30 08:38:41 +01:00
Bilal Elmoussaoui
fd8d923a34 Adapt to exposed CoglSnippetHook
It was exposed few cycles back, so get rid of the duplicated type.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3519>
2024-10-21 12:03:23 +02:00
Lukáš Tyrychtr
3bd68fcfd7 bluetooth: When the placeholder is shown, announce it when reaching the toggle
Previously, the menu would be just empty, without any indication why.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3485>
2024-10-16 16:47:09 +00:00
Lukáš Tyrychtr
4b04fc49b5 bluetooth: Name the device items for a11y
By doing that, they're finally announced by a screen reader.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3485>
2024-10-16 16:47:09 +00:00
Sam Hewitt
8d065b558e style: Clean up dialogs stylesheet to fix layout issues
- remove unnecessary dialog type-specific padding, spacing and margin definitions that led to layout to problems
- bump the size of user avatar in authentication dialog
- nest css classes in the sass to better reflect the structure of dialog elements
- sync style of audio device selector with switcher-popup style
- sync text and padding styles with other elements
- fix incorrect button order in audio selection dialog

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7876
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3473>
2024-10-16 16:41:40 +00:00
Florian Müllner
74dcf99ea5 extensionSystem: Split out loadExtensionMetadata()
There is no need for sharing the functionality, but moving
the code into extensionUtils allows adding unit tests for it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3379>
2024-10-16 16:16:08 +00:00
Florian Müllner
0188c453b9 extensionUtils: Include arrays and objects in serialization
We currently only handle simple types when (de)serializing,
which means we miss keys like "shell-version" and "session-modes".

While there is no immediate use for those, handing arrays and
objects will allow to support the newly added "donate" metadata
in the Extensions app in the future.

https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6575

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3379>
2024-10-16 16:16:08 +00:00
Bilal Elmoussaoui
aa0f2c4915 Use NULL for nick/blurb in GObject params
As they are only used by gstreamer for gst-inspect & other tools.
Projects like Mutter/gtk have completely dropped them as well, so follow
their path

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3505>
2024-10-16 10:19:41 +00:00
Guacamolie
91a9409b1d js: Update Meta.KeyHandlerFunc arguments
The Meta keybinding API now exposes the Clutter event to GJS, which was
previously hidden due to it being a gpointer. Since this moves the
binding argument one argument to the right on the GJS side, any code
that was using the binding argument needs to be updated.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3502>
2024-10-15 17:12:45 +00:00
Florian Müllner
8694f891ad windowMenu: Add context to screenshot action
The string "Take Screenshot" is used both by the action in the
window menu and the screenshot/recording toggle in the UI.

However in some languages, it would be best to use different
strings for the two use cases.

Address this by adding context to the window menu string, so
it can be differentiated from the string in the screenshot UI.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7979
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3503>
2024-10-15 16:02:24 +00:00
Florian Müllner
fb58ceb4c5 status/keyboard: Always released held keyboard after activating source
As the keyboard is released asynchronously after setting the ibus
engine, there's a possibility that the `this._reloading` property
changed in the meantime.

To ensure that `holdKeyboard()` and `releaseKeyboard()` are correctly
paired, record the condition in a local variable so that it maintains
its value in the callback.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3476>
2024-10-15 15:06:36 +00:00
Florian Müllner
0a3c12f8d6 status/keyboard: Fix execution order when activating source
When commit ce89b15bb123d made the code async, it did not only
delay releasing the keyboard until after the engine has been
updated, but also the following code that updates the current
input source.

One result is that the current source is now initialized later,
which breaks any code that relies on the source being set.

This affects the login screen in particular (which uses different
`InputSourceSettings` than the regular session): It fails to come
up entirely if the OSK is enabled.

To fix the issue, use a .then() callback to release the keyboard,
instead of blocking all following code with await.

Fixes: ce89b15bb1 ("ibusManager: Use async await instead of callbacks")
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7912
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3476>
2024-10-15 15:06:36 +00:00
Sundeep Mediratta
5309f747fa slider: Consider text direction when handling arrow keys
Currently the right arrow key always increases the slider value,
even in RTL locales where the slider itself increases leftwards.

Fix that, so that the arrow keys always correspond to the
direction of the slider.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7963

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3500>
2024-10-12 11:06:24 +00:00
Marco Trevisan (Treviño)
368a685717 extensionSystem: Catch and log session update errors
If sessionUpdated() fails we get a js failure but not information about
where the actual problem was, so catch for error properly.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3495>
2024-10-03 18:07:47 +02:00
Andrew Zaech
7fe05f6bc9 popupSwitchMenuItem: Emit correct switch state with toggled signal
The toggled signal was incorrectly emitting the pspec instead of the switch state.

Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7943

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3493>
2024-09-29 22:43:15 +00:00
Lukáš Tyrychtr
9fc5396742 quick-toggle: Make the subtitle the a11y description of the toggle
By doing that, more info is read by default, like the
connected bluetooth device and likely more.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3484>
2024-09-24 12:08:47 +02:00
Alice Mikhaylenko
8887c67503 padOsd: Don't hardcode blue color
Missed this one, since it's not set from CSS.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3480>
2024-09-23 11:23:47 +00:00
Lukáš Tyrychtr
25a2a0156e quick-slider: Do not allow focusing the icon when it's not reactive
This hides a disabled unlabeled button from the focus order in the display
brightness status indicator, and may be others.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3481>
2024-09-23 12:43:02 +02:00
Lukáš Tyrychtr
bd81a94d2c quick-slider: Label the menu opening button
One less unlabeled button, that's good.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3477>
2024-09-20 15:30:40 +02:00
Marco Trevisan (Treviño)
c67ea8e771 gdm: Actually wait for pending messages being notified on failures
We had code to ensure that all the queued messages sent by a PAM module
were shown by waiting some time to give the user time to read them, but
due to a typo this code never executed.

Fixes commit dd97a2589b8b686f273550f3e9e6ce370b25c10d

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3466>
2024-09-10 22:47:55 +00:00
Alessandro Bono
31509e55ca locatePointer: Mark the animation as required
When the accessibility option "Reduce Animation" is turned on, the
accessibility option "Locate Pointer" stops to work. This is because
the animation is not marked as required. Mark it as such.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7472
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2986>
2024-09-06 13:01:39 +00:00
Alessandro Bono
fc7e2bc65b ripples: Allow to specify whether the ripple is required
The ripples are used both for the "Hot Corner" animation and for the
"Locate Pointer" animation. The latter one is an accessibility feature
and should always work, even when animations are disabled. Take this
into account.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2986>
2024-09-06 13:01:39 +00:00
Alessandro Bono
8c7965f048 environment: Allow marking animations as required
There are cases when we want to mark an animation as required. For
example, we want the "Locate Pointer" animation to work even when
the animation as marked as disabled. Take this into account when
easing an actor.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2986>
2024-09-06 13:01:39 +00:00
Alessandro Bono
27878aa096 animationUtils: Allow marking animations as required
There are cases when we want to mark an animation as required. For
example, we want the "Locate Pointer" animation to work even when
the animation is marked as disabled. Take this into account when
adjusting the animation time.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2986>
2024-09-06 13:01:39 +00:00
Alessandro Bono
a52a931fb1 environment: Adjust optional delay parameter
All timing parameters should take the `slow-down-factor` and
`enable-animations` settings into account, but the delay parameter
of property/adjustment animations was forgotten.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2986>
2024-09-06 13:01:39 +00:00
Alessandro Bono
91ae7de3ad environment: Make more explicit what are the default values
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2986>
2024-09-06 13:01:39 +00:00
Sundeep Mediratta
39a3da654d ibusManager: Simplify code and logic for setEngine()
Reword names, functions and refactor code to make code execution logic
simpler to understand.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3439>
2024-09-05 13:09:38 +02:00
Sundeep Mediratta
961ca226bd keyboard: Replace oskCompletion setter with public method
The underlying value only changes asynchronously, which makes a
setter a bit awkward, so replace it with a public async function.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3439>
2024-09-05 13:09:38 +02:00
Sundeep Mediratta
2975afaf1d ibusManager: Change return value of setCompletionEnabled()
The return value currently indicates whether the request was
successful, namely `setCompletionEnabled(false)` will return
`true` if completions were successfully disabled.

However the only caller that uses the value uses it to indicate
whether completions were enabled.

Given that nothing else uses the value, change the meaning to
match the caller, and indicate whether completions are enabled
after the call returns.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3439>
2024-09-05 13:09:38 +02:00
Sundeep Mediratta
ce89b15bb1 ibusManager: Use async await instead of callbacks
Code that uses async/await is often easier to follow than callbacks, in
particular as part of the code is already async.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3439>
2024-09-05 13:09:38 +02:00
Thore Sommer
cdf0e5fc6e status/network: Add user permissions to new wifi connections
When creating a new NM connection they are by default system connections. A
user cannot create them if they don't have the correct polkit permissions
(org.freedesktop.NetworkManager.settings.modify.system).

If a user tried to add a new connection in the drop down menu, then they got
no password prompt and NM logged the following:
[...] audit: op="connection-add-activate" pid=1872 uid=1000 result="fail" \
reason="Insufficient privileges"

This change adds the current user to the user permissions for the new
connection, if the user has no permissions to modify the system connections,
which copies the behavior of GNOME Settings.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3462>
2024-09-02 21:01:35 +00:00
Alessandro Bono
5445b705f1 authPrompt: Allow to set a custom ShellUserVerifer
Move ShellUserVerifier creation to its own function so that
extensions can easily override it.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7828
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3446>
2024-09-02 10:43:24 +00:00
Jonas Ådahl
6982f2daae ibus-candidate-popup: Scale coordinates from IBus
The coordinates are effectively in the windowing system coordinate
space, which when scaling Xwayland, we need to scale these. Do this with
the Meta.Window.protocol_to_stage() function on the focused window,
which handles it correctly for the corresponding windowing system and
configuration.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3458>
2024-08-30 20:14:55 +00:00