Commit Graph

9236 Commits

Author SHA1 Message Date
Sebastian Keller
1236bf8f09 gdmUtil: Fix SignalTracker leak in ShellUserVerifier
ShellUserVerifier was connecting to UserVerifierChoiceList signals using
SignalTracker, but never disconnected those, leading to the
corresponding SignalTracker being leaked.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6395
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2637>
2023-02-12 20:02:34 +00:00
Sebastian Keller
572d011894 authPrompt: Manually destroy inactive/unused entry
AuthPrompt creates two entries, one for text and one for passwords, but
only ever one is used as child widget. This would lead to the other one
not getting destroyed when the the AuthPrompt is destroyed.

This now manually destroys the inactive one when the AuthPrompt is
destroyed to avoid that leak.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6395
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2637>
2023-02-12 20:02:34 +00:00
Sebastian Keller
f5d793647b overview: Skip SHOWN to SHOWN when changing from app grid to overview
Switching between the app grid and the window picker in the overview via
gestures results in _gestureEnd() getting called with endProgress !== 0
in both cases, which leads to it calling _showDone(). This then
unconditionally changes the state to SHOWN, which in this situation is
already the current state. Since the previous commit this results in a
warning, so check if we are already in the SHOWN state.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2514>
2023-02-12 16:31:04 +00:00
Sebastian Keller
a91b6439ba overview: Validate transitions of the shown state
There have been several bugs in the past that caused invalid transitions
of the `shown` state, such as going from `showing` to `showing`. These
cause consecutive emissions of the `showing` signal, which can confuse
other classes such as the search controller which connects to the stage
`key-press-event` on showing and disconnects again on `hiding`. Having
two consecutive `showing` signals will cause it to connect twice, and
only disconnect once when hiding the overview again. This will lead to
key presses getting repeated in the search until the session is
restarted. Because there is no obvious connection to how and when this
issue got triggered, this now adds some validation code that only allows
valid transitions and throws an error otherwise so we get a backtrace of
the code actually causing the problem.

This does not fix the issue(s) causing the invalid state transitions, it
only adds a way of tracking them down.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4651
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2514>
2023-02-12 16:31:04 +00:00
Georges Basile Stavracas Neto
7604dd1103 quickSettings: Add background apps menu
Sandboxed apps that run without a window are detected by the new
background monitoring service, introduced by xdg-desktop-portal.

We have an opportunity to improve the predictability of the desktop
and ensure that application state in transparently reported to users
by showing these apps, and allowing them to closed.

Add a new background apps menu to the quick settings, that is always
added at the bottom of the popover, and has a slightly custom, flat
style applied to it.

Show background-running apps in this menu, and allow closing them
by first attempting to execute the 'quit' action through D-Bus, and
if that fails, sending SIGKILL to the process.

See https://gitlab.gnome.org/Teams/Design/os-mockups/-/issues/191

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2624>
2023-02-12 16:16:36 +00:00
Georges Basile Stavracas Neto
055694de9d quickSettings: Remove null checks
The '_overlay' field is always set at construction to a valid actor,
so there's no need to protect against null here.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2624>
2023-02-12 16:16:36 +00:00
Florian Müllner
600b921246 status/bluetooth: Add device menu
The new quick toggle gives us a good place for exposing connected
and connectable devices. This was part of the original mockups,
but didn't make the cut for GNOME 43 due to time constraints.

https://gitlab.gnome.org/Teams/Design/os-mockups/-/issues/178

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2501>
2023-02-11 20:44:07 +00:00
Florian Müllner
b7c3a7f6ed status/bluetooth: Show connected devices in subtitle
Now that quick toggles support subtitles, use it to indicate connected
devices.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2501>
2023-02-11 20:44:07 +00:00
Florian Müllner
64962508e9 quickSettings: Fix MenuToggle clicks
With the split menu toggle, the actual clicks now happen on the
internal quick toggle, not the menu toggle as a whole where callers
expect it.

Forward the signal to fix that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2636>
2023-02-11 13:38:42 +01:00
Florian Müllner
10b5808f25 status/volume: Mute/unmute when clicking icon
This behavior was lost with the move to quick settings. Now that
we allow slider icons to be interactive, we can easily restore
the feature (and even in a less-Easter-eggy way)

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2630>
2023-02-10 16:27:28 +00:00
Florian Müllner
7ee3514ddb quickSettings: Allow interactive slider icons
Before the move to quick settings, it was possible to mute the volume
by clicking to the left of the slider. In order to re-enable that
feature, allow slider icons to be interactive.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2630>
2023-02-10 16:27:28 +00:00
Florian Müllner
cf89a6d01e quickSettings: Split menu toggle
Menu toggles are currently regular toggles with an additional
arrow button. This allows for a simpler implementation, but
has downsides with regards to keyboard navigation and hover
feedback.

To make it more obvious that the two parts of the menu toggle
perform different actions, change the overall structure of the
toggle to *contain* a regular toggle and the menu button.

That way each element uses its own hover effect, and shows up
in the keynav focus chain.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2632>
2023-02-09 21:53:07 +00:00
Florian Müllner
2aa30f5a96 status/volume: Use same icon for slider/top bar
Currently the icon in the top bar indicates the volume level, while
the icon next to the slider indicates the type of output (speaker
or headphone). The speaker- and volume icons are quite similar,
but different enough to feel inconsistent, so use the volume one
in both cases.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2505>
2023-02-09 19:34:55 +00:00
Florian Müllner
4e48f94e47 layout: Add work-around for testing greeter UI in nested
Testing the greeter UI in nested has been broken for a long time
now, because the backend isn't ready yet when we try to push a
modal (via the screen shield).

As running nested is only relevant for development and testing,
working around the issue rather than fixing it properly seems
fine, so do just that and slightly delay startup when testing
the greeter UI.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2573>
2023-02-09 19:59:12 +01:00
Florian Müllner
b286a8f55e status/network: Tweak connection items
Always use the plain name as label, and indicate the "(dis)connect"
action in a subtitle.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2631>
2023-02-09 17:42:09 +00:00
two
6cd39f829f status/system: Use a better icon in screenshot button
The screenshot button could be mistaken for one that opens a
program for taking photos and videos. Change it to one that
is less ambiguous.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2553>
2023-02-09 17:26:25 +01:00
sunflowerskater
f1c75c28fb a11y menu: Add "All Accessibility Settings" entry
Unlike other top bar menus, the accessibility menu doesn't provide
quick access to the corresponding settings. It's still useful, given
that not all settings are exposed in the menu, so add a settings entry.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2615>
2023-02-07 14:59:58 +00:00
sunflowerskater
2d00320a4b general: Rename "application" to "app"
Several places in Shell use the word "application". However,"app"
is a more common term nowadays, so update strings accordingly.

https://gitlab.gnome.org/Teams/Design/initiatives/-/issues/123
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6202

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2614>
2023-02-07 14:46:28 +00:00
Jonas Ådahl
9dd3d887d2 Add 'headless start' perf test
This tests that GNOME Shell will launch sucessfully despite there being
no monitors on startup, and successfully hide and then show the
overview, once the monitor is connected.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Jonas Ådahl
d116256e83 main: Call init() in perf modules if it exists
This is meant to let perf tests initialize themselves earlier than they
would otherwise run.

This allows them to setup the necessary dependencies, e.g. create
test monitors or similar actions.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Jonas Ådahl
73e0f02b1d overviewControls: Don't hide destroyed child widget on unmap
When we unmap, the child widgets have already been destroyed, so we
shouldn't try to. To detect this, delete the references we keep to them
on destroy, and null-check the hide call.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Jonas Ådahl
ed2a11ba57 overviewControls: Update work area also on monitors-changed
The cached work area, which is the work area of the primary monitor,
effectively depends on two properties - the (global) work area and the
primary monitor - and we are only tracking changes to one of them. Also
track monitor changes to also cover the second case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Jonas Ådahl
def50c38da layout: Explicitly destroy hot corners on shutdown
This won't be handled by our existing actor destruction path as the
ripple actors are added directly to the stage and not the uiGroup.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Jonas Ådahl
7f7ec2a866 layout: Disconnect 'monitors-changed' handler on shutdown
Doing it ourselves in the shutdown handler in layout.js means we won't
risk reacting to monitor changes that happen after gnome-shell prepares
to shutdown and the signal handler would disconnect itself in case we
used `connectObject(..)`.

This will currently never happen, but in the future perf tests will be
able to create virtual monitors for testing purposes, and they might get
destroyed during the shutdown procedures, causing us to react to them
when we shouldn't.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Georges Basile Stavracas Neto
9d75d777c7 status/network: Only show custom wired names
Thanks to NetworkManager's connection name disambiguation, it's
pretty common for single wired connections to be named "Wired". This
is fine and what we want almost all times, but in the specific case
of quick settings, we already have a "Wired" string set as title of
the quick settings toggle, so having that as subtitle is reduntant.

Hide the subtitle label (by returning null) when the subtitle of
a wired network matches the title.

Fixes ab10b95d2d
Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6369

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2627>
2023-02-06 08:22:48 -03:00
Florian Müllner
f0b4dd648c workspacesView: Remove obsolete cleanup
Since commit a9f11b1f5a, we no longer set up a later on
parent-set, so there's nothing to clean up.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2626>
2023-02-04 23:54:42 +00:00
Georges Basile Stavracas Neto
2d4521be3b status/network: Title mobile connections as "Mobile"
As per the latest mockups, modem network connections are labeled
"Mobile". Override _getDefaultName in NMModemToggle and always
return "Mobile" as title.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 20:34:11 -03:00
Georges Basile Stavracas Neto
e0408faf71 status/network: Title bluetooth connections as "Tether"
As per the latest mockups, Bluetooth network connections are simply
labeled "Tether". Override _getDefaultName in NMBluetoothToggle
and always return "Tether" as title.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 20:31:58 -03:00
Georges Basile Stavracas Neto
01a89bc29a status/network: Improve network toggle subtitles
If there is a single connection for a given NMToggle subclass,
use the connection name; otherwise, transform that into '%d
connected'. This is better than the current "Device (counter)"
template, e.g. "VPN (2)", which would give us a quick toggle
with:

   VPN
   VPN (2)

Change that to e.g.:

  VPN
  2 connected

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 18:10:22 -03:00
Georges Basile Stavracas Neto
707ce2955b status/network: Set default name for toggle title
Following the previous commits where we left the quick toggle title
open for the new title scheme, set the titles for all network pills
to what currently is the "default" name.

That means, we pull the device name from Network Manager for devices,
through the disambiguate function, and hardcode 'VPN' for VPN
connections.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 18:09:44 -03:00
Georges Basile Stavracas Neto
ab10b95d2d status/network: Bind subtitle
Instead of map the currently active items - for whatever they are -
into the quick toggle title, bind it to the subtitle.

This leaves room for setting static titles for device-backed
networks, such as Wi-Fi, Wired, Bluetooth, etc.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 17:46:54 -03:00
Georges Basile Stavracas Neto
ec397cf604 status/powerProfiles: Set profile name as subtitle
Just like with network names, set the name of the power profile as
the subtitle of the quick settings pill. This allows more of the
power profile name to be visible, and reduces chances of ellipsing
the name.

Rename the 'title' variable to 'name', to be more semantic and
better represent what it is now.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5770
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 14:50:36 -03:00
Georges Basile Stavracas Neto
1619b8f95d quickSettings: Add 'subtitle' property
Add a subtitle label to QuickToggle, with a less prominent font.
Make the subtitle invisible when no text is present.

This new property will be used by next commits to implement quick
settings with a static title, and a changing subtitle.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 14:50:36 -03:00
Georges Basile Stavracas Neto
2d2172da32 quickSettings: Rename 'label' property to 'title'
We'll soon add a subtitle, so rename the label property to something
that is a bit more semantic.Add a warning when trying to set the old
'label' property.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2619>
2023-02-04 14:50:36 -03:00
Balló György
266a19f05c shellMountOperation: Don't read unavailable desktop file
If gnome-disk-utility is not installed on the system, its desktop file is
unavailable, so we can't get the application's name. In this case hide
the launcher button.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2621>
2023-02-02 19:33:10 +01:00
Takao Fujiwara
f4dc650585 inputMethod: Make set_surrounding() send also empty string
Empty surrounding text values needs to be sent to IBus engines
so that the engines know the focus is changed and the values are
updated.
Also InputMethod can forward the "require-surrounding-text" signal
from IBus engine to mutter.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5895
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2496>
2023-02-01 14:42:32 +00:00
Jonas Dreßler
7d7b99e2d3 appDisplay: Simplify loading Folder apps a bit
Instead of plugging into _redisplay(), we can use _loadApps() for this.
It's actually exactly what _loadApps() is meant for...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
2566f938e6 appDisplay: Move findBestPageToAppend() behavior to IconGrid
This behavior makes more sense to have in the iconGrid itself: When a
page is filled up with items, the new item should never go to the start
of the next page, but always to next empty slot.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
245137ff35 appDisplay: Fix multi-page dragging behavior in folders
Folders reflow across pages because they don't set
allow_incomplete_pages to true. This means we want the nudging of items
to happen slightly differently when dragging an item across pages:

- When dragging from lower page index to a higher one, always reflow
towards the start of the grid (because there's now an empty slot on the
old page and items on the new page will force-reflow towards that)
- When dragging from a higher page index to a lower one, we can reflow to
the end as we usually do

To archive this, factor out the selection of "reflow direction" into a
separate variable that always defaults to "end" (because empty space is
always at the end of the grid). Set it to "start" when the item created an
empty slot on the current page or (and this is new:) on a previous page in
the folder case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
4cf372b890 iconGrid: Also consider left/right empty space as drop targets
Make it a bit easier to drag items to the start of pages by also taking
the left and right empty space into account, instead of considering it
an invalid target.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
40bd48068f appDisplay: Consider drag events during page-switching as invalid
While there's an ongoing animation to switch pages, we should ignore all
drag events as those will end up moving the drag item to an unwanted
position.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
a69d99527d appDisplay: Consider drop targets on !currentPage as invalid
The iconGrid's getDropTarget() API supports dropping items to adjacent
pages just fine, but in the AppDisplay, we clip the grid and don't show
those adjacent pages. That doesn't stop getDropTarget() from picking
drop targets which are on adjacent pages though, so we need to filter
those out in the layer above.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
2e6fd8b730 iconGrid: Return page and position for drop targets instead of items
Returning a page and a position for the drop target seems more
straightforward than returning an actual grid item in getDropTarget().

With the next commit, this will allow us to throw away drop targets that
are not on the current page.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Jonas Dreßler
b781b3e9fd appDisplay: Get linear index using item instead of page and position
_getLinearPosition() is a function that converts a page and position
index to the "accumulated" index that includes all pages before the
page. The function is used by _addItem() and _moveItem() for getting the
new index of an item inside the _orderedItems array.

Now when passing -1 as position to _addItem() or _moveItem(), this means
the item should be appended to the page. Right now _getLinearPosition()
returns the last item index on the page when passed -1, inserting the
item into _orderedItems at this index will actually not append it, but
insert it between the second last and last item.

To fix it, let's make the whole thing more robust by explicitly passing
an item to _getLinearPosition(). This means we simply no longer have to
assume what "-1" means. Moving the call to _getLinearPosition() to
happen after addItem() and moveItem() ensures that the new item position
is used and not the old one.

This fixes issues where the _orderedItems array gets out of order when
moving or adding items.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2348>
2023-02-01 12:56:28 +00:00
Carlos Garnacho
a30661d33e windowManager: Drop grab-op-begin signal connection
This is	done just to "reset" the gesture when a grab operation
begins.	With grab ops being based on ClutterGrab now, the gesture
will be	implicitly reset when these happen. This is unnecessary	now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
a2a5d7682f swipeTracker: Drop grab-op-begin signal connection
This is	done just to "reset" the gesture when a grab operation
begins.	With grab ops being based on ClutterGrab now, the gesture
will be	implicitly reset when these happen. This is unnecessary	now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
fe8201e1d2 edgeDragAction: Drop grab-op-begin signal connection
This is done just to "reset" the gesture when a grab operation
begins. With grab ops being based on ClutterGrab now, the gesture
will be implicitly reset when these happen. This is unnecessary now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
4acc9f1a0f backgroundMenu: Drop grab-op-begin signal connection
This is done just to "reset" the click action when a grab operation
begins. With grab ops being based on ClutterGrab now, the action
will be implicitly reset when these happen. This is unnecessary now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
05de06f5c2 panel,windowMenu: Update to meta_window_begin_grab_op() API change
Add device/sequence parameters.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
0e969cab91 windowMenu: Update for removal of frame_action argument
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
f32ffbf19b panel: Update for removal of frame_action argument
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
64d07ff7cd panel: Use MetaWindow API to begin grab operation on window
Move away from MetaDisplay API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
238a17c6b5 overview: Port to Meta.Display.is_grabbed()
The get_grab_op() method is disappearing, replaced by this
new method.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Carlos Garnacho
ac42eb62f8 Revert "windowMenu: Do actions requiring grab once ungrabbed"
This reverts commit 2b3ab3ecec.

Since the window menu no longer uses a MetaDisplay grab, but directly
a ClutterGrab, this is ineffective. But also, grabs are stackable, so
it's fine to push the window operation grab first and then dismiss the
window menu grab, even when MetaDisplay grabs get ported to using
ClutterGrab underneath. We now can just grab right away, so do that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2526>
2023-01-30 12:19:22 +00:00
Florian Müllner
3de828cc60 Revert "status/volume: Clear device menus when unsetting stream"
Device additions/removals are tracked by GvcMixerControl, which
doesn't change when unsetting the stream. So clearing the menu
manually was a workaround, not a fix.

It's also worth noting that I failed to reproduce the original
issue again, so it's possible that we were working around a
pipewire bug that has since been fixed.

This reverts commit 1b62b7ea0a.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2616>
2023-01-27 12:53:33 +00:00
Heiko Hösch
35e2ac7a2a status/network: Work around xgettext ignoring translated strings
xgettext quits parsing, when the "<"-operator follows the "++"-operator
directly.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5820
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2613>
2023-01-24 18:20:35 +00:00
Alessandro Bono
f323d85fc3 screenShield: Add API to add/remove credential managers
Extensions that provide a credential manager can (un)register themself
so that the screen shield gets activated right after a user is
authenticated.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2399>
2023-01-23 20:37:46 +00:00
Alessandro Bono
b1ac1b47cd gdmUtil: Add API to add/remove credential managers
Extensions don't need to poke at the internal this._credentialManagers
variable in order to add their own credential manager.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2399>
2023-01-23 20:37:46 +00:00
Alessandro Bono
8e081a14d5 gdmUtil: Collect services that determine the username in one place
Doing so, extensions don't need to reimplement entirely the
AuthPrompt.reset() function just for adding their own credential
service in the foreground service check.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2399>
2023-01-23 20:37:46 +00:00
Alessandro Bono
9671eb3ad8 credentialManager: Remove unused parameter
Since 26235bbe54 is unused.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2399>
2023-01-23 20:37:46 +00:00
Alessandro Bono
325755e1c3 dash: Connect before destroying
Since commit 7bd98f3f5f animateOutAndDestroy() destroys
the placeholder right away when animations are disabled. Connect to the destroy signal
before calling the function.

This fixes the following error:
Gjs-CRITICAL **: 16:51:35.195: Object .Gjs_ui_dash_DragPlaceholderItem (0x55b9a946da20),
has been already disposed — impossible to connect to any signal on it. This might be
caused by the object having been destroyed from C code using something such as destroy(),
dispose(), or remove() vfuncs.
== Stack trace for context 0x55b9a70d08f0 ==
 #0   7ffe161bd070 b   resource:///org/gnome/shell/ui/dash.js:835 (df3d61d32e0 @ 98)
 #1   7ffe161bd170 b   resource:///org/gnome/shell/ui/dash.js:901 (df3d61d33d0 @ 779)
 #2   7ffe161bd290 b   resource:///org/gnome/shell/ui/dnd.js:562 (3d4da0cfd420 @ 909)
 #3   7ffe161bd360 b   self-hosted:1115 (3d4da0c7ef10 @ 407)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2604>
2023-01-17 13:58:06 +00:00
Alessandro Bono
771b3bada2 accessDialog: Don't add an empty body
According to the org.freedesktop.impl.portal.Access documentation
the body may be an empty string[1]. Take into account this case.

[1] d7cfc16a6d/data/org.freedesktop.impl.portal.Access.xml (L38)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2607>
2023-01-17 13:51:54 +00:00
Alessandro Bono
ec6ab60e62 appDisplay: Don't assume this._placeholder always exists
Dropping a icon from the dash to the application grid will set this._placeholder
to null. However the AppIcon is still used to represent the application in the
application grid. If we click on it we emit a pressed event. Stop assuming
that this._placeholder is still valid in the callback, use the icon parameter
instead.

This fixes the following error:
```
Gjs-CRITICAL **: 18:22:39.003: JS ERROR: TypeError: this._placeholder is null
_ensurePlaceholder/<@resource:///org/gnome/shell/ui/appDisplay.js:1477:17
vfunc_button_press_event@resource:///org/gnome/shell/ui/appDisplay.js:3121:27
```

Fixes: 6fc93b78bc
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6317
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2606>
2023-01-16 20:24:26 +00:00
sunflowerskater
1c1b3e5e6e quickSettings: Add separator before the "Power Settings" entry
There is no separator before the "Power Settings" entry in the "Power Profiles" menu,
unlike all other quick settings menus.

Add that separator for consistency.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2559#note_1641102

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2602>
2023-01-13 21:29:38 -03:00
sunflowerskater
37c0906755 quickSettings: Add a "Power Settings" entry to the Power Profiles submenu
This change adds the shortcut so it can be accessible by devices without a battery and to keep consistency with other submenus like the Wi-Fi submenu and the upcoming Bluetooth submenu (Teams/Design/os-mockups#178).

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

Part of <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2559>

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2559>
2023-01-13 18:16:29 +00:00
sunflowerskater
ed364e4e41 keyboard: Add "Keyboard Settings" menu entry
The keyboard popover doesn't have a shortcut to open the Keyboard panel from the Settings app.

This commit adds this menu entry to improve usability.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2600>
2023-01-13 16:05:25 +00:00
Jonas Dreßler
617997412e screencastService: Handle case where no videos directory exists
The videos directory doesn't necessarily have to exist, users are free to
delete it. Right now we don't handle this case and screencasting fails.

Let's handle it and fall back to the users home directory instead when
xdg-videos doesn't exist.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2594>
2023-01-11 16:51:30 +00:00
Sam Hewitt
a4f7cfdff4 lockscreen: Style cleanup for lock and login
- increase the font size of clock elements
- increase the size of user avatars
- combines lock and login scss into one file
- clean up the css for avatars
- adjust the blur parameters of the screen shield

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2564>
2023-01-06 11:29:31 +00:00
Bilal Elmoussaoui
1da29b04ef padOsd: Replace Gtk accelerator API usage with Mutter
In order to drop the direct dependency of GTK from Mutter in a Wayland
only build.
The consumer and the producer of the events must be Mutter

Depends on https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2407

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2575>
2023-01-02 13:26:49 +01:00
Jonas Dreßler
eacc55334f appDisplay: Disable overshoot gesture in multi-monitor setups
The "bump against monitor edge" thing can't work when there's a monitor
adjacent to the current one, so just disable the gesture in case there's
more than a single monitor.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Dreßler
560565d828 appDisplay: Switch page when hovering the next-page indicator during DND
In addition to the "overshoot/bumping into monitor edge" behavior we already
have, we also want to switch pages when simply hovering above the prev/next
page indicators.

This page switch shouldn't happen immediately though, it needs to be kicked
off using a timeout instead. The reason for that is that the next/prev page
indicators are large areas, and simply dragging there isn't enough of a
gesture to really interpret as "the user wants to switch pages".

After this page switch has been toggled once, it can be repeated using the
same "repeat" timeout we introduced with the last commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Dreßler
549adf3218 appDisplay: Refactor page switching on overshoot
Right now we have a behavior in the appGrid where "bumping" the cursor
against the monitor edge during DND switches the page immediately, and
holding it there (at the monitor edge) switches pages again after a timeout.

With the next commit we'll introduce another way of switching pages during
DND, that is hovering over the next/prev page indicator to switch pages. To
allow those two methods to play well together, refactor the "overshoot" page
switching to make the timeout into a more generic "repeat" timeout. This
means we can now divide page switching can be roughly divided into two
different steps:

- Switch page immediately when bumping cursor against screen edge, also
works when repeatedly "bumping"

- Switch page automatically again after a second when keeping the cursor at
the screen edge without moving

We'll reuse the "repeat" timeout that's introduced here in the next commit,
where we'll introduce page switching by hovering the next/prev indicators.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Dreßler
150866d0bf appDisplay: Apply overshoot threshold to the left as well
We also want to apply this threshold when overshooting to the left, not
only to the right.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Dreßler
550a51d4a8 Revert "appDisplay: Reimplement drag motion using page indicators"
This reverts commit 09b975fabf.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Dreßler
52ed7917f3 Revert "appDisplay: Rename _lastOvershootTimeoutId"
This reverts commit 692de0eb95.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Dreßler
272c770815 Revert "appDisplay: Bring back drag overshoot region"
With MR https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2335,
the page navigation in the app grid was redone and prominent, always visible
navigation arrows were added. This larger change in the navigation of the
app grid also involved changes to the drag and drop behavior.

Before those changes (in GNOME 42), switching pages during DND in the app
grid worked like this: By "bumping" the cursor against the monitor/appGrid
edge, an immediate page switch would be triggered. Leaving the cursor in
that edge area would then trigger repeated page switches every second. By
repeating the "bump" gesture (moving cursor back into the grid, then
"bumping" against the edge again), it was possible to switch pages even
faster than every second.

When adding the always visible navigation arrows, we briefly tried out a
different way of page-switching during DND with commit 09b975fa: The "bump
against monitor edge" gesture (or "overshoot" behavior as it's called in the
code) was replaced with a hover timeout on the navigation arrows. The idea
behind that was to allow hovering the navigation arrow during DND to
eventually trigger a page switch, which also makes sense.

The replacement of the "overshoot" behavior made some people unhappy though,
so it was decided to bring back the old "overshoot" behavior with commit
4dcae8dd. Due to time pressure before the release that didn't go very well
and we ended up with a mixup of both approaches that doesn't feel too
polished.

So let's try to fix that by first going back to the working "overshoot"
implementation as it was in 42, then slightly refactoring that
implementation, to finally incorporate the new "page indicator hover"
behavior that https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2335
originally intended to use.

This reverts commit 4dcae8ddd2.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2581>
2022-12-19 11:37:58 +00:00
Jonas Ådahl
c1d66af4b9 js: Get monitor manager from backend
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2557>
2022-12-16 22:12:59 +01:00
Jonas Ådahl
8d68bdaaa1 js: Queue 'later' via MetaLaters
This replaces the meta_later_add() API which used now removed global
singletons under the hood.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2557>
2022-12-16 22:12:59 +01:00
sunflowerskater
d4f154ad26 appmenu: Change "Show Details" entry label to "App Details"
"Show Details" doesn't give a clear indication of what it does.

This commit changes this entry label to "App Details" following the recommendation from:
https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/2186#note_1611964

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2585>
2022-12-15 19:53:19 -03:00
Florian Müllner
1a9e072ca0 fileUtils: Do not follow symlinks
Extensions should not include symlinks, in particular ones that
point outside the extension directory. However if they do, then
we should only move/remove the link rather than the files it
points to.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2571>
2022-12-15 22:34:26 +00:00
Felipe Borges
0be20aba88 search: Stop special-casing GNOME Settings on search
See https://gitlab.gnome.org/GNOME/gnome-control-center/-/issues/1282#note_1617502

From the chat:
<aday> i think it's fine to allow people to disable settings search.
<aday> the issue i see here is that the shell doesn't follow the search
results order. settings is always at the top of the results list
<aday> if settings search is to appear in the list, then that should
work as you'd expect

We are also removing the special-casing in the GNOME Settings side,
see https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/1555

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2584>
2022-12-15 19:02:02 +00:00
Sebastian Keller
3b216be637 quickSettings: Ensure toggle buttons are aligned with the pixel grid
If the width of the menu was not a multiple of the number of columns,
the toggle buttons after the first column would not be aligned with the
pixel grid. This was causing text rendering issues and slightly blurry
icons.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6210
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2577>
2022-12-12 17:14:08 +00:00
Sebastian Keller
54f112fa59 quickSettings: Use column spacing not row spacing to calculate width
This did not have any not have any noticeable effect, because both are
the same size in the default theme.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2577>
2022-12-12 17:14:08 +00:00
Carlos Garnacho
2e8e1fe8fc status/keyboard: Ignore purpose hint changes while keymap switcher is shown
If we are getting purpose hint changes while the language switcher is popped
up, this likely means the purpose hint was actually triggered by the key
focus change induced by the language switcher popping up.

In this case, we on one hand would like to preserve the state that applied
before thise focus change, and on the other we very much want to avoid the
keymap change that would forget about the keys being pressed.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6066
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2534>
2022-12-05 14:50:33 +00:00
Evan Welsh
d918290ac8 extensions: Refactor extension system for asynchronous loading
This commit refactors extensionSystem to load extensions
asynchronously. This will enable loading extensions using ECMAScript
modules in a future commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2364>
2022-12-01 12:59:32 +00:00
Evan Welsh
56beb6ff2b extensionUtils: Add DISABLING and ENABLING extension states
Extensions can export asynchronous enable() and disable()
functions. To guard against re-entrancy when enabling or
disabling an extension, this commit adds two new states:
ENABLING and DISABLING which are set immediately prior
to calling enable() and disable() respectively.

This commit updates the extensions CLI and Extensions app
with new strings for these states.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2364>
2022-12-01 12:59:32 +00:00
Evan Welsh
b7c097ba79 fileUtils: Refactor collectFromDatadirs to be a generator
This change enables mapping each collected file to a Promise in
asynchronous operations.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2364>
2022-12-01 12:59:32 +00:00
Jonas Ådahl
33d3a65646 ui/main: Allow not inhibiting animations sometimes
When we're running in e.g. CI, or in a virtual machine without hardware
acceleration, and we actually want to enable animations despite the
potential performance implications, change the AnimationsSettings to
only inhibit if we're a XVNC instance or not hardware accelerated if
--force-animations wasn't passed.

Still inhibit animations if there is a remote desktop session that
explicitly disables animations.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2560>
2022-11-29 17:52:56 +01:00
Jonas Ådahl
5bb9843217 ui/main: Don't show welcome screen or root warning with perf tests
If we want to run with the welcome screen showing, it should be done so
explicitly. Hide it if there is a perf test running for now, so that
what we test is what is expected to be tested.

We also don't want to show the root user warning, since we'll be running
as root in the CI containers.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2560>
2022-11-29 17:48:20 +01:00
Florian Müllner
1b62b7ea0a status/volume: Clear device menus when unsetting stream
Otherwise we end up accumulating devices when pipewire crashes or
is restarted.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2558>
2022-11-28 00:00:21 +00:00
Jonas Ådahl
bcc4d15fdf tests: Add test running basic perf test
This test runs all of GNOME Shell using the headless backend inside a
mocked D-Bus environment. The basic test tests, well, basic things, like
the panel menu, the overview, showing the app grid view, as well as
going back to the session view.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:53 +01:00
Jonas Ådahl
e62eae74fd searchController: Use connectObject for the stage key focus signal
This ensures it's properly disconnected on shutdown.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
f2ca53b9e0 layout: Destroy non-adopted uiGroup actors
Move back actors that were adopted from mutter (window_group,
top_window_group, the feedback group) from the uiGroup to the stage, and
then destroy the uiGroup. This will tear down more or less all of GNOME
Shells actors gracefully.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
411360cd1b signalTracker: Clear all signal trackers on shutdown
This avoids a lot of otherwise invalid signal handler invokations if we
would later attempt to terminate the gjs and mutter context.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
367d40d31b appDisplay: Don't have goToPage clamp to negative page index
The nPages property can be 0, which is the case in a stripped down CI
image without a single app to be listed, which means we can't clamp to
`nPages - 1`, since that'll give us a negative index and the following
error:

(gnome-shell:266): Gjs-CRITICAL **: 16:48:56.633: JS ERROR: Error: Page -2 does not exist at IconGrid
getItemsAtPage@resource:///org/gnome/shell/ui/iconGrid.js:1383:19
_translatePreviousPageIcons@resource:///org/gnome/shell/ui/appDisplay.js:323:34
_syncPageIndicators@resource:///org/gnome/shell/ui/appDisplay.js:396:14
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:445:14
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:1236:29
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:1582:15
_init/<@resource:///org/gnome/shell/ui/appDisplay.js:499:18
_init/pagesChangedId<@resource:///org/gnome/shell/ui/iconGrid.js:1137:24
_removePage@resource:///org/gnome/shell/ui/iconGrid.js:454:14
_removeItemData@resource:///org/gnome/shell/ui/iconGrid.js:495:18
moveItem@resource:///org/gnome/shell/ui/iconGrid.js:854:14
moveItem@resource:///org/gnome/shell/ui/iconGrid.js:1277:29
_moveItem@resource:///org/gnome/shell/ui/appDisplay.js:1194:20
_redisplay/<@resource:///org/gnome/shell/ui/appDisplay.js:1085:22
_redisplay@resource:///org/gnome/shell/ui/appDisplay.js:1080:17
_redisplay@resource:///org/gnome/shell/ui/appDisplay.js:1370:15
_init/<@resource:///org/gnome/shell/ui/appDisplay.js:633:24
_initializeManager@resource:///org/gnome/shell/misc/parentalControlsManager.js:95:14
async*_init@resource:///org/gnome/shell/misc/parentalControlsManager.js:63:14
ParentalControlsManager@resource:///org/gnome/shell/misc/parentalControlsManager.js:55:4
getDefault@resource:///org/gnome/shell/misc/parentalControlsManager.js:42:22
start@resource:///org/gnome/shell/ui/main.js:184:29
@resource:///org/gnome/shell/ui/init.js:6:17

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
fa47a7576d calendar: Unbind settings when destroying
Running dispose on the setting causes issues when we're being destroyed,
as the signal handler in the GSettings binding will be cleared by the
GObject itself before it has the chance, resulting in warnings.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
7f4db052a0 dialog: Remove incorrect disconnectObject()
It was added, as there was a previous signal disconnect in this
function, but it happened to be dead code, and the disconnectObject()
call was added in error. Remove it.

Fixes: 26235bbe54
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
a071d9e009 scripting: Terminate using meta_context_terminate()
With meta_exit() we bypass the tear down procedures, making the test
case excercising much less code paths. Use meta_context_terminate()
instead, as that exits the main loop and goes through proper shutdown.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
67d965d560 scripting: Exit helper after running test
This avoids the helper process exiting with an error due to a broken
pipe.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
6fc538b7f7 perf/basic: Toggle quick settings instead of old menu
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
faff190364 perf/basic: Add some helpful logging
This is purely to see that things are happening when running this test.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Alessandro Bono
cf47b4a347 overview: Start animation after setting coverPane initial state
Since commit 7bd98f3f5f the onComplete callback
is called right away when animations are disabled. As side effect, now
this._coverPane gets shown/hidden in the wrong order. Start the animation after
setting this._coverPane initial state, so that the animation callback can set the
this._coverPane final state without it being overwritten later.

Move the animation also after emitting the showing and hiding signals. So that the
order showing -> shown and hiding -> hidden is still preserved when animations are
disabled.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6096
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2532>
2022-11-25 15:19:37 +00:00
Alessandro Bono
f23ca85f79 overview: Make preparation to enter/leave overview explicit
This give us more control on when the preparation happens and will be
used in the subsequent commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2532>
2022-11-25 15:19:37 +00:00
Alessandro Bono
b8b8919563 overviewControls: Group prepare to enter/leave overview code
Move preparation code into their own functions. These functions will be used
in order to separate the animation control into two steps.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2532>
2022-11-25 15:19:37 +00:00
Roshan-R
63904a09bf keyboard: Change osk menu entry to control-center keyboard pane
Currenty, the osk settings popup has the menu entry of "Region and
Language settings" which should be changed to the "Keyboard" pane
instead as input source configuration is done there.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2554>
2022-11-24 13:49:55 +01:00
Florian Müllner
a4e2d708e5 overview: Don't block on wayland popovers
We don't allow entering the overview when there's an ongoing grab
operation, as they are generally incompatible with ClutterGrab.

The exception are wayland popups which are expected to work, and
don't conflict with ClutterGrabs.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2549>
2022-11-20 20:49:21 +00:00
Florian Müllner
b0befbbfbb inhibitShorcutsDialog: Fix permission check
Each permission entry is an array of strings, so checking that against
the expected string itself will always fail.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2548>
2022-11-19 00:48:25 +00:00
Alessandro Bono
39263d3530 accessDialog: Change fallback button labels
All the new portals dialog mockups have "Deny/Allow" buttons. Rename them.

https://gitlab.gnome.org/Teams/Design/os-mockups/-/blob/master/portals/portals.png

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2544>
2022-11-19 00:42:26 +00:00
Florian Müllner
d0740d605e status/remoteAccess: Don't override existing style classes
The indicator needs special styling for the color, but we still
want it to pick shared 'system-status-icon' styling like the
icon size.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2547>
2022-11-18 18:50:43 +01:00
Florian Müllner
990cdbd134 layout: Initialize regions unconditionally
We currently initialize regions in all code paths except for the
greeter. But while there are no windows on the login screen, the
work area can still be used for positioning, for example for
notifications.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2546>
2022-11-18 13:16:06 +00:00
Florian Müllner
14f061ffab status/network: Fix handling portal result
Commit 637ee7386e accidentally dropped all parameters from the
method invocation when changing a .bind() handler to an arrow
function.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2545>
2022-11-17 22:05:52 +01:00
Florian Müllner
b2ff25b31d status/network: Fix name of initially hidden devices
We assign (disambiguated) device names every time a device is added
or removed, and store the name on the corresponding menu item.

However menu items are only created when the device should be shown,
not necessarily when it is added (unplugged ethernet cable, ongoing
initialization, ...).

Fix this by tracking device names separately from device items, and
set the name on newly created items.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2529>
2022-11-17 11:09:27 +00:00
Carlos Garnacho
a33e3eaf22 keyboard: Ensure completion is disabled when OSK is destroyed
If the OSK is destroyed while visible without being close()'d first,
the completion mode might remain turned on. Ensure it is turned off
on OSK destruction so that typing-booster has no chance to remain
turned on.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2543>
2022-11-16 18:06:27 +00:00
Carlos Garnacho
52253625b8 keyboard: Disconnect from InputMethod::terminal-mode-changed on destruction
The OSK may be created and destroyed, while it connects to signals from the
longer-lived InputMethod object. This makes these signals linger and issue
copious warnings while trying to change the extended keymap and new ratio
on a defunct OSK.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6085
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2543>
2022-11-16 18:06:27 +00:00
Carlos Garnacho
a0352ba312 keyboard: Bind emoji pager visibility to swipeTracker enabled state
The swipeTracker may connect gestures on the stage, so we might end up
in the odd situation that the swipeTracker is handling events for an
invisible actor. Avoid doing this.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2543>
2022-11-16 18:06:27 +00:00
Carlos Garnacho
7e4f7c7e5b keyboard: Explicitly destroy swipeTracker after emoji panel destruction
Even though the emoji panel may be destroyed with the OSK, the swipeTracker
that is set up to navigate between pages is left lingering, and handling
events for some gestures in the stage. This results in warnings like:

  JS ERROR: TypeError: this._panel is null
  set delta@resource:///org/gnome/shell/ui/keyboard.js:720:9
  _onSwipeUpdate@resource:///org/gnome/shell/ui/keyboard.js:750:22
  _updateGesture@resource:///org/gnome/shell/ui/swipeTracker.js:670:14
  vfunc_gesture_progress@resource:///org/gnome/shell/ui/swipeTracker.js:288>

on touch interaction after the OSK was shown and dismissed. In order to fix
this, issue explicit destruction of the swipeTracker when the emoji pager
actor is destroyed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2543>
2022-11-16 18:06:27 +00:00
Alessandro Bono
2326721561 appDisplay: Connect to hidden signal after content initialization
When the overview is hidden just after starting GNOME Shell the app
grid is not populated yet. Thus, this._grid.nPages is 0. When the
overview is about to be hidden, we call goToPage(0) on the AppGrid.
This results in pageNumber being clamped to -1 and leads to the
following exception:

```
JS ERROR: Exception in callback for signal: hidden: Error: Page -2 does not exist at IconGrid
getItemsAtPage@resource:///org/gnome/shell/ui/iconGrid.js:1383:19
_translatePreviousPageIcons@resource:///org/gnome/shell/ui/appDisplay.js:323:34
_syncPageIndicators@resource:///org/gnome/shell/ui/appDisplay.js:396:14
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:445:14
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:1237:29
goToPage@resource:///org/gnome/shell/ui/appDisplay.js:1584:15
_init/<@resource:///org/gnome/shell/ui/appDisplay.js:1328:52
_emit@resource:///org/gnome/gjs/modules/core/_signals.js:89:42
_hideDone@resource:///org/gnome/shell/ui/overview.js:589:18
_animateNotVisible/<@resource:///org/gnome/shell/ui/overview.js:566:55
onStopped@resource:///org/gnome/shell/ui/overviewControls.js:753:21
_makeEaseCallback/<@resource:///org/gnome/shell/ui/environment.js:150:22
_easeActorProperty/<@resource:///org/gnome/shell/ui/environment.js:316:60
```

Connect to the overview hidden signal only after initializing the
AppDisplay content, so that goToPage(0) is not called when there
is no page yet.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5837
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2536>
2022-11-16 17:06:32 +00:00
Carlos Garnacho
bcafa512e3 quickSettings: Make parent StWidget have a 0x0 size
The quick settings menu is child of an actor at 0,0 coordinates,
simply transformed to look in place. However the parent actor stays
at 0,0, and gets a width/height that is able to contain the child
menu (even though the transform will push it outside the parent
actor).

This makes the parent actor (not meant to handle pointer/touch
input) to cover parts of the shell. Since this actor is also where
the Clutter grab happens, the menu is not dismissed either.

Make this parent actor have a 0x0 size, so that it can still act
as the parent for the quick settings menu, but does not actually
cover any area. This makes clicks around the top left corner work
again while the quick settings menu is opened.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5887
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2535>
2022-11-16 16:51:49 +00:00
Alessandro Bono
5d390d9899 windowManager: Get the active workspace index directly
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2540>
2022-11-14 20:03:32 +01:00
Florian Müllner
144daf200c screenshot: Cache ScreencastSupported property
The screencast service shuts down when not in use, so it is almost
certainly not running when handling the screencast shortcut.

Instead of making sure the service is restarted, just cache the
property when initializing the proxy.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2533>
2022-11-09 11:15:04 +00:00
Florian Müllner
a2acecb491 dbusService/screencast: Hold during gstreamer checks
Some gstreamer plugins require a connection to the display server,
so they block until the server is up and running. That's why we
moved the check into the D-Bus service, so that the blocking would
not lock up the compositor itself.

However the block can still delay the service initialization so
much that auto-shutdown hits immediately when returning from the
constructor. If that happens, the proxy on the shell side is no
longer backed by a remote object when the init callback runs, and
all properties therefore resolve as `null`.

As a result, gnome-shell thinks that screencasts aren't supported
and hides the screencast button.

Fix this by holding the service during the gstreamer checks, so
that the auto-shutdown timeout only starts after the service is
ready.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2533>
2022-11-09 11:15:04 +00:00
Colin Kinloch
50bc2c6529 systemActions: Add poweroff without space
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2523>
2022-11-04 18:14:11 +00:00
Cassidy James Blaede
092a069214 darkMode: Update string to "Dark Style"
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2499>
2022-11-04 14:31:29 +00:00
Alessandro Bono
7bd98f3f5f environment: Set time zero when animations are disabled
In commit ee09c5c853 we chose to pick
the minimum value in order to preserve 0 instead of replacing it with
1. While returning 0 unconditionally when animations are disabled
seems the more logic thing to do, we were unsure about possible side
effects. Do the change now. Since we are early in the development cycle
we should be able to deal with side effects (if any) on time for the
next release.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2528>
2022-11-04 14:14:34 +01:00
Florian Müllner
3cdcd075ef dbusServices/screencast: Check for all require elements
Instead of assuming that gst-plugins-good has been compiled with
all the plugins we need enabled, explicitly check for the ones
we use.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2519>
2022-11-04 09:51:20 +00:00
Florian Müllner
f266c2ca15 screenshot: Move HAVE_RECORDER check into screencast service
Some gstreamer plugins require a connection to the display server,
so if we end up initializing gstreamer before we are ourselves
fully initialized, we may end up with a locked compositor.

Avoid this by moving the runtime recorder check into the screencast
D-Bus service, so that all gstreamer calls happen out of process.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2519>
2022-11-04 09:51:20 +00:00
Florian Müllner
cff56d4b03 config: Check for correct Gst element
We use filesink, not filesrc ...

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2519>
2022-11-04 09:51:20 +00:00
Marco Trevisan (Treviño)
a25d0f6d22 js/portal-resources: Add missing fileUtils to js path
gnome-shell-portal-helper was failing with:

  (gnome-shell-portal-helper:646052): Gjs-CRITICAL **: 12:24:30.852:
    JS ERROR: ImportError: No JS module 'fileUtils' found in search path
    @resource:///org/gnome/shell/portalHelper/main.js:13:30
    @<main>:1:14

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6020
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2524>
2022-11-03 18:02:27 +00:00
Carlos Garnacho
ecc3cf8ab1 inputMethod: Manually reset input context state before unfocus
The IBusInputContext currently seems to be a bit sloppy wrt propagating
the current state to engines after those are changed, this results in
engines possibly ending with purpose/hint/etc that do not actually
correspond to the current state.

Ensure this state is cleared on unfocus of our IBusInputContext, so
that the next time the input method receives an input focus, the new
state makes it all the way to the currently active engine.

Fixes situations in the GDM/lock screen password entry that IBus
would miss the PASSWORD hint set on the StEntry, and let passwords
be fed to engines.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5966
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>
2022-10-26 10:00:37 +00:00
Carlos Garnacho
12032dcc50 ibusManager: Make more resilient to completion/engine independent changes
Besides user interaction, there's two users of IBusManager.setEngine():

- The code that toggles all IBus engines off on entries with PASSWORD
  purpose.
- The code that toggles completion support on OSK presence.

These are currently pretty oblivious to each other. Make this
interaction more resilient by making all external IBusManager changes
more cautious about directly changing the engine, and revoke properly
the completion mode if it needs be (e.g. changing to a non-XKB engine).

But another notable change is that ibus-typing-booster is now preferred
always, over PASSWORD purpose hints. This is done to avoid possible
doubled attempts to change the current engine (and ensuing IBusInputContext
confusion).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>
2022-10-26 10:00:37 +00:00
Carlos Garnacho
b2f2266199 keyboard: Synchronize input method state after toggling completion
Make the input method synchronize its state after the engine changes
resulting from completion being toggled.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>
2022-10-26 10:00:37 +00:00
Carlos Garnacho
ff09c4efc1 inputMethod: Cache cursor rectangle
This may need to be synchronized in other places, so keep
the rectangle around.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>
2022-10-26 10:00:37 +00:00
Carlos Garnacho
290dd38a3a ibusManager: Allow passing callbacks after enabling/disabling completion
Since this is an async operation, we may want to let some things happen
after the engine is changed due to completion being enabled/disabled.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2512>
2022-10-26 10:00:37 +00:00
Sebastian Keller
d7b443197b screencast: Don't force buffer copies on recent gstreamer versions
Gstreamer 1.20.4 includes a fix in the videoconvert element that makes
it no longer necessary to always copy buffers in pipewiresrc to have
smooth recordings. This change now skips those otherwise unnecessary
copies when using a new enough videoconvert.

Related: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2928
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2503>
2022-10-20 13:56:47 +00:00
Florian Müllner
cbbc066d6f powerProfiles: Avoid warnings on missing power-profiles-daemon
GDBusProxy transparently handles the remote object appearing and
vanishing. It is therefore not an error if the service is not
running at the time the proxy is initialized, so we proceed and
try to read the list of profiles which is null in that case,
resulting in (harmless but annoying) warnings.

Avoid this by only reading the initial list of profiles if the
service has a name owner.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2518>
2022-10-20 13:55:06 +02:00
Sam Hewitt
ea7b29e049 css/quick-settings: Update icon-button styles
- add an entire	flat style to button drawing function
- clean	up the icon button css in quick	settings
- adjust padding in QS sliders
- fixes #5918

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2510>
2022-10-18 19:43:10 +00:00
Carlos Garnacho
76090c14eb inputMethod: Check return value when letting IM handle virtual keys
When propagating keys from the OSK, we usually feed these directly to
the IBusInputContext and let the IM handle the effects of this virtual
key event (which may also include feeding a key event back to us).

But these functions may also return a FALSE value if the key was "let
through" by the IM, which means the ball is in our yard again, and
we are responsible of letting this event get to its destination.

If that happens, just fall through, so the string is committed to
the client as an UTF-8 string, or propagated through keyboard events.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5930
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2508>
2022-10-18 19:31:51 +00:00
Carlos Garnacho
766314acb2 keyboard: Refactor code
Move inline anonymous function to be its own. This method
will become asynchronous in following commits.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2508>
2022-10-18 19:31:51 +00:00
Carlos Garnacho
9c262ad7bf status: Ignore prior single-element lists updating input sources MRU
Consider the existing input sources MRU only valid if it contained
more than one element to pick from. Fixes the following situation
with initial-setup sessions:

- Initial setup Session starts, with several input sources already
  configured ("us" between them)
- InputSourceManager initializes, only the default "us" keymap is
  available
- MRU list is constructed, "us" is picked
- InputSourceManager catches up with session configuration, the
  other extra sources are added
- MRU list is reconstructed, "us" is already the most recent
- Session ends up with "us" picked, regardless of its position in
  the list, and no MRU existing prior to startup

If we consider the intermediate single-element MRU list invalid,
it is still possible to pick the best default source between all
the configured ones (the one that was put first in the list,
basically), after initialization is complete.

But also, it is unnecessary to have if there is a single source to
pick from. After the sources list has two elements or more, the
MRU list will become effective and preserved during changes to
the available sources.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5873
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2495>
2022-10-18 18:38:27 +00:00
Florian Müllner
022c64961c altTab: Always include label in thumbnail
We currently special-case the no-window-title case when creating
items, but not when accessing labels later, for example during
allocation.

The easiest option it to create the label unconditionally, so do
that.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2483>
2022-10-18 18:04:57 +00:00
Alessandro Bono
ee09c5c853 environment: Preserve time 0 when animations are disabled
There are cases where the animation time is set to 0 on purpose
in order to not animate. When animations are disabled via
/org/gnome/desktop/interface/enable-animations those animation
times are increased from 0 to 1. This makes the "Caps lock is on."
message appear unconditionally in the lockscreen for a brief moment.

Select the minimum between the two values. So that an animation time
0 is preserved instead of being replaced by 1.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2471>
2022-10-14 22:32:31 +00:00
Alessandro Bono
b392e913d6 shellEntry: Remove unused variable
Unused since 26235bbe54.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2471>
2022-10-14 22:32:30 +00:00
Jonas Ådahl
dfcab5a2b1 inputMethod: Also forward TERMINAL input purpose
It was added relatively recently (1.5.24), so check if it exists first.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5958
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2511>
2022-10-14 21:59:21 +02:00
Florian Müllner
8590e33501 inhibitShortcutsDialog: Don't override resource
PermissionStore's Set() method takes a complete permission
table, so when setting an app's permission, we are implicitly
removing all previously set entries for other apps.

Switch to the SetPermission() method which sets the permission
for a single app.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2504>
2022-10-06 14:47:43 +02:00
Florian Müllner
0ce2bc343b status/volume: Include origin in device names
The description alone may not be descriptive enough, so include
the origin (if available) to disambiguate the name.

This is consistent with the Sound Settings panel.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2502>
2022-10-03 18:37:07 +02:00
Bastien Nocera
e7cf6d348c bluetooth: Remove unused 'had-bluetooth-devices-setup' setting
Now that we always show the Bluetooth switch when there's a Bluetooth
adapter hiding somewhere, remove all the settings it used as storage.

If the user wants to really really disable any Bluetooth adapters in
their system, the gnome-bluetooth documentation explains how to do that
irrespective of GNOME:
https://gitlab.gnome.org/GNOME/gnome-bluetooth/#multiple-bluetooth-adapters

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2488>
2022-09-17 18:24:15 +00:00
Bastien Nocera
57aa91e2b3 bluetooth: Show the Bluetooth switch in more cases
In older versions of GNOME, when a menu was used for Bluetooth devices,
we tried to avoid showing the Bluetooth menu to folks who didn't use
Bluetooth.

This kept causing problems as the menu would disappear if no
devices were setup and the platform "airplane mode" removed the
Bluetooth device from the USB bus, making it impossible to detect
whether a Bluetooth device existed, compared to a user unplugging a
removable Bluetooth device.

Closes: #5749
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2488>
2022-09-17 18:24:15 +00:00
Carlos Garnacho
13c9fd2a66 status: Use fixed sorting of input sources on empty MRU
When updating the MRU sources if there was no prior MRU, we want
to go with the unmodified list of sources in visibility order.

However iterating over object properties happens in an undetermined
order, so the initial MRU list ends up picking a value at random.

In order to prefer the sources list in the same order than they
appear in the menu if there was no prior MRU, order the keys
when accessing it and building the initial list of sources.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5873
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2487>
2022-09-17 18:18:43 +00:00
Jonas Ådahl
c080bc59a4 quickSettings: Update bind constraint offset on idle
Use Meta.LaterType.BEFORE_REDRAW to queue setting the bind constraint
offset in an idle callback. This is needed since the signals that
trigger updating the offset may be emitted during allocation, at which
point queuing new relayouts isn't ideal, since it could result in
relayout cycles. In this case, we really do want to relayout as a side
effect of another actors allocation, so make this explicit.

This fixes a few warnings such as:

The actor '<unnamed>[<StBoxLayout>:0x3138d70]' is currently inside an
allocation cycle; calling clutter_actor_queue_relayout() is not recommended

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2476>
2022-09-17 18:09:57 +00:00
Andy Holmes
990eb92bd9 panel: Add PanelMenu.Button menu when menu-set is emitted
When a `PanelMenu.Button` is added to the `statusArea`, its menu is
added to the `PopupMenuManager` if it has one at the time. If a menu is
added later or a new one set, the new menu is never added.

Move the call to `PopupMenuManager.addMenu()` from `_addToPanelBox()`
to `_onMenuSet()`, which is called when the `PanelMenu.Button` is added
and whenever it emits the `menu-set` signal.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2470>
2022-09-17 17:56:21 +00:00