Fix crash after launching apps via drag-and-drop

This commit is contained in:
Florian Müllner 2021-03-08 13:53:40 +01:00
parent 6466e4bf0f
commit 8c14eae2c1
2 changed files with 63 additions and 1 deletions

View File

@ -0,0 +1,58 @@
From f9f936e71a35dd9a383ba26763cf69c696d08ed4 Mon Sep 17 00:00:00 2001
From: Sebastian Keller <skeller@gnome.org>
Date: Sun, 7 Mar 2021 16:57:44 +0100
Subject: [PATCH] shell/app: Avoid adding windows with a startup workspace
twice
Changing the workspace of a window causes the window tracker to remove
and add it to the app again. If this happens from within
_shell_app_add_window() before the window has been added to the windows
list, this will cause the check that is supposed to prevent adding the
same window multiple times to fail and the window to be added twice.
The app will then be considered still running after the last window has
been closed. Then when clicking on the corresponding app icon, the shell
would attempt to switch to a NULL workspace for the closed window
instead of starting a new instance, resulting in a crash.
Changing the workspace also needs to happen after increasing the
interesting window count, because otherwise removal of the window by
the window tracker would trigger a uint underflow leading the app to be
considered running with UINT_MAX interesting windows, despite having no
windows, leading to crashes right after launching the app.
Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3833
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1745>
---
src/shell-app.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/shell-app.c b/src/shell-app.c
index 7d7b5510d..17b179cba 100644
--- a/src/shell-app.c
+++ b/src/shell-app.c
@@ -1081,10 +1081,6 @@ _shell_app_add_window (ShellApp *app,
if (!app->running_state)
create_running_state (app);
- if (app->started_on_workspace >= 0)
- meta_window_change_workspace_by_index (window, app->started_on_workspace, FALSE);
- app->started_on_workspace = -1;
-
app->running_state->window_sort_stale = TRUE;
app->running_state->windows = g_slist_prepend (app->running_state->windows, g_object_ref (window));
g_signal_connect_object (window, "unmanaged", G_CALLBACK(shell_app_on_unmanaged), app, 0);
@@ -1098,6 +1094,10 @@ _shell_app_add_window (ShellApp *app,
app->running_state->interesting_windows++;
shell_app_sync_running_state (app);
+ if (app->started_on_workspace >= 0)
+ meta_window_change_workspace_by_index (window, app->started_on_workspace, FALSE);
+ app->started_on_workspace = -1;
+
g_object_thaw_notify (G_OBJECT (app));
g_signal_emit (app, shell_app_signals[WINDOWS_CHANGED], 0);
--
2.30.1

View File

@ -1,6 +1,6 @@
Name: gnome-shell
Version: 40.0~beta
Release: 2.20210304git7a57528bd%{?dist}
Release: 3.20210304git7a57528bd%{?dist}
Summary: Window management and application launching for GNOME
License: GPLv2+
@ -11,6 +11,7 @@ Source0: http://download.gnome.org/sources/gnome-shell/40/%{name}-40.beta-79-g7a
Patch1: gnome-shell-favourite-apps-firefox.patch
# Undo post-release version bump for snapshot
Patch2: 0001-build-Lower-mutter-requirement.patch
Patch3: 0001-shell-app-Avoid-adding-windows-with-a-startup-worksp.patch
%define eds_version 3.33.1
%define gnome_desktop_version 3.35.91
@ -225,6 +226,9 @@ desktop-file-validate %{buildroot}%{_datadir}/applications/evolution-calendar.de
%{_mandir}/man1/gnome-shell.1*
%changelog
* Mon Mar 08 2021 Florian Müllner <fmuellner@redhat.com> - 40.0~beta-3.20210304git40.7a57528bd
- Fix crash after launching apps via drag-and-drop
* Thu Mar 04 2021 Florian Müllner <fmuellner@redhat.com> - 40.0~beta-2.20210304git40.7a57528bd
- Build snapshot of current upstream