shell_surface_set_parent(struct shell_surface *shsurf,
struct weston_surface *parent);
+static int
+shell_surface_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ struct shell_surface *shsurf;
+ const char *typestr[] = {
+ [SHELL_SURFACE_NONE] = "unidentified",
+ [SHELL_SURFACE_TOPLEVEL] = "top-level",
+ [SHELL_SURFACE_POPUP] = "popup",
+ [SHELL_SURFACE_XWAYLAND] = "Xwayland",
+ };
+ const char *t, *c;
+
+ shsurf = get_shell_surface(surface);
+ if (!shsurf)
+ return snprintf(buf, len, "unidentified window");
+
+ t = shsurf->title;
+ c = shsurf->class;
+
+ return snprintf(buf, len, "%s window%s%s%s%s%s",
+ typestr[shsurf->type],
+ t ? " '" : "", t ?: "", t ? "'" : "",
+ c ? " of " : "", c ?: "");
+}
+
static bool
shell_surface_is_top_fullscreen(struct shell_surface *shsurf)
{
struct weston_output, link);
}
+static int
+focus_surface_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ return snprintf(buf, len, "focus highlight effect for output %s",
+ surface->output->name);
+}
/* no-op func for checking focus surface */
static void
surface->configure = focus_surface_configure;
surface->output = output;
surface->configure_private = fsurf;
+ weston_surface_set_label_func(surface, focus_surface_get_label);
fsurf->view = weston_view_create(surface);
if (fsurf->view == NULL) {
return shsurf->shell;
}
+static int
+black_surface_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ struct weston_surface *fs_surface = surface->configure_private;
+ int n;
+ int rem;
+ int ret;
+
+ n = snprintf(buf, len, "black background surface for ");
+ if (n < 0)
+ return n;
+
+ rem = (int)len - n;
+ if (rem < 0)
+ rem = 0;
+
+ if (fs_surface->get_label)
+ ret = fs_surface->get_label(fs_surface, buf + n, rem);
+ else
+ ret = snprintf(buf + n, rem, "<unknown>");
+
+ if (ret < 0)
+ return n;
+
+ return n + ret;
+}
+
static void
black_surface_configure(struct weston_surface *es, int32_t sx, int32_t sy);
surface->configure = black_surface_configure;
surface->configure_private = fs_surface;
+ weston_surface_set_label_func(surface, black_surface_get_label);
weston_surface_set_color(surface, 0.0, 0.0, 0.0, 1);
pixman_region32_fini(&surface->opaque);
pixman_region32_init_rect(&surface->opaque, 0, 0, w, h);
*/
wl_list_remove(&shsurf->surface_destroy_listener.link);
shsurf->surface->configure = NULL;
+ weston_surface_set_label_func(shsurf->surface, NULL);
free(shsurf->title);
weston_view_destroy(shsurf->view);
surface->configure = shell_surface_configure;
surface->configure_private = shsurf;
+ weston_surface_set_label_func(surface, shell_surface_get_label);
shsurf->resource_destroy_listener.notify = handle_resource_destroy;
wl_resource_add_destroy_listener(surface->resource,
if (v->output == ev->output && v != ev) {
weston_view_unmap(v);
v->surface->configure = NULL;
+ weston_surface_set_label_func(v->surface, NULL);
}
}
}
}
+static int
+background_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ return snprintf(buf, len, "background for output %s",
+ surface->output->name);
+}
+
static void
background_configure(struct weston_surface *es, int32_t sx, int32_t sy)
{
surface->configure = background_configure;
surface->configure_private = shell;
+ weston_surface_set_label_func(surface, background_get_label);
surface->output = wl_resource_get_user_data(output_resource);
view->output = surface->output;
desktop_shell_send_configure(resource, 0,
surface->output->height);
}
+static int
+panel_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ return snprintf(buf, len, "panel for output %s",
+ surface->output->name);
+}
+
static void
panel_configure(struct weston_surface *es, int32_t sx, int32_t sy)
{
surface->configure = panel_configure;
surface->configure_private = shell;
+ weston_surface_set_label_func(surface, panel_get_label);
surface->output = wl_resource_get_user_data(output_resource);
view->output = surface->output;
desktop_shell_send_configure(resource, 0,
surface->output->height);
}
+static int
+lock_surface_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ return snprintf(buf, len, "lock window");
+}
+
static void
lock_surface_configure(struct weston_surface *surface, int32_t sx, int32_t sy)
{
weston_view_create(surface);
surface->configure = lock_surface_configure;
surface->configure_private = shell;
+ weston_surface_set_label_func(surface, lock_surface_get_label);
}
static void
"permission to bind desktop_shell denied");
}
+static int
+screensaver_get_label(struct weston_surface *surface, char *buf, size_t len)
+{
+ return snprintf(buf, len, "screensaver for output %s",
+ surface->output->name);
+}
+
static void
screensaver_configure(struct weston_surface *surface, int32_t sx, int32_t sy)
{
surface->configure = screensaver_configure;
surface->configure_private = shell;
+ weston_surface_set_label_func(surface, screensaver_get_label);
surface->output = output;
}
weston_view_set_position(drag->icon, fx, fy);
}
+static int
+pointer_drag_surface_get_label(struct weston_surface *surface,
+ char *buf, size_t len)
+{
+ return snprintf(buf, len, "pointer drag icon");
+}
+
static void
pointer_drag_surface_configure(struct weston_surface *es,
int32_t sx, int32_t sy)
drag_surface_configure(&drag->base, pointer, NULL, es, sx, sy);
}
+static int
+touch_drag_surface_get_label(struct weston_surface *surface,
+ char *buf, size_t len)
+{
+ return snprintf(buf, len, "touch drag icon");
+}
+
static void
touch_drag_surface_configure(struct weston_surface *es, int32_t sx, int32_t sy)
{
weston_view_unmap(drag->icon);
drag->icon->surface->configure = NULL;
+ weston_surface_set_label_func(drag->icon->surface, NULL);
pixman_region32_clear(&drag->icon->surface->pending.input);
wl_list_remove(&drag->icon_destroy_listener.link);
weston_view_destroy(drag->icon);
icon->configure = pointer_drag_surface_configure;
icon->configure_private = drag;
+ weston_surface_set_label_func(icon,
+ pointer_drag_surface_get_label);
} else {
drag->base.icon = NULL;
}
icon->configure = touch_drag_surface_configure;
icon->configure_private = drag;
+ weston_surface_set_label_func(icon,
+ touch_drag_surface_get_label);
} else {
drag->base.icon = NULL;
}