Commit Graph

8471 Commits

Author SHA1 Message Date
Sebastian Keller
f322e00ca5 windowManager: Set correct unfullscreen gesture enabled state on startup
The unfullscreen gesture was defaulting to enabled until the first
window focus change. With it now being run in the capture phase, the
gesture was preventing clicks in the top panel except on the activities
button before the first window was opened.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2087>
2022-01-06 04:53:23 +01:00
Florian Müllner
8c1cf3fa3d dbusServices/extensions: Instruct gjs to generate unique GType names
Like the main gnome-shell process, the extensions service loads code from
extensions. It therefore makes sense to prevent GType name clashes there
as well, just like we already to in the gnome-shell process.

This may break some extensions that use the old type name in .ui files,
but they can be fixed easily by specifying an explicit GTypeName.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2024>
2022-01-05 19:28:25 +00:00
Sebastian Keller
2801d0bfe3 messageTray: Close SHOWING banner when its notification is destroyed
Currently only banners in the SHOWN state are hidden when the underlying
notification is destroyed, but if they are in the SHOWING state, they
remain visible. Because the 'notification' member has already been set
to null when the notification got destroyed, closing the banner by
clicking on the close button, will not do anything and clicking on the
notification itself will result in an error message. For notifications
without a timeout, i.e. critical ones, this will result in an
uncloseable notification.

This can happen if the program creating a critical notification
immediately closes it again, as might happen with power notifications
from gnome-settings-daemon in some situations.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4855
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2079>
2022-01-05 15:51:14 +00:00
Evan Welsh
f04914ac15 js: Remove dead code in loginDialog and workspacesView
- this._scrolling no longer exists
- _getBannerAllocation takes a single argument

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2042>
2022-01-05 15:44:28 +00:00
Emily Gonyer
f752be2bfe docs: Use gender-neutral pronouns
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2031>
2022-01-05 16:34:23 +01:00
Florian Müllner
ab52ce4591 dateMenu: Port to GWeather 4.0
Besides dropping its GTK dependency (which doesn't affect us),
GWeather 4.0 replaces its own timezone type with GTimeZone.

It's easy enough to adjust to that, so port over to the new
version.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2083>
2022-01-05 04:07:25 +01:00
Florian Müllner
f07a40d5ee environment: Require libgweather 3.0
GWeather did a major version bump on its main branch, so it is
now possible that multiple versions are installed in parallel,
and we should explicitly pick the one we are using.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2083>
2022-01-05 03:39:57 +01:00
Sebastian Keller
dff5bef45c iconGrid: Remove unused spring animation code
The spring animation has not been used since 40.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2081>
2022-01-02 16:24:14 +01:00
Sebastian Keller
e21b4ad04a appDisplay: Remove leftover code from the spring animation
These are some leftovers from when the shell stopped using the spring
animation in 40.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2081>
2022-01-02 16:24:14 +01:00
kyte
920714008c lockScreen: Don't wake up screen in DND mode
Screen woke up whenever a new notification popped up
on lock screen even when DND was turned on.
This commit changes this behaviour to not wake
the screen up in such case.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2051>
2021-12-23 17:20:49 +01:00
Florian Müllner
daf729de11 build: Replace deprecated meson functions
Replace deprecated functions with their direct replacements:

 - dep.get_pkgconfig_variable() → dep.get_variable()
 - prg.path() → prg.full_path()
 - source/build_root() → project_source/build_root()

In one case we need meson.global_source_root() that was only
added in meson 0.58, so bump the requirement to that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2077>
2021-12-23 15:52:21 +00:00
Sergio Costas
8b3f74bb7d workspaceAnimation: Make WorkspaceGroup public
The WorkspaceGroup class in defined as CONST, which means that,
strictly speaking, is inaccessible from outside the file
workspaceAnimation.js. But Desktop Icons NG needs access to it.

Although the current Javascript engine "tolerates" this access,
a warning message is shown in the log advertising that it's
incorrect, and that although it is still allowed, the code
should be fixed.

This patch changes the definition from CONST to VAR to allow
accessing it from extensions.

jk

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2068>
2021-12-22 18:27:07 +00:00
Sebastian Keller
3d8b866a9d util: Properly handle markup in highlighter
The code to highlight matches did not properly escape the passed in text
as for markup before adding its highlighting markup. This lead to some
search result descriptions not showing up, because their descriptions
contained characters, such as "<", that would have to be escaped when
used in markup or otherwise lead to invalid markup.

To work around this some search providers wrongly started escaping the
description on their end before sending them to gnome-shell. This lead
to another issue. Now if the highlighter was trying to highlight the
term "a", and the escaped description contained "&apos;", the "a" in
that would be considered a match and surrounded by "<b></b>". This
however would also generate invalid markup, again leading to an error
and the description not being shown.

Fix this by always escaping the passed in string before applying the
highlights in such a way that there are no matches within entities.

This also means that search providers that escaped their description
strings will now show up with the markup syntax. This will have to be
fixed separately in the affected search providers.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4791
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2033>
2021-12-22 16:47:18 +00:00
Sebastian Keller
5e0c842429 search: Split out the description highlighter into its own class
No functional change yet, only preparation to allow adding a unit test
later on.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2033>
2021-12-22 16:47:18 +00:00
Daniel van Vugt
9069183cec windowManager: Use one consistent animation mode for minimize/unminimize
Firstly don't use EASE_IN for any minimize/unminimize animations because
those start slow and end fast. The effect of that was minimize/unminimize
appearing to be unresponsive to user clicks for a little while before
accelerating away. All such animations should be EASE_OUT for an immediate
response followed by deceleration at the end.

Secondly we replace the shallow 200ms QUADratic curves with a steeper
400ms EXPOnetial curve. Because it's steeper and twice as long the fast part
feels the same as 200ms QUAD, but there's an extra 200ms after that in which
to slow down smoothly giving a more fluid appearance. No sudden stops.

Fixes: https://bugzilla.gnome.org/show_bug.cgi?id=786789
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2066>
2021-12-22 16:16:23 +00:00
Daniel van Vugt
ca1291e418 windowManager: Unminimize a window to its buffer rect geometry
If you slow down the unminimize animation you will notice it overshoots and
then snaps back, but only for decorated windows. Undecorated windows would
unminimize to their correct position. So we remove decorations from the
equation and now all window types unminimize to their correct position.

This wasn't noticeable because the unminimize animation velocity is usually
so high at the end (EASE_IN_EXPO) that there are no frames rendered near the
end of the curve to show it had overshot.

This appears to be consistent with the Mutter source - associating the
actor geometry with `buffer_rect` and not `frame_rect`. See
`meta_window_actor_sync_actor_geometry` for example.

Related to: https://bugzilla.gnome.org/show_bug.cgi?id=786789#c1

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2066>
2021-12-22 16:16:23 +00:00
Florian Müllner
5106ca9291 windowManager: Use MetaWindow.has_attached_dialogs()
Now that MetaWindow itself exposes a method for checking for
attached dialogs, we can use that instead of our own helper
method.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2054>
2021-12-21 12:11:33 +00:00
Sebastian Keller
85609a232d util: Wait for initial name owners in DBusSenderCheck before checking
Otherwise an allowed caller might get rejected if the call is right
after a gnome-shell restart and the watchers have not finished running
their callbacks yet.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4813
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2048>
2021-12-04 16:57:25 +00:00
Jonas Ådahl
37271ffe70 switchMonitor: Only show 'mirror' and 'join' modes when not a laptop
The 'external only' and 'builtin only' options makes no sense if there
are only external monitors.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3276
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2056>
2021-12-04 16:21:31 +00:00
Dylan McCall
4a23ddffa8 messageList: Give focus to next message on delete
When the user deletes a message using the keyboard, set the keyboard
focus to the next message, or to the list container itself, so it
remains possible to navigate using the keyboard.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/502
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2053>
2021-12-01 10:19:54 +00:00
Sebastian Keller
72a6450017 calendar-server: Remove the all-day property of events
The way it is currently calculated is broken for days with DST changes
or leap seconds and it is not needed anymore anyway. This will also make
the fix in the following commit simpler.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2023>
2021-11-30 02:13:24 +00:00
Sebastian Keller
d8efce0ffd dateMenu: Ignore the allDay property of an event
Given the correct end date this code would be able to determine this
correctly itself and doesn't need to rely on that property. And events
without correct end dates are currently not shown anyway. This prepares
for removing the allDay property entirely.

This also fixes events going from 13:00 the current day to 01:00 not
showing "...". It also fixes multi-day events wrongly detected as
all-day events by the calendar-server showing up as "All day", despite
only covering 1 hour of the day.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2023>
2021-11-30 02:13:24 +00:00
Sebastian Keller
2250653673 calendar: Fix inclusion of zero-length events
Events with a date time (not just a date) where the end time is missing
or matching the start time were considered to not overlap the selected
interval if they were happening on the start time of the interval. This
was causing such zero-length events to be omitted from the calendar if
they were starting at 0:00.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2023>
2021-11-30 02:13:24 +00:00
Sebastian Keller
9604778343 calendar: Start ranges at 0:00 and iterate in whole days
Using a starting time other than 0:00 will prevent events before the
chosen starting time from showing up for that range. This was causing
events before 12:00 to be missing in the shell calendar on the first day
of a range.

Fix this by always starting at 0:00 and then incrementing by days rather
than a time value that depending on DST or leap seconds may or may not
correspond to a day.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2023>
2021-11-30 02:13:24 +00:00
Sebastian Keller
2fffe91488 dateMenu: Use intervals with non-inclusive ends for date ranges
The ical events, we are comparing these intervals to use the first point
in time after the end of the event as their end time, while the code in
gnome-shell was using the last point in time within the range. This was
causing multi-day events ranging from 0:00 to 0:00 to have a trailing
"..." shown on the last day.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2023>
2021-11-30 02:13:24 +00:00
Florian Müllner
aba0d0bb1b main: Warn when unsafe mode is toggled
MetaContext:unsafe-mode was added as a debugging tool to temporarily
remove restrictions on privileged APIs. But as it turns out, there
are now extensions that toggle the property permanently. Right now
none of them are malicious (as far as I can see), but it's still a
bad idea and should be discouraged.

Do this with a notification that warns the user when unsafe mode is
enabled non-interactively (i.e. via looking glass), and hopefully
also clarifies what the weird lock icon in the top bar is about.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2050>
2021-11-26 16:14:39 +00:00
Carlos Garnacho
254b0ca2ad windowManager: Set up unfullscreen/app-switch gestures in the capture phase
Use the new API to specify the gesture phase.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1992>
2021-11-24 22:33:18 +00:00
Carlos Garnacho
748fe074c4 swipeTracker: Set up TouchSwipeGesture in the capture phase
Use the new API to specify the gesture phase.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1992>
2021-11-24 22:33:18 +00:00
Florian Müllner
7d895874b6 layout: Removed unused method
Commit a6b4d4945 removed the only caller in 2013(!)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2034>
2021-11-21 20:46:20 +00:00
Evan Welsh
826083d763 appDisplay: Remove unused animate() implementations
Usages were removed in gnome-shell!1593

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2041>
2021-11-17 10:31:42 +00:00
Evan Welsh
f8f37e0161 modalDialog: Consistently return correct boolean for open() in ModalDialogs
Previously these calls either ignored the return from super.open() or
implicitely returned false.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2038>
2021-11-17 10:24:47 +00:00
Evan Welsh
75e57749f0 keyring: Fix incorrect reference to the label instead of string
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2036>
2021-11-17 10:19:08 +00:00
Evan Welsh
01a23b0553 calendar: Use boolean operations instead of bitwise operators
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2039>
2021-11-17 10:13:44 +00:00
Sebastian Keller
34bf17ad27 magnifier: Remove call to dropped Clutter::get_default_frame_rate()
Clutter::get_default_frame_rate() has been removed in mutter!2002, but
it is still being used here. Given that this was basically hardcoded to
60 in mutter with the only way of changing this being an obscure
environment variable, just use that value here directly. This avoids a
crash when starting gnome-shell with the magnifier enabled.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4761
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2025>
2021-11-16 23:34:38 +00:00
Georges Basile Stavracas Neto
795312b8d5 environment: Require gnome-desktop 3.0
Pretty much the exact same case of 9ce6756235.

libgnome-desktop saw a major version bump, and we have to
stick with 3.0 for a while.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2030>
2021-11-11 16:20:39 -03:00
Georges Basile Stavracas Neto
9ce6756235 environment: Require GnomeBluetooth 1.0
libgnome-bluetooth will start to offer a 2.0 library version
depending on GTK4. Given that GNOME Shell already depends on
GTK3, it cannot use this next version of gnome-bluetooth. And
since GJS will automatically try and use the latest version
available of any library, Shell must specify it wants 1.0
explicitly.

Add a required GnomeBluetooth version number when importing it
for the status indicator.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2015>
2021-11-11 19:13:40 +00:00
Sebastian Keller
34b6cd0bea magnifier: Disable desaturation effect when not in use
The desaturation effect was always enabled, regardless of the specified
factor. This was causing the magnifier to always hit offscreen
rendering, even when not necessary. Additionally offscreen rendering is
currently also causing glitches in MetaWindowGroup which this helps to
avoid in some cases.

Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/1678
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2026>
2021-11-08 15:39:34 +00:00
Sebastian Keller
2e275cca25 shellMountOperation: Remove unused volume monitor
It seems to have never been used since 6b5f9a647a, the commit that
introduced it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2021>
2021-11-03 22:13:00 +00:00
Carlos Garnacho
0177560952 inputMethod: Do not reset invisible preedit on focus_out
If the preedit is in invisible state, the last preedit string that
was sent around is already null, so there is no need to clear the preedit
in that case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2011>
2021-11-01 17:02:50 +00:00
Carlos Garnacho
047691b0d3 inputMethod: Do not communicate preedit text change on reset
This is now done in the ClutterInputFocus for us, since
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1940. There
is no need to duplicate this call, and it happens to cause undesired
scrolling to content in some cases when this reset happens during
a change in the IM focused client state.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4647
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2011>
2021-11-01 17:02:50 +00:00
Carlos Garnacho
286cfdc6d4 inputMethod: Equate empty preedit string to null
If we get '' from the IM as the preedit string, it is pretty safe
to handle it as "no preedit" altogether.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2011>
2021-11-01 17:02:50 +00:00
Florian Müllner
b93342f72e dbusServices/extensions: Only allow one dialog at a time
Showing multiple preference dialogs at the same time (for instance
by repeated `gnome-extensions prefs` calls) may or may not work as
expected, depending on whether any of the dialogs is modal or not
(read: opened via the Extensions app).

The easiest way to address this is to disallow more than a single
dialog at the time. It's arguably also the more predictable behavior,
and means extensions don't have to deal with inconsistent state
caused by multiple dialogs.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2013>
2021-10-30 21:50:47 +00:00
Florian Müllner
4d2b008966 dbusServices/extensions: Fix shutdown after showing prefs
GTK4 relies entirely on refcounting for cleanup (that is,
there is no longer a destroy() method that forces a dispose
run regardless of the refcount).

Unfortunately that makes cleanup harder in (some) language
bindings, where an object may be kept alive implicitly by
closures etc.

Address this by releasing the hold count when the window
is closed rather than when it is destroyed.

This isn't the most elegant, but it ensure that the service
doesn't get stuck if an extension doesn't carefully clean
up everything in its prefs widget.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2013>
2021-10-30 21:50:47 +00:00
Florian Müllner
cc5cc0d653 environment: Apply autoReverse/repeatCount to all transitions
Like the old Tweener API, ease() allows to transition multiple
properties at once. If autoReverse or repeatCount are specified,
they should apply to all transitions, but right now we only set
them for the first one.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2007>
2021-10-21 19:52:33 +02:00
Ray Strode
d7b1264897 sessionMode: Drop allowExtensions property
Now that we allow extensions at the lock screens, extensions
are allowed for every session mode gnome-shell would typically
change to at runtime.

This means there's little advantage to having an allowExtensions
property in the session mode definition.

This commit simplifies the code a bit by dropping the property.

Third party session modes can still lock down extensions through
gsettings if they need to.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1967>
2021-10-14 18:40:53 +00:00
Ray Strode
2bf31dc49f sessionMode: Allow extensions at the login and unlock screens
Now extensions can specify which session modes they work in,
but specifying the login screen or unlock screen session modes in
an extensions metadata still won't work, because those session
modes disallow extensions.

This commit fixes that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1967>
2021-10-14 18:40:53 +00:00
Ray Strode
242cff7abf extensionSystem: Allow extensions to run on the login screen
At the moment it's not realy possible to extend the login screen to do
things it doesn't have built-in support for. This means in order
to support niche use cases, those cases have to change the main
code base. For instance, oVirt and Vmware deployments want to be able
to automaticaly log in guest VMs when a user pre-authenticates through a
console on a management host. To support those use cases, we added
code to the login screen directly, even though most machines will never
be associated with oVirt or Vmware management hosts.

We also get requests from e.g. government users that need certain features
at the login screen that wouldn't get used much outside of government
deployments. For instance, we've gotten requests that a machine contains
prominently displays that it has "Top Secret" information.

All of these use cases seem like they would better handled via
extensions that could be installed in the specific deployments. The
problem is extensions only run in the user session, and get
disabled at the login screen automatically.

This commit changes that. Now extensions can specify in their metadata
via a new sessionModes property, which modes that want to run in. For
backward compatibility, if an extension doesn't specify which session
modes it works in, its assumed the extension only works in the user
session.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1967>
2021-10-14 18:40:53 +00:00
Ray Strode
7e5ee2c282 extensionSystem: Get rid of _enabled boolean optimization
At the moment a session mode either allows extensions or it doesn't.
If it allows extensions, then the entire available list of
configured extensions get enabled as soon as the session mode is
entered.

Since enabling or disabling extensions is an all or nothing situation,
the code tracks whether extensions are already enabled when entering
the session mode, and if so, avoids iterating through the extension list
needlessly. It does this using a boolean named _enabled.

In the future, the extensions themselves will be given some say on
whether or not they should be enabled in a given session mode. This
means, the configured extension list may contain extensions that
shouldn't be enabled for a given session mode, and the _enabled boolean
will no longer be appropriated.

This commit drops the _enabled boolean optimization.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1967>
2021-10-14 18:40:53 +00:00
Ray Strode
ceee53aa0a unlockDialog: Properly reset auth prompt when showing it
If a user hits escape twice really fast when coming back to
their machine to unlock it, they made end up getting presented
with a non-functional unlock screen that doesn't show their
user icon and doesn't ask for a password.

This is because showPrompt assumes that if an auth prompt already
exists, it's ready to go. That may not be true, if it's in the
process of getting torn down at the time because it's in the middle
of a cancel animation.

This commit solves the problem by ensuring the auth prompt is always
in a fresh reset state before showing it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1999>
2021-10-08 11:56:23 -04:00
Ray Strode
5d5bfe492c unlockDialog: Don't create AuthDialog just to finish it
If the the unlock dialog gets finished before an auth dialog is
created, the code currently creates one just to tell it to finish.

This commit changes the code to skip creating the auth dialog in
that case.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1999>
2021-10-08 11:13:11 -04:00