[PATCH weston 2/2] desktop-shell: fix minimization of fullscreen surfaces, pointer focus

Manuel Bachmann manuel.bachmann at open.eurogiciel.org
Mon Feb 16 02:52:47 PST 2015


From: Manuel Bachmann <manuel.bachmann at open.eurogiciel.org>

2 things were wrong with the minimization code :
- if the minimized surface was fullscreen, the shell would keep
  its fullscreen mode on and only display a black background ;
- keyboard focus was unset, but pointer focus was not.

On the other hand, make sure a fullscreen surface gets centered
again when refocused with Mod+Tab.

Author: Manuel Bachmann <manuel.bachmann at open.eurogiciel.org>
Author: Nicolas Guyomard <nicolas.guyomard at open.eurogiciel.org>
Signed-off-by: Manuel Bachmann <manuel.bachmann at open.eurogiciel.org>
---
 desktop-shell/shell.c |   16 +++++++++++++---
 1 file changed, 13 insertions(+), 3 deletions(-)

diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c
index 5900c4d..830c25d 100644
--- a/desktop-shell/shell.c
+++ b/desktop-shell/shell.c
@@ -2657,13 +2657,20 @@ set_minimized(struct weston_surface *surface)
 	weston_layer_entry_remove(&view->layer_link);
 	weston_layer_entry_insert(&shsurf->shell->minimized_layer.view_list, &view->layer_link);
 
+	if (shsurf->state.fullscreen)
+		unset_fullscreen(shsurf);
+
 	drop_focus_state(shsurf->shell, current_ws, view->surface);
 	wl_list_for_each(seat, &shsurf->shell->compositor->seat_list, link) {
 		if (!seat->keyboard)
 			continue;
 		focus = weston_surface_get_main_surface(seat->keyboard->focus);
-		if (focus == view->surface)
+		if (focus == view->surface) {
 			weston_keyboard_set_focus(seat->keyboard, NULL);
+			weston_pointer_set_focus(seat->pointer, NULL,
+						 wl_fixed_from_int(0),
+						 wl_fixed_from_int(0));
+		}
 	}
 
 	shell_surface_update_child_surface_layers(shsurf);
@@ -5937,8 +5944,11 @@ switcher_next(struct switcher *switcher)
 		view->alpha = 1.0;
 
 	shsurf = get_shell_surface(switcher->current);
-	if (shsurf && shsurf->state.fullscreen)
-		shsurf->fullscreen.black_view->alpha = 1.0;
+	if (shsurf && shsurf->state.fullscreen) {
+		center_on_output(shsurf->view, shsurf->fullscreen_output);
+		if (shsurf->fullscreen.black_view)
+			shsurf->fullscreen.black_view->alpha = 1.0;
+	}
 }
 
 static void
-- 
1.7.10.4



More information about the wayland-devel mailing list