From 27b9985da3f4e098e1bb9aa27a15d9151af7efc4 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Sat, 25 May 2024 10:28:51 +0200 Subject: [PATCH 01/26] build: Remove unnused dependencies Part-of: (cherry picked from commit c0c4572ed5ff1e1ce46c3f55a36aa4a9dae54939) --- meson.build | 3 --- src/meson.build | 1 - 2 files changed, 4 deletions(-) diff --git a/meson.build b/meson.build index 30864ceec..857c0b93c 100644 --- a/meson.build +++ b/meson.build @@ -29,7 +29,6 @@ gtk_req = '>= 4.0' mutter_req = '>= 46.0' polkit_req = '>= 0.100' schemas_req = '>= 46.beta' -startup_req = '>= 0.11' systemd_req = '>= 246' ibus_req = '>= 1.5.19' gnome_desktop_req = '>= 40' @@ -74,7 +73,6 @@ atk_bridge_dep = dependency('atk-bridge-2.0') ecal_dep = dependency('libecal-2.0', version: ecal_req) eds_dep = dependency('libedataserver-1.2', version: eds_req) gcr_dep = dependency('gcr-4', version: gcr_req) -gdk_x11_dep = dependency('gdk-x11-3.0') gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0') gi_dep = dependency('gobject-introspection-1.0', version: gi_req) gio_dep = dependency('gio-2.0', version: gio_req) @@ -88,7 +86,6 @@ cogl_dep = dependency(cogl_pc, version: mutter_req) cogl_pango_dep = dependency(cogl_pango_pc, version: mutter_req) mutter_dep = dependency(libmutter_pc, version: mutter_req) polkit_dep = dependency('polkit-agent-1', version: polkit_req) -startup_dep = dependency('libstartup-notification-1.0', version: startup_req) ibus_dep = dependency('ibus-1.0', version: ibus_req) x11_dep = dependency('x11') schemas_dep = dependency('gsettings-desktop-schemas', version: schemas_req) diff --git a/src/meson.build b/src/meson.build index 422a68d8d..067808c57 100644 --- a/src/meson.build +++ b/src/meson.build @@ -67,7 +67,6 @@ gnome_shell_deps = [ mtk_dep, clutter_dep, cogl_pango_dep, - startup_dep, gi_dep, polkit_dep, gcr_dep, From b84958ccf2d3e1774bdf9464e830c2dafbfaf84a Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Sat, 25 May 2024 10:29:28 +0200 Subject: [PATCH 02/26] build: Make use of the x11 dependency Part-of: (cherry picked from commit 37fd461759b829f368f7ee48dd07beb1d09b1d5c) --- src/meson.build | 1 + 1 file changed, 1 insertion(+) diff --git a/src/meson.build b/src/meson.build index 067808c57..c81bd1a42 100644 --- a/src/meson.build +++ b/src/meson.build @@ -72,6 +72,7 @@ gnome_shell_deps = [ gcr_dep, libsystemd_dep, libpipewire_dep, + x11_dep, ] gnome_shell_deps += nm_deps From d1e1576806eec64628cc6392b792a01efbfcca75 Mon Sep 17 00:00:00 2001 From: Georges Basile Stavracas Neto Date: Sun, 26 May 2024 15:50:02 +0200 Subject: [PATCH 03/26] st/scroll-view-fade: Cleanup unecessary vfunc override It does exactly what ClutterOffscreenEffect does these days. Part-of: (cherry picked from commit 4e449536f8ff9f71de64184ded8bc3c71dfb77cd) --- src/st/st-scroll-view-fade.c | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/st/st-scroll-view-fade.c b/src/st/st-scroll-view-fade.c index ec15584e7..095584518 100644 --- a/src/st/st-scroll-view-fade.c +++ b/src/st/st-scroll-view-fade.c @@ -66,24 +66,12 @@ enum { static GParamSpec *props[N_PROPS] = { NULL, }; -static CoglTexture * -st_scroll_view_fade_create_texture (ClutterOffscreenEffect *effect, - gfloat min_width, - gfloat min_height) -{ - CoglContext *ctx = - clutter_backend_get_cogl_context (clutter_get_default_backend ()); - - return cogl_texture_2d_new_with_size (ctx, min_width, min_height); -} - static char * st_scroll_view_fade_get_static_shader_source (ClutterShaderEffect *effect) { return g_strdup (st_scroll_view_fade_glsl); } - static void st_scroll_view_fade_paint_target (ClutterOffscreenEffect *effect, ClutterPaintNode *node, @@ -384,7 +372,6 @@ st_scroll_view_fade_class_init (StScrollViewFadeClass *klass) shader_class->get_static_shader_source = st_scroll_view_fade_get_static_shader_source; offscreen_class = CLUTTER_OFFSCREEN_EFFECT_CLASS (klass); - offscreen_class->create_texture = st_scroll_view_fade_create_texture; offscreen_class->paint_target = st_scroll_view_fade_paint_target; /** From cc93d52bddb7fa255c9eeecdb85e5af64964835c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Tue, 28 May 2024 18:25:15 +0200 Subject: [PATCH 04/26] ci: Bump ci-fairy template The new version allows @users.noreply email addresses by default, which seems like something we should allow at least for small drive-by contributions. Part-of: (cherry picked from commit d99a1d5457893911ef057c609824ddccb3676dd6) --- .gitlab-ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index cee18a353..687db09b3 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,7 +1,7 @@ include: - remote: 'https://gitlab.gnome.org/GNOME/citemplates/raw/HEAD/flatpak/flatpak_ci_initiative.yml' - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/057b052e682d8e5a20c1eb2dd60d5b87d2b56856/templates/fedora.yml' - - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/34f4ade99434043f88e164933f570301fd18b125/templates/ci-fairy.yml' + - remote: 'https://gitlab.freedesktop.org/freedesktop/ci-templates/-/raw/bc70242ffb8402243e934659ecc1a2d1c89eca2b/templates/ci-fairy.yml' - project: 'Infrastructure/openshift-images/gnome-release-service' file: '/ci-templates/release-module.yml' From 7f21d4a405c591f2ef4b03b76a9458f58ffe228b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mister=20Sm=C3=B6r?= <143147-MrSmoer@users.noreply.gitlab.gnome.org> Date: Tue, 28 May 2024 15:11:11 +0000 Subject: [PATCH 05/26] docs: Fix typo in link to meta-docs Part-of: (cherry picked from commit 245d55488b012b97ef32d8958a4457947de9f318) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 27fd39a02..e0382e8ad 100644 --- a/README.md +++ b/README.md @@ -121,7 +121,7 @@ The following guidelines will help your change to be successfully merged: [st-docs]: [shell-docs]: [clutter-docs]: -[meta-docs]: +[meta-docs]: [mutter-docs]: ## License From a089421f6db855ddb8602d8cfa98865253c069fb Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 28 May 2024 18:08:27 +0100 Subject: [PATCH 06/26] shell-camera-monitor: Fix warning about strict aliasing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changing type when casting a double pointer is not strictly allowed in C. In order to fix compilation with `-fstrict-aliasing`, don’t use `g_clear_pointer()` for clearing this pointer where the type expected by the destroy notify function does not match the type stored in the `ShellCameraMonitor` struct. This introduces no functional changes. Signed-off-by: Philip Withnall Part-of: (cherry picked from commit 37e49e8a22c223b030297f9607bdb748c219e060) --- src/shell-camera-monitor.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/shell-camera-monitor.c b/src/shell-camera-monitor.c index 1e2e0f145..b2e6e0b2a 100644 --- a/src/shell-camera-monitor.c +++ b/src/shell-camera-monitor.c @@ -298,7 +298,11 @@ shell_camera_monitor_disconnect_core (ShellCameraMonitor *monitor) g_clear_handle_id (&monitor->delayed_disable_id, g_source_remove); spa_hook_remove (&monitor->registry_listener); - g_clear_pointer ((struct pw_proxy**) &monitor->registry, pw_proxy_destroy); + if (monitor->registry != NULL) + { + pw_proxy_destroy ((struct pw_proxy *) monitor->registry); + monitor->registry = NULL; + } spa_hook_remove (&monitor->core_listener); g_clear_pointer (&monitor->core, pw_core_disconnect); } From ebd10437acbb672135d40adb4d469d42efeac2c8 Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 28 May 2024 18:05:10 +0100 Subject: [PATCH 07/26] messageTray: Ensure _updateDatetimeId idle callback is cancelled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If the idle callback is not explicitly removed when the notification is destroyed, it may be invoked after destruction, and try to modify the notification after it’s been freed. Signed-off-by: Philip Withnall Part-of: (cherry picked from commit 8176d6b51c743621d5aab0fb52a121017fd4c7a7) --- js/ui/messageTray.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index d88ef4223..fc07ab4ec 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -475,6 +475,11 @@ export class Notification extends GObject.Object { destroy(reason = NotificationDestroyedReason.DISMISSED) { this.emit('destroy', reason); + + if (this._updateDatetimeId) + GLib.source_remove(this._updateDatetimeId); + delete this._updateDatetimeId; + this.run_dispose(); } } From d13aae0a1c56db3f35c4aa5ef4173dde8eff4fbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Thu, 30 May 2024 21:52:29 +0200 Subject: [PATCH 08/26] Switch to fetching gvc via a meson subproject Hopefully this will avoid the accidental subprojects/gvc changes. Developers need to switch from doing git submodule update to meson subprojects update Part-of: (cherry picked from commit 5649ad6752f0d1fa6f9f580d90b3784c699e4a1f) --- .gitmodules | 3 --- subprojects/gvc | 1 - subprojects/gvc.wrap | 6 ++++++ 3 files changed, 6 insertions(+), 4 deletions(-) delete mode 100644 .gitmodules delete mode 160000 subprojects/gvc create mode 100644 subprojects/gvc.wrap diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index bb57dfc6c..000000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "subprojects/gvc"] - path = subprojects/gvc - url = ../../GNOME/libgnome-volume-control.git diff --git a/subprojects/gvc b/subprojects/gvc deleted file mode 160000 index 91f3f4149..000000000 --- a/subprojects/gvc +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 91f3f41490666a526ed78af744507d7ee1134323 diff --git a/subprojects/gvc.wrap b/subprojects/gvc.wrap new file mode 100644 index 000000000..0ad1575d2 --- /dev/null +++ b/subprojects/gvc.wrap @@ -0,0 +1,6 @@ +[wrap-git] +directory=gvc +url=https://gitlab.gnome.org/GNOME/libgnome-volume-control.git +push-url=ssh://git@gitlab.gnome.org:GNOME/libgnome-volume-control.git +revision=5f9768a2eac29c1ed56f1fbb449a77a3523683b6 +depth=1 From d3cc559d1b1c0d43a9df86e06184630999731275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 31 May 2024 00:22:11 +0200 Subject: [PATCH 09/26] ci: Don't set GIT_SUBMODULE_STRATEGY anymore We don't use submodules anymore, so no point configuring the submodule strategy to use. Part-of: (cherry picked from commit 22a38c25f23181dd651bec7e3f56ccc98ba0b84f) --- .gitlab-ci.yml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 687db09b3..2332cd751 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -188,8 +188,6 @@ potfile_js_check: build: stage: build needs: ["check_commit_log"] - variables: - GIT_SUBMODULE_STRATEGY: normal before_script: - .gitlab-ci/checkout-mutter.sh - meson mutter mutter/build --prefix=/usr @@ -208,7 +206,6 @@ test: stage: test needs: ["build"] variables: - GIT_SUBMODULE_STRATEGY: normal XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir" NO_AT_BRIDGE: "1" before_script: @@ -232,8 +229,6 @@ test-coverity: needs: ["build"] stage: analyze allow_failure: true - variables: - GIT_SUBMODULE_STRATEGY: normal before_script: - sudo meson install -C mutter/build script: @@ -286,7 +281,6 @@ dist: variables: XDG_RUNTIME_DIR: "$CI_PROJECT_DIR/runtime-dir" NO_AT_BRIDGE: "1" - GIT_SUBMODULE_STRATEGY: normal stage: deploy needs: ["build"] before_script: From e4344df1de3a99b4769668431aa7cbc2f28aed77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Thu, 9 May 2024 10:03:23 +0200 Subject: [PATCH 10/26] portalHelper: Use default_size instead of set_size_request for size GtkWidget.set_size_request() enforces a minimum size, while GtkWidget.set_default_size() simply sets the default size. The docs of set_size_request() say "In most cases, gtk_window_set_default_size() is a better choice for toplevel windows", and in our case it doesn't seem necessary to prohibit the window from having a smaller size, so switch to using the default_width and default_height properties. Part-of: (cherry picked from commit 5aa89fa9e62d20c99afd2eff13901faef96244ad) --- js/portalHelper/main.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/portalHelper/main.js b/js/portalHelper/main.js index 1716dc979..1a5c644dc 100644 --- a/js/portalHelper/main.js +++ b/js/portalHelper/main.js @@ -113,6 +113,8 @@ class PortalWindow extends Gtk.ApplicationWindow { super._init({ application, title: _('Hotspot Login'), + default_width: 600, + default_height: 450, }); const headerbar = new Gtk.HeaderBar(); @@ -153,7 +155,6 @@ class PortalWindow extends Gtk.ApplicationWindow { this._syncUri(); this.set_child(this._webView); - this.set_size_request(600, 450); this.maximize(); this.present_with_time(timestamp); From 9516946de5cb4c5c51b971892b2854e700d5f373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 13 Jun 2024 17:46:16 +0200 Subject: [PATCH 11/26] ci: Use !reference tag for pipeline guard It's a bit more flexible than yaml anchors, and already used in mutter for the same purpose. Part-of: (cherry picked from commit 92f78a2a0686fca202202a15618927e4e608dcd8) --- .gitlab-ci.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 2332cd751..b0cb126b8 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -43,7 +43,7 @@ workflow: - if: '$CI_COMMIT_TAG' - if: '$CI_COMMIT_BRANCH' -.pipeline_guard: &pipeline_guard +.pipeline-guard: rules: - if: '$CI_PIPELINE_SOURCE == "merge_request_event"' - if: '$CI_COMMIT_TAG' @@ -94,7 +94,8 @@ check_commit_log: else echo "Not a merge request" ; fi - <<: *pipeline_guard + rules: + - !reference [.pipeline-guard, rules] artifacts: expire_in: 1 week paths: @@ -113,7 +114,8 @@ check-merge-request: else echo "Not a merge request" ; fi - <<: *pipeline_guard + rules: + - !reference [.pipeline-guard, rules] artifacts: expire_in: 1 week paths: From d8e493367ddc85fc89c1cd73e73cc970128f857e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 13 Jun 2024 19:08:42 +0200 Subject: [PATCH 12/26] ci: De-duplicate build artifacts Add an explicit dependency on the `build` job for `dist-tarball`, so its artifacts are pulled in without re-exporting them from the `distinfo` job. Part-of: (cherry picked from commit 9b20c966918fc1a1a1a9f2dd3de92297c3417392) --- .gitlab-ci.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index b0cb126b8..60ee5a7a2 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -272,9 +272,6 @@ distinfo: reports: dotenv: dist.env paths: - - build - - mutter - - subprojects/jasmine-gjs - dist.env rules: - if: '$CI_COMMIT_TAG' @@ -299,6 +296,7 @@ dist: dist-tarball: extends: dist needs: + - build - distinfo artifacts: expose_as: 'Get tarball here' From c36529c124c9567be9df59ad22cd6050f635d19e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 13 Jun 2024 15:43:51 +0200 Subject: [PATCH 13/26] ci: Also store gvc subproject in artifacts After the subproject moved to a meson wrap, its checkout is no longer managed by gitlab. While meson will take care of checking out required submodules during setup, this will not happen for `test` or `dist`, so store the checked out code in artifacts. Part-of: (cherry picked from commit f0c14bdef388303f0ffa17eaaba4b11c49918892) --- .gitlab-ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 60ee5a7a2..5cf096de6 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -203,6 +203,7 @@ build: paths: - mutter - build + - subprojects/gvc test: stage: test From 7be8f795608de55536b6a3c1463e9a5033cf0b34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 6 Jun 2024 15:31:34 +0200 Subject: [PATCH 14/26] shell/app: Remove some dead code `g_desktop_app_info_launch_uris_as_manager_with_fds()` was added in GIO 2.57.2. We now depend on at least 2.79.2, so we no longer need a fallback path for the case the function isn't available. Part-of: (cherry picked from commit 55027bb084a0ee2cee639a8cc29e4df0cd000ccd) --- config.h.meson | 3 --- meson.build | 5 ----- src/shell-app.c | 40 ---------------------------------------- 3 files changed, 48 deletions(-) diff --git a/config.h.meson b/config.h.meson index 5ad68d839..914fc2ebd 100644 --- a/config.h.meson +++ b/config.h.meson @@ -31,9 +31,6 @@ /* Define if _NL_TIME_FIRST_WEEKDATE is available */ #mesondefine HAVE__NL_TIME_FIRST_WEEKDAY -/* Define if you have the `g_desktop_app_info_launch_uris_as_manager_with_fds` function */ -#mesondefine HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS - /* Define if fdwalk is available in libc */ #mesondefine HAVE_FDWALK diff --git a/meson.build b/meson.build index 857c0b93c..5a329a72e 100644 --- a/meson.build +++ b/meson.build @@ -146,11 +146,6 @@ cdata.set('HAVE_NETWORKMANAGER', have_networkmanager) cdata.set('HAVE_PIPEWIRE', have_pipewire) cdata.set('HAVE_SYSTEMD', have_systemd) -# New API added in glib-2.57.2 -cdata.set('HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS', - cc.has_function('g_desktop_app_info_launch_uris_as_manager_with_fds', - dependencies : gio_dep) -) cdata.set('HAVE_FDWALK', cc.has_function('fdwalk')) cdata.set('HAVE_MALLINFO', cc.has_function('mallinfo')) cdata.set('HAVE_MALLINFO2', cc.has_function('mallinfo2')) diff --git a/src/shell-app.c b/src/shell-app.c index dcebc97da..9bea3e347 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -1241,33 +1241,6 @@ child_context_setup (gpointer user_data) meta_context_restore_rlimit_nofile (meta_context, NULL); } -#if !defined(HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS) && defined(HAVE_SYSTEMD) -/* This sets up the launched application to log to the journal - * using its own identifier, instead of just "gnome-session". - */ -static void -app_child_setup (gpointer user_data) -{ - const char *appid = user_data; - int res; - int journalfd = sd_journal_stream_fd (appid, LOG_INFO, FALSE); - ShellGlobal *shell_global = shell_global_get (); - - if (journalfd >= 0) - { - do - res = dup2 (journalfd, 1); - while (G_UNLIKELY (res == -1 && errno == EINTR)); - do - res = dup2 (journalfd, 2); - while (G_UNLIKELY (res == -1 && errno == EINTR)); - (void) close (journalfd); - } - - child_context_setup (shell_global); -} -#endif - static void wait_pid (GDesktopAppInfo *appinfo, GPid pid, @@ -1381,7 +1354,6 @@ shell_app_launch (ShellApp *app, flags = G_SPAWN_SEARCH_PATH | G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_LEAVE_DESCRIPTORS_OPEN; -#ifdef HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS /* Optimized spawn path, avoiding a child_setup function */ { int journalfd = -1; @@ -1403,18 +1375,6 @@ shell_app_launch (ShellApp *app, if (journalfd >= 0) (void) close (journalfd); } -#else /* !HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS */ - ret = g_desktop_app_info_launch_uris_as_manager (app->info, NULL, - context, - flags, -#ifdef HAVE_SYSTEMD - app_child_setup, (gpointer)shell_app_get_id (app), -#else - child_context_setup, shell_global, -#endif - wait_pid, NULL, - error); -#endif /* HAVE_GIO_DESKTOP_LAUNCH_URIS_WITH_FDS */ g_object_unref (context); return ret; From 6c67f4fc77e5f35494d3da7731ca6905a96a977e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= Date: Wed, 12 Jun 2024 23:54:21 +0200 Subject: [PATCH 15/26] extensions-app: Substitute gettext package in metainfo The gettext domain name can be configured in meson options, but defaults to 'gnome-shell' if it's built as a submodule. Part-of: (cherry picked from commit 1c6d76907cd323e74b7c09c7df1324318b83fab1) --- subprojects/extensions-app/data/metainfo/meson.build | 6 +++++- .../data/metainfo/org.gnome.Extensions.metainfo.xml.in | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/subprojects/extensions-app/data/metainfo/meson.build b/subprojects/extensions-app/data/metainfo/meson.build index 98328736f..a2f63ec70 100644 --- a/subprojects/extensions-app/data/metainfo/meson.build +++ b/subprojects/extensions-app/data/metainfo/meson.build @@ -1,8 +1,12 @@ +metainfoconf = configuration_data() +metainfoconf.set('app_id', app_id) +metainfoconf.set('package_name', package_name) + metainfo = i18n.merge_file( input: configure_file( input: base_id + '.metainfo.xml.in', output: app_id + '.metainfo.xml.in', - configuration: {'app_id': app_id}, + configuration: metainfoconf, ), output: '@BASENAME@', po_dir: po_dir, diff --git a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in index c91fcd88f..42dab73d3 100644 --- a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in +++ b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in @@ -21,7 +21,7 @@ The GNOME Project - gnome-extensions-app + @package_name@ @app_id@.desktop From 1aa0dd009389c672753fc858e575fdc1c2a00d7f Mon Sep 17 00:00:00 2001 From: Alessandro Bono Date: Wed, 1 May 2024 20:00:49 +0200 Subject: [PATCH 16/26] gdm/util: Simplify code This avoids iterating and checking if a service is foreground multiple times. Part-of: (cherry picked from commit 5877de6c3bd5de0f20a16aa896e8ad5d7e1cc0f9) --- js/gdm/util.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/js/gdm/util.js b/js/gdm/util.js index 303be0d62..b5a544c8d 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -892,10 +892,10 @@ export class ShellUserVerifier extends Signals.EventEmitter { // If the login failed with the preauthenticated oVirt credentials // then discard the credentials and revert to default authentication // mechanism. - let foregroundService = Object.keys(this._credentialManagers).find(service => - this.serviceIsForeground(service)); - if (foregroundService) { - this._credentialManagers[foregroundService].token = null; + const isCredentialManager = !!this._credentialManagers[serviceName]; + const isForeground = this.serviceIsForeground(serviceName); + if (isCredentialManager && isForeground) { + this._credentialManagers[serviceName].token = null; this._preemptingService = null; this._verificationFailed(serviceName, false); return; @@ -909,7 +909,7 @@ export class ShellUserVerifier extends Signals.EventEmitter { // if the password service fails, then cancel everything. // But if, e.g., fingerprint fails, still give // password authentication a chance to succeed - if (this.serviceIsForeground(serviceName)) + if (isForeground) this._failCounter++; this._verificationFailed(serviceName, true); From d42f4b768eb21163725f5db0399a1a8cf37ad1df Mon Sep 17 00:00:00 2001 From: Alessandro Bono Date: Tue, 16 Apr 2024 17:10:53 +0200 Subject: [PATCH 17/26] gdm/util: Cleanup CredentialManager on successful verification CredentialManagers emit a user-authenticated signal with a token upon a successful authentication. This marks the service as preempting and will be used for the next login/unlock request. However, the preempting service is not cleaned after a successful verification. As a consequence, it will be picked on a second unlock request. This doesn't happen after a succesful login request because there is a transition from the gnome-shell process owened by GDM to the one owned by the user. Clean the preempting service on a successful verification, like we do when the PAM conversation stops. Part-of: (cherry picked from commit 258ad57b8741d56ac0e58b462172710e17b6dad4) --- js/gdm/util.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/js/gdm/util.js b/js/gdm/util.js index b5a544c8d..07cc17a33 100644 --- a/js/gdm/util.js +++ b/js/gdm/util.js @@ -806,7 +806,14 @@ export class ShellUserVerifier extends Signals.EventEmitter { this.emit('reset'); } - _onVerificationComplete() { + _onVerificationComplete(_client, serviceName) { + const isCredentialManager = !!this._credentialManagers[serviceName]; + const isForeground = this.serviceIsForeground(serviceName); + if (isCredentialManager && isForeground) { + this._credentialManagers[serviceName].token = null; + this._preemptingService = null; + } + this.emit('verification-complete'); } From ae0d740f1b64415610e9c95c696f2208363179cc Mon Sep 17 00:00:00 2001 From: Sam Hewitt Date: Mon, 13 May 2024 13:22:36 -0230 Subject: [PATCH 18/26] style: Fix background color issue with menuitems - fix missing submenu bg colors - add submenu color definitions Fixes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7570 Part-of: (cherry picked from commit 92063e5e46f8f4baa283b9a8a2f7759ffc87da32) --- data/theme/gnome-shell-sass/_drawing.scss | 3 --- data/theme/gnome-shell-sass/widgets/_popovers.scss | 10 ++++++---- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/data/theme/gnome-shell-sass/_drawing.scss b/data/theme/gnome-shell-sass/_drawing.scss index 5d56d4c17..954b1d04b 100644 --- a/data/theme/gnome-shell-sass/_drawing.scss +++ b/data/theme/gnome-shell-sass/_drawing.scss @@ -368,9 +368,6 @@ // extend common styles @extend %menuitem; - // lighten the background color always - $bg: lighten($bg,5%); - @if $style == 'flat' { @include button(undecorated); } @else { diff --git a/data/theme/gnome-shell-sass/widgets/_popovers.scss b/data/theme/gnome-shell-sass/widgets/_popovers.scss index 7f3df1ac8..fdc4f17f1 100644 --- a/data/theme/gnome-shell-sass/widgets/_popovers.scss +++ b/data/theme/gnome-shell-sass/widgets/_popovers.scss @@ -1,10 +1,11 @@ /* Popovers/Menus */ $menu_bg_color: $bg_color; -$menuitem_bg_color: lighten($menu_bg_color, 4%); + +$menuitem_bg_color: if($variant == 'light', darken($menu_bg_color, 5%), lighten($menu_bg_color, 5%)); $menuitem_border_radius: $base_border_radius * 1.5; -$submenu_bg_color: lighten($menu_bg_color, 7%); +$submenu_bg_color: if($variant == 'light', darken($menu_bg_color, 17%), lighten($menu_bg_color, 13%)); // the popover itself .popup-menu-boxpointer { @@ -33,7 +34,7 @@ $submenu_bg_color: lighten($menu_bg_color, 7%); // menu items .popup-menu-item { - @include menuitem($bg:$menu_bg_color); + @include menuitem($bg:$menuitem_bg_color); border-radius: $menuitem_border_radius; @@ -75,6 +76,7 @@ $submenu_bg_color: lighten($menu_bg_color, 7%); border-radius: 0 0 $menuitem_border_radius+1px $menuitem_border_radius+1px; margin-bottom: $base_padding; border: 1px solid transparent; + background-color: $submenu_bg_color; @if $contrast == 'high' { border-color: $hc_inset_color; @@ -83,8 +85,8 @@ $submenu_bg_color: lighten($menu_bg_color, 7%); // submenu specific styles .popup-menu-item { border-radius: 0; - @include menuitem($bg:$submenu_bg_color); border-top-width:0; + @include menuitem($bg:$submenu_bg_color); &:last-child { border-radius: 0 0 $menuitem_border_radius $menuitem_border_radius; From 28054f4e6be7d71e17e870d435cf5955798d732c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Thu, 20 Jun 2024 14:32:17 +0200 Subject: [PATCH 19/26] barLevel: Update cached style values before chaining up St.DrawingArea emits the `repaint` signal on style changes, so if we chain up first, drawing still happens with the previously cached values. Part-of: (cherry picked from commit 1bab7b32e58f40120cc7170eddd111c81b361691) --- js/ui/barLevel.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/js/ui/barLevel.js b/js/ui/barLevel.js index 3f4535725..829b22eca 100644 --- a/js/ui/barLevel.js +++ b/js/ui/barLevel.js @@ -108,8 +108,6 @@ export const BarLevel = GObject.registerClass({ } vfunc_style_changed() { - super.vfunc_style_changed(); - const themeNode = this.get_theme_node(); this._barLevelHeight = themeNode.get_length('-barlevel-height'); this._barLevelBorderWidth = @@ -135,6 +133,8 @@ export const BarLevel = GObject.registerClass({ themeNode.lookup_color('-barlevel-overdrive-border-color', false); this._barLevelOverdriveBorderColor = hasOverdriveBorderColor ? barLevelOverdriveBorderColor : this._barLevelOverdriveColor; + + super.vfunc_style_changed(); } vfunc_repaint() { From 9f91003305684e159c45e4278db22fb0c2def60a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ball=C3=B3=20Gy=C3=B6rgy?= Date: Thu, 20 Jun 2024 12:59:34 +0000 Subject: [PATCH 20/26] extensions-app: Link to GitLab Issues instead of New Issue URL When not logged in, the New Issue URL only redirects to an unhelpful login page while the Issues page allows you to search for existing issues and still offers a "New Issue" button. Part-of: (cherry picked from commit 5a99ba1a06bcdd93280c71b18945b665f8f20655) --- .../data/metainfo/org.gnome.Extensions.metainfo.xml.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in index 42dab73d3..5758ec3f6 100644 --- a/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in +++ b/subprojects/extensions-app/data/metainfo/org.gnome.Extensions.metainfo.xml.in @@ -9,7 +9,7 @@ GPL-2.0-or-later https://apps.gnome.org/Extensions/ - https://gitlab.gnome.org/GNOME/gnome-shell/issues/new + https://gitlab.gnome.org/GNOME/gnome-shell/issues https://www.gnome.org/donate/ https://l10n.gnome.org/module/gnome-shell/ https://gitlab.gnome.org/GNOME/gnome-shell/-/tree/HEAD/subprojects/extensions-app From a9033808ad5d5d76cc8f921eafaedc4a9f0e33f6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20Dre=C3=9Fler?= Date: Thu, 6 Jun 2024 18:13:27 +0300 Subject: [PATCH 21/26] st/theme-node-drawing: Factor in border radius in update_resources() The reduced border radius from st_theme_node_reduce_border_radius() depends on the allocation size, and when it changes, has_large_corners can change. has_large_corners is used to determine whether to pre-render using cairo, so that means a change to the allocation size can influence whether the pre-render using cairo should happen or not. On changes to the allocation size we don't want to call render_resources() though, but just update_resources() instead. And since we know now that changes to the allocation size might cause pre-rendering to get enabled or disabled, we need to do the "should pre-render" checks in update_resources(), too. So factor out those "should pre-render" checks into a new function st_theme_node_maybe_prerender_background(), and then call that function from both render_resources() and update_resources(). This fixes rendering artifacts with borders or rounded corners after changes to the actor size. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/6567 Part-of: (cherry picked from commit e1868cab1a1091ac26a1117fc49bf1e059b2cd37) --- src/st/st-theme-node-drawing.c | 173 +++++++++++++++++---------------- 1 file changed, 88 insertions(+), 85 deletions(-) diff --git a/src/st/st-theme-node-drawing.c b/src/st/st-theme-node-drawing.c index 081ccbef5..e4aa16047 100644 --- a/src/st/st-theme-node-drawing.c +++ b/src/st/st-theme-node-drawing.c @@ -1362,6 +1362,92 @@ st_theme_node_prerender_background (StThemeNode *node, return texture; } +static void +st_theme_node_maybe_prerender_background (StThemeNodePaintState *state, + StThemeNode *node, + float width, + float height, + float resource_scale) +{ + gboolean has_border; + gboolean has_border_radius; + gboolean has_inset_box_shadow; + gboolean has_large_corners; + StShadow *box_shadow_spec; + + box_shadow_spec = st_theme_node_get_box_shadow (node); + + has_inset_box_shadow = box_shadow_spec && box_shadow_spec->inset; + + if (node->border_width[ST_SIDE_TOP] > 0 || + node->border_width[ST_SIDE_LEFT] > 0 || + node->border_width[ST_SIDE_RIGHT] > 0 || + node->border_width[ST_SIDE_BOTTOM] > 0) + has_border = TRUE; + else + has_border = FALSE; + + if (node->border_radius[ST_CORNER_TOPLEFT] > 0 || + node->border_radius[ST_CORNER_TOPRIGHT] > 0 || + node->border_radius[ST_CORNER_BOTTOMLEFT] > 0 || + node->border_radius[ST_CORNER_BOTTOMRIGHT] > 0) + has_border_radius = TRUE; + else + has_border_radius = FALSE; + + /* The cogl code pads each corner to the maximum border radius, + * which results in overlapping corner areas if the radius + * exceeds the actor's halfsize, causing rendering errors. + * Fall back to cairo in these cases. */ + has_large_corners = FALSE; + + if (has_border_radius) { + guint border_radius[4]; + int corner; + + st_theme_node_reduce_border_radius (node, width, height, border_radius); + + for (corner = 0; corner < 4; corner ++) { + if (border_radius[corner] * 2 > height || + border_radius[corner] * 2 > width) { + has_large_corners = TRUE; + break; + } + } + } + + state->corner_material[ST_CORNER_TOPLEFT] = + st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPLEFT); + state->corner_material[ST_CORNER_TOPRIGHT] = + st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPRIGHT); + state->corner_material[ST_CORNER_BOTTOMRIGHT] = + st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMRIGHT); + state->corner_material[ST_CORNER_BOTTOMLEFT] = + st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMLEFT); + + /* Use cairo to prerender the node if there is a gradient, or + * background image with borders and/or rounded corners, + * or large corners, since we can't do those things + * easily with cogl. + * + * FIXME: if we could figure out ahead of time that a + * background image won't overlap with the node borders, + * then we could use cogl for that case. + */ + if ((node->background_gradient_type != ST_GRADIENT_NONE) + || (has_inset_box_shadow && (has_border || node->background_color.alpha > 0)) + || (st_theme_node_get_background_image (node) && (has_border || has_border_radius)) + || has_large_corners) + { + state->prerendered_texture = st_theme_node_prerender_background (node, width, height, resource_scale); + + if (state->prerendered_texture) + state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture); + else + state->prerendered_pipeline = NULL; + } +} + static void st_theme_node_paint_borders (StThemeNodePaintState *state, CoglFramebuffer *framebuffer, const ClutterActorBox *box, @@ -1487,10 +1573,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state, float height, float resource_scale) { - gboolean has_border; - gboolean has_border_radius; gboolean has_inset_box_shadow; - gboolean has_large_corners; StShadow *box_shadow_spec; g_return_if_fail (width > 0 && height > 0); @@ -1512,72 +1595,7 @@ st_theme_node_render_resources (StThemeNodePaintState *state, box_shadow_spec = st_theme_node_get_box_shadow (node); has_inset_box_shadow = box_shadow_spec && box_shadow_spec->inset; - if (node->border_width[ST_SIDE_TOP] > 0 || - node->border_width[ST_SIDE_LEFT] > 0 || - node->border_width[ST_SIDE_RIGHT] > 0 || - node->border_width[ST_SIDE_BOTTOM] > 0) - has_border = TRUE; - else - has_border = FALSE; - - if (node->border_radius[ST_CORNER_TOPLEFT] > 0 || - node->border_radius[ST_CORNER_TOPRIGHT] > 0 || - node->border_radius[ST_CORNER_BOTTOMLEFT] > 0 || - node->border_radius[ST_CORNER_BOTTOMRIGHT] > 0) - has_border_radius = TRUE; - else - has_border_radius = FALSE; - - /* The cogl code pads each corner to the maximum border radius, - * which results in overlapping corner areas if the radius - * exceeds the actor's halfsize, causing rendering errors. - * Fall back to cairo in these cases. */ - has_large_corners = FALSE; - - if (has_border_radius) { - guint border_radius[4]; - int corner; - - st_theme_node_reduce_border_radius (node, width, height, border_radius); - - for (corner = 0; corner < 4; corner ++) { - if (border_radius[corner] * 2 > height || - border_radius[corner] * 2 > width) { - has_large_corners = TRUE; - break; - } - } - } - - state->corner_material[ST_CORNER_TOPLEFT] = - st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPLEFT); - state->corner_material[ST_CORNER_TOPRIGHT] = - st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_TOPRIGHT); - state->corner_material[ST_CORNER_BOTTOMRIGHT] = - st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMRIGHT); - state->corner_material[ST_CORNER_BOTTOMLEFT] = - st_theme_node_lookup_corner (node, width, height, resource_scale, ST_CORNER_BOTTOMLEFT); - - /* Use cairo to prerender the node if there is a gradient, or - * background image with borders and/or rounded corners, - * or large corners, since we can't do those things - * easily with cogl. - * - * FIXME: if we could figure out ahead of time that a - * background image won't overlap with the node borders, - * then we could use cogl for that case. - */ - if ((node->background_gradient_type != ST_GRADIENT_NONE) - || (has_inset_box_shadow && (has_border || node->background_color.alpha > 0)) - || (st_theme_node_get_background_image (node) && (has_border || has_border_radius)) - || has_large_corners) - state->prerendered_texture = st_theme_node_prerender_background (node, width, height, - resource_scale); - - if (state->prerendered_texture) - state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture); - else - state->prerendered_pipeline = NULL; + st_theme_node_maybe_prerender_background (state, node, width, height, resource_scale); if (box_shadow_spec && !has_inset_box_shadow) { @@ -1616,14 +1634,12 @@ st_theme_node_update_resources (StThemeNodePaintState *state, float height, float resource_scale) { - gboolean had_prerendered_texture = FALSE; gboolean had_box_shadow = FALSE; StShadow *box_shadow_spec; g_return_if_fail (width > 0 && height > 0); /* Free handles we can't reuse */ - had_prerendered_texture = (state->prerendered_texture != NULL); g_clear_object (&state->prerendered_texture); if (state->prerendered_pipeline != NULL) @@ -1645,20 +1661,7 @@ st_theme_node_update_resources (StThemeNodePaintState *state, box_shadow_spec = st_theme_node_get_box_shadow (node); - if (had_prerendered_texture) - { - state->prerendered_texture = st_theme_node_prerender_background (node, width, height, resource_scale); - state->prerendered_pipeline = _st_create_texture_pipeline (state->prerendered_texture); - } - else - { - int corner_id; - - for (corner_id = 0; corner_id < 4; corner_id++) - if (state->corner_material[corner_id] == NULL) - state->corner_material[corner_id] = - st_theme_node_lookup_corner (node, width, height, resource_scale, corner_id); - } + st_theme_node_maybe_prerender_background (state, node, width, height, resource_scale); if (had_box_shadow) state->box_shadow_pipeline = _st_create_shadow_pipeline (box_shadow_spec, From 9b3ab9aca4b5de352fc368f2efa35e50ab91ba89 Mon Sep 17 00:00:00 2001 From: Keyu Tao Date: Thu, 20 Jun 2024 23:09:27 +0800 Subject: [PATCH 22/26] workspacesView: Make active workspace above siblings If there's a window flowing over the left edge in a workspace, the animation of showing or hiding overview in the left adjacent workspace would glitch, as the window would appear or disappear suddenly. This commits tries to fix it by making sure the active workspace are above other workspaces when updating workspaces or active workspace changed in workspacesView. Closes: https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/7364 Part-of: (cherry picked from commit ab8762924173e7aa6935bb4dcb73612d67bc948f) --- js/ui/workspacesView.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 24c24896d..0e962aa4a 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -440,6 +440,11 @@ class WorkspacesView extends WorkspacesViewBase { } } + _raiseActiveWorkspace() { + const activeWorkspace = this.getActiveWorkspace(); + this.set_child_above_sibling(activeWorkspace, null); + } + _updateWorkspaces() { let workspaceManager = global.workspace_manager; let newNumWorkspaces = workspaceManager.n_workspaces; @@ -472,10 +477,12 @@ class WorkspacesView extends WorkspacesViewBase { this._updateWorkspacesState(); this._updateVisibility(); + this._raiseActiveWorkspace(); } _activeWorkspaceChanged(_wm, _from, _to, _direction) { this._scrollToActive(); + this._raiseActiveWorkspace(); } _onDestroy() { From d3312b658f21c4186b319f40a6760b7aa3f984b6 Mon Sep 17 00:00:00 2001 From: Sundeep Mediratta Date: Sun, 23 Jun 2024 10:12:51 -0400 Subject: [PATCH 23/26] workspace: Initialize overview windows correctly in constructor Currently overview windows added in workspace constructor lack monitoring the skip-taskbar property. All other windows added after this have this monitoring. This uses existing code to correctly add the signal and removes all redundant code. It also insures all transients are handled correctly on initialization using the existing code. Part-of: (cherry picked from commit 8af8a27d9180385874236a9eb0c38727845d46a7) --- js/ui/workspace.js | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 4787cdf0e..147b843de 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -1089,16 +1089,11 @@ class Workspace extends St.Widget { this.connect('destroy', this._onDestroy.bind(this)); this._skipTaskbarSignals = new Map(); - const windows = global.get_window_actors().map(a => a.meta_window) - .filter(this._isMyWindow, this); - - // Create clones for windows that should be - // visible in the Overview this._windows = []; - for (let i = 0; i < windows.length; i++) { - if (this._isOverviewWindow(windows[i])) - this._addWindowClone(windows[i]); - } + this._layoutFrozenId = 0; + + // DND requires this to be set + this._delegate = this; // Track window changes, but let the window tracker process them first this.metaWorkspace?.connectObject( @@ -1109,10 +1104,10 @@ class Workspace extends St.Widget { 'window-entered-monitor', this._windowEnteredMonitor.bind(this), GObject.ConnectFlags.AFTER, 'window-left-monitor', this._windowLeftMonitor.bind(this), GObject.ConnectFlags.AFTER, this); - this._layoutFrozenId = 0; - // DND requires this to be set - this._delegate = this; + // Create clones for windows that should be + // visible in the Overview + global.get_window_actors().map(a => this._doAddWindow(a.meta_window)); } _shouldLeaveOverview() { From 1803cd84097b0af339309f1d88c57c8040972c9b Mon Sep 17 00:00:00 2001 From: Sundeep Mediratta Date: Sun, 23 Jun 2024 15:12:34 -0400 Subject: [PATCH 24/26] workspace: Use better window check option in existing code Part-of: (cherry picked from commit 46c74acb1be817a2fee3c8def29627cea618b144) --- js/ui/workspace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 147b843de..09fe3abdb 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -1202,7 +1202,7 @@ class Workspace extends St.Widget { // We might have the window in our list already if it was on all workspaces and // now was moved to this workspace - if (this._lookupIndex(metaWin) !== -1) + if (this.containsMetaWindow(metaWin)) return; if (!this._isMyWindow(metaWin)) From 92279760af1667a49179a3e37865f81f5a466e64 Mon Sep 17 00:00:00 2001 From: Bilal Elmoussaoui Date: Wed, 26 Jun 2024 14:37:42 +0200 Subject: [PATCH 25/26] Remove obsolete/unnecessary includes Part-of: (cherry picked from commit 19a37ed02a19c77418bae21b6ddbb3a67a7bd19e) --- src/gnome-shell-plugin.c | 1 - src/shell-app.c | 1 - 2 files changed, 2 deletions(-) diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c index 76f2045b4..f978aba8d 100644 --- a/src/gnome-shell-plugin.c +++ b/src/gnome-shell-plugin.c @@ -40,7 +40,6 @@ #include #include #include -#include #include #include diff --git a/src/shell-app.c b/src/shell-app.c index 9bea3e347..04d0ab508 100644 --- a/src/shell-app.c +++ b/src/shell-app.c @@ -9,7 +9,6 @@ #include #include #include -#include #include "shell-app-private.h" #include "shell-enum-types.h" From 544681f8eafddbaf8defa872e5ba1dc0e5ba9432 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20=C3=85dahl?= Date: Fri, 28 Jun 2024 23:01:12 +0200 Subject: [PATCH 26/26] tests/fittsy: Await leisure before checking fittsiness Not until we've waited for leisure can we make precise assumptions about otherwise animated actors sizes and positions, so do that before checking fittsiness. This should fix the flakyness of the fittsy test case. Part-of: --- tests/shell/fittsy.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/shell/fittsy.js b/tests/shell/fittsy.js index 53f58e0e4..09838d126 100644 --- a/tests/shell/fittsy.js +++ b/tests/shell/fittsy.js @@ -4,6 +4,7 @@ import Clutter from 'gi://Clutter'; import Shell from 'gi://Shell'; import * as Main from 'resource:///org/gnome/shell/ui/main.js'; +import * as Scripting from 'resource:///org/gnome/shell/ui/scripting.js'; import {sleep} from 'resource:///org/gnome/shell/ui/scripting.js'; const {Orientation, PickMode, TextDirection} = Clutter; @@ -45,6 +46,8 @@ export async function run() { const leftEdge = primaryMonitor.x + EPSILON; const rightEdge = primaryMonitor.x + primaryMonitor.width - EPSILON; + await Scripting.waitLeisure(); + const showApps = Main.overview.dash.showAppsButton; console.debug('Checking that dash extends to bottom screen edge'); checkFittsiness('fittsyDash',