shell: Remove weston_view_restack()
It’s tied too deeply into the shell’s window stacking and ordering code to legitimately be split out into compositor.c. Inline it in the shell, and refactor some code around it a little, tidying up the stacking behaviour for fullscreen surfaces.
This commit is contained in:
committed by
Kristian Høgsberg
parent
e1d75ae73f
commit
83ffd9d17b
@@ -1422,15 +1422,6 @@ weston_surface_attach(struct weston_surface *surface,
|
|||||||
surface->compositor->renderer->attach(surface, buffer);
|
surface->compositor->renderer->attach(surface, buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
WL_EXPORT void
|
|
||||||
weston_view_restack(struct weston_view *view, struct wl_list *below)
|
|
||||||
{
|
|
||||||
wl_list_remove(&view->layer_link);
|
|
||||||
wl_list_insert(below, &view->layer_link);
|
|
||||||
weston_view_damage_below(view);
|
|
||||||
weston_surface_damage(view->surface);
|
|
||||||
}
|
|
||||||
|
|
||||||
WL_EXPORT void
|
WL_EXPORT void
|
||||||
weston_compositor_damage_all(struct weston_compositor *compositor)
|
weston_compositor_damage_all(struct weston_compositor *compositor)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1126,9 +1126,6 @@ void
|
|||||||
weston_view_configure(struct weston_view *view,
|
weston_view_configure(struct weston_view *view,
|
||||||
float x, float y, int width, int height);
|
float x, float y, int width, int height);
|
||||||
|
|
||||||
void
|
|
||||||
weston_view_restack(struct weston_view *surface, struct wl_list *below);
|
|
||||||
|
|
||||||
void
|
void
|
||||||
weston_view_set_position(struct weston_view *view,
|
weston_view_set_position(struct weston_view *view,
|
||||||
float x, float y);
|
float x, float y);
|
||||||
|
|||||||
+22
-9
@@ -3698,7 +3698,12 @@ alt_tab_binding(struct weston_seat *seat, uint32_t time, uint32_t key,
|
|||||||
|
|
||||||
preview->view = v = weston_view_create(view->surface);
|
preview->view = v = weston_view_create(view->surface);
|
||||||
v->output = view->output;
|
v->output = view->output;
|
||||||
weston_view_restack(v, &ws->layer.view_list);
|
|
||||||
|
wl_list_remove(&v->layer_link);
|
||||||
|
wl_list_insert(&ws->layer.view_list, &v->layer_link);
|
||||||
|
weston_view_damage_below(v);
|
||||||
|
weston_surface_damage(v->surface);
|
||||||
|
|
||||||
weston_view_configure(v, x, y, view->geometry.width, view->geometry.height);
|
weston_view_configure(v, x, y, view->geometry.width, view->geometry.height);
|
||||||
|
|
||||||
preview->listener.notify = alt_tab_handle_surface_destroy;
|
preview->listener.notify = alt_tab_handle_surface_destroy;
|
||||||
@@ -3890,6 +3895,9 @@ rotate_binding(struct weston_seat *seat, uint32_t time, uint32_t button,
|
|||||||
surface_rotate(surface, seat);
|
surface_rotate(surface, seat);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Move all fullscreen layers down to the current workspace in a non-reversible
|
||||||
|
* manner. This should be used when implementing shell-wide overlays, such as
|
||||||
|
* the alt-tab switcher, which need to de-promote fullscreen layers. */
|
||||||
static void
|
static void
|
||||||
lower_fullscreen_layer(struct desktop_shell *shell)
|
lower_fullscreen_layer(struct desktop_shell *shell)
|
||||||
{
|
{
|
||||||
@@ -3899,8 +3907,12 @@ lower_fullscreen_layer(struct desktop_shell *shell)
|
|||||||
ws = get_current_workspace(shell);
|
ws = get_current_workspace(shell);
|
||||||
wl_list_for_each_reverse_safe(view, prev,
|
wl_list_for_each_reverse_safe(view, prev,
|
||||||
&shell->fullscreen_layer.view_list,
|
&shell->fullscreen_layer.view_list,
|
||||||
layer_link)
|
layer_link) {
|
||||||
weston_view_restack(view, &ws->layer.view_list);
|
wl_list_remove(&view->layer_link);
|
||||||
|
wl_list_insert(&ws->layer.view_list, &view->layer_link);
|
||||||
|
weston_view_damage_below(view);
|
||||||
|
weston_surface_damage(view->surface);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -3908,7 +3920,6 @@ activate(struct desktop_shell *shell, struct weston_surface *es,
|
|||||||
struct weston_seat *seat)
|
struct weston_seat *seat)
|
||||||
{
|
{
|
||||||
struct weston_surface *main_surface;
|
struct weston_surface *main_surface;
|
||||||
struct weston_view *main_view;
|
|
||||||
struct focus_state *state;
|
struct focus_state *state;
|
||||||
struct workspace *ws;
|
struct workspace *ws;
|
||||||
struct weston_surface *old_es;
|
struct weston_surface *old_es;
|
||||||
@@ -3940,15 +3951,17 @@ activate(struct desktop_shell *shell, struct weston_surface *es,
|
|||||||
case SHELL_SURFACE_NONE:
|
case SHELL_SURFACE_NONE:
|
||||||
default:
|
default:
|
||||||
restore_all_output_modes(shell->compositor);
|
restore_all_output_modes(shell->compositor);
|
||||||
ws = get_current_workspace(shell);
|
|
||||||
main_view = get_default_view(main_surface);
|
|
||||||
if (main_view)
|
|
||||||
weston_view_restack(main_view, &ws->layer.view_list);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shell->focus_animation_type != ANIMATION_NONE)
|
if (shell->focus_animation_type != ANIMATION_NONE) {
|
||||||
|
ws = get_current_workspace(shell);
|
||||||
animate_focus_change(shell, ws, get_default_view(old_es), get_default_view(es));
|
animate_focus_change(shell, ws, get_default_view(old_es), get_default_view(es));
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Update the surface’s layer. This brings it to the top of the stacking
|
||||||
|
* order as appropriate. */
|
||||||
|
shell_surface_update_layer(get_shell_surface(main_surface));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* no-op func for checking black surface */
|
/* no-op func for checking black surface */
|
||||||
|
|||||||
Reference in New Issue
Block a user