[PATCH 14/17] shell: Factor out common code to create fullscreen black surfaces
Philip Withnall
philip at tecnocode.co.uk
Mon Nov 25 10:01:43 PST 2013
From: Philip Withnall <philip.withnall at collabora.co.uk>
---
src/shell.c | 66 ++++++++++++++++++++++---------------------------------------
1 file changed, 24 insertions(+), 42 deletions(-)
diff --git a/src/shell.c b/src/shell.c
index 96bfea0..a505bf5 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -2446,6 +2446,29 @@ create_black_surface(struct weston_compositor *ec,
return view;
}
+static void
+shell_ensure_fullscreen_black_view(struct shell_surface *shsurf)
+{
+ struct weston_output *output = shsurf->fullscreen_output;
+
+ assert(shsurf->type == SHELL_SURFACE_FULLSCREEN);
+
+ if (!shsurf->fullscreen.black_view)
+ shsurf->fullscreen.black_view =
+ create_black_surface(shsurf->surface->compositor,
+ shsurf->surface,
+ output->x, output->y,
+ output->width,
+ output->height);
+
+ weston_view_geometry_dirty(shsurf->fullscreen.black_view);
+ wl_list_remove(&shsurf->fullscreen.black_view->layer_link);
+ wl_list_insert(&shsurf->view->layer_link,
+ &shsurf->fullscreen.black_view->layer_link);
+ weston_view_geometry_dirty(shsurf->fullscreen.black_view);
+ weston_surface_damage(shsurf->surface);
+}
+
/* Create black surface and append it to the associated fullscreen surface.
* Handle size dismatch and positioning according to the method. */
static void
@@ -2460,19 +2483,7 @@ shell_configure_fullscreen(struct shell_surface *shsurf)
if (shsurf->fullscreen.type != WL_SHELL_SURFACE_FULLSCREEN_METHOD_DRIVER)
restore_output_mode(output);
- if (!shsurf->fullscreen.black_view)
- shsurf->fullscreen.black_view =
- create_black_surface(surface->compositor,
- surface,
- output->x, output->y,
- output->width,
- output->height);
-
- wl_list_remove(&shsurf->fullscreen.black_view->layer_link);
- wl_list_insert(&shsurf->view->layer_link,
- &shsurf->fullscreen.black_view->layer_link);
- shsurf->fullscreen.black_view->surface->output = output;
- shsurf->fullscreen.black_view->output = output;
+ shell_ensure_fullscreen_black_view(shsurf);
surface_subsurfaces_boundingbox(shsurf->surface, &surf_x, &surf_y,
&surf_width, &surf_height);
@@ -2548,36 +2559,9 @@ shell_configure_fullscreen(struct shell_surface *shsurf)
}
}
-/* make the fullscreen and black surface at the top */
-static void
-shell_stack_fullscreen(struct shell_surface *shsurf)
-{
- struct weston_output *output = shsurf->fullscreen_output;
- struct desktop_shell *shell = shell_surface_get_shell(shsurf);
-
- wl_list_remove(&shsurf->view->layer_link);
- wl_list_insert(&shell->fullscreen_layer.view_list,
- &shsurf->view->layer_link);
- weston_surface_damage(shsurf->surface);
-
- if (!shsurf->fullscreen.black_view)
- shsurf->fullscreen.black_view =
- create_black_surface(shsurf->surface->compositor,
- shsurf->surface,
- output->x, output->y,
- output->width,
- output->height);
-
- wl_list_remove(&shsurf->fullscreen.black_view->layer_link);
- wl_list_insert(&shsurf->view->layer_link,
- &shsurf->fullscreen.black_view->layer_link);
- weston_surface_damage(shsurf->fullscreen.black_view->surface);
-}
-
static void
shell_map_fullscreen(struct shell_surface *shsurf)
{
- shell_stack_fullscreen(shsurf);
shell_configure_fullscreen(shsurf);
}
@@ -3935,7 +3919,6 @@ activate(struct desktop_shell *shell, struct weston_surface *es,
switch (get_shell_surface_type(main_surface)) {
case SHELL_SURFACE_FULLSCREEN:
/* should on top of panels */
- shell_stack_fullscreen(get_shell_surface(main_surface));
shell_configure_fullscreen(get_shell_surface(main_surface));
return;
case SHELL_SURFACE_TOPLEVEL:
@@ -4490,7 +4473,6 @@ configure(struct desktop_shell *shell, struct weston_surface *surface,
switch (surface_type) {
case SHELL_SURFACE_FULLSCREEN:
- shell_stack_fullscreen(shsurf);
shell_configure_fullscreen(shsurf);
break;
case SHELL_SURFACE_MAXIMIZED:
--
1.8.3.1
More information about the wayland-devel
mailing list