shell: restore correct layer in shell_unset_fullscreen
authorRafal Mielniczuk <rafal.mielniczuk2@gmail.com>
Sun, 7 Oct 2012 18:25:36 +0000 (20:25 +0200)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 10 Oct 2012 03:10:28 +0000 (23:10 -0400)
This fixes the bug where surface is above panel_layer
just after it is restored from fullscreen mode.

How to reproduce:
* move surface under panel
* set surface fullscreen
* restore surface to normal mode

src/shell.c

index 1c44e39..c799409 100644 (file)
@@ -1421,6 +1421,7 @@ get_default_output(struct weston_compositor *compositor)
 static void
 shell_unset_fullscreen(struct shell_surface *shsurf)
 {
+       struct workspace *ws;
        /* undo all fullscreen things here */
        if (shsurf->fullscreen.type == WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER &&
            shell_surface_is_top_fullscreen(shsurf)) {
@@ -1442,6 +1443,10 @@ shell_unset_fullscreen(struct shell_surface *shsurf)
                               &shsurf->rotation.transform.link);
                shsurf->saved_rotation_valid = false;
        }
+
+       ws = get_current_workspace(shsurf->shell);
+       wl_list_remove(&shsurf->surface->layer_link);
+       wl_list_insert(&ws->layer.surface_list, &shsurf->surface->layer_link);
 }
 
 static int