Exemple #1
0
static void set_transient(struct wl_client * client,
                          struct wl_resource * resource,
                          struct wl_resource * parent_resource,
                          int32_t x, int32_t y, uint32_t flags)
{
    struct shell_surface * shell_surface = wl_resource_get_user_data(resource);
    struct swc_surface * parent_surface
        = wl_resource_get_user_data(parent_resource);
    struct compositor_view * parent_view
        = compositor_view(parent_surface->view);

    if (!parent_view || !parent_view->window)
        return;

    window_manage(&shell_surface->window);
    window_set_parent(&shell_surface->window, parent_view->window);
}
Exemple #2
0
static void set_popup(struct wl_client * client, struct wl_resource * resource,
                      struct wl_resource * seat_resource, uint32_t serial,
                      struct wl_resource * parent_resource,
                      int32_t x, int32_t y, uint32_t flags)
{
    struct shell_surface * shell_surface = wl_resource_get_user_data(resource);
    struct swc_surface * parent_surface
        = wl_resource_get_user_data(parent_resource);
    struct compositor_view * parent_view
        = compositor_view(parent_surface->view);

    if (!parent_view || !parent_view->window)
        return;

    window_unmanage(&shell_surface->window);
    window_set_parent(&shell_surface->window, parent_view->window);
    view_move(&shell_surface->window.view->base,
              parent_view->base.geometry.x + x,
              parent_view->base.geometry.y + y);
}
Exemple #3
0
struct xdg_popup *
xdg_popup_new(struct wl_client *client, uint32_t version,
              uint32_t id, struct surface *surface, struct surface *parent_surface, int32_t x, int32_t y)
{
	struct xdg_popup *popup;
	struct compositor_view *parent = compositor_view(parent_surface->view);

	if (!parent)
		goto error0;

	popup = malloc(sizeof *popup);

	if (!popup)
		goto error0;

	popup->resource = wl_resource_create(client, &xdg_popup_interface, version, id);

	if (!popup->resource)
		goto error1;

	popup->surface_destroy_listener.notify = &handle_surface_destroy;
	wl_resource_add_destroy_listener(surface->resource, &popup->surface_destroy_listener);
	wl_resource_set_implementation(popup->resource, &xdg_popup_implementation, popup, &destroy_popup);

	if (!(popup->view = compositor_create_view(surface)))
		goto error2;

	view_move(&popup->view->base, parent->base.geometry.x + x, parent->base.geometry.y + y);
	compositor_view_set_parent(popup->view, parent);

	return popup;

error2:
	wl_resource_destroy(popup->resource);
error1:
	free(popup);
error0:
	return NULL;
}