Commit Graph

9191 Commits

Author SHA1 Message Date
Jonas Ådahl
8ab344929d js/main: Unset input method on shutdown
After shutdown, the Javascript context will be disposed, so we must make
sure we remain the active input method after this point.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6535
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2722>
2023-04-20 14:52:01 +02:00
Jonas Ådahl
1da8df81c5 perf-helper: Allow creating window with text input
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2722>
2023-04-20 14:52:01 +02:00
Jonas Ådahl
d272b16e50 tests/perf: Add test for shutdown with open window
This would without the applied fix trigger
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6536.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2722>
2023-04-20 14:49:38 +02:00
Jonas Ådahl
2325022d2f scripting: Allow avoiding exiting perf helper
This will help creating test cases where windows are open during
shutdown.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2722>
2023-04-20 14:49:38 +02:00
Florian Müllner
728a94dead popupMenu: Only activate items that still have the pointer
After the introduction of implicit grabs in Clutter, a release
event will now always be delivered to the actor that received
the corresponding press event.

This results in surprising behavior when moving the pointer
while pressed, as a button release will always activate the
original item, even when the pointer moved to a different item
or outside the menu altogether.

Address this by checking the hover state (that is, whether
the item contains the pointer actor) before activating it.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2740>
2023-04-20 12:15:45 +00:00
Sebastian Keller
4bbf6d497d windowPreview: Ignore leave events after being destroyed
When a WindowPreview is being destroyed, the class default handler for
the `destroy` signal is responsible for destroying its child actors.
This happens after the emission of the `destroy` signal, i.e. after
`WindowPreview::_onDestroy()` has been run.

The destruction of the WindowPreview's child actors now triggers a
re-pick, but due to WindowPreview having already being marked as
`CLUTTER_IN_DESTRUCTION`, it will not be picked, resulting in a `leave`
event if the cursor was on top of the WindowPreview at the time
`destroy()` was called on it.

So this leads to `WindowPreview::vfunc_leave_event()` being run after
`WindowPreview::_onDestroy()`, which means the idle started by the leave
event handler will not be removed and ends up accessing actors after
they have already been destroyed.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5512
Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6065
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2738>
2023-04-18 19:44:20 +00:00
Marco Trevisan (Treviño)
8bf06bfc9f dash: Do not destroy a dash label twice
Dash labels are children of the main uiGroup and so could be destroyed
before their logical-owner DashItemContainer during shutdown.

This implies that we could destroy them twice. To avoid this, unset them
when destroyed.

This is mostly visible when using dash-to-dock, but it's still
technically possible with upstream code:

** Message: 19:57:49.847: Shutting down GNOME Shell

(gnome-shell:2788214): Gjs-CRITICAL **: 19:57:49.933: Object St.Label
 (0x55b33668eab0), has been already disposed — impossible to access it.
 This might be caused by the object having been destroyed from C code using
something such as destroy(), dispose(), or remove() vfuncs.
  == Stack trace for context 0x55b3345fd3d0 ==
  #0   7ffeabd810d0 b   /data/GNOME/gnome-shell/js/ui/dash.js:86
  #1   55b335b62f88 i   /data/GNOME/JHBUILD_HOME/.local/share/gnome-shell/extensions/dash-to-dock@micxgx.gmail.com/docking.js:487
  #2   7ffeabd838f0 b   self-hosted:1121
  #3   55b335b62ec8 i   /data/GNOME/gnome-shell/js/ui/layout.js:240

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2739>
2023-04-17 20:22:12 +00:00
Florian Müllner
ecb274cee0 panelMenu: Fix keynav of menu-less buttons
The left/right navigation between top bar buttons is usually
handled by a key-press handler on the button's menu.

However when a DummyMenu is used, the button itself serves as
fake menu actor and will get grabbed when "opening" the menu.
Due to that grab, the event is not propagated to the stage,
and regular keynav does not work.

To avoid the focus getting stuck in that case, add an explicit
key-press handler that bypasses the grab.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2734>
2023-04-17 20:09:56 +00:00
msizanoen1
cde7d44a28 messageTray: Don't set _notificationRemoved if destroyed notification is queued
When the user clears all notifications from the notification menu UI, it's
possible for a queued notification to be destroyed after the currently displayed
notification. The removal of the currently displayed notification is not
processed until the notification menu is closed (due to `this._bannerBlocked`).
By then, it's possible that `_notificationRemoved` has already been overwritten
when `_onNotificationDestroy` is invoked with another (queued) notification.

This eventually results in a notification banner that cannot be removed by the
user as the notification object needed to do so has already been destroyed.

Fix this by only assigning to `_notificationRemoved` if `this._notification ==
notification`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2736>
2023-04-17 19:40:45 +00:00
Jonas Dreßler
8431e7ae51 misc/objectManager: Fix emission of object-removed signal
Emitting this signal is broken right now: We check for a length of 0 on
this._objects[objectPath], but the
`this._objects[objectPath][interfaceName] = null` we do before the
check doesn't actually remove the key, it only sets the value to null,
leaving the key around and thus the amount of entries in the object doesn't
change.

Fix that by using the delete statement instead, "delete" properly removes
the key and thus affects the amount of entries in the object, making our
length === 0 check effective.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2730>
2023-04-05 18:43:51 +00:00
Automeris naranja
63d18f3ee9 powerProfiles: Rename "Power Profiles" to "Power Mode"
This changes renames the power profiles submenu title to "Power Mode",
making it consistent with the toggle title.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2697>
2023-04-04 22:09:13 +00:00
Lukáš Tyrychtr
de900af7d5 status/network: Improve a11y of wireless network items
This MR does the following:
* Allows a screen reader user to determine the currently connected network
* Allwos a screen reader to read the security status and signal strength

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2724>
2023-04-04 17:19:55 +00:00
Jordan Petridis
2844f6db17 appFavorite: Add missing .desktop extension for simplescan
Followup to cbecc1dbfd

One line changes are hard.. Was too focused on copy pasting the id
that I omitted the .desktop part.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2728>
2023-03-29 21:51:04 +00:00
Andy Holmes
3cc3a79b7a extensionDownloader: Check schemadir existence and type
When checking for an extension schemadir, an error will be thrown if
`query_info()` is used and the directory is missing.

Catch the case of a missing directory, but throw an error if the
path exists as a non-directory type.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2727>
2023-03-27 21:12:59 +00:00
Lukáš Tyrychtr
95c0a88fe7 status/network: Fix a11y names for VPN connection menu items
Because of an omission, the VPN menu items never got its a11y name,
so a screen reader was reporting that item only as a plain item without
any label.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2720>
2023-03-27 17:01:40 +00:00
Florian Müllner
9a814798d7 quickSettings: Fix icon-name construct property in menu toggles
Both :icon-name and :gicon are propagated to the internal QuickToggle
with property bindings. However the bindings are set up in the wrong
order:

:icon-name is a convenience property to set :gicon to a ThemedIcon
of the given name. That means binding :icon-name first will correctly
set the underlying StIcon's :gicon, but then the :gicon binding will
set it again to null.

Fix this by swapping the order in which the bindings are set up,
so that it works for both properties.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2726>
2023-03-27 14:52:50 +00:00
Adam Williamson
a093a721fa screenshot: Fix broken GLib.Error.matches call
You have to pass a domain and an error code, not just an error
code.

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

Signed-off-by: Adam Williamson <awilliam@redhat.com>
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2725>
2023-03-25 11:57:07 -07:00
Jordan Petridis
cbecc1dbfd appFavorite: Rename simple-scan.desktop
simple-scan app-id will soon be renamed to org.gnome.SimpleScan
and thus we need to add the .desktop file to `RENAMED_DESKTOP_IDS`

https://gitlab.gnome.org/GNOME/simple-scan/-/merge_requests/11

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2723>
2023-03-24 09:48:47 +00:00
Georges Basile Stavracas Neto
9e19f27e45 status/network: Generalize code to hide subtitle
Commit 9d75d777c7 introduced code to hide the subtitle of the
quick setting toggle when it matches the title of the toggle.
That's because NetworkManager tries to make the network names
more palatable on its own, and reports that the name of single
wired networks is "Wired" even if it may have another name.

What that commit failed to account for, however, is that there are
other circumstances where we end up with a subtitle is exactly the
same of the title. For example, when turning off Wi-Fi or mobile
broadband connections.

The behaviour of commit 9d75d777c7 is safe enough to be applied
on other device-backed connections, so do it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2682>
2023-03-21 20:52:31 +00:00
Ivan Molodetskikh
237c3e958d screenshot: Get cursor texture from window
When a window is in the background and should not have the cursor on top
of it, its _cursor will be null. By getting the texture through it, we
add this extra check, which was missing before, leading to a cursor
drawn at 0, 0 on windows where it should not have been drawn.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2702>
2023-03-21 09:46:52 -07:00
Florian Müllner
95386a1423 workspacesView: Update visibility after updating workspaces
When the number of workspaces changes, it is possible that one
of the visible (non-active) workspaces is removed, and another
invisible workspace moves in its place.

Make sure that workspaces are shown as necessary in this case.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2699>
2023-03-21 12:02:52 +00:00
Ivan Molodetskikh
4daea0ccae screenshot: Use meta_window_has_pointer () for pointer check
909616b208 seems to have wrapped window actors in a container, so the actor.has_pointer check started failing. Instead, switch to meta_window_has_pointer () which doesn't rely on window actor implementation details.

We check for existence of has_pointer first just in case someone attempts to run gnome-shell 44.1 with mutter 44.0 which does not have the function exported publicly yet.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2710>
2023-03-21 00:05:39 +00:00
Florian Müllner
5766d4111a modalDialog: Fix fading out dialog
The dialog's state property has been read-only since
commit 2f6323afc, but the callback at the end of the
fade transition still tries to set the value directly.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2696>
2023-03-19 19:54:45 +00:00
Florian Müllner
34712449da endSessionDialog: Catch async errors
Otherwise the actual error is masked by an "unhandled promise
rejection" error, making it harder to track down the underlying
cause.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2696>
2023-03-19 19:54:45 +00:00
Florian Müllner
2f196f4b0b main: Fix syncing animations-enabled
Whether or not animations should be enabled depends on various
factors, some of which may change at runtime. We therefore
track changes, and sync the setting by calling inhibit/uninhibit
as necessary.

Except that we never actually record the new state, so when animations
are disabled, we end up inhibiting them every time
the setting is synced, whoops.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2698>
2023-03-19 13:39:41 +00:00
Florian Müllner
0b8114ba52 extensionSystem: Fix extension reloading
Unloading an extension has become an async operation, but we aren't
awaiting the result. That means that we recreate the extension
object *before* we remove the "old" extension object from the map,
with the effect that the reloaded extension is removed completely.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2694>
2023-03-19 13:26:30 +00:00
Daniel van Vugt
b8013704cf appDisplay: Avoid using an undefined _swipeTracker
It might have been deleted already during shutdown by `_onDestroy()`.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6512
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2693>
2023-03-19 13:12:22 +00:00
Carlos Garnacho
58af42caea screenshot: Fix code typo
Even though commit b89d90eb8 talked about the GLib.BookmarkFile
type, this didn't stop the code from sneaking a silly typo and
refer to this GLib.BookmarksFile (i.e. extra 's').

Fix the code to refer to the right type name and constructor.

Fixes: b89d90eb8 ("screenshot: Use GLib.BookmarkFile to save recent screenshots")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2692>
2023-03-19 13:00:49 +00:00
Will Thompson
ab0c795e81 status/location: Handle geoclue not being activatable
In GNOME OS, due to a misconfiguration, geoclue was configured without
systemd support. In that configuration, geoclue does not install its
systemd .service file (geoclue.service) but it (incorrectly) includes
the following line in its D-Bus service file:

    SystemdService=geoclue.service

As a result, when dbus-daemon tried to activate it at gnome-shell's
request, it would fail with:

    Unit geoclue.service not found

Then, GeoclueAgent._onGeoclueVanished() would be called, as the
name_vanished_handler passed to Gio.bus_watch_name(). This is consistent
with Gio.bus_watch_name()'s documentation:

> You are guaranteed that one of the handlers will be invoked after
> calling this function.

But that function assumed that this._managerProxy is defined, leading
to:

    JS ERROR: TypeError: this._managerProxy is undefined
    _onGeoclueVanished@resource:///org/gnome/shell/ui/status/location.js:163:9

Fix this by checking for nullishness of this._managerProxy. (Strictly
speaking, it's undefined rather than being null, but other code in this
file already uses the vaguer '!= null' test, which considers undefined
to be null.)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2689>
2023-03-19 12:46:50 +00:00
Sebastian Keller
e258cff264 status/bluetooth: Fix bluetooth placeholder text alignment
The padding specified for .bt-menu-placeholder was overridden by the
more specific.popup-menu-item:ltr/rtl padding. Also the ornament, was
still taking up space, as well as the spacing between the ornament and
the text.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6434
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2687>
2023-03-19 12:32:55 +00:00
Florian Müllner
83e7f94513 status/backgroundApps: Add section title
At least for the time being, the background portal's app monitor
only supports flatpak apps, which are the only apps where we can
reliably match processes to .desktop files and assume that they
belong to graphical apps.

To indicate that there may well be apps that don't appear in the
list despite running in the background, add a clarifying section
title.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2681>
2023-03-19 12:06:06 +00:00
Florian Müllner
7fdf9b8a06 Revert "status/backgroundApps: Add section title"
Unfortunately we did not get approval for the string freeze
request, so we have to bail out of the change again.

This reverts commit d6c4039f75.
2023-03-06 18:36:53 +01:00
Florian Müllner
7a1b8f82e0 environment: Disallow all GDK backends
There is only a very limited subset of GTK that is usable from
within the compositor, and by now we should have replacements
for all of them in place.

On the other hands there is plenty that can go catastrophically
wrong in the rest. In particular on wayland, GTK must never open
a wayland display connection.

Make sure that extensions don't do anything silly, by disallowing
all GDK backends.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2680>
2023-03-06 16:31:53 +01:00
Florian Müllner
e702641f41 inhibitShortcutsDialog: Stop using GTK to display shortcut
Instead, switch to the corresponding mutter API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2676>
2023-03-06 15:08:56 +00:00
Ray Strode
07dfcf4eff endSessionDialog: Don't emit 'closed' until handler is connected
Prior to commit 7bd98f3f5f animation
onComplete handlers always occured at least after one main loop
iteration.

Now, if animations are disabled, they can get invoked immediately.

That breaks the endSessionDialog button handler, which calls
close before setting up the "closed" signal handler.

This commit fixes the handler to get set up first.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2677>
2023-03-05 20:24:02 -05:00
Florian Müllner
7ada79f6d9 iconGrid: Delay updating adjustment value on page switch
When switching to a newly created page, the adjustment's limits
haven't been adjusted yet. As a result, setting the new value
only works when the transition is animated.

To fix the non-animated case, use a MetaLater to set the adjustment
value.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2670>
2023-03-04 16:34:47 +01:00
Florian Müllner
d6c4039f75 status/backgroundApps: Add section title
At least for the time being, the background portal's app monitor
only supports flatpak apps, which are the only apps where we can
reliably match processes to .desktop files and assume that they
belong to graphical apps.

To indicate that there may well be apps that don't appear in the
list despite running in the background, add a clarifying section
title.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2660>
2023-03-03 23:06:42 +00:00
Carlos Garnacho
656efd33af Update to drop GTK3 dependency
There's a few things going on here, that unfortunately must
happen in lockstep:

- The gnome-desktop-3.0 dependency gets replaced by gnome-desktop-4
  and gnome-bg-4. The code in ui/background.js required minor updates.
- The libnma dependency gets replaced by a libnma4 dependency. The
  code in misc/modemManager.js required minor updates.
- The gtk3 dependency is torn down everywhere but tests. Some
  missing GdkPixbuf dependencies had to be added to compensate for
  its lack.
- gtk_init_check() is no longer called

As a result, we replace a hard gtk3 dependency with a soft gtk4
run-time linking one, only added indirectly through gnome-bg-4
and libnma4.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2655>
2023-03-03 20:38:03 +00:00
Automeris naranja
bac403c409 screenshot: Add tooltip to the "Capture" button
Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5448

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2654>
2023-03-02 21:51:05 +00:00
Sebastian Keller
56478f21e6 overview: Hide when failing to take grab at end of startup animation
Otherwise keyboard input would be going to whatever window was
preventing us from taking the grab while it is obscured by the overview.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2667>
2023-03-02 00:08:09 +00:00
Sebastian Keller
bb42973730 overview: Don't claim to be SHOWN when HIDDEN during startup animation
When the overview gets hidden during the startup animation, the callback
would still change the state to SHOWN, despite the overview not being
shown.

This can happen for example if a `monitors-changed` signal triggers a
relayout during startup.

See: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2514#note_1683525
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2667>
2023-03-02 00:08:09 +00:00
Andy Holmes
d5f868bb25 quickSettings: Bind the outer button's toggle-mode to the inner buttons
When the `QuickMenuToggle` was a discrete button, it could be set to
toggle mode, but the inner buttons no longer reacts as expected.

Bind the `toggle-mode` property between the `QuickMenuToggle` and its
contents so they behave as single toggle when enabled.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2664>
2023-03-01 20:17:07 +00:00
Carlos Garnacho
b89d90eb80 screenshot: Use GLib.BookmarkFile to save recent screenshots
Avoid the GTK dependency, and use the common GLib API to store
screenshots in recent files. While at it, give it a better
exec hint than the implicit "gnome-shell %u" GTK added for us,
nobody seems to pay attention to that, but if they ever did
it's better to provide sensible information.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2656>
2023-03-01 16:09:16 +00:00
Andy Holmes
5449c3e83e quickSettings: Add a getter for the deprecated label property
Since the `label` property was deprecated there have already been
reports of fatal errors for some extensions, so add a deprecated
getter with a warning to ease migration.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2663>
2023-02-25 12:24:46 -08:00
Florian Müllner
732d0980d8 status/bluetooth: Ignore devices when turned off
gnome-bluetooth clears the list of devices when the adapter goes
away, but we cannot assume that that'll happen when powered down.

We don't want to show a (potentially outdated) list of devices
that cannot be interacted with in that case, so explicitly check
for the active state when returning devices.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2658>
2023-02-24 15:46:45 +00:00
Jonas Dreßler
4920cf1eb6 appDisplay: Remove pan gesture from FolderView
The FolderView is a subclass of BaseAppView, which already has a
full-blown SwipeTracker attached to it. So no need to add another
PanGesture on top, the SwipeTracker will handle it for us.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2318>
2023-02-24 15:32:06 +00:00
Jonas Dreßler
abc43530bc dnd: Remove buttonDown private property
This was introduced with commit
6cae94edcc, it doesn't seem to make sense
anymore these days.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2318>
2023-02-24 15:32:06 +00:00
Jonas Dreßler
de08ec915f dnd: Handle dragActorSource getting destroyed
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2318>
2023-02-24 15:32:06 +00:00
DaPigGuy
ec50381f5c status/system: Fix missing battery percentage in the top bar
The percentage label text was bound to the 'label' property, which was
renamed to 'title' in GNOME 44 with the quick settings changes. This
was missed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2657>
2023-02-22 13:21:15 -08:00
Sebastian Keller
feb1c57dde status/network: Fix WirelessNetwork related leaks
NetworkManager frequently refreshes the list of available access points.
For some reason this often ends up removing some or all access points
only to add them back in a later refresh later. With the exception of
the currently connected access point, which is never removed.

When all access points of a WirelessNetwork have been removed, it gets
destroyed by NMWirelessDeviceItem::_removeAccessPoint(). This however
does not happen for the currently connected network due to the always
present access point. If this network now happens to consist of multiple
access points, the "unused" NMAccessPoints will get removed and added
in these refreshes, without the WirelessNetwork getting destroyed.

Whenever such an unused access point is added, due to the use of signal
tracking this leaks the NMAccessPoint and SignalTracker until the
WirelessNetwork is destroyed.

However when the NMWirelessDeviceItem is destroyed, for example due to
suspending, it stops tracking access point changes, ensuring that the
condition for the WirelessNetwork being destroyed can not occur anymore.

Even with just two access points, such as can be found in 2.4GHz+5GHz
home routers this issue leaks hundreds of NMAccessPoints and
SignalTrackers per day. As well as a small number of WirelessNetworks
which are also kept alive by the SignalTrackers.

To fix this disconnect from the access point when it gets removed and
destroy all remaining networks when the NMWirelessDeviceItem is
destroyed.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2652>
2023-02-18 21:34:56 +00:00