Commit Graph

8770 Commits

Author SHA1 Message Date
Florian Müllner
5d1d4b56c6 overviewControls: Do consider work area for HIDDEN state
While we don't want to position overview elements according to
the work area, it does apply in the session when the overview
is hidden. That is, we should take it into account for the HIDDEN
state, so that transitions from and to the overview are correct.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2223>
2022-03-05 22:29:57 +00:00
Florian Müllner
a30363140c overviewControls: Ignore work area again
The work area is really the space that is available to application
windows. Applying it to the overview is therefore questionable,
in particular given that

 - X11 clients that affect struts aren't shown
 - elements added by extensions have other means
   to affect the overview layout

Not applying the work area to the overview also makes ignoring
actors' visibility for struts acceptable again: Assuming that
strut actors are only hidden when the monitor is in fullscreen,
freezing the work area instead of updating it for windows that
are fully obscured by a fullscreen windows makes perfect sense.

This reverts commits 81a1e294f8 and 2b074882f4.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2223>
2022-03-05 22:29:57 +00:00
Florian Müllner
cd33f5d907 Revert "layout: Exclude hidden actors from struts"
The changes violated too many assumptions on the mutter
side. And even if those were addressed, changing the
work area when a window enters/leaves fullscreen isn't
great, because it will force an expensive relayout on
all other windows.

This reverts commit cd1102ff30.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2223>
2022-03-05 22:29:57 +00:00
Jonas Ådahl
b3c7a855c6 workspaceThumbnail: Use transient object for connecting some signals
We want to connect and disconnect a bunch of signals when showing/hiding
the worskpace thumbnails. To make this easy, use a transient object that
we tie to these signal handlers.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2220>
2022-03-05 10:08:48 +01:00
Florian Müllner
cf29ec2f22 signalTracker: Add TransientSignalHolder class
There are cases where we want to connect to a number of signals
for the lifetime of an object, but also other signals for a
limited period (say: between show and hide).

It is currently not possible to use disconnectObject() for the
latter, because it will disconnect all signals.

To address this use case, add a small class that can be used as
a transient signal holder, while still benefiting from autocleanup
by proxying the real owner.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2221>
2022-03-05 00:12:27 +00:00
Florian Müllner
7b0a94b246 signalTracker: Use connect_after to track 'destroy'
The 'destroy' signal currently doesn't work with connectObject(),
because the handler is only connected after the signal tracker's
own destroy handler, which disconnects all handlers.

Address this by using connect_after for the cleanup handler, so
that other destroy handlers run before it (unless they also use
ConnectFlags.AFTER, but well *shrug*).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2221>
2022-03-05 00:12:27 +00:00
Florian Müllner
69717424f7 workspaceThumbnail: Remove unused properties
Those aren't used anymore since the switch to connectObject().

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2222>
2022-03-05 00:38:05 +01:00
Jonas Ådahl
f979ebcb1a remoteAccess: Hide indicator after a timeout
In order to make very short screen capture sessions more visible, let
the indicator remain visible, but a bit greyed out, for some seconds.
This makes it more obvious something was just capturing the screen.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2132>
2022-03-04 22:05:46 +00:00
Florian Müllner
26235bbe54 js: Use (dis)connectObject()
Start using the new methods to simplify signal cleanup. For now,
focus on replacing existing cleanups; in most cases this means
signals connected in the constructor and disconnected on destroy,
but also other cases with a similarly defined lifetime (say: from
show to hide).

This doesn't change signal connections that only exist for a short
time (say: once), handlers that are connected on-demand (say: the
first time a particular method is called), or connections that
aren't tracked (read: disconnected) at all.

We will eventually replace the latter with connectObject() as
well - especially from actor subclasses - but the changeset is
already big enough as-is :-)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1953>
2022-03-04 14:14:37 +00:00
Florian Müllner
f45ccc9143 signalTracker: Provide monkey-patching for (dis)connectObject()
The module exports a `addObjectSignalMethods()` method that extends
the provided prototype with `connectObject()` and `disconnectObject()`
methods.

In its simplest form, `connectObject()` looks like the regular
`connect()` method, except for an additional parameter:

```js
    this._button.connectObject('clicked',
        () => this._onButtonClicked(), this);
```

The additional object can be used to disconnect all handlers on the
instance that were connected with that object, similar to
`g_signal_handlers_disconnect_by_data()` (which cannot be used
from introspection).

For objects that are subclasses of Clutter.Actor, that will happen
automatically when the actor is destroyed, similar to
`g_signal_connect_object()`.

Finally, `connectObject()` allows to conveniently connect multiple
signals at once, similar to `g_object_connect()`:

```js
    this._toggleButton.connect(
        'clicked', () => this._onClicked(),
        'notify::checked', () => this._onChecked(), this);
```

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1953>
2022-03-04 14:14:37 +00:00
Florian Müllner
919039e266 appDisplay: Create default folders on start
The default folders used to be created by gnome-software, as that was
where folder management used to be implemented. Since then, folder
management via drag and drop was implemented in the shell, and the
gnome-software code was removed.

The only bit that still involves gnome-software are the default folders
that are created on first run. Given that everything else has moved to
the shell, it makes sense to take over that part as well.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2110>
2022-03-04 13:02:13 +00:00
Carlos Garnacho
6d895bf8a9 searchController: Avoid event.set_source() API
It does not make sense that the target actor is both destinatary
and content of the events being sent, so this API call is going away.

Since the event can be sent entirely unmodified (more so, it will
become immutable/readonly in the future), avoid creating a copy
since it does not matter sending one or other struct.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Carlos Garnacho
dc0f286fe9 searchController: Query stage for target actor instead of event.get_source()
Events are going to stop containing the destinatary, so stop using this
API. Querying the stage is equivalent and ensured to be up-to-date.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Carlos Garnacho
17730fe5c4 popupMenu: Query stage for target actor instead of event.get_source()
Events are going to stop containing the destinatary, so stop using this
API. Querying the stage is equivalent and ensured to be up-to-date.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Carlos Garnacho
678e34d371 keyboard: Query stage for target actor instead of event.get_source()
Events are going to stop containing the destinatary, so stop using this
API. Querying the stage is equivalent and ensured to be up-to-date.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Carlos Garnacho
4a8b8e6dd5 grabHelper: Query stage for target actor instead of event.get_source()
Events are going to stop containing the destinatary, so stop using this
API. Querying the stage is equivalent and ensured to be up-to-date.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2216>
2022-03-04 12:27:34 +00:00
Florian Müllner
4735193456 dash: Fix drag placeholder position in RTL
The position corresponds to a child index, which means it must
be mirrored when starting to count from the right.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2219>
2022-03-03 20:19:19 +00:00
Florian Müllner
cff09617f3 lookingGlass: Take separate grab for object inspector
The object inspector is not a child of the main looking glass dialog,
so it no longer receives pointer/touch events with the new grab API.

Fix this by pushing/popping a separate grab.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2218>
2022-02-26 18:15:28 +01:00
Jonas Dreßler
eeabdd150c status/bluetooth: Clear list of connected signals on adapter changes
With the porting of gnome-bluetooth to the new GListModel API the
behavior regarding removing adapters changed: It now no longer
guarantees to emit "device-removed" signals for the paired devices when
the adapter gets removed.

This means we need to do that ourselves now, so clear the list of
connected signals when the default adapter changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2214>
2022-02-26 15:53:19 +00:00
Jonas Dreßler
94d9264d96 Revert "status/bluetooth: Bail out and hide UI when there's no adapter"
Turns out this broke showing the bluetooth menu entry for adapters which
rely on the had-devices-setup property being set while turned off. These
adapters are completely removed from the system by the firmware after
powering them off, so in that case there is no default adapter anymore,
although we still want to show the menu.

This reverts commit aaf47167b5.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2214>
2022-02-26 15:53:19 +00:00
Jonas Dreßler
bb1ec88dfa overview: Don't expect time argument from drag-end signal
We actually don't get a time from the xdndHandler when it emits
drag-end, so we fail right now when calling
workspaceManager.get_workspace_by_index(time).

Fix it by getting the time ourselves instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2211>
2022-02-23 17:58:36 +00:00
Florian Müllner
5d1b9a429e workspaceAnimation: Fix warning on restacking
Only workspace groups that are associated with a workspace have a
background. As a result, when restacking window previews we end up
passing `undefined` to clutter_actor_set_child_above_sibling()
instead of null, triggering a warning.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2209>
2022-02-23 12:29:36 +00:00
Florian Müllner
2b45a01517 cleanup: Use new indentation style for object literals
We have made good progress on object literals as well, although there
are still a lot that use the old style, given how ubiquitous object
literals are.

But the needed reindentation isn't overly intrusive, as changes are
limited to the object literals themselves (i.e. they don't affect
surrounding code).

And given that object literals account for quite a bit of the remaining
differences between regular and legacy rules, doing the transition now
is still worthwhile.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2200>
2022-02-23 12:23:52 +00:00
Florian Müllner
ac9fbe92e5 cleanup: Use new indentation style for arrays
We've made some progress on transitioning to the modern indentation
style, and for arrays the legacy style is now rare enough to make
a bulk transition feasible.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2200>
2022-02-23 12:23:52 +00:00
Florian Müllner
696965c9f7 cleanup: Stop using string concatenation
It's unfortunate that we cannot fully embrace template strings, but
we aren't limited to "legacy" formatting either; replace the last
remaining places where we still use string concatenation to reduce
the difference between regular and legacy style a bit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2200>
2022-02-23 12:23:52 +00:00
Jonas Dreßler
3d3ed850fe status/network: Show disabled icon when bluetooth cellular is disabled
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2186

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2198>
2022-02-23 00:15:06 +00:00
Jonas Dreßler
2898b4d29c status/network: Show vpn-disabled icon when vpn is disabled
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2186

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2198>
2022-02-23 00:15:05 +00:00
Jonas Dreßler
ca4f6e0123 status/network: Show cellular-disabled icon when cellular is disabled
We also have this icon, so let's use it.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2198>
2022-02-23 00:15:05 +00:00
Jonas Dreßler
8a7f935969 status/bluetooth: Show bluetooth-disabled icon when disabled
We have an icon for this, so let's actually use it.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2198>
2022-02-23 00:15:05 +00:00
Jonas Dreßler
24143eae0d status/network: Show wireless-disabled icon when wifi is disabled
https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2186

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2198>
2022-02-23 00:15:05 +00:00
kyte
af2838d535 workspacesView: Add Home and End keys for workspace navigation
This commit adds support for Home and End keys to move
to the first and last workspace respectively.
Previously only Page_Up and Page_Down were recognized
to move one workspace at a time in overview mode.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2201>
2022-02-21 20:06:50 +05:30
Björn Daase
0fded45c76 dateMenu: Don't manipulate passed events
The event passed to formatEventTime() is reused at a later point.
Therefore, we are not allowed to manipulate the event directly.
This fixes an issue where the user clicks on a multi-day all-day event
the second time before the event gets garbage collected and the event
then is one day shorter.

Fixes 528ee01fef

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2184>
2022-02-21 09:24:11 +01:00
Xiaoguang Wang
8655814329 network: Get dbus path from NMDevice
In the NetworkManager new version the NMDevice.get_path returns pci
path, we need to use NM prototype to get device dbus path.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2194>
2022-02-21 02:41:40 +00:00
Sebastian Keller
23047b6d80 workspacesView: Disable workspace switching while in search
WorkspacesDisplay connects to key-press-event on the stage to switch
workspaces when page up or down is pressed and nothing else intercepts
these keys. This means that it is still possible to switch workspaces
while they are hidden behind the search.

So only allow these keybinding while the WorkspacesDisplay is reactive
which gets updated by ControlsManager depending on whether there is an
active search or not. Also set it as initially reactive, because
otherwise the keybindings would only work after performing an initial
search.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2204>
2022-02-20 16:53:43 +01:00
Ivan Molodetskikh
89fd575b99 screenshot: Update method name in screenshot bind
I missed it during refactoring. Makes this bind work again.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2202>
2022-02-20 12:04:02 +00:00
Jonas Dreßler
8a1c7ce590 parentalControlsManager: Be less verbose on the logs
There's a few things that are really unncessary to log without any
debugging enabled, for example "Getting parental controls for user", so
remove that.

Other things can be useful, so use console.debug() to log those.

Especially the warning in showAppInfo() we don't want log by default as
it spills tons of messages during shell startup (the async
initialization of the malcontent manager takes some time).

While at it, also make the !HAVE_MALCONTENT message a bit more accurate.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2196>
2022-02-18 22:05:16 +00:00
Jonas Dreßler
6c5a8d4ada dateMenu: Get interval for the right timezone
We're calling get_interval on tzA right now for both the tzA and tzB,
this causes a critical error during shell startup:

g_time_zone_get_offset: assertion 'interval_valid (tz, (guint)interval)' failed

Fix this and use tzB to get the offset for timezone b.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2195>
2022-02-18 19:55:46 +00:00
Jonas Dreßler
aaf47167b5 status/bluetooth: Bail out and hide UI when there's no adapter
While _sync() does already handle the case where there's no adapter just
fine (hiding the item and the indicator), let's make the handling a bit
more obvious and add an explicit check for !this._adapter where we bail
out and hide the UI.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2188>
2022-02-18 19:10:18 +00:00
Jonas Dreßler
109e2968e2 status/bluetooth: Use BlueZ state to determine whether bluetooth is on
There's two ways bluetooth can be powered off/on for us: One way is to
go via airplane mode (which uses rfkill), and the second way is to tell
BlueZ to turn off the device. Now rfkill always has the final say on
whether bluetooth is off, BlueZ OTOH has the final say on whether
bluetooth is on.

This means when we want to know whether bluetooth is turned on, we only
have to ask BlueZ, so simply read this._client.default_adapter_powered
for that.

For turning bluetooth on or off we use rfkill, but when turning it on,
make sure it's turned on in Bluez, too.

FTR, this is exactly the same way the Bluetooth panel in Settings
handles this.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2188>
2022-02-18 19:10:18 +00:00
Jonas Dreßler
34dcf2f7b1 status/bluetooth: Use JS Set for tracking signal connections
We can make things a bit fancier here and use a JS Set instead of an
object for tracking which devices we're having a signal handler
connected to.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2188>
2022-02-18 19:10:18 +00:00
Ivan Molodetskikh
5fb5c9f75e screenshot: Make screencast area indicator hidden from pick
It's a non-reactive actor on top of most of the stage. Set it as hidden
from pick so it doesn't break in-Shell DnD.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2192>
2022-02-17 09:05:10 +03:00
Jonas Dreßler
2607880bf6 dash: Subtract vertical margins from availHeight
The vertical margins are part of this._maxHeight, so we need to subtract
it in order to propery limit icon sizes when the available height is too
small.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2191>
2022-02-16 20:08:44 +00:00
Jonas Dreßler
b9abf6fcf5 overviewControls: Factor in margin-bottom for dash startup animation
We set a margin-bottom on the dash to give it some margin towards the
monitor edge, we need to factor in this margin when moving it outside of
the monitor for our animation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2191>
2022-02-16 20:08:44 +00:00
Florian Müllner
514558409c boxpointer: Make drawing arrow background optional
We currently use get_color(), which assumes the color exists in the
stylesheet (and prints a warning if it doesn't).

Switch to lookup_color() and skip filling the background if no
such colors exits.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2172>
2022-02-14 11:52:58 -03:30
Marek Černocký
172a8febe7 calendar: Fix xgettext comment for calendar date format
Gettext comments must be right next to the line with the extracted text,
otherwise they aren't included in pot/po file.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2179>
2022-02-14 13:36:35 +00:00
Carlos Garnacho
89db7bbb12 popupMenu: Avoid open state reentrancy in dummy menus
Dummy menus may emit ::open-state-changed multiple times for
the same state. Avoid doing that so that the PopupMenuManager
is happy not having to handle reentrancy.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5064
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2178>
2022-02-13 13:25:42 +00:00
Florian Müllner
f88222edd6 workspaceSwitcherPopup: Implement new OSD design
Move the popup to the bottom and represent workspaces as small dots
instead of as scaled down representations of the work area.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2127>
2022-02-12 15:28:52 +00:00
Florian Müllner
00ccea48a6 workspaceSwitcherPopup: Fix fading in
The popover is supposed to fade in, but that's currently
broken because:

 - we already start at full opacity
 - Clutter skips transitions while unmapped

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2127>
2022-02-12 15:28:52 +00:00
Florian Müllner
209d8c7f10 workspaceSwitcherPopup: Drop direction parameter
The original popup included arrows that indicated the direction of
the switch. We stopped doing that a long time ago, and ever since
the popup has only indicated active vs. non-active workspaces.

Simplify both the API and style to reflect that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2127>
2022-02-12 15:28:52 +00:00
Florian Müllner
3e8fd65045 osdWindow: Implement new OSD design
Switch to a horizontal layout, use smaller icons and move
the OSD to the bottom of the screen.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2127>
2022-02-12 15:28:52 +00:00
Florian Müllner
5135af0750 osdWindow: Don't inherit from St.Widget
We don't apply any styling to the toplevel OSD actor, so we can just
as well avoid the style machinery and use a plain actor.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2127>
2022-02-12 15:28:52 +00:00
Ivan Molodetskikh
2949244d72 status/remote-access: Don't show recording icon for screenshot UI casts
If there's only a single recording and it is the screenshot UI
recording, don't show the icon, because it's already displayed by the
new panel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2163>
2022-02-12 14:36:54 +00:00
Ivan Molodetskikh
144acb1d02 status/remote-access: Remove menu for stopping screencasts
It is now handled by a dedicated panel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2163>
2022-02-12 14:36:54 +00:00
Ivan Molodetskikh
6ec8480052 panel: Add a screen recording indicator
The indicator shows the recording duration and lets the user stop it on
click. It is more discoverable than the stop entry in the aggregate
menu.

The class extends ButtonBox directly rather than Button because Button
does nothing that it uses, and actually causes issues with its dummy
menu (its vfunc_hide() throws an "open-state-changed: Error: incorrect
pop").

The menu-set signal declaration is required by the panel.

The screencast is stopped upon button press in vfunc_event(), which
matches PanelMenu.Button's input handling.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2163>
2022-02-12 14:36:54 +00:00
Ivan Molodetskikh
33cf163f95 main: Move screenshotUI initialization earlier
A new screen recording panel indicator will connect to its signal, so it
needs to be initialized before the panel.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2163>
2022-02-12 14:36:54 +00:00
Alexander Mikhaylenko
348fcdaa77 background: Handle errors when loading wallpapers
Since it happens while setting up the startup animation, we will get stuck
inside that animation and block input if it fails.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2176>
2022-02-12 14:31:10 +00:00
Ivan Molodetskikh
1272ce37a7 Add new screenshot UI icons
To replace the applets-screenshooter one that was deprecated and isn't
even available on GNOME OS anymore.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2167>
2022-02-12 14:08:01 +00:00
Björn Daase
528ee01fef dateMenu: Replace ellipsis with full sentences
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2108>
2022-02-12 14:15:21 +01:00
Florian Müllner
a1dd1b25d8 js: Use templates for non-translatable strings
This reverts commit 9d941f8202 and replaces all additional
instances of .format() that have been added since.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2160>
2022-02-12 12:29:52 +00:00
Florian Müllner
29dfde5a4a js: Reindent some code
... to make sure it conforms to the non-legacy style
before touching it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2160>
2022-02-12 12:29:52 +00:00
Florian Müllner
615155f424 ibusManager: Fix version in log message
Whoops, we the log message complaints about minor.minor instead
of minor.micro.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2160>
2022-02-12 12:29:52 +00:00
Ivan Molodetskikh
a9fbee05b1 screenshot-ui: Add a key to open the screencast UI
It replaces the "record a short screencast" key from g-s-d.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2107>
2022-02-12 12:13:22 +00:00
Ivan Molodetskikh
b757f165a3 screenshot-ui: Add mode argument to open()
In a subsequent commit we will add a function to open the screenshot UI
in the screencast mode. This argument will allow us to do that without
resorting to accessing private fields from the outside.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2107>
2022-02-12 12:13:22 +00:00
Ivan Molodetskikh
6d3dd232ad screenshot: Connect shot/cast toggle with bind_property
This way we don't need to uncheck the other button manually, and it also
allows switching the mode by setting the other button's checked to
false, and not just by setting the target mode's button to true. An
example clean-up can be seen in the "V" key handler.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2107>
2022-02-12 12:13:22 +00:00
Ivan Molodetskikh
b0ebbb00b8 screenshot-ui: Add two key bindings from g-s-d
These two are moving into gnome-shell to unify screenshot handling and
allow for same-frame capturing.

While we're at it, move the keybindings .xml file from g-c-c here
because it belongs to gnome-shell.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2107>
2022-02-12 12:13:22 +00:00
Ivan Molodetskikh
414592acf9 screenshot-ui: Extract binding modes
We will re-use the same modes for more bindings in subsequent commits.
Also, while we're at it, invert the modes, to emphasize where the
screenshot UI cannot be used, rather than where it can be used.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2107>
2022-02-12 12:13:22 +00:00
Ivan Molodetskikh
84cfab2119 windowMenu: Add an entry to take a screenshot
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2105>
2022-02-12 00:20:54 +00:00
Ivan Molodetskikh
b2fd93f3da screenshot: Make captureScreenshot async
Now that it's split out and has no implicit arguments we can convert it
to be a proper async function.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2105>
2022-02-12 00:20:54 +00:00
Ivan Molodetskikh
907377ec40 screenshot-ui: Split out captureScreenshot()
It will be used for the window right-click menu and for handling keys
that are moving here from g-s-d.

Lockdown settings are also moving into the split _storeScreenshot() as
that is the only place where they are used.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2105>
2022-02-12 00:20:54 +00:00
Carlos Garnacho
c12f085530 ibusManager: Check existence of IBus systemd units before manual start
IBus is moving to being a systemd managed service in GNOME sessions
(see https://github.com/ibus/ibus/pull/2377). Since there will be a
transition period, and we still have to support non-systemd sessions,
check for this existence at runtime.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2171>
2022-02-11 23:51:24 +00:00
Sam Hewitt
4b56acb775 calendarMenu: Fix several visual issues with calendar and notifications
- drop card style from calendar
- remove focus ability from non-interactive calendar elements
- flesh out the styles for the calendar grid
- fix margin and padding issue with login screen calendar
- update no-notifications icon
- add padding to media player buttons
- catch a couple other minor style papercuts

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2161>
2022-02-11 23:23:05 +00:00
Florian Müllner
57b819ae2d calendar: Reindent code
We are about to touch some code that still uses the legacy indentation
style.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2161>
2022-02-11 23:23:05 +00:00
Alexander Mikhaylenko
de485c8f47 shellDBus: Add ScreenTransition()
Settings will use this when switching between light and dark styles.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2070>
2022-02-12 02:54:57 +05:00
Alexander Mikhaylenko
03e307f328 Revert "background: Mark pattern backgrounds as loaded"
This reverts commit fdac0602db.

The commit was fixing a crash, which cannot longer be reproduced, but also
introduced a noticeable white flash when switching wallpapers. This will
become even more noticeable when we try to uniformly transition the whole
screen.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2070>
2022-02-12 02:54:01 +05:00
Alexander Mikhaylenko
ad830fad1e network: Update Settings appid
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2175>
2022-02-11 17:33:34 +00:00
Alexander Mikhaylenko
07f28ceb39 shellDBus: Update Settings appid
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2175>
2022-02-11 17:33:34 +00:00
Florian Müllner
5442266f28 js: Simplify promisify() calls
If the finish function isn't specified, promisify will now try
to use the async name without '_async'/'_begin' suffix (if any)
and '_finish' appended.

Everything except IBus uses a variation of that pattern, so there's
quite a bit of boilerplate we get to remove…

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2174>
2022-02-11 16:24:01 +00:00
Florian Müllner
928f3288e9 js: Stop using Gio._LocalFilePrototype
gjs now supports overriding interface methods, so promisify()
works on Gio.File itself, not just the LocalFilePrototype cludge.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2174>
2022-02-11 16:24:01 +00:00
Razze
55a37ac992 Let users use the other mouse button to switch
As users can have different primary mouse buttons (left vs right) it
might happen, that a user with a different
preference wants to switch. Currently they need
to use the mouse button, that the current
user prefers.

This change enables users to use either the left or right button.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1972>
2022-02-11 12:33:25 +00:00
Florian Müllner
78c7d5ba0c status/location: Track enabled state
More fallout from commit e3a1d84992: We are tracking the agent's
:max-accuracy-level property that we don't use, but not :enabled.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2170>
2022-02-10 13:19:57 +00:00
Florian Müllner
5628849a40 status/location: Use correct enabled state
Commit e3a1d84992 split out the agent from the indicator, but kept
using a local 'enabled' property with no connection at all to the
actual state.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2170>
2022-02-10 13:19:57 +00:00
Florian Müllner
d7d484a8cd dbusServices: Allow to persist services via environment
Auto-shutdown prevents debugging a service with tools like
d-feet, so allow turning it off with an environment variable.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2169>
2022-02-10 13:14:45 +00:00
Carlos Garnacho
c13d44439f popupMenu: Avoid intermediate focus changes on menu switch
Currently when switching from a popup menu to another in the same
manager, we first show the new menu, then hide the old menu and
remove its grab, then create a new grab for the just shown menu.

This briefly ungrabbed moment will still trigger keyboard focus
changes, that might have other visible effects. In order to fix
this, change the grabbing order so first the new grab is created
then the old one is dismissed. This ensures focus moves from the
old menu to the new menu without gaps in between.

Since a grab is tied to an active menu, but close/grab are now
slightly decoupled, also ensure closing a menu only tears down its
own grab. This is necessary for correct accounting while doing the
grab shuffling.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5039
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2166>
2022-02-09 16:44:08 +00:00
Florian Müllner
00e41383c7 dbusServices/screencast: Removed unused properties
Those have been superseded by corresponding state enums.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2165>
2022-02-09 13:00:04 +01:00
Bastien Nocera
0531fc54e5 status/bluetooth: Fix wedged state
Fix a state where toggling the main Bluetooth switch in the header will
always show the "Bluetooth Off" menu header with "Turn Off" as the only
option.

To reproduce, with Bluetooth enabled and working, run
"hciconfig hci0 down" as root, and check the status menu.

See gnome-bluetooth!102 and gnome-control-center!1148

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4857
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2055>
2022-02-08 23:16:46 +00:00
Bastien Nocera
4a480a78af status/bluetooth: Port to new GListModel API
The GtkTreeView API was removed, and replaced with a GListModel API.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4748
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2055>
2022-02-08 23:16:46 +00:00
Florian Müllner
e07bc62fbd dbusServices/extensions: Give extensions access to the prefs window
The current preference API - buildPrefsWidget() - predates client-side
decorations. While extension authors have been finding ways around
the limitation of not having access to the window/titlebar, the change
to the new Adwaita API seems like a good time for an updated API that
officially provides that access (as far as allowed by libadwaita).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
285ebe020c dbusServices/extensions: Stop setting a default size
Adw.PreferencesWindow already sets an appropriate default.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
cd9532c678 dbusServices/extensions: Use default style class
libadwaita provides a series of style classes as part of its API.
Use those instead of meddling manually with the font size.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
7a8b636028 dbusServides/extensions: Use Adw.PreferencesWindow
Adapt the new GNOME platform API for the upcoming 42. This makes
sure that we get the latest version of the stylesheet, as well as
support for the new dark mode.

Using the dedicated preference API also gives extensions with more
complex preferences an easier and standardized way for implementing
multi-page preferences.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
089fd315dd dbusServices/extensions: Simplify actions handling
GTK4 has dedicated API for widget-specific actions, make use of that
instead of explicitly managing an action group.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
ae92c1c4eb dbusServices/extensions: Split error page from window
The error UI comprises the bits that are actually custom. Splitting them
out from the off-the-shelf window makes it easier to replace the dialog
with libadwaita's dedicated preference window.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
073dbc3a04 dbusServices/extensions: Split out prefs dialog
We're about to make changes to the UI, so this seems to be a good
time to split GUI and service code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Florian Müllner
c071c3ed4c dbus-services/extensions: Remove outdated requires
We are using GTK4, not GTK3 >= 3.20 ...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2012>
2022-02-08 19:11:19 +00:00
Bastien Nocera
b83b22bc58 powerProfiles: Remove support for power-profiles-daemon < 0.9.0
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2101>
2022-02-08 11:21:44 +00:00
Olivier Fourdan
3fc7357e3f util: Restore the NOFILE limit before spawning apps
Make sure the restore the original NOFILE limit prior to run the
commands so those don't inherit from the raised value.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2117>
2022-02-08 08:25:25 +00:00
Olivier Fourdan
bafacdf629 ibusManager: Restore the NOFILE limit
Use GLib's spawn_async() instead of Gio.SubprocessLauncher() which does
not support the child setup function to start ibus-daemon.

This way we can restore the NOFILE limit prior to run the ibus-daemon.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2117>
2022-02-08 08:25:25 +00:00
Olivier Fourdan
7c394b0512 networkAgent: Restore the NOFILE limit
Restore the original NOFILE limit prior to spawn the VPN helper.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2117>
2022-02-08 08:25:25 +00:00
Florian Müllner
8d8eba000f dbusServices: Allow replacement
The REPLACE flag we currently pass is useless, as replacing the service
is disallowed when not started with the ALLOW_REPLACEMENT flag.

Fix this by adopting a more standard pattern where replacement is always
allowed, but only actually requested when `--replace` is passed on the
command line.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2152>
2022-02-07 18:44:34 +00:00
Rachit Keerti Das
a67877f520 dash: Use pin instead of favorites
Use the term 'pin' for adding new items to the dash
Note that this is only a string change.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2136>
2022-02-07 14:12:04 +00:00
Alexander Mikhaylenko
a619eb55bf background: Support dark wallpapers
See https://gitlab.gnome.org/GNOME/gnome-control-center/-/merge_requests/1174

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2137>
2022-02-07 10:20:51 +00:00
Sam Hewitt
d9f3596592 lookingGlass: Fix visual papercuts
- change icon size to 16px
- give those icons a buttonized style

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2156>
2022-02-06 20:59:38 +01:00
Florian Müllner
a92f749daf lookingGlass: Turn toolbar icons into actual buttons
Yes, we can use reactive icons with a `button-press-event` handler,
but really, there's a standard control for that kind of behavior ...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2156>
2022-02-06 20:59:35 +01:00
Florian Müllner
35466b0e0a dbusServices/notifications: Disallow acting on "foreign" IDs
The Notify() and CloseNotification() methods act on a notification,
identified by the passed ID. Just like it makes sense to only emit
notification signals to the original sender, those methods should
be restricted to the notification owner.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2153>
2022-02-05 12:17:23 +00:00
Florian Müllner
0cbab09044 dbusServices/notifications: Stop broadcasting signals
All fd.o Notifications signals are emitted for a particular notification,
so debugging aside, only the owner of said notification has a legitimate
reason to act on it.

So far we (and other implementations like the old notification-daemon)
have relied on the client-side to properly filter the signals (like
libnotify), but at least the QT implementation is known to not do
that.

Enforce correct client behavior by only emitting the signal to the
original sender.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2153>
2022-02-05 12:17:23 +00:00
Sam Hewitt
1944af4013 calendar: Use symbolic icon for No Notifications
- drop old assets
- use symbolic icon for no notifications

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2157>
2022-02-04 13:29:36 -03:30
Sam Hewitt
0e3ddb1f02 theme: Remove icon resources from theme
- move all icons to the icons directory
- rename some icons to be more meaningful
- put all icons on a resource sheet
- update references to icon name changes
- deprecate icons for those in standard set

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2141>
2022-02-04 13:59:20 +00:00
Florian Müllner
7a58f76278 keyboard: Reindent key definitions
... to match the non-legacy eslint config.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2141>
2022-02-04 13:59:20 +00:00
Sam Hewitt
372ccc3e29 status/a11y: Update deprecated icon name
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2155>
2022-02-04 13:08:42 +00:00
Ivan Molodetskikh
a0206dcc3f systemActions: Add a screenshot UI action
It waits for the overview to close because otherwise the screenshot UI
would capture the overview.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2106>
2022-02-04 13:03:09 +00:00
Ivan Molodetskikh
6765fac76a screenshot: Move close button to the panel
CSS and JS adapted from the Overview window close buttons, but with some
style tweaks requested by the designers.

Since the screenshot UI is long-lived (it's created once at startup,
rather than every time it's opened), we need to refresh the close button
position, as it can change at runtime. Subscribing to preference changes
seems to be skipped for bindings generation in Mutter, but simply
refreshing upon opening the UI should do the job.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2147>
2022-02-03 16:43:02 +00:00
Ivan Molodetskikh
3cc045b6b8 screenshot: Close on lock
Since the screenshot UI cannot open in GDM or on the lock screen, it
seems that simply closing it on any session mode update is sufficient,
without adding extra variables.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2149>
2022-02-03 16:24:43 +00:00
Florian Müllner
4f27a6e520 panel: Remove panel corners
They were a cute gimmick for a decade, now it's time to say
goodbye ... 😢https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5010

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2151>
2022-02-03 00:19:25 +01:00
Carlos Garnacho
61b34ffe78 dnd: Drop captured event handler
This was here exclusively to silence out events from other pointing
devices in the stage. Since ClutterGrab being used now is global to
all devices and events are coerced to an invisible actor, there is
no need to explicitly do this.

Also, this event handler was set on the stage, while the grab happened
on a child, so it was fairly uneffective already.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2146>
2022-02-02 17:22:20 +01:00
Carlos Garnacho
d32005b3a4 dnd: Make event handler actor reactive
Even though we coerce events on it through a grab, it does require
to be reactive to be considered a keyboard focus. Make it reactive
so it can handle key events again.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5005
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2146>
2022-02-02 17:14:37 +01:00
Carlos Garnacho
939e26eb43 popupMenu: Ensure to let focus manager handle key events
Since the grab no longer lets events bubble up to the stage unstopped,
we should be forwarding the key events that bubbled up to the dialog
to maybe cycle focus.

Fixes broken keyboard navigation in several context menus around the
shell, other than the panel ones.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2140>
2022-02-01 14:30:24 +00:00
Carlos Garnacho
fcf70aa021 modalDialog: Ensure to let focus manager handle key events
Since the grab no longer lets events bubble up to the stage unstopped,
we should be forwarding the key events that bubbled up to the dialog
to maybe cycle focus.

Fixes focus cycling on keyboard navigation inside dialogs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2140>
2022-02-01 14:30:24 +00:00
Carlos Garnacho
b3f5fdcb6b endSessionDialog: Connect to events in the dialog itself
Connecting to stage events won't work from a modal dialog, since the
grab will take events from the portions of the actor hierarchy above
the grabbing actor.

Connect to events from the dialog itself, so that the end session
dialog can again show the "boot options" easter egg.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2140>
2022-02-01 14:30:24 +00:00
Carlos Garnacho
e374a4957f grabHelper: Fix handling of events within the grabbed actor
Commit d92b71d2b2 went overeager in the removal of the additional
actors that were allowed to handle events (since the new grab
infrastructure makes them unable to see events in the first place),
and removed an early return in the captured event handler meant to
let events go through in those cases.

Since the grabbing actor was also part of this group, this was also
the code path where child actors of the grabbing actor could handle
events. Removing these made the captured event handler eat most
events meant for children. Add this check back, specifically for the
grabbing actor.

While at it, explicitly check (and propagate) crossing events,
since these are now enforced to be propagated (and warned about) in
Mutter.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4991
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2140>
2022-02-01 14:30:24 +00:00
Alexander Mikhaylenko
f6edfd503b status/a11y: Use the new high-contrast gsettings key
With the new boolean setting, the "High Contrast" toggle can now
simply toggle the setting instead of the current gtk/icon-theme
shenanigans.

This isn't only much simpler, but will also make switching between
high-contrast and a non-default theme reliable at last.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2069>
2022-02-01 14:11:07 +00:00
Alexander Mikhaylenko
f67418c682 st/settings: Use the new high-contrast gsettings key
We now have a dedicated "high-contrast" setting that we can
use instead of a "magic" theme name.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2069>
2022-02-01 14:11:07 +00:00
Daniel van Vugt
ed7fe756ef workspace: Fix a signal leak in WorkspaceBackground
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2143>
2022-02-01 12:11:54 +00:00
kyte
1260e35093 swipeTracker: Ignore Meta key while workspace scroll gesture is in progress
Workspace transition stopped midway when the Meta key
was released while the two-finger scroll gesture was
in progress. This commit ignores the Meta key once
the gesture has been confirmed and is in motion.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2135>
2022-01-31 22:09:28 +00:00
Ivan Molodetskikh
5b83ed59dd screenshot: Enable opacity redirect for the panel
This makes the panel look correct when it fades out (e.g. while dragging
the area selection around or while the screenshot UI is fading in and
out).

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2138>
2022-01-31 12:39:18 +00:00
Ivan Molodetskikh
0d1f6b0eb9 screenshot: Remove _dragDevice
It went unused since
21cc534add

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2139>
2022-01-31 11:49:40 +03:00
Ivan Molodetskikh
1e4bbc9cd4 screenshot-ui: Put screencasts into a subdirectory
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:49 +00:00
Ivan Molodetskikh
6f252657fd screenshot-ui: Add screencast done notification
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:49 +00:00
Ivan Molodetskikh
1107fc50ca screenshot-ui: Add screencast area indicator
It shows the screencast area during recording.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:49 +00:00
Ivan Molodetskikh
003eb4c4e0 screenshot-ui: Add area and screen recording
It works by passing the selected area to org.gnome.Shell.ScreencastArea.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:49 +00:00
Ivan Molodetskikh
6d0c2ae697 status/remote-access: Add menu for stopping screencasts
This is specifically for stopping the screenshot UI screencasts for now.
It's possible to stop arbitrary screen recording handles, however due to
an issue with pipewiresrc, this method cannot currently work for cleanly
stopping Shell's own screen recordings. Hence the best we can do is to
handle just the screenshot UI screencasts to let them stop cleanly.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:49 +00:00
Ivan Molodetskikh
fc0bff5e48 screenshot-ui: Add a screencast in progress property
The screen recording menu entry will use this to check if a screencast
is currently active and to stop the screencast.

Use a GObject property so we can bind to notify; specifically we'll bind
the visibility of a screencast area indicator.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:49 +00:00
Ivan Molodetskikh
eb60fa2908 screenshot-ui: Bind button to shot/cast
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:48 +00:00
Ivan Molodetskikh
497d9f32eb screenshot-ui: Add screenshot/screencast toggle
Currently does nothing. When we're in screencast mode, we hide the
screenshot preview because screencast doesn't start until the capture
button is pressed.

The window selection is currently left as is, but it should probably be
changed to something closer to a real overview, showing windows in
real-time.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2103>
2022-01-29 14:43:48 +00:00
Carlos Garnacho
d92b71d2b2 grabHelper: Drop addActor/removeActor calls
These no longer do what they meant to do, and are now unused.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2046>
2022-01-29 02:19:14 +01:00
Carlos Garnacho
1673e87de4 appDisplay: Drop grabHelper.addActor() call
This no longer does what it advertises to do, the folder dialog
is already modal and handles clicks outside to dismiss the dialog,
so this does not seem necessary either.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2046>
2022-01-29 02:19:14 +01:00
Carlos Garnacho
1dcc6d1b6b js/main: Add docs to private function
Oh, well...

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:32:42 +01:00
Carlos Garnacho
21cc534add screenshot: Port to Clutter.Grab
Stop using device/sequence grabs for corner handles. Also
make the toplevel actor reactive, so it can handle the key events
it means to.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
21913b45af dialog: Handle key events on self
And set the dialog actor reactive. Specifically, we do not know whether
the parent actor is reactive or not, and we should not be changing that
from here, so do not use that actor to handle key events.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
7419674bd3 js: Change main.pushModal to return the Clutter.Grab handle
All callers have been updated to keep this handle to identify their
own grab.

Also, optionally use the windowing state to determine whether
the grab is suitable for the specific uses. This removes the need
to trying to grab twice in the places where we settle for a keyboard
grab.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
2709f6c102 popupMenu: Refactor focus and key management
With the presence of Clutter.grab(), this behaves differently enough
that needs some redoing. The larger difference is what actors are
eligible for handling events.

In the older code, a PopupMenuManager would ask the grabHelper to
capture events from all the stage, and selectively silence events
on any actor that is not the currently shown popup menu or the
"source" actor for any other popup in the group (i.e. those that
would pop up another menu).

But we don't want to just silence events, we want to emit the
correct set of crossing events when a popup menu is shown or closed,
this requires a backing ClutterGrab() on the currently shown menu.
Since the presence of a grab also affects the ability to have actors
outside the grab area to handle events, the PopupMenuManager now
must detect hovering and focus changes to other menu sources by
handling events on the grabbed popup itself.

Redo the grabbing over Main.pushModal/popModal (i.e. ClutterGrab,
plus keyboard focus restoration) and a captured event handler on
the currently shown menu, to make PopupMenuManager behave as it
is expected with this new kind of grabs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
63725ef0ef popupMenu: Drop unused blockSourceEvents switch
This could be used to selectively ignore events on the source
actor, but is now unused.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
0f315a63f3 grabHelper: Use Clutter.grab() underneath
This is subject to further possible simplifications. Use Clutter.grab
to redirect input and focus, a fundamental difference here is that
we do redirect input to the topmost owner of the grabhelper stack,
instead of the stage. This is better behaved with the presence of
other grabs, at the cost of some behavioral changes.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
3a77d78b42 loginDialog: Perform grab on the stage actor
Despite this grab happening in the dialog, we are also interested in
things happening outside of it. Move this grab to happen in the stage
itself, so the changed grab semantics don't make it impossible to
interact with parts of the login screen.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
f2cca5cccb padOsd: Capture events on itself
This actor is setting itself modal, should also stop listening to
events from above it, since none will be gotten.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
5305bee94c dnd: Use Clutter.grab() for DnD grab
We still listen to an specific device or touch sequence, but we
don't grab it specifically.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:30 +01:00
Carlos Garnacho
bad385d15c lookingGlass: Use lookingGlass dialog for modal grab
We want the whole dialog to handle events while shown. To compensate
for the entry not being "grabbed", make it take focus when showing.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00
Carlos Garnacho
05a6b35991 overview: Propagate crossing events in cover pane
When animating the overview we temporarily cover it with an actor that
ignores events. This actor should still allow crossing events to go through
as per Mutter requirements.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00
Carlos Garnacho
35d293df6c overview: Grab on the stage
This is more in line with the places where we want events to be
handled (i.e. all). So make the overview take a grab on the
stage itself.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00
Carlos Garnacho
f4cae72d17 main: Use Clutter.grab() underneath Main.push/popModal
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00
Carlos Garnacho
49b9ae08d8 appDisplay: Explicitly highlight selected app icon
While the menu is popped up, we artificially keep the icon highlighted
by ensuring it's hovered, and muting events on the app icon until the
menu is popped down.

This is somewhat convoluted and won't work with Clutter.grab(), where
it will be the menu itself that is the owner of input events while
shown, so cut some corners and explicitly tell the app icon to be
highlighted.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>
2022-01-29 01:16:29 +01:00