desktop-shell: Drop next_type from shell_surface

The surface type now no longer changes and we track pending state changes in
next_state.  Instead of testing type != next_type to detect changes in
state, we just look at state_changed.
dev
Kristian Høgsberg 11 years ago
parent 4804a301db
commit c8f8dd894e
  1. 42
      desktop-shell/shell.c

@ -122,7 +122,7 @@ struct shell_surface {
struct wl_list children_link; /* sibling surfaces of this one */ struct wl_list children_link; /* sibling surfaces of this one */
struct desktop_shell *shell; struct desktop_shell *shell;
enum shell_surface_type type, next_type; enum shell_surface_type type;
char *title, *class; char *title, *class;
int32_t saved_x, saved_y; int32_t saved_x, saved_y;
int32_t saved_width, saved_height; int32_t saved_width, saved_height;
@ -2125,7 +2125,7 @@ set_toplevel(struct shell_surface *shsurf)
{ {
shell_surface_set_parent(shsurf, NULL); shell_surface_set_parent(shsurf, NULL);
surface_clear_next_states(shsurf); surface_clear_next_states(shsurf);
shsurf->next_type = SHELL_SURFACE_TOPLEVEL; shsurf->type = SHELL_SURFACE_TOPLEVEL;
/* The layer_link is updated in set_surface_type(), /* The layer_link is updated in set_surface_type(),
* called from configure. */ * called from configure. */
@ -2151,7 +2151,7 @@ set_transient(struct shell_surface *shsurf,
shsurf->transient.flags = flags; shsurf->transient.flags = flags;
shsurf->next_state.relative = true; shsurf->next_state.relative = true;
shsurf->next_type = SHELL_SURFACE_TOPLEVEL; shsurf->type = SHELL_SURFACE_TOPLEVEL;
/* The layer_link is updated in set_surface_type(), /* The layer_link is updated in set_surface_type(),
* called from configure. */ * called from configure. */
@ -2187,7 +2187,7 @@ set_fullscreen(struct shell_surface *shsurf,
shsurf->next_state.fullscreen = true; shsurf->next_state.fullscreen = true;
shsurf->state_changed = true; shsurf->state_changed = true;
shsurf->next_type = SHELL_SURFACE_TOPLEVEL; shsurf->type = SHELL_SURFACE_TOPLEVEL;
shsurf->client->send_configure(shsurf->surface, 0, shsurf->client->send_configure(shsurf->surface, 0,
shsurf->output->width, shsurf->output->width,
@ -2264,7 +2264,7 @@ set_popup(struct shell_surface *shsurf,
shsurf->popup.x = x; shsurf->popup.x = x;
shsurf->popup.y = y; shsurf->popup.y = y;
shsurf->next_type = SHELL_SURFACE_POPUP; shsurf->type = SHELL_SURFACE_POPUP;
} }
static void static void
@ -2307,7 +2307,7 @@ set_maximized(struct shell_surface *shsurf,
shsurf->next_state.maximized = true; shsurf->next_state.maximized = true;
shsurf->state_changed = true; shsurf->state_changed = true;
shsurf->next_type = SHELL_SURFACE_TOPLEVEL; shsurf->type = SHELL_SURFACE_TOPLEVEL;
} }
static void static void
@ -2357,7 +2357,6 @@ reset_surface_type(struct shell_surface *surface)
if (surface->state.maximized) if (surface->state.maximized)
unset_maximized(surface); unset_maximized(surface);
surface->type = SHELL_SURFACE_NONE;
return 0; return 0;
} }
@ -2387,9 +2386,7 @@ set_surface_type(struct shell_surface *shsurf)
reset_surface_type(shsurf); reset_surface_type(shsurf);
shsurf->type = shsurf->next_type;
shsurf->state = shsurf->next_state; shsurf->state = shsurf->next_state;
shsurf->next_type = SHELL_SURFACE_NONE;
shsurf->state_changed = false; shsurf->state_changed = false;
switch (shsurf->type) { switch (shsurf->type) {
@ -2592,7 +2589,7 @@ set_xwayland(struct shell_surface *shsurf, int x, int y, uint32_t flags)
shell_surface_set_parent(shsurf, NULL); shell_surface_set_parent(shsurf, NULL);
shsurf->next_type = SHELL_SURFACE_XWAYLAND; shsurf->type = SHELL_SURFACE_XWAYLAND;
} }
static const struct weston_pointer_grab_interface popup_grab_interface; static const struct weston_pointer_grab_interface popup_grab_interface;
@ -2971,7 +2968,6 @@ create_common_surface(void *shell, struct weston_surface *surface,
shsurf->parent = NULL; shsurf->parent = NULL;
shsurf->type = SHELL_SURFACE_NONE; shsurf->type = SHELL_SURFACE_NONE;
shsurf->next_type = SHELL_SURFACE_NONE;
shsurf->client = client; shsurf->client = client;
@ -2982,13 +2978,7 @@ static struct shell_surface *
create_shell_surface(void *shell, struct weston_surface *surface, create_shell_surface(void *shell, struct weston_surface *surface,
const struct weston_shell_client *client) const struct weston_shell_client *client)
{ {
struct shell_surface *shsurf; return create_common_surface(shell, surface, client);
shsurf = create_common_surface(shell, surface, client);
shsurf->type = SHELL_SURFACE_NONE;
shsurf->next_type = SHELL_SURFACE_NONE;
return shsurf;
} }
static struct weston_view * static struct weston_view *
@ -3155,7 +3145,6 @@ xdg_surface_unset_fullscreen(struct wl_client *client,
} }
shsurf->client->send_configure(shsurf->surface, 0, width, height); shsurf->client->send_configure(shsurf->surface, 0, width, height);
shsurf->next_type = shsurf->type;
} }
static void static void
@ -3197,7 +3186,6 @@ xdg_surface_unset_maximized(struct wl_client *client,
} }
shsurf->client->send_configure(shsurf->surface, 0, width, height); shsurf->client->send_configure(shsurf->surface, 0, width, height);
shsurf->next_type = shsurf->type;
} }
static const struct xdg_surface_interface xdg_surface_implementation = { static const struct xdg_surface_interface xdg_surface_implementation = {
@ -3247,10 +3235,9 @@ create_xdg_surface(void *shell, struct weston_surface *surface,
const struct weston_shell_client *client) const struct weston_shell_client *client)
{ {
struct shell_surface *shsurf; struct shell_surface *shsurf;
shsurf = create_common_surface(shell, surface, client);
shsurf->type = SHELL_SURFACE_NONE; shsurf = create_common_surface(shell, surface, client);
shsurf->next_type = SHELL_SURFACE_TOPLEVEL; shsurf->type = SHELL_SURFACE_TOPLEVEL;
return shsurf; return shsurf;
} }
@ -3340,10 +3327,9 @@ create_xdg_popup(void *shell, struct weston_surface *surface,
int32_t x, int32_t y) int32_t x, int32_t y)
{ {
struct shell_surface *shsurf; struct shell_surface *shsurf;
shsurf = create_common_surface(shell, surface, client);
shsurf->type = SHELL_SURFACE_NONE; shsurf = create_common_surface(shell, surface, client);
shsurf->next_type = SHELL_SURFACE_POPUP; shsurf->type = SHELL_SURFACE_POPUP;
shsurf->popup.shseat = seat; shsurf->popup.shseat = seat;
shsurf->popup.serial = serial; shsurf->popup.serial = serial;
shsurf->popup.x = x; shsurf->popup.x = x;
@ -4935,9 +4921,7 @@ shell_surface_configure(struct weston_surface *es, int32_t sx, int32_t sy)
if (es->width == 0) if (es->width == 0)
return; return;
if ((shsurf->next_type != SHELL_SURFACE_NONE && if (shsurf->state_changed) {
shsurf->type != shsurf->next_type) ||
shsurf->state_changed) {
set_surface_type(shsurf); set_surface_type(shsurf);
type_changed = 1; type_changed = 1;
} }

Loading…
Cancel
Save