Commit Graph

2779 Commits

Author SHA1 Message Date
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
Florian Müllner
66ae4c7ff3 shell/screenshot: Plug memory leak
grab_screenshot_content() does not follow the usual pattern of
```
  task = g_task_new (...);
  g_task_run_in_thread (task, ...);
  g_object_unref (task);
```

That means we hold the original reference throughout the operation,
and must release it ourselves when done.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2461>
2022-08-31 13:25:43 +00:00
msizanoen1
2d589ec365 Revert "shell: Fix pixbuf reference leak saving screenshots"
This reverts commit f5754adb68 in
accordance with https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2449#note_1539435.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2452>
2022-08-29 21:54:30 +07:00
Dmitrii Naidolinskii
f5754adb68 shell: Fix pixbuf reference leak saving screenshots
When saving a screenshot, the GdkPixbuf created would be left
with a dangling reference after saving to disk (either leaked
on errors, or via an extra reference on success). Always unref
the pixbuf so it's either destroyed on error or there is a single
reference fully transferred to the caller of the function.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5501
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2449>
2022-08-28 16:37:54 +05:00
Georges Basile Stavracas Neto
078aca220d Revert "st/scrollview: Add ::content-padding property to StScrollView"
This reverts commit 0d62dadfbc.

The only consumer of such API is now gone.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2335>
2022-08-10 15:16:36 +00:00
Daniel van Vugt
9b3ee774f6 st/theme-node-drawing: Conditionally paint the center shadow rectangle
Only when part of it is actually visible.

Because the central rectangle is generally the largest part, this
eliminates most of the shadow's render time. For example, animating
`.workspace-background` by tapping Super, the shell's overall render
time is reduced about 15%.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1915>
2022-08-09 07:11:44 +00:00
Florian Müllner
71d503dc6e st/theme-node-transition: Guard against 0-sized offscreen box
We know beforehand that setting up the framebuffers will fail in
that case, so we can avoid cluttering the log with warnings.

(Although the warning would likely indicate a stylesheet bug)

https://gitlab.gnome.org/GNOME/gnome-shell-extensions/-/issues/289

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2326>
2022-08-04 18:12:31 +00:00
Alessandro Bono
77d0471bc4 st/settings: Connect to mouse settings
This is likely a typo.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2402>
2022-08-04 16:59:33 +00:00
Ivan Molodetskikh
83564e59b3 workspace: Port WorkspaceBackground allocate to C
WorkspaceBackground's allocate is a hot function called every frame
during overview animations. Port it to C.

While we're at it, cache the work area and the monitor geometry, which
do not need to be re-fetched on every allocation.

This reduces the average WorkspaceBackground allocation time from
0.134 ms to 0.017 ms. With four workspaces, scrolling the overview sees
an average WorkspacesView allocation time improvement from
1.104 ms to 0.678 ms.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2394>
2022-08-03 12:30:31 +00:00
Ivan Molodetskikh
1fd08e80ed Add shell_global_get_workspace_manager ()
It will be used in the subsequent commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2394>
2022-08-03 12:30:31 +00:00
Milan Crha
5c935af7d3 build: Port to gcr4
The gcr4 is going to replace gcr3. As only base functions are used,
the port to gcr4 is trivial.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2386>
2022-08-02 16:13:54 +00:00
Sebastian Keller
fb75120a39 shell/app: Fix small memory leak in get_pids()
The iterator was pointing to NULL when going out of scope, leading to
autofree not clearing the list.

==300183== 32 bytes in 2 blocks are definitely lost in loss record 14,798 of 38,939
==300183==    at 0x484586F: malloc (vg_replace_malloc.c:381)
==300183==    by 0x4D7D980: g_malloc (gmem.c:127)
==300183==    by 0x4D95AB3: g_slice_alloc (gslice.c:1074)
==300183==    by 0x4D96D96: g_slist_prepend (gslist.c:282)
==300183==    by 0x487854F: shell_app_get_windows (shell-app.c:794)
==300183==    by 0x48791A1: shell_app_get_pids (shell-app.c:1201)
==300183==    by 0x488B293: shell_window_tracker_get_app_from_pid (shell-window-tracker.c:702)
==300183==    by 0x488B632: get_app_from_window_pid (shell-window-tracker.c:370)
==300183==    by 0x488B632: get_app_for_window (shell-window-tracker.c:436)
==300183==    by 0x488B632: track_window (shell-window-tracker.c:549)
==300183==    by 0x4CDBB75: g_cclosure_marshal_VOID__OBJECTv (gmarshal.c:1910)
==300183==    by 0x4CD8BE9: _g_closure_invoke_va (gclosure.c:893)
==300183==    by 0x4CF2A28: g_signal_emit_valist (gsignal.c:3406)
==300183==    by 0x4CF2C2C: g_signal_emit (gsignal.c:3553)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2367>
2022-07-06 18:13:46 +00:00
Marco Trevisan (Treviño)
1bd9076590 main: Define a custom log writer to dump on structured messages
Even though GNOME Shell is not explicitly using structured logging via
G_LOG_USE_STRUCTURED, GLib uses it as default since 2016 [1], and so
we're de facto using it.

As per this, if backtrace on warnings is enabled, it is ignored since the
log handler isn't used anymore, and no dump is printed.

Thus, replace the default log handlers with writer functions instead, honoring
backtrace-warnings debug string.

[1] https://gitlab.gnome.org/GNOME/glib/-/commit/fce7cfaf40b6e1e50c9140aa0397f5

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/697>
2022-07-06 17:14:56 +00:00
Florian Müllner
a06b469fbb st: Only notify on property changes
Since commit 5a23c96bd9 we use EXPLICIT_NOTIFY for properties,
however there are still cases where we still notify unconditionally
from the setter, because we don't check the existing value first.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2325>
2022-06-08 14:16:28 +00:00
msizanoen1
afcd58e3ba shell: Do not create a systemd scope when using D-Bus app launching
Applications launched using D-Bus activation will have a returned PID of
0, which systemd interprets as moving the requesting process to a new
scope, causing GNOME Shell to be moved to another scope. Fix this by not
creating a systemd scope when PID is 0.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2305>
2022-06-07 14:35:02 +00:00
Florian Müllner
88441c35c9 build: Remove gst dependencies
Those are left-overs from the built-in Shell.Recorder.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2297>
2022-05-20 12:00:22 +00:00
Florian Müllner
1d0a08b5e2 build: Do not redefine polkit autocleanup
PolkitAgent recently added autocleanup functions itself, so check
for their existence at configure time and only define our own when
they don't exist upstream.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2296>
2022-05-17 14:04:01 +00:00
Florian Müllner
d72abf5268 st/button: Add :icon-name property
GTK4 added a convenience property for icon-only buttons. While that
use case is not quite as common in the shell as in GTK apps, it still
seems common enough to mirror the GTK API.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2254>
2022-05-06 13:39:40 +00:00
Sebastian Keller
f0a0471927 st/theme-node: Only try to parse non-empty inline styles
Otherwise cr_parser_new_from_buf() will fail creating a parser for a
buffer of length 0, resulting in further errors due to the parser being
NULL. This could happen when extensions were trying to set the style of
a widget to an empty string.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4634
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2286>
2022-04-29 21:50:55 +00:00
Sebastian Keller
8c40b48a09 shell/window-preview-layout: Fix memory leaks
The WindowInfo allocated when adding a window was not getting free'd
when the window was getting removed again or the layout was getting
disposed. Also the hash table in which the WindowInfos are stored was
not getting free'd on destruction either. Both could result in small
leaks after closing the overview.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/5238
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2256>
2022-04-22 15:02:29 +00:00
Jakub Steiner
e831a9240d HC: Do not set icon theme from gnome-icon-theme-extra
- High contrast icons are regular symbolic icons

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2243>
2022-03-30 17:11:37 +02:00