return NULL;
}
- if (ds_surface_has_buffer(surface->ds_surface)) {
- wl_resource_destroy(surface->resource);
- free(surface);
- wl_resource_post_error(client->resource,
- ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER,
- "xdg_surface_v6 must not have a buffer at creation");
- return NULL;
- }
-
wl_list_init(&surface->configure_list);
wl_signal_init(&surface->events.destroy);
surface->role = DS_XDG_SURFACE_V6_ROLE_NONE;
}
-void
-handle_xdg_surface_v6_commit(struct ds_surface *ds_surface)
-{
- struct ds_xdg_surface_v6 *surface;
-
- surface = ds_surface_get_role_data(ds_surface);
- if (!surface)
- return;
-
- surface->current = surface->pending;
-
- switch (surface->role) {
- case DS_XDG_SURFACE_V6_ROLE_NONE:
- // inert toplevel or popup
- break;
- case DS_XDG_SURFACE_V6_ROLE_TOPLEVEL:
- handle_xdg_toplevel_v6_committed(surface->toplevel);
- break;
- case DS_XDG_SURFACE_V6_ROLE_POPUP:
- // TODO
- break;
- }
-
- if (!surface->added) {
- surface->added = true;
- wl_signal_emit_mutable(&surface->client->shell->events.new_surface, surface);
- }
-
- if (surface->configured &&
- ds_surface_has_buffer(surface->ds_surface) &&
- !surface->mapped) {
- surface->mapped = true;
- wl_signal_emit_mutable(&surface->events.map, surface);
- }
-}
-
-void handle_xdg_surface_v6_precommit(struct ds_surface *ds_surface)
-{
- struct ds_xdg_surface_v6 *surface;
-
- surface = ds_surface_get_role_data(ds_surface);
-
- // TODO
- (void)surface;
-}
-
uint32_t
ds_xdg_surface_v6_schedule_configure(struct ds_xdg_surface_v6 *surface)
{
surface = wl_container_of(listener, surface, listener.surface_commit);
- if (ds_surface_has_buffer(surface->ds_surface) &&
- !surface->configured) {
- wl_resource_post_error(surface->resource,
- ZXDG_SURFACE_V6_ERROR_UNCONFIGURED_BUFFER,
- "xdg_surface_v6 has never been configured");
- return;
+ surface->current = surface->pending;
+
+ switch (surface->role) {
+ case DS_XDG_SURFACE_V6_ROLE_NONE:
+ // inert toplevel or popup
+ break;
+ case DS_XDG_SURFACE_V6_ROLE_TOPLEVEL:
+ handle_xdg_toplevel_v6_committed(surface->toplevel);
+ // TODO
+ break;
+ case DS_XDG_SURFACE_V6_ROLE_POPUP:
+ // TODO
+ break;
}
- if (!ds_surface_get_role(surface->ds_surface)) {
- wl_resource_post_error(surface->resource,
- ZXDG_SURFACE_V6_ERROR_NOT_CONSTRUCTED,
- "xdg_surface_v6 must have a role");
- return;
+ if (!surface->added) {
+ surface->added = true;
+ wl_signal_emit_mutable(&surface->client->shell->events.new_surface, surface);
+ }
+
+ if (surface->configured &&
+ ds_surface_has_buffer(surface->ds_surface) &&
+ !surface->mapped) {
+ surface->mapped = true;
+ wl_signal_emit_mutable(&surface->events.map, surface);
}
}
#include "util.h"
#include "xdg_shell_v6.h"
-static const struct ds_surface_role xdg_toplevel_v6_surface_role =
-{
- .name = "xdg_toplevel_v6",
- .commit = handle_xdg_surface_v6_commit,
-};
-
static const struct zxdg_toplevel_v6_interface xdg_toplevel_v6_impl;
static void xdg_toplevel_v6_handle_resource_destroy(struct wl_resource *resource);
void
create_xdg_toplevel_v6(struct ds_xdg_surface_v6 *surface, uint32_t id)
{
- if (!ds_surface_set_role(surface->ds_surface, &xdg_toplevel_v6_surface_role,
- surface, surface->resource, ZXDG_SHELL_V6_ERROR_ROLE))
- return;
-
if (surface->role != DS_XDG_SURFACE_V6_ROLE_NONE) {
wl_resource_post_error(surface->resource,
ZXDG_SURFACE_V6_ERROR_ALREADY_CONSTRUCTED,
void
destroy_xdg_toplevel_v6(struct ds_xdg_toplevel_v6 *toplevel)
{
- ds_surface_reset_role_data(toplevel->base->ds_surface);
wl_resource_set_user_data(toplevel->resource, NULL);
free(toplevel);
}