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.
93 lines
3.3 KiB
93 lines
3.3 KiB
7 years ago
|
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
|
||
|
|