Cherry-pick 2 proposed patches to fix app startup regressions

https://gitlab.gnome.org/GNOME/gtk/-/issues/5386
This commit is contained in:
Jeremy Bicha 2022-12-09 08:24:05 -05:00
parent 2fcf2822fe
commit d42e6c786a
3 changed files with 82 additions and 0 deletions

View File

@ -0,0 +1,39 @@
From: Joan Bruguera <joanbrugueram@gmail.com>
Date: Tue, 6 Dec 2022 23:51:28 +0000
Subject: gdk/wayland: save custom xdg-activation startup_id
We must save the startup id. in gdk_wayland_display_notify_startup_complete
which was set by a previous gtk_window_set_startup_id call so we can use it
later when presenting the window.
Needed for activation of gnome-terminal (also needs patches on the application
side, see https://gitlab.gnome.org/GNOME/gnome-terminal/-/issues/7952).
Fixes #5386
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5301
---
gdk/wayland/gdkdisplay-wayland.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/gdk/wayland/gdkdisplay-wayland.c b/gdk/wayland/gdkdisplay-wayland.c
index ddf2bf3..7ce279d 100644
--- a/gdk/wayland/gdkdisplay-wayland.c
+++ b/gdk/wayland/gdkdisplay-wayland.c
@@ -948,7 +948,13 @@ gdk_wayland_display_notify_startup_complete (GdkDisplay *display,
#ifdef HAVE_XDG_ACTIVATION
/* Will be signaled with focus activation */
if (display_wayland->xdg_activation)
- return;
+ {
+ if (startup_id != NULL)
+ {
+ display_wayland->startup_notification_id = g_strdup (startup_id);
+ }
+ return;
+ }
#endif
if (startup_id == NULL)

View File

@ -13,3 +13,5 @@ docs-Use-main-branch-instead-of-master.patch
060_ignore-random-icons.patch
reftest_compare_surfaces-Report-how-much-the-images-diffe.patch
reftests-Allow-minor-differences-to-be-tolerated.patch
window-focus-on-window-show-for-wayland-activation.patch
gdk-wayland-save-custom-xdg-activation-startup_id.patch

View File

@ -0,0 +1,41 @@
From: Joan Bruguera <joanbrugueram@gmail.com>
Date: Tue, 6 Dec 2022 20:55:53 +0000
Subject: window: focus on window show for wayland activation
When using xdg_activation this is responsible for submitting
the activation token / startup id to the compositor.
This supersedes 5dca6dce91b4413064c858ae011ea7b1e33421e2, which misses the case
where the window is shown with gtk_widget_show instead of gtk_window_present.
Note 5dca6dce91 was also accidentally missing on the xdg-activation GTK3 port.
Fixes #5386
Signed-off-by: Joan Bruguera <joanbrugueram@gmail.com>
https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/5301
---
gtk/gtkwindow.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index 5478e89..c87b17a 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -6228,6 +6228,16 @@ gtk_window_show (GtkWidget *widget)
if (priv->modal)
gtk_grab_add (widget);
+
+#ifdef GDK_WINDOWING_WAYLAND
+ if (GDK_IS_WAYLAND_WINDOW (gtk_widget_get_window (widget)))
+ {
+ // Submits the activation token / startup id to the compositor
+ gdk_window_focus (gtk_widget_get_window (widget), priv->initial_timestamp);
+ // Use gtk_window_present's timestamp only once
+ priv->initial_timestamp = GDK_CURRENT_TIME;
+ }
+#endif
}
static void