diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 99f3343f..c8a9f010 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -1887,13 +1887,20 @@ surface_resize(struct shell_surface *shsurf, struct weston_seat *seat, uint32_t edges) { struct weston_resize_grab *resize; + const unsigned resize_topbottom = + WL_SHELL_SURFACE_RESIZE_TOP | WL_SHELL_SURFACE_RESIZE_BOTTOM; + const unsigned resize_leftright = + WL_SHELL_SURFACE_RESIZE_LEFT | WL_SHELL_SURFACE_RESIZE_RIGHT; + const unsigned resize_any = resize_topbottom | resize_leftright; if (shsurf->grabbed || shsurf->state.fullscreen || shsurf->state.maximized) return 0; - if (edges == 0 || edges > 15 || - (edges & 3) == 3 || (edges & 12) == 12) + /* Check for invalid edge combinations. */ + if (edges == WL_SHELL_SURFACE_RESIZE_NONE || edges > resize_any || + (edges & resize_topbottom) == resize_topbottom || + (edges & resize_leftright) == resize_leftright) return 0; resize = malloc(sizeof *resize);