Commit Graph

8146 Commits

Author SHA1 Message Date
Florian Müllner
84a62cc868 panel: Add quick settings indicator
The new indicator will eventually expose all the system status
items that are currently provided by the aggregate menu, but in
a more accessible form than the current submenu-heavy menu.

Right now this just adds the new empty indicator to the top bar,
alongside the existing aggregate menu.

We can then move items over one-by-one.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2392>
2022-08-02 16:05:28 +00:00
Florian Müllner
f18d103f83 quickSettings: Add SystemIndicator
This serves the exact same purpose as the existing SystemIndicator
class from PanelMenu, except that it exposes a quickSettingsItems
array instead of a menu.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2392>
2022-08-02 16:05:28 +00:00
Florian Müllner
e5d4984c1b quickSettings: Add QuickToggle
Most quick settings items are just buttons with icon, label, and
a particular style. While that's easy enough, a dedicated class
with corresponding properties is more convenient.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2392>
2022-08-02 16:05:28 +00:00
Florian Müllner
47cb354e6c quickSettings: Introduce QuickSettingsMenu
The quick settings menu is a popover that arranges items in a
reflowing, homogeneous grid. Grid children may span multiple
columns, but not rows.

For now the QuickSettingsMenu that contains the grid is just a
convenience wrapper around the layout manager that does the heavy
lifting. The two will become more intertwined when we add support
for menu toggles though, so the custom menu type is unfortunately
needed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2392>
2022-08-02 16:05:28 +00:00
Florian Müllner
0c68c33826 loginManager: Return objects instead of multiple booleans
Multiple booleans - both in arguments and return values - are almost
always problematic API, because people have to memorize (or more likely
look up) the meaning of each position.

Instead, return a JS object so each value has a name attached to it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2370>
2022-08-01 20:58:37 +02:00
Florian Müllner
637ee7386e js: Use async D-Bus wrappers
After porting the more complex cases - in particular those that
affect a module's API - we are left with straight-forward D-Bus
method calls that can be moved to promise-based wrappers in one
go.

For consistency, this also switches from Remote to Async where
the call result is ignored.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2344>
2022-08-01 18:51:14 +00:00
Florian Müllner
a3db909383 loginManager: Make API promise-based
The LoginManager abstraction is still mostly callback-based, not
least because the methods are thin wrappers around logind D-Bus
calls.

However as gjs' dbus wrapper now generates promised-based wrappers
as well, we can implement a proper async API just as naturally.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2344>
2022-08-01 18:51:14 +00:00
Florian Müllner
db3916434e status/location: Make AppAuthorizer async
Instead of passing a callback through a series of methods and
callbacks, change authorize() to return its result asynchronously.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2344>
2022-08-01 18:51:14 +00:00
Florian Müllner
c6861c0a3d autorunManager: Promisify ContentTypeDiscoverer
Thanks to recent gjs changes - namely the ability to promisify
interface prototypes and promise-based D-Bus wrappers - we can
modernize the ContentTypeDiscoverer API to use an async function
instead of a callback.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2344>
2022-08-01 18:51:14 +00:00
Florian Müllner
119581a4cb search: Use async functions instead of callbacks
Our search provider API has to be asynchronous to support remote
providers. It doesn't have to be based on callbacks though, now
that async functions provide a nicer alternative.

That is particularly true after gjs's D-Bus wrapper started to
generate promise-based method variants.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2344>
2022-08-01 18:51:14 +00:00
Florian Müllner
1cce999c30 remoteSearch: Stop using callback to return loaded providers
Provider loading has been synchronous since 2013, so we can
just as well return the results directly instead of passing
them to a callback.

Even if we returned to asynchronous loading in the future,
we wouldn't want to use a callback, but make the function
itself async.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2344>
2022-08-01 18:51:14 +00:00
Florian Müllner
7ab7df739a status/remote-access: Split out screen sharing indicator
The latest mockups move the screen sharing indicator into a
separate control, similar to the existing indicator for built-in
screen recordings.

As this removes the submenu and only keeps the top bar icon (for
external screen recordings), this will smooth the transition to
quick settings.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
4f155d3757 status/powerProfiles: Remember last selected non-default profile
When we move to quick settings, this will allow us to toggle
between two profiles even where more profiles are available.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
dc4ed1d7d2 status/location: Remove submenu
Location services aren't expected to change frequently: They are
either disabled globally, or permissions are granted on a per-app
basis.

This is less of a concern while the setting is exposed in a small
submenu, but as we moving to quick settings, it does not deserve
the prominence of a quick toggle. Just the top bar icon and Settings'
privacy panel should be enough.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
3bc9f00a15 status/volume: Merge VolumeMenu into indicator
Other than connecting stream when necessary, the volume menu
only forwards slider events to the indicator, and method calls
from the indicator to the appropriate slider.

Just cut our the middle-man and let the indicator handle the
slider items directly.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
ed2ae06f35 status/brightness: Improve proxy error handling
On error, we currently print a warning and bail out early. That
means we don't hide the slider, despite it being non-functional
without the proxy.

Fix this by making sure _sync() is called in any case. While at
it, use an appropriate log level for the warning message.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
87e4eda46d status/brightness: Hide when proxy has no owner
Properties are null while a proxy has no owner. Javascript helpfully
coerces that into `Number(null)` (a.k.a. 0), so we end up with a
broken slider.

Explicitly check that the value is an integer before doing the
comparison to catch that case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
fcd08fae94 status/bluetooth: Split out BtClient object
The new class abstracts away the nitty-gritty of bluetooth- and
airplane-mode handling, and exposes just what the UI needs.

This will become more important with quick settings, where there's
a stronger separation between top bar icon and quick toggle.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:36 +00:00
Florian Müllner
463757569a status/bluetooth: Use promise to initialize proxy
There's no good reason for waiting for the proxy to be initialized
to connect signals. In fact, connecting the signal beforehand
ensures that the handler is in place when the proxy fetches the
properties, so we don't have to call the handler explicitly.

That in turn allows us to rely on the signal parameters to only process
changed properties.

To achieve that, construct the proxy manually, and then initialize
it asynchronously in a Promise.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:35 +00:00
Florian Müllner
80e4ae7d7f status/nightLight: Use promise to initialize proxy
There's no good reason for waiting for the proxy to be initialized
to connect signals. In fact, connecting the signal beforehand
ensures that the handler is in place when the proxy fetches the
properties, so we don't have to call the handler explicitly.

That in turn will allow us in a follow-up to rely on the signal
parameters to only process changed properties.

To achieve that, construct the proxy manually, and then initialize
it asynchronously in a Promise.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2391>
2022-08-01 12:33:35 +00:00
Ivan Molodetskikh
841599d475 overviewControls: Minor style fix
Since I'm forced to fix the spaces for the workAreaBox change, might as
well fix them in the nearby lines.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2395>
2022-08-01 00:48:07 +00:00
Ivan Molodetskikh
8562606ad1 ControlsManagerLayout: Cache workAreaBox
Allocation runs every frame during the overview animations, so we want
to do as little work there as possible. Cache the work area box
computation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2395>
2022-08-01 00:48:07 +00:00
Ivan Molodetskikh
c3284eb8ac ControlsManagerLayout: Use primaryMonitor
ControlsManager already hardcodes primaryMonitor, so do it here too to
skip an expensive search.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2395>
2022-08-01 00:48:07 +00:00
Alessandro Bono
d01d38e1e9 extensionSystem: Check if mode is supported when loading
Don't try to initialize and then enable an extension if it is not supported
in the current mode. Otherwise the extension will not be initialized, and the
initial ERROR state is not cleared. Once it is in ERROR state we can't enable
it anymore when we switch mode. Instead, leave the extension in INITIALIZED
state, so that it will be initialized when appropriate. This happens for
extensions that support the unlock-dialog mode but not the user mode.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2378>
2022-07-27 14:01:30 +00:00
Florian Müllner
6aa3a2f4e2 status/powerProfiles: Use CHECK ornament
The design team prefers them over dots in this context now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2389>
2022-07-27 13:39:02 +00:00
Florian Müllner
d555be0a64 status/powerProfiles: Add image to menu items
We want the icons when we move to quick settings:

https://gitlab.gnome.org/Teams/Design/os-mockups/-/raw/master/system-status/quick-settings/quick-toggles-mvp.png

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2389>
2022-07-27 13:39:02 +00:00
Florian Müllner
7647e5590a popupMenu: Append ornament in image menu items
Having both image and ornament in front of the label looks odd.

Keep the image where it is, and move the ornament to the end.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2389>
2022-07-27 13:39:02 +00:00
Florian Müllner
d03a94dab1 status/powerProfiles: Split updating profiles from sync
Calling the split out code where necessary seems cleaner than
calling it conditionally as part of the general sync().

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2389>
2022-07-27 13:39:02 +00:00
Florian Müllner
e062e96ae6 rfkill: Consider HasAirplaneMode
`ShouldShowAirplaneMode` only considers whether airplane mode
should be shown for the form factor, not whether there are
any actual kill switches available.

That's tracked in a separate property, `HasAirplaneMode`.

Take that into account for our `:show-airplane-mode` property,
so that it reflects when airplane mode should and *can* be shown.

Right now we only show airplane mode when it is enabled (and
therefore available), but this will change in the future.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2385>
2022-07-19 13:27:39 +00:00
Florian Müllner
98cbc31e86 rfkill: Turn manager into a GObject
That will allow us to use it in property bindings.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2385>
2022-07-19 13:27:39 +00:00
Florian Müllner
bb043bb761 rfkill: Use promise to initialize proxy
There's no good reason for waiting for the proxy to be initialized
to connect signals. In fact, connecting the signal beforehand
ensures that the handler is in place when the proxy fetches the
properties, so we don't have to call the handler explicitly.

That in turn will allow us in a follow-up to rely on the signal
parameters to only process changed properties.

To achieve that by constructing the proxy manually, and then
initialize it asynchronously in a Promise.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2385>
2022-07-19 13:27:39 +00:00
Florian Müllner
762b4c2066 status/volume: Add device submenus
In case where there are multiple in- or output devices, pulseaudio
or pipewire can pick the "wrong" one by default.

Allow users to change devices without opening sound settings by
adding a submenu to the sliders when there is more than one device.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2380>
2022-07-19 14:56:46 +02:00
Florian Müllner
cf404f76c0 status/volume: Use (dis)connectObject
It makes sense to use this for all MixerControl handlers, not just
some of them.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2380>
2022-07-19 14:56:46 +02:00
Florian Müllner
af5bc30dff status/volume: Reindent before making code changes
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2380>
2022-07-19 14:56:46 +02:00
Florian Müllner
a768efad06 status/volume: Small cleanup
There is no point in splitting out a function that has one caller
and sets a single property.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2380>
2022-07-19 14:56:46 +02:00
Florian Müllner
d80a7224cd status/volume: Document public function
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2380>
2022-07-19 14:56:46 +02:00
Georges Basile Stavracas Neto
19f11ae328 accessDialog: Allow body label to wrap lines
Allow the body label of the access dialog to wrap, and avoid
ellipsizing it.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5286

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2377>
2022-07-14 16:51:52 +00:00
Florian Müllner
12a203a1db notificationDaemon: Stop auto-dismissing on focus changes
This behavior dates back all the way to the original gnome-shell
release, and it did make sense at the time:

 - we were first to make notifications persistent instead of
   closing them after a timeout; apps were therefore used to
   treat notifications as fire-and-forget instead of closing
   them when no longer relevant

 - neither web notifications not portals did exist yet, so the
   D-Bus API was only used directly, instead of as a backend
   for other APIs; as a result, focusing the app was more likely
   than not to put the source of the event that the user was
   notified about into view

Nowadays both persistent notifications and web notifications
are wide-spread, so the original reasons no longer apply.

This change helps web notifications in particular, as it reduces
the differences between XDG and portal-based implementations.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2332>
2022-07-14 11:39:55 +00:00
Matthew Jakeman
789e1b288a extensions: Allow updating with only extension-manager installed
GNOME Shell will only update extensions if the org.gnome.Extensions
app is present. This commit adds alternative support for
com.mattjakeman.ExtensionManager to the extension updating mechanism.

It enables updates to occur when extension-manager is the sole installed
tool on the system. When both applications are installed,
org.gnome.Extensions is preferred at all times.

Fixes #5564

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2358>
2022-07-11 17:43:11 +00:00
Florian Müllner
97b2079257 endSessionDialog: Small cleanup
Array.prototype.push() returns the new number of elements, so
no need to track the number separately.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2369>
2022-07-11 14:14:37 +00:00
Maksym Hazevych
2a3d409114 dateMenu: Remove custom aligning of time strings in the World Clocks
Since now Glib uses tabular space for aligning numbers (merged in
https://gitlab.gnome.org/GNOME/glib/-/merge_requests/2698), there is no
more need for custom aligning.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5438

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2340>
2022-07-07 12:40:30 +00:00
Evan Welsh
4257fc9522 environment: Remove inline import of extensionUtils
The logging function cannot be asynchronous, so move the override
into main.js where ExtensionUtils can be imported at the top level.
Importing ExtensionUtils in environment.js at the top level is not
possible because it would import Main prematurely.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2363>
2022-07-06 13:40:44 -04:00
Marco Trevisan (Treviño)
71765a1056 js/main: Use warning log level for notifyError
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/697>
2022-07-06 17:14:56 +00:00
Evan Welsh
a88e59c1a8 Adopt EventEmitter class instead of injecting Signal methods
Introduce a new class, EventEmitter, which implements signal
handling for pure JavaScript classes. EventEmitter still
utilizes GJS' addSignalMethods internally.

EventEmitter allows static typechecking to understand the
structure of event-emitting JS classes and makes creating
child classes simpler.

The name 'EventEmitter' mirrors a common name for this pattern
in Node and in JS libraries.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2043>
2022-07-04 18:30:49 -04:00
Alynx Zhou
d14bb7b536 screenshot: Always raise UI to top when opening
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2331>
2022-07-04 13:38:15 +00:00
Alynx Zhou
67a1d3b262 ibusCandidatePopup: Prevent it from covering screenshot UI
If we only raise screenshot UI to top, ibusCandidatePopup can still
cover screenshot UI because each time ibusCandidatePopup updates it's
visibility it will raise it to top and this also happens if we open
screenshot UI via keybinding. This commit fixes it by only raising it
above keyboardBox, because keyboardBox is above all entries in modal
dialogs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2331>
2022-07-04 13:38:15 +00:00
Alynx Zhou
07d9408420 ibusCandidatePopup: Init it as a top chrome
ibusCandidatePopup actually works as a top chrome because it always
raises itself above top_window_group when updating visibility, so just
initing it as a top chrome instead of initing it below top_window_group.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2331>
2022-07-04 13:38:15 +00:00
Florian Müllner
eff23a87c3 keyboard: Fix updating suggestions visibility
Commit 237ba24dbe added corresponding API to the keyboard actor,
but ended up calling it on the KeyboardManager.

Add the expected method to KeyboardManager that forwards the request
to the keyboard.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2359>
2022-07-03 16:47:12 +02:00
Florian Müllner
2defa96198 layout: Force size of overviewGroup
The overviewGroup's size is currently determined by the coverPane
actor. That actor is only shown during transitions, so we rely on
ClutterFixedLayout including hidden children in its size request.

That odd behavior is about to change, so we need to make sure the
overview still requests the correct size.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2351>
2022-07-02 22:18:19 +00:00
Florian Müllner
abe9ba4b0f layout: Use constraint to resize screenShieldGroup
We want the actor to always fill the entire uiGroup. It seems
better and simpler to express that with a contraint than resizing
it explicitly on every monitor change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2351>
2022-07-02 22:18:19 +00:00
Jonas Dreßler
4fd2719dc5 windowManager: Handle window dimming animation getting cancelled
When a window with a modal dialog gets minimized and at the same time
the dialog is closed, the WindowDimmer undim animation starts and gets
cancelled when the minimize animation is done, because that unmaps the
window actor.

In this case we want ensure the dimming effect still goes into a
proper state instead of being stuck mid-animation, so listen to
onStopped instead of onComplete for syncing state of the window dimmer.

While at it, clean things up a little and move the check for the
attach-modal-dialogs pref inside the _syncEnabled() function.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5581

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2349>
2022-07-02 00:39:49 +00:00
Jonas Dreßler
31acf30bfa Revert "windowManager: Undim parent when minimizing attached modal"
This reverts commit 78a7cc1836.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2349>
2022-07-02 00:39:49 +00:00
Carlos Garnacho
237ba24dbe ibusCandidatePopup: Set OSK candidates list visibility correctly
Right now, we don't pay much attention to visibility hints from IBus
about the candidates list for the OSK suggestions bar. Since some
IMs rely on this visibility being honored, do that.

To fix this, the visibility hints for the lookup table are now
propagated to the keyboard, so the Suggestions actor hides its
internal candidate buttons. Since the Suggestions actor gets its
minimum height from CSS, this does not result in OSK size jumps.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5601
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2347>
2022-06-29 13:44:36 +00:00
Carlos Garnacho
35ff4bfe3c keyboard: Set ornament on selected item in OSK languages popup menu
There is no hint about the currently selected language, but this exists
in the mockups. Add a dot ornament on the language that is currently
selected at the time of showing the OSK languages popup.

Since this popup is created from scratch every time it is shown, and
the popup is torn down with the OSK during replacement. This also
works for further times the languages popup is shown.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5598
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2346>
2022-06-27 16:50:51 +02:00
Florian Müllner
78a7cc1836 windowManager: Undim parent when minimizing attached modal
Minimizing modal dialogs is highly unconventional - and in fact
disabled in our own code - but apps can still do it programmatically.

The parent window shouldn't remain dimmed in that case, so make
sure to re-check dimming when minimizing an attached modal.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2337>
2022-06-21 22:06:01 +00:00
Sam Hewitt
68653d5e61 nm-dialog: Fix icon spacing issue
- fixes #4928

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2309>
2022-06-20 07:43:31 +00:00
Olivier Fourdan
ed910a7216 kbdA11yDialog: Use MetaKeyboardA11yFlags
The change in mutter to move keyboard accessibility into backends needs
to be applied in gnome-shell as well, otherwise the keyboard
accessibility dialog cannot work.

Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2306
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2334>
2022-06-16 09:38:20 +00:00
PhilProg
9eef6ec44c appMenu: Hide overview when pressing on 'Show Details'
If the 'Show Details' in the app menu is pressed, the overview
will hide now, making it consistent with other launch actions.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2329>
2022-06-09 17:51:46 +02:00
Sam Uong
ea60bf4bc7 screenshot: Fall back to home if Pictures directory is not available
GLib.get_user_special_dir() returns null if user directories are
disabled. Instead of failing silently, fall back to saving screenshots
in $HOME/Screenshots in that case

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2327>
2022-06-06 20:54:19 +02:00
PhilProg
795723fe85 messageList: Only close messages via delete key if they can be closed
If the delete key is pressed while a message/MPRIS indicator is focused
GNOME now asks whether the message/MPRIS indicator is closable.
If yes it will be closed but if not it won't be closed.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2323>
2022-06-04 15:23:45 +02:00
Sebastian Keller
1952549788 magnifier: Include SSD when calculating screen coordinates for events
When calculating the on screen coordinates of events from the window
relative coordinates, using the frame rect will include the decorations
added by the WM for SSD windows. This was causing the calculated
coordinates to be slightly off. Fix this by using the client rect for
SSD windows.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2319>
2022-05-31 18:55:18 +00:00
Jonas Ådahl
4592337ce5 runDialog: Use single quotes for Wayland restart warning
The API was changed to take a pointer to a MetaContext, in order to have
a better way to fetch the MetaDisplay instance it needs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2316>
2022-05-31 18:35:41 +00:00
Jonas Ådahl
a6995a3892 runDialog: Pass context to Meta.restart()
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2316>
2022-05-31 18:35:41 +00:00
Sebastian Keller
8b5d027724 magnifier: Request window-relative coordinates for focus/caret events
Absolute screen coordinates are impossible for Wayland clients to
provide, because the clients don't know where the window is positioned.
Some clients, such as the ones using GTK 3 were providing window
relative coordinates even when screen coordinates were requested,
while others, such as GTK 4 clients, were just returning an error for
caret events or also window-relative coordinates for focus events.

So for this to work on Wayland we have to request window-relative
coordinates and translate them to the current focus window.

To ensure the correct coordinates, we have to only consider events
coming from the current focus window. All other events are filtered out
now. As a side effect this also fixes the magnifier always jumping
to a terminal cursor whenever there was some output, even if the window
was not focused.

This also needs some special handling for events coming from the shell
itself, which should not be translated to the focus window either. As
another side effect this fixes another bug that was caused by these
events already including scaling and getting scaled again.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5509
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2301>
2022-05-28 10:47:01 +00:00
Carlos Garnacho
9a0935305d keyboard: Set up OSK edge drag gesture on capture phase
This makes the gesture able to get the events that would otherwise
be meant for the background actor or client window.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5335
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2304>
2022-05-27 09:29:26 +00:00
Carlos Garnacho
1fa5c63307 edgeDragAction: Change edge trigger threshold to AFTER
For all instances of this gesture, we want this gesture to
activate after some distance, not to eat button presses/releases
right away.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2304>
2022-05-27 09:29:26 +00:00
Carlos Garnacho
da3d4e82e3 keyboard: Set up emoji panel pan gesture in capture phase
We need this to catch events before they reach to the emoji
keys, and the gesture can begin/end properly.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2304>
2022-05-27 09:29:26 +00:00
Jonas Dreßler
a3bfe0ab56 keyboard: Reset height before requesting preferred height
If we don't set the height property to -1 before requesting the
preferred height, get_preferred_height() will just return us the fixed
height that has been set before. We don't want this behavior here, so
set the height to -1 before calling get_preferred_height().

This fixes a resizing issue where the keyboard is sized incorrectly
after switching the monitor into portrait mode and back.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2306>
2022-05-26 18:16:03 +02:00
Christian Glombek
b5ace213a1 status/network: Show WireGuard connections in VPN list
With this change, WireGuard connections, and an on/off toggle button
or a status description for each are shown in the VPN section of the
Gnome Shell network status UI.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1995>
2022-05-23 18:11:16 +02:00
Florian Müllner
3e7ce18dcf lockScreen: Extend modal grab to entire uiGroup
Main.pushModal() used to ensure a compositor grab, but didn't
take an input grab. That changed when porting to ClutterGrab,
so by limiting the grab to the shield/dialog, it is no longer
possible to access top bar menus when the screen is locked.

To fix that, take the grab on the whole uiGroup so that the top
bar is included.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2298>
2022-05-18 20:16:10 +02:00
Maksym Hazevych
3290ef4eb6 dateMenu: Align time strings in the World Clocks section
The problem is that " 9:59 AM" (notice the space at the beginning) and
"12:59 AM" strings, when centred, look misaligned —
strings padded with a space look off to the right by nearly
half a character. This happens because the font feature "tnum",
used to make numbers monospace, doesn't work on spaces.

The commit overcomes this by aligning time labels to the end.
However, this won't work for locales with AM/PM strings of different
lengths, so they are aligned to the start instead to minimise offset.

It's too complex to know whether the used locale has different
AM/PM string lengths. Instead, every time the time changes, it
determines whether all the time labels have the same amount of characters.

Fixes #5438

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2294>
2022-05-18 14:59:02 +00:00
Florian Müllner
9400759f25 status/volume: Hide sliders initially
We update the visibility on state or stream changes, but those
changes may never happen if pipewire-pulse/pulseaudio isn't
available (for example when running as root).

Hiding the sliders is preferable in that case to showing non-working
controls.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2295>
2022-05-11 02:40:33 +02:00
Florian Müllner
65831f783e Js: Use new :icon-name property
Now that we have the new convenience property, apply it to all
icon-only buttons.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2254>
2022-05-06 13:39:40 +00:00
Sebastian Keller
8e664a8cbe iconGrid: Add more possible icon sizes
When selecting the largest possible icon size for restricted vertical or
horizontal space the options for low resolution icons were rather coarse
grained. This could often result in seemingly too small icons being
chosen in the app grid on systems with low vertical resolution, because
the next larger size would exceed the limit by a few pixels.

This adds two more commonly used sizes for application icons to have
some more options with restricted space.

Helps: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2173
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2289>
2022-05-04 20:49:15 +00:00
Sebastian Keller
23b4eb459e Require both mouse and keyboard grabs for some grabs to be successful
Commit 7419674b changed some grabs from requiring both mouse and
keyboard grabs to be considered successful to only requiring either of
them.

Due to this it was possible for example to open the overview or the
screenshot UI with a client (such as Chrome when opening a menu) holding
the mouse grab. This then made it impossible to interact with the UI
using the mouse (or keyboard) and if attempted could result in an
unresponsive UI.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5414
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2287>
2022-05-04 17:28:08 +00:00
Sebastian Keller
3e8164cc36 screenshot: Close screenshot UI if we failed to acquire a grab
Otherwise the actors will remain invisible yet reactive covering up the
screen.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5414
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2287>
2022-05-04 17:28:08 +00:00
Florian Müllner
b365eb9936 screenshot: Hide screencast button when recorder is disabled
The screencast D-Bus service that is used for the recordings
is only installed if the necessary gstreamer and pipewire
dependencies are found at build time.

The screencast button cannot work when the service is missing,
so don't show it in the first place.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2285>
2022-04-29 20:22:32 +00:00
Jonas Dreßler
682629e603 status/network: Also show disabled icon when wwan is not connected
Commit ca4f6e0123 was supposed to show the
"cellular-disabled" icon when wwan is disabled. For wwan, just like for
bluetooth wwan networks, we probably want this to include the "not
connected" state, because disconnecting from cellular service de-facto
means disabling it.

So switch the check to show the "cellular-disabled" icon to also use the
icon whether there's no active connection, not only when the wwan device
is turned off.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5401

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2283>
2022-04-29 20:02:16 +00:00
Carlos Garnacho
378406e1f0 overview: Avoid entering in overview mode during display grab op
ClutterGrab and display grab operations are pretty much mutually
exclusive, but there's no mechanism to ensure a ClutterGrab does
not step on top of an existing grab operation.

This looks the only place that could trigger that (e.g. start
dragging window, then move pointer to top/left corner), so skip
over the situation here explicitly.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5397
Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5181
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2281>
2022-04-26 13:32:31 +02:00
Carlos Garnacho
9ee7af233c padOsd: Set menu manager on pad chooser popup
Likewise to action menus, this does now need a menu manager
that lets the popup stack a grab on top of the pad OSD's.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2279>
2022-04-24 18:44:51 +00:00
Carlos Garnacho
1c95283913 padOsd: Set menu manager on actions popup menu
Menus do need a menu manager to handle grabs for them, this
is more necessary now that the padOsd do also push a
Clutter.Grab.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2279>
2022-04-24 18:44:51 +00:00
Sam Hewitt
cb2ee0cf1f osd: Restyle OSD display popup
- remove class from label box
- new style for label itself

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2277>
2022-04-24 18:19:16 +02:00
Jonas Dreßler
851a1e30fa appDisplay: Use icon grid size as distance passed to SwipeTracker
The swipeTracker wants the distance between two pages passed to it in
confirmSwipe(). In case of the app grid, the correct distance is not the
size of the scrollView (which has the width of the whole screen), but
instead the allocation size of the iconGrid (which is the actual size
of a page in the grid).

So pass the allocation size of the iconGrid to the swipeTracker, this
makes sure the pages move perfectly in sync with the pointer when
dragging using the mouse or touchscreen.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2275>
2022-04-24 12:53:50 +00:00
Jonas Dreßler
66331e1244 Pass events to the OSK in dialogs which grab events
With commit c29e0cf6e6 the grabHelper
already started using a similar mechanism to funnel events to the osk
while a ClutterGrab is in effect. ModalDialog, the unlockDialog and
lookingGlass don't make use of the grabHelper though, they use
Main.pushModal() themselves, so those need to funnel the events to the
OSK themselves.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2263>
2022-04-23 09:42:18 +00:00
Jonas Dreßler
61713c7366 keyboard: Capture and bubble event in maybeHandleEvent
Right now the clutter_actor_event() call here errors out because the
second argument is missing, make it capture and bubble the event
properly to fix that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2263>
2022-04-23 09:42:18 +00:00
Florian Müllner
5a4c19a8cb lookingGlass: Handle Esc in object inspector
Currently the main looking glass dialog handles Esc for both itself
and the object inspector. However as the latter now takes its own
Clutter.Grab, key events never reach the main dialog while the
inspector is open.

Fix this by handling the Esc key in the object inspector itself.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2271>
2022-04-21 08:21:45 +00:00
Florian Müllner
56d0b6d831 extensionSystem: Check metadata types
We currently check that an extension provides required metadata
properties, but then assume that all properties have the expected
type.

It turns out that this is putting too much trust in extensions,
so add an appropriate check.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2272>
2022-04-21 08:16:30 +00:00
Florian Müllner
ef74f922d6 background: Do not queue idle when cancelled
A cancelled cancellable means that the background was destroyed,
so we shouldn't queue an idle or emit the 'loaded' signal anymore.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2268>
2022-04-13 21:12:27 +00:00
Florian Müllner
dd28832dcd background: Pass cancellable when querying file info
Otherwise it is possible that the operation completes successfully
after the background has been destroyed, which will throw a warning
(caused by accessing the this._fileWatches object after it has been
nulled).

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2268>
2022-04-13 21:12:27 +00:00
Florian Müllner
e69da36095 layout: Make sure startup animation completes
We currently complete the animation using an onComplete handler,
which only runs if the corresponding transition was stopped when
finished.

While it is unexpected that the transition is interrupted, it can
apparently happen under some circumstances (like VMs with qlx).
The consequences of that are pretty bad, mainly due to the cover
pane that prevents input during the animation not getting removed.

Address this by always completing the animation when the transition
is stopped, regardless of whether it completed or not.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2269>
2022-04-13 21:08:53 +02:00
Simon McVittie
7f4f328a7f Specify API versions for all public GIR APIs, except GLib
If one of these libraries breaks its GIR API in future, then upgrading
packages unrelated to gnome-shell might pull in the newer version,
causing gnome-shell to crash when it gets a newer GIR API that is
incompatible with its expectations. For example, this seems to be
happening in Debian testing at the moment, when GNOME Shell 41.4
imports GWeather and can get version 4.0 instead of the version 3.0 that
it expected.

Adding explicit API versions at the time the newer version is released
is too late, because that will still let the newer version of the GIR API
break pre-existing GNOME Shell packages. Prevent similar crashes in
future by making the desired versions explicit.

This is done for all third-party libraries except GLib, similar to the
common practice in Python code; if GLib breaks API, then that will be
a disruptive change to the whole GLib/GObject ecosystem, regardless.

Gvc, Meta, Shell, Shew, St are not included because they're private
(only exist in a non-default search path entry).

Clutter and Cogl *are* included, because we need to import the fork of
them that comes with Meta, as opposed to their deprecated standalone
versions.

Signed-off-by: Simon McVittie <smcv@debian.org>
Bug-Debian: https://bugs.debian.org/1008926
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2261>
2022-04-04 17:55:25 +01:00
Florian Müllner
ff29159df2 workspaceThumbnail: Use new helper function when accepting drops
Moving a window from a secondary monitor to a non-active workspace
currently fails for the aforementioned reasons.

Use the newly added helper function to address this.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2259>
2022-03-31 17:56:49 +02:00
Florian Müllner
88244222fd workspace: Use new helper function when accepting drops
Moving a window from a secondary monitor to a non-active workspace
currently fails for the aforementioned reasons.

Use the newly added helper function to address this.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2259>
2022-03-31 17:56:49 +02:00
Florian Müllner
1cb01ec5b1 main: Add help function for moving window to monitor/workspace
MetaWindow.move_to_monitor() can no longer be assumed to have updated
the monitor on return, as under wayland, if the move involves a size
change, the monitor state will only be updated after the new size has
been synced with the client.

If that happens, trying to change the workspace of the moved window
fails, as it is still considered on-all-workspaces until it leaves
the secondary monitor.

It's possible to work around this by waiting for the window to actually
enter the requested monitor. That's finicky enough to warrant a helper
funtion, so add one.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2259>
2022-03-31 17:56:41 +02:00
Yosef Or Boczko
44d819149f calendar: Fix alignment of world clocks header in RTL
Signed-off-by: Yosef Or Boczko <yoseforb@gmail.com>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2240>
2022-03-28 18:39:13 +02:00
Florian Müllner
421591359f messageList: Center-align close button vertically
Otherwise it may end up stretched when using larger text.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2257>
2022-03-28 14:50:18 +00:00
Marco Trevisan (Treviño)
8ba7f0f4a9 shellDBus: Actually make ScreenTransitionAsync async
We called such function async but we didn't awaited for the
checkInvocation result in the proper way.

So on failure the shell would report an unhandled promise rejection.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2258>
2022-03-28 15:36:18 +02:00
Raghuveer Kasaraneni
0e45273330 dateMenu: Limit timezone offset hours to integers
If the timezone offset calculation in the World Clocks contains non-zero
minutes, then a decimal Hours value is being displayed. Limit the Hours value
to integers by using Math.floor().

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2255>
2022-03-21 19:29:11 +00:00
13r0ck
85b51b9974 layout: Check again for primary monitor after startup animation idle
On some hardware combinations the display can be known, then unknown again. Meaining that
when the update monitors function is called it will have a value, then be called again
setting this.primaryMonitor to null. If the timing is just right gnome shell will
loadBackground, then by the time the animation is ready the monitor will be gone,
thus methods will be called on a null value. This adds more checks for a valid
primary monitor, and wont play the animation until the system is idle AND has a valid
priamry monitor.

Fixes: #5003
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2144>
2022-03-20 22:48:51 +00:00
Anupam Kumar
db68749335 appDisplay: Home and End keys for app grid navigation
Include Home and End keys for consistent behaviour with respect to
overview navigation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2241>
2022-03-20 22:19:25 +00:00