Commit Graph

3041 Commits

Author SHA1 Message Date
552f1456eb st/scroll-view: Adapt for ::child-{added,removed}
These were previously known as ::actor-{added,removed}

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3014>
2023-11-14 11:09:03 +00:00
ab7ed393cb st: Adapt for ClutterContainer removal
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3014>
2023-11-14 11:09:02 +00:00
f9ee0c9e45 shell/window-preview-layout: Adapt for ClutterContainer removal
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3014>
2023-11-14 11:09:02 +00:00
ed3b8d093e st/bin: Stop implementing a ClutterContainer
Instead we react to ::actor-{added,removed} and delegate to ClutterActor

Code should still interact with :child rather than {add,remove)_child(),
but at least we now avoid the footgun where the different APIs did
different things

Fix: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3172
Fix: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2661
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3010>
2023-11-10 20:19:13 +00:00
42fc986e91 st/scroll-view: Stop implementing ClutterContainer
Instead, listen to ::actor-{added,removed} allowing ClutterActor's
regular add/remove API to work as expected — at least so long only one
child is added

We also no longer inherit StBin as we actually have up to three
children (including the two scrollbars), but by implementing :child
ourselves the API seen by JS is unchanged

Fix: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/2661
Fix: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3172
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3010>
2023-11-10 20:19:13 +00:00
b36f81b955 st: Adjust to ClutterBinAlignment removal
The custom alignment property was removed, so the convenience
constructor lost the corresponding parameters.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3013>
2023-11-10 00:29:50 +01:00
3e7027821d st/texture-cache: Always close GdkPixbufLoader before disposal
As per the warning emitted when destroying without closing first

  GdkPixbufLoader finalized without calling gdk_pixbuf_loader_close() - this is not allowed.
  You must explicitly end the data stream to the loader before dropping the last reference.

closing it is necessary.

Create the GdkPixbufLoader after loading the file contents so that
the loader is guaranteed to be closed before it is destroyed.
(`gdk_pixbuf_loader_write()` closes it on failure.)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3008>
2023-11-05 03:29:12 +01:00
c032bb62a5 shell/screenshot: Use MtkRegion
Remove the last user of cairo_region_t in favor of MtkRegion, fixing a
build warning.
2023-11-03 16:21:51 +01:00
bf742c3926 Revert "shell/window-tracker: Exclude screen recorder window"
This reverts commit 575ba13b9b.

That commit did not actually prevent the "Unknown" application from
showing up in the dash or app switcher when the recorder was running,
but it introduced a problem with Proton which also uses gstreamer OpenGL
elements in its transcoder. This was causing the overview to get stuck
while the transcoder was running due to the app for the
"OpenGL Renderer" window being null.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7042
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3000>
2023-10-30 12:58:05 +01:00
fe292ac941 st: Use correct type for CoglTexture
No idea how come CoglPipeline was used here but the fact that everything
was a CoglHandle, made things just work despite being wrong?

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2964>
2023-10-29 21:28:31 +00:00
71accdd978 st: Adapt to CoglObject removal
Also use more memory management macro helpers

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2964>
2023-10-29 21:28:31 +00:00
198dde2696 st: Stop using Clutter cairo helpers
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2808>
2023-10-25 21:35:18 +02:00
64c8d94d2b Adapt to Clutter -> Cogl pixel format
As the pixel format made more sense to be part of CoglPixelFormat and
was moved there

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2808>
2023-10-25 21:35:18 +02:00
d383f4acac shell-app: Make recent all app windows on the target workspace
meta_window_raise_and_make_recent_on_workspace now works on a target
workspace instead of the active workspace. We call this before another
workspace is made active so the previous behavior made the window the
MRU window on the wrong workspace. If an app got activated and one
window closed, the stacking and focus diverged.

Related: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3315
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2991>
2023-10-25 14:05:40 +02:00
fae5bdaa00 st/scroll-view: Use clutter_actor_get_effect() to get fade effect
Storing the pointer to the fade effect only works as long as we control
all the code that can modify the effects of an actor, but this is not
the case in the presence of extensions. Apparently some extension
manages to remove the effect, which leads to fade_effect pointing to
some invalid address by the time dispose is called, leading to a crash.

This instead uses clutter_actor_get_effect() to get the effect when it
is needed to avoid crashing in these situations.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6521
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2974>
2023-10-06 15:01:42 +00:00
575ba13b9b shell/window-tracker: Exclude screen recorder window
The pipeline contains a GST plugin that pops up an unclosable
zero-sized window.

Unfortunately we did not manage to come up with a proper fix
in time, so for now explicitly exclude it from app tracking.

This does not address all issues (it still prevents the
window's workspace from getting removed, even when it appears
empty), but at least it avoids the most confusing effect by
preventing the "app" from showing up in dash, alt-tab etc.

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

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2956>
2023-09-16 11:40:58 +02:00
9ce7c81ef3 st/icon: Fix documentation typo
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2940>
2023-09-05 18:31:07 -07:00
b45e75c4b9 st/types: Remove StAlign
The last code that used the type was removed in commit 0ab34fe21f
over three years ago, whoops.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2936>
2023-09-02 09:19:24 +00:00
52182e6493 st: Drop explicit Clutter grab in StButton
Nowadays, Clutter knows what an implicit grab is, which gives
us already the feel that we are after with buttons (e.g. press
and drag on the button will not enter other actors meanwhile).

ClutterGrab was only added to provide that feel meanwhile, and
it's also slightly more intense (e.g. altering keyboard focus,
or triggering leave events on all parents of the button) which
may trigger side effects.

An example is the IBus candidates popup, where the pagination
buttons may indirectly trigger dismissing of the entire popup
when interacted, by stealing the keyboard focus to the
client/actor doing IM.

Related: https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2497
Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/2244
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2924>
2023-08-31 14:17:16 +00:00
80237b1082 Adapt to the new Mtk library
As we plan to slowly phase out Cairo where possible in libmutter
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3128

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2873>
2023-08-31 03:44:32 +00:00
3cfc918976 st/scroll-view: Fix issue in st_scroll_view_scroll_event()
adjust_with_direction() uses a ClutterScrollDirection not ClutterTextDirection

Fixes: 23b439dc ("st/scroll-view: Use ClutterEvent getter methods")
Closes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6937

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2920>
2023-08-29 13:25:54 +02:00
f22f5d902c st/viewport: Keep painting, clipping and transforms pixel-aligned
Which means adjustments always converted to ints in the same way.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6835
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2828>
2023-08-20 01:10:44 +00:00
cd7d99dd6b st/viewport: Set the paint volume to the clipped area
Not the unclipped area that is potentially multiple screens in size.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6819
(assuming you have mutter!3112)

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2828>
2023-08-20 01:10:44 +00:00
6e42979fc2 st/viewport: Remove unused paint volume origin calculations
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2828>
2023-08-20 01:10:44 +00:00
e7c269e014 shell/camera-monitor: Remove hooks before destroying objects
Otherwise removing the hook will try to unlink from a list whose
previous element belonged to the already destroyed object.

Fixes: d09d24666 ("shell: Add device monitor for cameras")
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2893>
2023-08-15 20:36:07 +02:00
9546860d05 tests/unit: Access shell sources from resource
Unit tests currently load shell sources directly from the
filesystem.

This is currently blocking generated sources - namely config.js - to
ESM, because a relative import from the source dir will fail to
locate the file in the build dir.

Address this by using the same GResource as gnome-shell instead of
direct filesystem access, as the resource will always include all
sources files at the expected location.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2880>
2023-08-10 17:42:23 +00:00
8a4275ec80 main: Don't try to translate the empty string
It's pointless in the best case, and may result in bugs.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2878>
2023-08-09 15:39:43 +00:00
111a0a7fa1 st: Mass update to ClutterActorClass event vmethod changes
These are now forwarded as ClutterEvent in order to remain accessible
on the Javascript side. This also means all ClutterActor implementations
in ST need to update to this change.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2872>
2023-08-09 13:46:14 +02:00
854191c244 st: Handle emulated scroll events through the ClutterEventFlag
Emulated scroll events no longer get clutter_event_is_pointer_emulated()
set to TRUE, instead this information is propagated through the
ClutterEventFlags of the event.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2871>
2023-08-08 17:23:33 +00:00
12f6d7027b listModes: Port listModes command to ES module
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1499>
2023-08-05 22:16:23 +02:00
cd167ee63e docs: Update miscellaneous in-code documentation for modules
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1499>
2023-08-05 22:16:23 +02:00
65cde18786 main: Correct the pointer value of strtab on riscv/mips architectures
Glibc defines `d_ptr`/`d_val` to be a relocated address on most
architectures, except for riscv and mips where it is just an offset from
the binary load address. So we need to convert `strtab` from an offset
into a pointer for riscv and mips.

Internally within glibc there is the `D_PTR` macro for doing this, which
relies on private data hidden in an ABI-unstable part of `link_map`. So
we can't use the same conditional logic as glibc does internally.

Our solution is to detect when `strtab` is unreasonably low (below the
address of our binary) and so it must be an unrelocated offset. In that
case we just do the relocation manually.

Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6528
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2718>
2023-08-05 19:19:29 +00:00
a95addd772 st/focus-manager: Use ClutterEvent getter methods in StFocusManager
Also make StFocusManager keep track of the ClutterStage it is relative
to, in order to avoid the ClutterStage event getter that is going away.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2860>
2023-08-05 19:07:41 +00:00
aac0e0e802 st/widget: Use ClutterEvent getter methods in StWidget
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2860>
2023-08-05 19:07:41 +00:00
23b439dc50 st/scroll-view: Use ClutterEvent getter methods
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2860>
2023-08-05 19:07:41 +00:00
1d6a5f2697 st/scroll-bar: Use ClutterEvent getter methods
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2860>
2023-08-05 19:07:41 +00:00
ca383acff6 st/entry: Use ClutterEvent getter methods
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2860>
2023-08-05 19:07:41 +00:00
75c92afa31 st/button: Use ClutterEvent getter methods
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2860>
2023-08-05 19:07:41 +00:00
a5fc4ad57c shell/camera-monitor: Tweak indicator disable timeout
We currently consider idle nodes as in use to avoid too fast state
changes and thus flickering of the indicator icon. However, the current
idle timeout is rather long and arguably confusing for users.

Thus switch to only consider running nodes as in use, but delay
disabling of the indicator by 500ms.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2854>
2023-07-30 11:24:35 +00:00
d09d24666a shell: Add device monitor for cameras
Pipewire allows us to easily track whether any cameras are in used by
checking the state of camera nodes. Add a simple camera monitor to the
shell, allowing us to show e.g. a status indicator.

Naturally the monitor is limited to apps using Pipewire for camera
access and thus subject to the same chicken-egg problem like the camera
portal - it could confuse users that apps may use the camera without
being noticed by the monitor. The hope and assumption here is that a
better shell integration might speed up adoption of the new camera APIs

Pipewire 0.3.49 is required for refcounted `pw_init()`/`pw_deinit()`.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2840>
2023-07-29 13:55:15 +03:00
26fa1046a3 tests: Load unit tests as modules
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2822>
2023-07-15 02:35:56 +00:00
b798efcc1d tests: Use gjs_context_eval_file to evaluate test scripts
GJS provides utilities to run scripts given a filename, using those
utilities we can remove most of the logic implementing file loading.

Additionally the REPL logic does not make much sense for a test
runner and is unused, so remove it.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2822>
2023-07-15 02:35:56 +00:00
3028d478b8 st/icon-theme: Remove special-casing of symbolic lookup
GThemedIcon considers the "-symbolic" suffix when generating
fallback names (i.e. "foo-bar-symbolic", "foo-symbolic", "foo-bar",
"foo").

That means now that we prefer more accurate name matches from any
theme over fallback matches from higher-priority themes, we no
longer need to special-case symbolic names for preferring symbolic
matches over full-color fallbacks.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2824>
2023-07-13 15:15:56 +00:00
b3b4eeb496 st/icon-theme: Pick best-matching name from all themes
When resolving an icon name, we currently look in all themes in
order whether one of the requested names matches.

That means, a "keyboard" icon from the configured theme will
trump over any of "keyboard-shift", "keyboard-brightness" and
"keyboard-preferences" from lower-ranked themes (like "Adwaita"
and "hicolor").

That applies to custom icons we include in the resource, which
are added to the fallback ("hicolor") theme.

We are less bound by the named-icons spec than GTK, so we can
adapt the lookup to prefer the most accurate match to matches
from the highest priority theme.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2824>
2023-07-13 15:15:56 +00:00
e4da6a347b test-tool: Require script argument
The purpose of the tool has shifted from running a limited set
of performance tests repeatedly to collect performance data
and catch regressions, to a wrapper that drives gnome-shell via
scripts for tests.

With that, the concept of a "default" script doesn't really make
sense anymore.

Instead, turn the argument from an optional flag into a required
parameter. This will allow us to stop bundling the existing tests
in a follow-up commit.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2812>
2023-07-07 19:43:28 +02:00
9bb003463c test-tool: Rename perf-tool
The original purpose of the tool was to collect performance data
that would optionally be uploaded to a server in Owen's living
room. While the corresponding scripts are still included (although
the server was probably dismantled years ago), the tool is mainly
used for running gnome-shell with scripted tests nowadays.

Rename the tool to reflect that.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2812>
2023-07-07 19:43:28 +02:00
bf9b9838c2 main: Pass script on CLI instead of via environment
Environment variables aren't the best option to pass parameters
to a process (wouldn't it be "fun" if SHELL_PERF_MODULE appeared
in a regular user session?).

Instead, use a (hidden) --automation-script command line flag to
specify a script file that should be used to drive an automated
session.

As a side effect, the script no longer has to be relative to the
main module itself, so it will be possible to run scripts that
aren't bundled with the shell sources.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2812>
2023-07-07 19:43:28 +02:00
ebbcc31fbd st/texture-cache: Set up sliced images to fill parent
When using fractional scaling, the size of the loaded image with
applied scaling may still differ from the displayed size. This
is currently addressed by syncing the size of all slice actors
in the (probably only) caller.

Instead, set the actors to fill their parent automatically.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2798>
2023-07-05 10:36:14 +00:00
5bf61d4cad shell/util: Use gtk4 for week-start fallback
If langinfo isn't available, we determine the week start via
a "magic" string translation from GTK. We currently look up
the string in GTK3's domain, we should use GTK4's instead.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2816>
2023-07-03 19:32:13 +02:00
8d562ff71c portalHelper: Port to ESM
The helper app that provides the login dialog for network portals
is another separate process that can be moved to ESM separately.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2786>
2023-06-21 13:26:42 +02:00