You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
92 lines
3.3 KiB
92 lines
3.3 KiB
From 0c9cb02111908409285991e4b0f44a4fdcf91eed Mon Sep 17 00:00:00 2001 |
|
From: Olivier Fourdan <ofourdan@redhat.com> |
|
Date: Tue, 23 Jan 2018 11:43:09 +0100 |
|
Subject: [PATCH 1/2] session: use initial workspace if no workspace set |
|
MIME-Version: 1.0 |
|
Content-Type: text/plain; charset=UTF-8 |
|
Content-Transfer-Encoding: 8bit |
|
|
|
Having “on_all_workspaces_requested” FALSE on a window does not imply a |
|
workspace is set. |
|
|
|
If the X11 window is placed on a secondary monitor while workspaces |
|
applies on primary monitor only (“workspaces-only-on-primary” set) then |
|
“on_all_workspaces_requested” is FALSE while “on_all_workspaces“ is TRUE |
|
and the associated workspace is NULL, leading to a crash when saving the |
|
gnome-shell/mutter session. |
|
|
|
So if no workspace is set, use the “initial_workspace” instead to avoid |
|
a NULL pointer dereference. |
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=792818 |
|
--- |
|
src/x11/session.c | 5 ++++- |
|
1 file changed, 4 insertions(+), 1 deletion(-) |
|
|
|
diff --git a/src/x11/session.c b/src/x11/session.c |
|
index af64270a6..8b2a89f1c 100644 |
|
--- a/src/x11/session.c |
|
+++ b/src/x11/session.c |
|
@@ -950,7 +950,10 @@ save_state (void) |
|
fputs (" <sticky/>\n", outfile); |
|
} else { |
|
int n; |
|
- n = meta_workspace_index (window->workspace); |
|
+ if (window->workspace) |
|
+ n = meta_workspace_index (window->workspace); |
|
+ else |
|
+ n = window->initial_workspace; |
|
fprintf (outfile, |
|
" <workspace index=\"%d\"/>\n", n); |
|
} |
|
-- |
|
2.14.3 |
|
|
|
|
|
From e2269448dcebd24f23bb8872590204819abc3ac0 Mon Sep 17 00:00:00 2001 |
|
From: Olivier Fourdan <ofourdan@redhat.com> |
|
Date: Mon, 29 Jan 2018 16:58:46 +0100 |
|
Subject: [PATCH 2/2] =?UTF-8?q?x11/window:=20Mark=20restored=20workspace?= |
|
=?UTF-8?q?=20as=20=E2=80=9Cset=E2=80=9D?= |
|
MIME-Version: 1.0 |
|
Content-Type: text/plain; charset=UTF-8 |
|
Content-Transfer-Encoding: 8bit |
|
|
|
When a window's workspace is not NULL, on_all_workspace should be FALSE. |
|
Similarly, when on_all_workspace is TRUE, the window workspace should be |
|
NULL. |
|
|
|
This is an assumption in multiple places in the code, including when |
|
setting the workspace state, the window is either added or removed from |
|
all workspaces only if the window's workspace is NULL. |
|
|
|
This rule is initially enforced at creation in _meta_window_shared_new() |
|
when a initial workspace is set. However, when the initial workspace is |
|
set from the session info, the initial workspace is not marked as “set” |
|
which leads to an assertion failure when unmanaging windows, because the |
|
window is not removed from all the workspaces. |
|
|
|
When applying the session info to a window, mark the workspace as “set”. |
|
|
|
https://gitlab.gnome.org/GNOME/mutter/issues/4 |
|
|
|
Closes: #4 |
|
--- |
|
src/x11/window-x11.c | 1 + |
|
1 file changed, 1 insertion(+) |
|
|
|
diff --git a/src/x11/window-x11.c b/src/x11/window-x11.c |
|
index 36a5e70a3..9c8ef5d75 100644 |
|
--- a/src/x11/window-x11.c |
|
+++ b/src/x11/window-x11.c |
|
@@ -466,6 +466,7 @@ meta_window_apply_session_info (MetaWindow *window, |
|
MetaWorkspace *workspace = spaces->data; |
|
|
|
meta_window_change_workspace (window, workspace); |
|
+ window->initial_workspace_set = TRUE; |
|
|
|
meta_topic (META_DEBUG_SM, |
|
"Restoring saved window %s to workspace %d\n", |
|
-- |
|
2.14.3 |
|
|
|
|