diff --git a/0001-constraints-Make-current-placement-rule-stack-alloca.patch b/0001-constraints-Make-current-placement-rule-stack-alloca.patch new file mode 100644 index 0000000000000000000000000000000000000000..913f4db6761ee55acfb50153d473be175adb1fe7 --- /dev/null +++ b/0001-constraints-Make-current-placement-rule-stack-alloca.patch @@ -0,0 +1,94 @@ +From 71a62bb18fe3aebc6668bd37ef6917398ef71ae1 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Sat, 20 Oct 2018 15:46:37 +0200 +Subject: [PATCH 1/2] constraints: Make current placement rule stack allocated + +We're not going to keep it past the function scope, so no reason to put +it on the heap. We also didn't free it, so this'll fix a memory leak. + +https://gitlab.gnome.org/GNOME/gnome-shell/issues/653 +--- + src/core/constraints.c | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +diff --git a/src/core/constraints.c b/src/core/constraints.c +index a205ea0fd7..3652b3d8e1 100644 +--- a/src/core/constraints.c ++++ b/src/core/constraints.c +@@ -787,7 +787,7 @@ constrain_custom_rule (MetaWindow *window, + MetaPlacementRule *placement_rule; + MetaRectangle intersection; + gboolean constraint_satisfied; +- MetaPlacementRule *current_rule; ++ MetaPlacementRule current_rule; + MetaWindow *parent; + MetaRectangle parent_rect; + +@@ -820,25 +820,24 @@ constrain_custom_rule (MetaWindow *window, + if (check_only) + return constraint_satisfied; + +- current_rule = g_new0 (MetaPlacementRule, 1); +- *current_rule = *placement_rule; ++ current_rule = *placement_rule; + + if (constraint_satisfied) + goto done; + + if (info->current.width != intersection.width && +- (current_rule->constraint_adjustment & ++ (current_rule.constraint_adjustment & + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X)) + { +- try_flip_window_position (window, info, current_rule, ++ try_flip_window_position (window, info, ¤t_rule, + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_X, + &info->current, &intersection); + } + if (info->current.height != intersection.height && +- (current_rule->constraint_adjustment & ++ (current_rule.constraint_adjustment & + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y)) + { +- try_flip_window_position (window, info, current_rule, ++ try_flip_window_position (window, info, ¤t_rule, + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_FLIP_Y, + &info->current, &intersection); + } +@@ -852,7 +851,7 @@ constrain_custom_rule (MetaWindow *window, + if (constraint_satisfied) + goto done; + +- if (current_rule->constraint_adjustment & ++ if (current_rule.constraint_adjustment & + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_X) + { + if (info->current.x != intersection.x) +@@ -860,7 +859,7 @@ constrain_custom_rule (MetaWindow *window, + else if (info->current.width != intersection.width) + info->current.x -= info->current.width - intersection.width; + } +- if (current_rule->constraint_adjustment & ++ if (current_rule.constraint_adjustment & + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_SLIDE_Y) + { + if (info->current.y != intersection.y) +@@ -878,13 +877,13 @@ constrain_custom_rule (MetaWindow *window, + if (constraint_satisfied) + goto done; + +- if (current_rule->constraint_adjustment & ++ if (current_rule.constraint_adjustment & + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_X) + { + info->current.x = intersection.x; + info->current.width = intersection.width; + } +- if (current_rule->constraint_adjustment & ++ if (current_rule.constraint_adjustment & + META_PLACEMENT_CONSTRAINT_ADJUSTMENT_RESIZE_Y) + { + info->current.y = intersection.y; +-- +2.19.1 + diff --git a/0001-monitor-manager-Don-t-use-switch-config-when-ensurin.patch b/0001-monitor-manager-Don-t-use-switch-config-when-ensurin.patch new file mode 100644 index 0000000000000000000000000000000000000000..52d8b10100b8eb8f409943c5494ac13cf574ea19 --- /dev/null +++ b/0001-monitor-manager-Don-t-use-switch-config-when-ensurin.patch @@ -0,0 +1,34 @@ +From 5e1e1fa78af7c91a9ba209c3abe71fff4e6a25d7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Thu, 11 Oct 2018 15:16:26 +0200 +Subject: [PATCH] monitor-manager: Don't use switch-config when ensuring + configuration + +Switch-configs are only to be used in certain circumstances (see +meta_monitor_manager_can_switch_config()) so when ensuring +configuration and attempting to create a linear configuration, use the +linear configuration constructor function directly without going via the +switch config method, otherwise we might incorrectly fall back to the +fallback configuration (only enable primary monitor). +--- + src/backends/meta-monitor-manager.c | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/backends/meta-monitor-manager.c b/src/backends/meta-monitor-manager.c +index baed7521dd..d9236b928b 100644 +--- a/src/backends/meta-monitor-manager.c ++++ b/src/backends/meta-monitor-manager.c +@@ -561,9 +561,7 @@ meta_monitor_manager_ensure_configured (MetaMonitorManager *manager) + g_clear_object (&config); + } + +- config = +- meta_monitor_config_manager_create_for_switch_config (manager->config_manager, +- META_MONITOR_SWITCH_CONFIG_ALL_LINEAR); ++ config = meta_monitor_config_manager_create_linear (manager->config_manager); + if (config) + { + if (!meta_monitor_manager_apply_monitors_config (manager, +-- +2.17.1 + diff --git a/0001-wayland-Defer-text_input.done-on-an-idle.patch b/0001-wayland-Defer-text_input.done-on-an-idle.patch new file mode 100644 index 0000000000000000000000000000000000000000..f909c71c355a2e51b6fb5358c506e2ea0c9e7002 --- /dev/null +++ b/0001-wayland-Defer-text_input.done-on-an-idle.patch @@ -0,0 +1,127 @@ +From 63124e3e8a675725c729d4a99b994a83517a5c1a Mon Sep 17 00:00:00 2001 +From: Carlos Garnacho +Date: Thu, 18 Oct 2018 02:08:24 +0200 +Subject: [PATCH] wayland: Defer text_input.done on an idle + +IBus naturally doesn't know how to implement the text-input protocol, +and some input methods emit event streams that are incompatible with the +protocol, if not assumed to be part of an grouped series of events. As +IBus doesn't have any API to let us know about such groupings, let's +fake it by adding a specially crafted idle callback. + +The idle callback has a known limitation; if there is an idle callback +with a higher priority, that either doesn't remove itself, or +reschedules itself before the next idle, we'll never get triggered. +This, however, is unlikely to actually be the bigger problem in such +situations, as it'd likely mean we'd have a 100% CPU bug. + +https://gitlab.gnome.org/GNOME/gtk/issues/1365 +--- + src/wayland/meta-wayland-text-input.c | 60 ++++++++++++++++++++++++--- + 1 file changed, 54 insertions(+), 6 deletions(-) + +diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c +index 8681430217..0493760bd1 100644 +--- a/src/wayland/meta-wayland-text-input.c ++++ b/src/wayland/meta-wayland-text-input.c +@@ -70,6 +70,8 @@ struct _MetaWaylandTextInput + uint32_t content_type_purpose; + uint32_t text_change_cause; + gboolean enabled; ++ ++ guint done_idle_id; + }; + + struct _MetaWaylandTextInputFocus +@@ -114,6 +116,52 @@ increment_serial (MetaWaylandTextInput *text_input, + GUINT_TO_POINTER (serial + 1)); + } + ++static gboolean ++done_idle_cb (gpointer user_data) ++{ ++ ClutterInputFocus *focus = user_data; ++ MetaWaylandTextInput *text_input; ++ struct wl_resource *resource; ++ ++ text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input; ++ ++ wl_resource_for_each (resource, &text_input->focus_resource_list) ++ { ++ zwp_text_input_v3_send_done (resource, ++ lookup_serial (text_input, resource)); ++ } ++ ++ text_input->done_idle_id = 0; ++ return G_SOURCE_REMOVE; ++} ++ ++static void ++meta_wayland_text_input_focus_defer_done (ClutterInputFocus *focus) ++{ ++ MetaWaylandTextInput *text_input; ++ ++ text_input = META_WAYLAND_TEXT_INPUT_FOCUS (focus)->text_input; ++ ++ if (text_input->done_idle_id != 0) ++ return; ++ ++ /* This operates on 3 principles: ++ * - GDBus uses G_PRIORITY_DEFAULT to put messages in the thread default main ++ * context. ++ * - All relevant ClutterInputFocus methods are ultimately backed by ++ * DBus methods inside IBus. ++ * - We want to run .done after them all. The slightly lower ++ * G_PRIORITY_DEFAULT + 1 priority should ensure we at least group ++ * all messages seen so far. ++ * ++ * FIXME: .done may be delayed indefinitely if there's a high enough ++ * priority idle source in the main loop. It's unlikely that ++ * recurring idles run at this high priority though. ++ */ ++ text_input->done_idle_id = g_idle_add_full (G_PRIORITY_DEFAULT + 1, ++ done_idle_cb, focus, NULL); ++} ++ + static void + meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus, + guint cursor, +@@ -127,9 +175,9 @@ meta_wayland_text_input_focus_delete_surrounding (ClutterInputFocus *focus, + wl_resource_for_each (resource, &text_input->focus_resource_list) + { + zwp_text_input_v3_send_delete_surrounding_text (resource, cursor, len); +- zwp_text_input_v3_send_done (resource, +- lookup_serial (text_input, resource)); + } ++ ++ meta_wayland_text_input_focus_defer_done (focus); + } + + static void +@@ -145,9 +193,9 @@ meta_wayland_text_input_focus_commit_text (ClutterInputFocus *focus, + { + zwp_text_input_v3_send_preedit_string (resource, NULL, 0, 0); + zwp_text_input_v3_send_commit_string (resource, text); +- zwp_text_input_v3_send_done (resource, +- lookup_serial (text_input, resource)); + } ++ ++ meta_wayland_text_input_focus_defer_done (focus); + } + + static void +@@ -163,9 +211,9 @@ meta_wayland_text_input_focus_set_preedit_text (ClutterInputFocus *focus, + wl_resource_for_each (resource, &text_input->focus_resource_list) + { + zwp_text_input_v3_send_preedit_string (resource, text, cursor, cursor); +- zwp_text_input_v3_send_done (resource, +- lookup_serial (text_input, resource)); + } ++ ++ meta_wayland_text_input_focus_defer_done (focus); + } + + static void +-- +2.19.1 + diff --git a/0001-wayland-text-input-Ignore-text-input-state-commit-wh.patch b/0001-wayland-text-input-Ignore-text-input-state-commit-wh.patch new file mode 100644 index 0000000000000000000000000000000000000000..32aac86229cb8aa5e71b1deb06978afcae34c2c3 --- /dev/null +++ b/0001-wayland-text-input-Ignore-text-input-state-commit-wh.patch @@ -0,0 +1,38 @@ +From 49fea735aa6e8ca70927c69c15bc9615d8f0f3b2 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Tue, 23 Oct 2018 14:13:33 +0200 +Subject: [PATCH] wayland/text-input: Ignore text-input state commit when not + focused + +We might unset focus, or already be out of focus (e.g. an X11 client or +clutter text entry is focused) when a text-input state is committed by +the client. We handled this before, except when text input was +explicitly disabled by the client, the Wayland text-input was in focus +by the input method, and it focused itself out. + +Simplify the logic a bit by just dropping the state on the floor in all +cases where after any potential focus changes were done, we are not +focused. + +Fixes: https://gitlab.gnome.org/GNOME/mutter/issues/353 +--- + src/wayland/meta-wayland-text-input.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/wayland/meta-wayland-text-input.c b/src/wayland/meta-wayland-text-input.c +index 8681430217..5bf06e2e08 100644 +--- a/src/wayland/meta-wayland-text-input.c ++++ b/src/wayland/meta-wayland-text-input.c +@@ -503,7 +503,8 @@ text_input_commit_state (struct wl_client *client, + clutter_input_method_focus_out (input_method); + } + } +- else if (!clutter_input_focus_is_focused (focus)) ++ ++ if (!clutter_input_focus_is_focused (focus)) + return; + + if (text_input->pending_state & META_WAYLAND_PENDING_STATE_CONTENT_TYPE) +-- +2.19.1 + diff --git a/0002-shaped-texture-Clean-up-texture-regions.patch b/0002-shaped-texture-Clean-up-texture-regions.patch new file mode 100644 index 0000000000000000000000000000000000000000..1782fd0216ca82d675fbe3ace233d0dfc8398bf5 --- /dev/null +++ b/0002-shaped-texture-Clean-up-texture-regions.patch @@ -0,0 +1,37 @@ +From 8200995fdbf04b2763d33cd30d7c8174eebc1736 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= +Date: Sat, 20 Oct 2018 15:47:50 +0200 +Subject: [PATCH 2/2] shaped-texture: Clean up texture regions + +We allocated texture regions, but didn't free them when finished, +causing a leak. + +https://gitlab.gnome.org/GNOME/gnome-shell/issues/653 +--- + src/compositor/meta-shaped-texture.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/compositor/meta-shaped-texture.c b/src/compositor/meta-shaped-texture.c +index 5328a919ea..cd151a28ed 100644 +--- a/src/compositor/meta-shaped-texture.c ++++ b/src/compositor/meta-shaped-texture.c +@@ -516,6 +516,7 @@ meta_shaped_texture_paint (ClutterActor *actor) + } + else + { ++ opaque_tex_region = NULL; + use_opaque_region = FALSE; + } + +@@ -659,6 +660,8 @@ meta_shaped_texture_paint (ClutterActor *actor) + } + } + ++ g_clear_pointer (&clip_tex_region, cairo_region_destroy); ++ g_clear_pointer (&opaque_tex_region, cairo_region_destroy); + g_clear_pointer (&blended_tex_region, cairo_region_destroy); + } + +-- +2.19.1 + diff --git a/mutter-3.30.1.tar.xz b/mutter-3.30.1.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..1e5ab9aa546da9dd801a50381fd03e4250d033ee Binary files /dev/null and b/mutter-3.30.1.tar.xz differ diff --git a/mutter-3.34.3.tar.xz b/mutter-3.34.3.tar.xz deleted file mode 100644 index 048504495b23796adeceaa584c93429dfd8db394..0000000000000000000000000000000000000000 Binary files a/mutter-3.34.3.tar.xz and /dev/null differ diff --git a/mutter.spec b/mutter.spec index 7ea53b210d7cbac65886eafb11b0cbebc1733ee6..b38ff24e8b991ec22c3e339074e652c0f7985b34 100644 --- a/mutter.spec +++ b/mutter.spec @@ -1,51 +1,42 @@ -%global gtk3_ver 3.19.8 -%global glib_ver 2.53.2 -%global libinput_ver 1.4 -%global mutter_api_ver 5 -%global pipewire_ver 0.2.2 -%global json_glib_ver 0.12.0 -%global gsettings_desktop_schemas_ver 3.33.0 - -%bcond_with profiler - Name: mutter -Version: 3.34.3 -Release: 1 +Version: 3.30.1 +Release: 7 Summary: Window and compositing manager based on Clutter License: GPLv2+ URL: https://www.gnome.org -Source0: %{name}-%{version}.tar.xz - -BuildRequires: chrpath pango-devel startup-notification-devel gnome-desktop3-devel -BuildRequires: glib2-devel >= %{glib_ver} gtk3-devel >= %{gtk3_ver} -BuildRequires: gobject-introspection-devel >= 1.41.0 libSM-devel pkgconf-pkg-config -BuildRequires: libwacom-devel libX11-devel libXdamage-devel libXext-devel -BuildRequires: libXfixes-devel libXi-devel libXrandr-devel libXrender-devel -BuildRequires: libXcursor-devel libXcomposite-devel libxcb-devel libxkbcommon-devel -BuildRequires: libxkbcommon-x11-devel libxkbfile-devel libXtst-devel -BuildRequires: mesa-libEGL-devel mesa-libGLES-devel mesa-libGL-devel -BuildRequires: mesa-libgbm-devel pam-devel pipewire-devel >= %{pipewire_ver} -BuildRequires: systemd-devel upower-devel xorg-x11-server-Xorg xkeyboard-config-devel -BuildRequires: zenity desktop-file-utils automake autoconf libtool -%if %{with profiler} -BuildRequires: sysprof-devel -%endif - -# Bootstrap requirements -BuildRequires: gtk-doc gnome-common gettext-devel git libcanberra-devel -BuildRequires: gsettings-desktop-schemas-devel >= %{gsettings_desktop_schemas_ver} -BuildRequires: gnome-settings-daemon-devel meson libgudev-devel libdrm-devel -BuildRequires: libgbm-devel wayland-devel egl-wayland-devel json-glib-devel >= %{json_glib_ver} -BuildRequires: libinput-devel >= %{libinput_ver} xorg-x11-server-Xwayland - -Requires: gnome-control-center-filesystem gtk3 pipewire >= %{pipewire_ver} -Requires: gsettings-desktop-schemas >= %{gsettings_desktop_schemas_ver} -Requires: startup-notification dbus zenity json-glib >= %{json_glib_ver} -Requires: libinput >= %{libinput_ver} - -Obsoletes: mutter-wayland < 3.13.0 mutter-wayland-devel < 3.13.0 +Source0: https://download.gnome.org/sources/%{name}/3.30/%{name}-%{version}.tar.xz + +# These patchs are from fedora29 +# Fix slow startup notification on wayland +Patch0: startup-notification.patch +# Don't use switch-config when ensuring configuration +Patch1: 0001-monitor-manager-Don-t-use-switch-config-when-ensurin.patch +# Make current placement rule stack allocated +Patch2: 0001-constraints-Make-current-placement-rule-stack-alloca.patch +# Clean up texture regions +Patch3: 0002-shaped-texture-Clean-up-texture-regions.patch +# Defer text_input.done on an idle +Patch4: 0001-wayland-Defer-text_input.done-on-an-idle.patch +# Ignore text-input state commit when not focused +Patch5: 0001-wayland-text-input-Ignore-text-input-state-commit-wh.patch + +BuildRequires: chrpath pango-devel startup-notification-devel gnome-desktop3-devel glib2-devel gtk3-devel git +BuildRequires: gobject-introspection-devel libSM-devel libwacom-devel libX11-devel libXdamage-devel libXext-devel +BuildRequires: libXfixes-devel libXi-devel libXrandr-devel libXrender-devel libXcursor-devel libXcomposite-devel +BuildRequires: libxcb-devel libxkbcommon-devel libxkbcommon-x11-devel libxkbfile-devel libXtst-devel systemd-devel +BuildRequires: mesa-libEGL-devel mesa-libGLES-devel mesa-libGL-devel mesa-libgbm-devel pam-devel pipewire-devel +BuildRequires: upower-devel xkeyboard-config-devel zenity desktop-file-utils gtk-doc gnome-common gettext-devel +BuildRequires: libcanberra-devel gsettings-desktop-schemas-devel automake autoconf libtool json-glib-devel pkgconfig +BuildRequires: libgudev-devel libinput-devel wayland-devel pkgconf-pkg-config libdrm-devel egl-wayland-devel + +Obsoletes: mutter-wayland +Obsoletes: mutter-wayland-devel + Conflicts: gnome-shell < 3.21.1 +Requires: gnome-control-center-filesystem libinput gsettings-desktop-schemas +Requires: gtk3 pipewire startup-notification dbus-x11 zenity json-glib + %description Mutter is a window and compositing manager based on Clutter, forked from Metacity. @@ -53,9 +44,8 @@ from Metacity. %package devel Summary: Development files and Header files for %{name} Requires: %{name} = %{version}-%{release} -Provides: %{name}-tests = %{version}-%{release} -Obsoletes: %{name}-tests < %{version}-%{release} - +Provides: %{name}-tests +Obsoletes: %{name}-tests %description devel The %{name}-devel package contains libraries and header files for developing applications that use %{name}. @@ -66,53 +56,48 @@ developing applications that use %{name}. %autosetup -n %{name}-%{version} -p1 %build -%meson -Degl_device=true -Dwayland_eglstream=true \ -%if %{with profiler} - -Dprofiler=true \ -%else - -Dprofiler=false \ -%endif +autoreconf -if +(if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; fi; + %configure --enable-compile-warnings=maximum --enable-remote-desktop --enable-installed-tests --with-libwacom --enable-egl-device) -%meson_build +%make_build %install -%meson_install - -%find_lang %{name} +%make_install +%delete_la_and_a desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop %ldconfig_scriptlets -%files -f %{name}.lang +%files %defattr(-,root,root) %license COPYING %{_bindir}/mutter -%{_libdir}/lib*.so.* -%{_libdir}/mutter-%{mutter_api_ver}/ -%{_libexecdir}/mutter-restart-helper +%{_libdir}/mutter/* +%{_libdir}/libmutter-3.so.* +%{_prefix}/libexec/mutter-restart-helper +%{_datadir}/locale/* %{_datadir}/applications/*.desktop -%{_datadir}/GConf/gsettings/mutter-schemas.convert %{_datadir}/glib-2.0/schemas/*.gschema.xml -%{_datadir}/gnome-control-center/keybindings/50-mutter-*.xml +%{_datadir}/GConf/gsettings/mutter-schemas.convert +%{_datadir}/gnome-control-center/keybindings/50-mutter* -%files devel +%files devel %defattr(-,root,root) -%{_includedir}/* -%{_libdir}/lib*.so -%{_libdir}/pkgconfig/* -%{_libexecdir}/installed-tests/mutter-%{mutter_api_ver} -%{_datadir}/mutter-%{mutter_api_ver}/tests -%{_datadir}/installed-tests/mutter-%{mutter_api_ver} +%{_bindir}/* +%{_includedir}/mutter/* +%{_libdir}/pkgconfig/*.pc +%{_libdir}/libmutter-3.so +%{_prefix}/libexec/installed-tests/* +%{_datadir}/installed-tests/* +%{_datadir}/mutter/tests/stacking/*.metatest %files help %defattr(-,root,root) %doc NEWS -%{_mandir}/man1/mutter.1* +%{_mandir}/man1/*.1.gz %changelog -* Tue Jan 7 2020 openEuler Buildteam - 3.34.3-1 -- update to 3.34.3 - * Mon Dec 9 2019 openEuler Buildteam - 3.30.1-7 - Type:bugfix - Id:NA @@ -121,3 +106,4 @@ desktop-file-validate %{buildroot}/%{_datadir}/applications/%{name}.desktop * Mon Sep 16 2019 openEuler Buildteam - 3.30.1-6 - Package init + diff --git a/startup-notification.patch b/startup-notification.patch new file mode 100644 index 0000000000000000000000000000000000000000..1a4dd0b9705fb0a25764891287c876425811ddfe --- /dev/null +++ b/startup-notification.patch @@ -0,0 +1,45 @@ +From 4ed430b4ef3013c96fa56cdc57b925b42d20ead9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Florian=20M=C3=BCllner?= +Date: Thu, 20 Oct 2016 18:00:04 +0200 +Subject: [PATCH] gtk-shell: Work around non-working startup notifications + +GNOME Shell relies on the MetaScreen::startup-sequence-changed signal, +which is tied to (lib)startup-notification and therefore X11. As a result, +when we remove the startup sequence of a wayland client, GNOME Shell will +not be notified about this until startup-notification's timeout is hit. +As a temporary stop-gap, go through XWayland even for wayland clients, +so that the signal is emitted when expected. + +https://bugzilla.gnome.org/show_bug.cgi?id=768531 +--- + src/wayland/meta-wayland-gtk-shell.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/src/wayland/meta-wayland-gtk-shell.c b/src/wayland/meta-wayland-gtk-shell.c +index d6e249f..9d1a19e 100644 +--- a/src/wayland/meta-wayland-gtk-shell.c ++++ b/src/wayland/meta-wayland-gtk-shell.c +@@ -219,11 +219,21 @@ gtk_shell_set_startup_id (struct wl_client *client, + struct wl_resource *resource, + const char *startup_id) + { ++#if 0 + MetaDisplay *display; + + display = meta_get_display (); + meta_startup_notification_remove_sequence (display->startup_notification, + startup_id); ++#else ++ /* HACK: MetaScreen::startup-sequence-changed is currently tied to ++ (lib)startup-notification, which means it only works on X11; ++ so for now, always go through XWayland, even for wayland clients */ ++ gdk_x11_display_broadcast_startup_message (gdk_display_get_default (), ++ "remove", ++ "ID", startup_id, ++ NULL); ++#endif + } + + static void +-- +2.9.3