Commit Graph

2799 Commits

Author SHA1 Message Date
Florian Müllner
628866f7d2 shell/app: Also make recent when raising other windows
Mutter no longer picks the next focus window based on the stacking
order, but on the active workspace's MRU list. So to keep the old
activating behavior, raising other windows is no longer enough.

Use the newly added raise_and_make_recent() method to also move the
window to the front of the MRU list.

https://gitlab.gnome.org/GNOME/mutter/-/issues/2540

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2659>
2023-02-23 20:45:31 +01:00
Florian Müllner
661356766b dateMenu: Use desktop action to open Evolution calendar
We include a private hidden .desktop file for evolution's calendar
component, so that we can explicitly open that component when
evolution is configured as the default calendar application.

That's because the evolution developers didn't want to ship
additional .desktop files at the time, but they have since
then included a desktop action that can be used for the same
purpose.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2479>
2023-02-12 20:14:02 +00:00
Carlos Garnacho
41c91c7a3b window-tracker: Only emit ::tracked-windows-changed on title changes
Since commit a1d650ce27, window title changes are listened for in the
ShellWindowTracker in order to emit ::tracked-windows-changed when
there are window title changes.

The rest of the things that happen in between (removing the window
from a ShellApp, possibly have it destroyed, and possibly creating a
new ShellApp to re-insert the window) are superfluous and even result
in the altTab switcher popup ending up confused about the applications
available.

Only emit the signal so changes can be followed on D-Bus, but avoid
the ShellApp fiddling otherwise.

Fixes: a1d650ce27 - window-tracker: Emit 'tracked-windows-changed' on title changes

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6385
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2634>
2023-02-10 15:12:08 +01:00
Jonas Dreßler
bd202c1847 Add ClutterFrame arguments to after-paint signal handlers
The ClutterFrame argument was added to several signals with mutter commit
08b0e563d4d0088e19d24f3199626a2d27349d09. We have a bunch of after-paint
handlers in gnome-shell too, and updating those was apparently forgotten,
introducing subtle memory corruption that was luckily easy to track down by
running gnome-shell with ASAN enabled. Let's fix that and add the additional
argument to all the signal handlers.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2629>
2023-02-08 16:27:48 +00:00
Sebastian Wick
4c8648fb59 st/test-theme: Use the gsettings memory backend
Mutter test context now make sure that they are run with the gsettings
memory backend to avoid the local environment to affect the tests.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2628>
2023-02-08 16:48:35 +01:00
Jonas Ådahl
644dd90785 perf-tool: Add --hotplug option
The --hotplug option works together with --headless and makes the perf
tool not add a persistant virtual monitor, allowing the perf test
themselves able to handle monitors.

This is needed for hotplug tests.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2623>
2023-02-06 18:10:01 +00:00
Florian Müllner
e86a0b32c2 croco: Use g_string_free() return value
glib now warns if the return value is not used, so use the API as
intended instead of assigning the character data separately before
freeing the GString.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2625>
2023-02-03 14:54:59 +00:00
Florian Müllner
e12a0443e9 st/texture-cache: Port to StIconTheme
It's finally time to pull the switch and replace GtkIconTheme with
out modified copy. This removes another Gtk dependency that ties
us to the old Gtk3.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
69caefc541 st/icon-theme: Stop using GdkRGBA for coloring symbolics
We already have ClutterColor to represent a color, and StIconColors
to hold color information for symbolics from CSS. Now that we moved
GtkIconTheme in-tree, we can make use of those types instead of
translating back and forth from GdkRGBA.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
bf00a7957b st/icon-theme: Change namespace to ST
We are still linking to GTK, and extensions may import GTK for
whatever reason, so avoid conflicts by moving the copied GTK
code into our namespace.

With that and the previous adjustments, the new code is now
finally buildable.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
934faaacef st/icon-theme: Start using g_autofree
We don't have to refrain from g_auto for compatibility reasons,
so start using it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
c908e220db st/icon-theme: Replace slice allocator
Its use has been discouraged for years, and glib recently deprecated
it officially (while turning it around a small wrapper around malloc).

Don't let it sneak back in through some old GTK3 code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
b10a0ec45b st/icon-theme: Replace g_get_current_time ()
GTimeVal has been deprecated a while ago, don't let it sneak back
in via some old GTK code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
d65de0df60 st/icon-theme: Use standard GObject macros
The GTK code predates the G_DECLARE_*() macros, so it's under- standable
that it still does all the boilerplate manually. We
don't have that excuse in 2023, so move the the standard macros.

There is no reason for GtkIconTheme to be derivable, and as that
means that the instance struct itself is private, stop adding
separate private instance data.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
bdd14e3431 st/icon-theme: Replace GTK's custom i18n support
GTK uses its own private i18n header, which most notably defines
an I_() macro for interning static strings. That may be a worthwhile
idea for the entire codebase, but as it's out of scope for this
change set, just use the standard i18n support from glib for now.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
0c3ce595b9 st/icon-theme: Remove GdkScreen/GtkStyleContext integration
Those are GTK internals that don't apply to us. Without the distinct
"screen's default icon theme", we also don't need custom theme support,
and can just always track the theme from StSettings.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
57f67224bb st/icon-theme: Remove deprecated API
We aren't subject to GTK3's API stability, so there's no reason
for dragging old stuff along.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
5e44e2f3cd st/icon-theme: Replace GTK debug code
We won't copy GTK's debug logging, so either remove messages or
turn them into reglar g_debug() calls.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
0919932f4b st/icon-theme: Remove Win32 compatibility
gnome-shell does not run on Windows, and if someone was crazy enough
to try to make it work, the icon theme support would be the least
of their worries.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
88b26996ec st/icon-theme: Standard types
The GTK code dates back to a time when "gchar" and friends were
still considered a good idea. Replace them with standard types
except for "guint" (I'm lazy) and GtkIconCache code that relies
on glib's byte order macros.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
3dc3170f92 st/icon-theme: Use regular idle source over gdk_threads
The shell code isn't threaded, so there's no reason for pulling
in Gdk's thread support.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
8d2e40f8bd st/icon-theme: Define default icon theme
In GTK, the value comes from another private header. It doesn't
make sense to copy it in its entirety, just define the one value
we actually need ourselves.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
ace40b625f st/icon-theme: Remove unused header
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
6607bf0928 st/icon-theme: Merge private header
GtkIconTheme's headers are split between a public and a private
one. We won't expose the icon theme API at all, nor do we need
to access anything beyond what the texture cache is currently
using, so merge the private header into the implementation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
b9280b0f39 st/icon-theme: Copy GdkPixbuf utility code
GTK includes a couple of shared private GdkPixbuf utilities
functions. We don't have a need for sharing that code, just
for the bits that are used by the IconTheme code.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
93319e7c11 st/icon-theme: Copy GTK3 code in-tree
GTK4 changed icon loading significantly, it is now closely tied
to snapshots and paintables. This makes a port highly unrealistic,
so to avoid staying stuck on GTK3 forever, copy the relevant code
into the tree.

The code is unmodified except for the include names and replacing
some stray tab indentation. It is still full of GTK internals, so
it will take a while before we can actually build it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
83d427fc2b st/texture-cache: Remove unused struct member
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2620>
2023-02-02 20:45:06 +00:00
Florian Müllner
888a0ad623 shell/window-preview-layout: Add precondition checks
It's good practice to guard public API against programmer errors,
so do that.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2622>
2023-02-02 19:56:08 +00:00
Florian Müllner
1993f362d2 shell/window-preview-layout: Mark return value as nullable
The function may return null, so we should mark it as such, even
if that information is currently unused.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2622>
2023-02-02 19:56:08 +00:00
Jonas Ådahl
9da02ea6f0 st/test-theme: Get backend from context
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2557>
2022-12-16 22:12:59 +01:00
Jonas Ådahl
387317aadc shell/global: Add 'compositor' property
This is a convenience property for accessing the MetaCompositor
instance.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2557>
2022-12-16 22:12:59 +01:00
Jonas Ådahl
a1d650ce27 window-tracker: Emit 'tracked-windows-changed' on title changes
This means the screen share window view gets updated also when the title
of a window changes. This is important since it often changes shortly
after mapping, which would otherwise go unnoticed by
xdg-desktop-portal-gnome.

An example is launching Files and it showing up as 'Loading..', or
launching a terminal, and it not showing the proper title (current
directory), but some place holder that is never visible on the
application window.

Adding it to the window tracker instead of in introspect.js itself is
for convenience - there is no per window signal tracking there, and it
already listens to the signal emissions about changed windows.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2578>
2022-12-12 19:32:51 +00:00
Jonas Ådahl
cfaf6601e9 perf-tool: Force animations when running perf tests
This ensures we, unless there is a remote desktop connection explicitly
asking to disable animations, we'll run with animations despite e.g.
hardware acceleration is missing.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2560>
2022-11-29 17:52:56 +01:00
Jonas Ådahl
08d4addeef shell-global: Add 'force-animations' property
Set via a command line argument to gnome-shell. Will allow enabling
animations despite e.g. lack of hardware acceleration otherwise
inhibiting it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2560>
2022-11-29 17:52:56 +01:00
Jonas Ådahl
a13a2dca66 perf-tool: Add --wrap to wrap the gnome-shell call
This allows neat tricks like first arranging the script `fakegdb`:

```sh

function ignore_gdb_arg() {
    if [[ "$1" == "--quiet" ]] || [[ "$1" == "--args" ]]; then
	    return 1
    else
	    return 0
    fi
}

ignore_gdb_arg "$1" || shift
ignore_gdb_arg "$1" || shift

echo exec "$@"
```

then running

```sh
meson test -C build -v perf-basic --test-args '--wrap "gdb --args"' --gdb --gdb-path `which fakegdb`
```

To make it possible to run the perf test case with gdb running the
actual gnome-shell.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:54 +01:00
Jonas Ådahl
4c6bc1ed00 perf-tool: Port to argparse
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:54 +01:00
Jonas Ådahl
f4934c0421 tests/perf: Use custom solid background in tests
They don't measure performance, and we don't want to have to install
gnome-backgrounds, so bundle a solid color background image to use
instead.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:53 +01:00
Jonas Ådahl
2ca6e2e7e8 shell/window-tracker: Disassociate windows on shutdown
This avoids trying to deal with handling windows being unmanaged one by
one after we destroyed the ShellGlobal.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
210754f1e9 st/widget: Remove transitions when unmapped
This avoids having animating timelines on invisible and detached actors.
This also silences some warnings about the timeline being running
without being attached to the stage.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
9bc89b821c main: Prepend RPATH or RUNPATH paths to gir search paths
If one wants to run tests the non-installed gnome-shell, that currently
fails as gnome-shell the executable attempts to link against
./build/src/libgnome-shell.so, but when GObject introspection tries to
find what library to link to for Shell, it goes to the installed
libgnome-shell.so, causing two different versions of libgnome-shell.so
to be loaded.

This, however, can be avoided thanks to meson adding $ORIGIN paths to
relevant libraries before installing an executable. What this means in
practice is that we can inspect ourself upon startup, discover whether
the RPATH/RUNPATH header contains $ORIGIN, and if so, expand it to the
directory containing the executable, and prepend the introspection
search paths with said directory.

This effectively means that the introspection machinery now finds the
same library that the linker linked the gnome-shell executable with,
making it run successfully.

It's not possible to use $GI_TYPELIB_PATH since
g_irepository_prepend_library_path() takes precedence. There is no
"append" variant of that API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
1559f03a82 main: Tear down the gjs context before the mutter context
Tearing down gjs means that we won't have any dangling references kept
alive by GC or otherwise alive Javascript objects, when we finally tear
down the mutter context. This allows for a clean shutdown of GNOME
Shell.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
f6a5093c09 main: Notify about shutdown before tearing down
This will allow the shell to tear things down more gracefully.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
009da0df64 shell-global: Get backend from context
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
f171f92522 shell-global: Add MetaContext getter
Start to use it instead of using g_object_get().

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
13ac25b0c5 perf-tool: Add --headless
This will use the headless mode of the native backend, and create a
1280x720 virtual monitor, for running the perf test in.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Jonas Ådahl
b56f853103 perf-tool: Only 'restore' gnome-shell if run with --replace
Otherwise the perf tool will fork and spawn a gnome-shell process
that'll just go and fail.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1349>
2022-11-25 22:09:37 +01:00
Florian Müllner
d7dc50da71 shell/app-system: Retrack windows if necessary
We currently don't update running apps when the set of installed
apps changes. However we should, as the change could mean that

 - the app got uninstalled, and the running app should become
   window-backed

 - a newly installed app got launched before the app cache was
   updated, and we replace the window-backed fallback with the
   proper app

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2480>
2022-10-18 19:20:26 +00:00
Florian Müllner
329a286303 st/label: Don't guard against NULL text
Commit 9168f6055e marked the parameter as nullable, which is in
conflict with the precondition check. But given that NULL is
valid for the underlying ClutterText (and GtkLabel accepts it
as well), there's no strong argument for disallowing NULL, so
remove the precondition check.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2465>
2022-09-02 18:59:07 +02:00
Milan Crha
a6244e34de calendar: Correct handling of recurring events
When a recurring event has deleted a single instance, it's received
as an event modification, thus make sure all of the old instances
are removed before adding the event to the list of events.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2328>
2022-08-31 16:35:14 +00:00