shell: Hide workspace layer when locking screen
diff --git a/src/shell.c b/src/shell.c
index c7ff3c5..613ce65 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -2013,6 +2013,7 @@
 resume_desktop(struct desktop_shell *shell)
 {
 	struct shell_surface *tmp;
+	struct workspace *ws = get_current_workspace(shell);
 
 	wl_list_for_each(tmp, &shell->screensaver.surfaces, link)
 		hide_screensaver(shell, tmp);
@@ -2024,6 +2025,7 @@
 		       &shell->fullscreen_layer.link);
 	wl_list_insert(&shell->fullscreen_layer.link,
 		       &shell->panel_layer.link);
+	wl_list_insert(&shell->panel_layer.link, &ws->layer.link);
 
 	pop_focus_state(shell, get_current_workspace(shell));
 
@@ -2515,6 +2517,7 @@
 		container_of(listener, struct desktop_shell, lock_listener);
 	struct shell_surface *shsurf;
 	struct weston_output *output;
+	struct workspace *ws = get_current_workspace(shell);
 
 	if (shell->locked) {
 		wl_list_for_each(output, &shell->compositor->output_list, link)
@@ -2532,6 +2535,7 @@
 
 	wl_list_remove(&shell->panel_layer.link);
 	wl_list_remove(&shell->fullscreen_layer.link);
+	wl_list_remove(&ws->layer.link);
 	wl_list_insert(&shell->compositor->cursor_layer.link,
 		       &shell->lock_layer.link);
 
@@ -3254,6 +3258,8 @@
 	struct desktop_shell *shell = data;
 	unsigned int new_index = shell->workspaces.current;
 
+	if (!shell->locked)
+		return;
 	if (new_index != 0)
 		new_index--;
 
@@ -3267,6 +3273,8 @@
 	struct desktop_shell *shell = data;
 	unsigned int new_index = shell->workspaces.current;
 
+	if (!shell->locked)
+		return;
 	if (new_index < shell->workspaces.num - 1)
 		new_index++;
 
@@ -3280,6 +3288,8 @@
 	struct desktop_shell *shell = data;
 	unsigned int new_index;
 
+	if (!shell->locked)
+		return;
 	new_index = key - KEY_F1;
 	if (new_index >= shell->workspaces.num)
 		new_index = shell->workspaces.num - 1;