shell: Remove SHELL_SURFACE_TRANSIENT.
This commit is contained in:
committed by
Kristian Høgsberg
parent
03b16597e0
commit
ed207b4bd5
+33
-28
@@ -239,7 +239,6 @@ struct desktop_shell {
|
|||||||
enum shell_surface_type {
|
enum shell_surface_type {
|
||||||
SHELL_SURFACE_NONE,
|
SHELL_SURFACE_NONE,
|
||||||
SHELL_SURFACE_TOPLEVEL,
|
SHELL_SURFACE_TOPLEVEL,
|
||||||
SHELL_SURFACE_TRANSIENT,
|
|
||||||
SHELL_SURFACE_POPUP,
|
SHELL_SURFACE_POPUP,
|
||||||
SHELL_SURFACE_XWAYLAND
|
SHELL_SURFACE_XWAYLAND
|
||||||
};
|
};
|
||||||
@@ -344,6 +343,7 @@ struct shell_surface {
|
|||||||
struct {
|
struct {
|
||||||
bool maximized;
|
bool maximized;
|
||||||
bool fullscreen;
|
bool fullscreen;
|
||||||
|
bool relative;
|
||||||
} state, next_state; /* surface states */
|
} state, next_state; /* surface states */
|
||||||
bool state_changed;
|
bool state_changed;
|
||||||
};
|
};
|
||||||
@@ -2121,25 +2121,23 @@ shell_surface_calculate_layer_link (struct shell_surface *shsurf)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
case SHELL_SURFACE_TRANSIENT: {
|
case SHELL_SURFACE_TOPLEVEL: {
|
||||||
/* Move the surface to its parent layer so that surfaces which
|
if (shsurf->state.fullscreen) {
|
||||||
* are transient for fullscreen surfaces don't get hidden by the
|
return &shsurf->shell->fullscreen_layer.view_list;
|
||||||
* fullscreen surfaces. However, unlike popups, transient
|
} else if (shsurf->parent) {
|
||||||
* surfaces are stacked in front of their parent but not in
|
/* Move the surface to its parent layer so that
|
||||||
* front of other surfaces of the same type. */
|
* surfaces which are transient for fullscreen surfaces
|
||||||
|
* don't get hidden by the fullscreen surfaces.
|
||||||
|
* However, unlike popups, transient surfaces are
|
||||||
|
* stacked in front of their parent but not in front of
|
||||||
|
* other surfaces of the same type. */
|
||||||
struct weston_view *parent;
|
struct weston_view *parent;
|
||||||
|
|
||||||
/* TODO: Handle a parent with multiple views */
|
/* TODO: Handle a parent with multiple views */
|
||||||
parent = get_default_view(shsurf->parent);
|
parent = get_default_view(shsurf->parent);
|
||||||
if (parent)
|
if (parent)
|
||||||
return parent->layer_link.prev;
|
return parent->layer_link.prev;
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
case SHELL_SURFACE_TOPLEVEL: {
|
|
||||||
if (shsurf->state.fullscreen)
|
|
||||||
return &shsurf->shell->fullscreen_layer.view_list;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2284,7 +2282,7 @@ set_transient(struct shell_surface *shsurf,
|
|||||||
|
|
||||||
shell_surface_set_parent(shsurf, parent);
|
shell_surface_set_parent(shsurf, parent);
|
||||||
|
|
||||||
shsurf->next_type = SHELL_SURFACE_TRANSIENT;
|
shsurf->next_state.relative = true;
|
||||||
|
|
||||||
/* The layer_link is updated in set_surface_type(),
|
/* The layer_link is updated in set_surface_type(),
|
||||||
* called from configure. */
|
* called from configure. */
|
||||||
@@ -2520,15 +2518,13 @@ set_surface_type(struct shell_surface *shsurf)
|
|||||||
|
|
||||||
switch (shsurf->type) {
|
switch (shsurf->type) {
|
||||||
case SHELL_SURFACE_TOPLEVEL:
|
case SHELL_SURFACE_TOPLEVEL:
|
||||||
if (shsurf->state.maximized || shsurf->state.fullscreen)
|
if (shsurf->state.maximized || shsurf->state.fullscreen) {
|
||||||
set_full_output(shsurf);
|
set_full_output(shsurf);
|
||||||
break;
|
} else if (shsurf->state.relative && pev) {
|
||||||
case SHELL_SURFACE_TRANSIENT:
|
|
||||||
if (pev)
|
|
||||||
weston_view_set_position(shsurf->view,
|
weston_view_set_position(shsurf->view,
|
||||||
pev->geometry.x + shsurf->transient.x,
|
pev->geometry.x + shsurf->transient.x,
|
||||||
pev->geometry.y + shsurf->transient.y);
|
pev->geometry.y + shsurf->transient.y);
|
||||||
break;
|
}
|
||||||
|
|
||||||
case SHELL_SURFACE_XWAYLAND:
|
case SHELL_SURFACE_XWAYLAND:
|
||||||
weston_view_set_position(shsurf->view, shsurf->transient.x,
|
weston_view_set_position(shsurf->view, shsurf->transient.x,
|
||||||
@@ -3738,10 +3734,11 @@ static const struct weston_keyboard_grab_interface alt_tab_grab = {
|
|||||||
static int
|
static int
|
||||||
view_for_alt_tab(struct weston_view *view)
|
view_for_alt_tab(struct weston_view *view)
|
||||||
{
|
{
|
||||||
if (!get_shell_surface(view->surface))
|
struct shell_surface *shsurf = get_shell_surface(view->surface);
|
||||||
|
if (!shsurf)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (get_shell_surface_type(view->surface) == SHELL_SURFACE_TRANSIENT)
|
if (shsurf->parent)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (view != get_default_view(view->surface))
|
if (view != get_default_view(view->surface))
|
||||||
@@ -4505,6 +4502,7 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf,
|
|||||||
|
|
||||||
/* initial positioning, see also configure() */
|
/* initial positioning, see also configure() */
|
||||||
switch (shsurf->type) {
|
switch (shsurf->type) {
|
||||||
|
case SHELL_SURFACE_TOPLEVEL:
|
||||||
if (shsurf->state.fullscreen) {
|
if (shsurf->state.fullscreen) {
|
||||||
center_on_output(shsurf->view, shsurf->fullscreen_output);
|
center_on_output(shsurf->view, shsurf->fullscreen_output);
|
||||||
shell_map_fullscreen(shsurf);
|
shell_map_fullscreen(shsurf);
|
||||||
@@ -4517,7 +4515,7 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf,
|
|||||||
shsurf->output->x - surf_x,
|
shsurf->output->x - surf_x,
|
||||||
shsurf->output->y +
|
shsurf->output->y +
|
||||||
panel_height - surf_y);
|
panel_height - surf_y);
|
||||||
} else {
|
} else if (!shsurf->state.relative) {
|
||||||
weston_view_set_initial_position(shsurf->view, shell);
|
weston_view_set_initial_position(shsurf->view, shell);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -4529,7 +4527,6 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf,
|
|||||||
shsurf->view->geometry.x + sx,
|
shsurf->view->geometry.x + sx,
|
||||||
shsurf->view->geometry.y + sy);
|
shsurf->view->geometry.y + sy);
|
||||||
break;
|
break;
|
||||||
case SHELL_SURFACE_TRANSIENT:
|
|
||||||
case SHELL_SURFACE_XWAYLAND:
|
case SHELL_SURFACE_XWAYLAND:
|
||||||
default:
|
default:
|
||||||
;
|
;
|
||||||
@@ -4546,18 +4543,24 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((shsurf->type == SHELL_SURFACE_XWAYLAND || shsurf->state.relative) &&
|
||||||
|
shsurf->transient.flags == WL_SHELL_SURFACE_TRANSIENT_INACTIVE) {
|
||||||
|
}
|
||||||
|
|
||||||
switch (shsurf->type) {
|
switch (shsurf->type) {
|
||||||
/* XXX: xwayland's using the same fields for transient type */
|
/* XXX: xwayland's using the same fields for transient type */
|
||||||
case SHELL_SURFACE_XWAYLAND:
|
case SHELL_SURFACE_XWAYLAND:
|
||||||
case SHELL_SURFACE_TRANSIENT:
|
|
||||||
if (shsurf->transient.flags ==
|
if (shsurf->transient.flags ==
|
||||||
WL_SHELL_SURFACE_TRANSIENT_INACTIVE)
|
WL_SHELL_SURFACE_TRANSIENT_INACTIVE)
|
||||||
break;
|
break;
|
||||||
case SHELL_SURFACE_TOPLEVEL:
|
case SHELL_SURFACE_TOPLEVEL:
|
||||||
if (!shell->locked) {
|
if (shsurf->state.relative &&
|
||||||
|
shsurf->transient.flags == WL_SHELL_SURFACE_TRANSIENT_INACTIVE)
|
||||||
|
break;
|
||||||
|
if (!shell->locked)
|
||||||
|
break;
|
||||||
wl_list_for_each(seat, &compositor->seat_list, link)
|
wl_list_for_each(seat, &compositor->seat_list, link)
|
||||||
activate(shell, shsurf->surface, seat);
|
activate(shell, shsurf->surface, seat);
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case SHELL_SURFACE_POPUP:
|
case SHELL_SURFACE_POPUP:
|
||||||
case SHELL_SURFACE_NONE:
|
case SHELL_SURFACE_NONE:
|
||||||
@@ -5070,8 +5073,11 @@ switcher_next(struct switcher *switcher)
|
|||||||
struct workspace *ws = get_current_workspace(switcher->shell);
|
struct workspace *ws = get_current_workspace(switcher->shell);
|
||||||
|
|
||||||
wl_list_for_each(view, &ws->layer.view_list, layer_link) {
|
wl_list_for_each(view, &ws->layer.view_list, layer_link) {
|
||||||
switch (get_shell_surface_type(view->surface)) {
|
shsurf = get_shell_surface(view->surface);
|
||||||
|
switch (shsurf->type) {
|
||||||
case SHELL_SURFACE_TOPLEVEL:
|
case SHELL_SURFACE_TOPLEVEL:
|
||||||
|
if (shsurf->parent)
|
||||||
|
break;
|
||||||
if (first == NULL)
|
if (first == NULL)
|
||||||
first = view->surface;
|
first = view->surface;
|
||||||
if (prev == switcher->current)
|
if (prev == switcher->current)
|
||||||
@@ -5081,7 +5087,6 @@ switcher_next(struct switcher *switcher)
|
|||||||
weston_view_geometry_dirty(view);
|
weston_view_geometry_dirty(view);
|
||||||
weston_surface_damage(view->surface);
|
weston_surface_damage(view->surface);
|
||||||
break;
|
break;
|
||||||
case SHELL_SURFACE_TRANSIENT:
|
|
||||||
case SHELL_SURFACE_POPUP:
|
case SHELL_SURFACE_POPUP:
|
||||||
case SHELL_SURFACE_XWAYLAND:
|
case SHELL_SURFACE_XWAYLAND:
|
||||||
case SHELL_SURFACE_NONE:
|
case SHELL_SURFACE_NONE:
|
||||||
|
|||||||
Reference in New Issue
Block a user