bug: detect invalid texture in xdg-shell

This commit is contained in:
Tony Crisci 2017-10-17 08:29:57 -04:00
parent cebcda3ed5
commit 2bd52c83ce
1 changed files with 5 additions and 4 deletions

View File

@ -9,6 +9,7 @@
#include <wlr/types/wlr_surface.h> #include <wlr/types/wlr_surface.h>
#include <wlr/types/wlr_seat.h> #include <wlr/types/wlr_seat.h>
#include <wlr/util/log.h> #include <wlr/util/log.h>
#include <wlr/render/interface.h>
#include "xdg-shell-unstable-v6-protocol.h" #include "xdg-shell-unstable-v6-protocol.h"
static const char *wlr_desktop_xdg_toplevel_role = "xdg_toplevel"; static const char *wlr_desktop_xdg_toplevel_role = "xdg_toplevel";
@ -993,7 +994,7 @@ static void wlr_xdg_surface_v6_toplevel_committed(
struct wlr_xdg_surface_v6 *surface) { struct wlr_xdg_surface_v6 *surface) {
assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_TOPLEVEL); assert(surface->role == WLR_XDG_SURFACE_V6_ROLE_TOPLEVEL);
if (!surface->surface->current->buffer && !surface->toplevel_state->added) { if (!surface->surface->texture->valid && !surface->toplevel_state->added) {
// on the first commit, send a configure request to tell the client it // on the first commit, send a configure request to tell the client it
// is added // is added
wlr_xdg_surface_v6_schedule_configure(surface, true); wlr_xdg_surface_v6_schedule_configure(surface, true);
@ -1001,7 +1002,7 @@ static void wlr_xdg_surface_v6_toplevel_committed(
return; return;
} }
if (!surface->surface->current->buffer) { if (!surface->surface->texture->valid) {
return; return;
} }
@ -1023,7 +1024,7 @@ static void handle_wlr_surface_committed(struct wl_listener *listener,
struct wlr_xdg_surface_v6 *surface = struct wlr_xdg_surface_v6 *surface =
wl_container_of(listener, surface, surface_commit_listener); wl_container_of(listener, surface, surface_commit_listener);
if (surface->surface->current->buffer && !surface->configured) { if (surface->surface->texture->valid && !surface->configured) {
wl_resource_post_error(surface->resource, wl_resource_post_error(surface->resource,
ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER, ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER,
"xdg_surface has never been configured"); "xdg_surface has never been configured");
@ -1092,7 +1093,7 @@ static void xdg_shell_get_xdg_surface(struct wl_client *wl_client,
&zxdg_surface_v6_interface, wl_resource_get_version(client_resource), &zxdg_surface_v6_interface, wl_resource_get_version(client_resource),
id); id);
if (surface->surface->current->buffer != NULL) { if (surface->surface->texture->valid) {
wl_resource_post_error(surface->resource, wl_resource_post_error(surface->resource,
ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER, ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER,
"xdg_surface must not have a buffer at creation"); "xdg_surface must not have a buffer at creation");