diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c index e313b990..69573c27 100644 --- a/clients/desktop-shell.c +++ b/clients/desktop-shell.c @@ -51,7 +51,7 @@ struct surface { void (*configure)(void *data, struct desktop_shell *desktop_shell, uint32_t time, uint32_t edges, - struct wl_surface *surface, + struct window *window, int32_t width, int32_t height); }; @@ -260,14 +260,11 @@ static void panel_configure(void *data, struct desktop_shell *desktop_shell, uint32_t time, uint32_t edges, - struct wl_surface *surface, + struct window *window, int32_t width, int32_t height) { - struct panel *panel = - window_get_user_data(wl_surface_get_user_data(surface)); - - window_set_child_size(panel->window, width, 32); - window_schedule_redraw(panel->window); + window_set_child_size(window, width, 32); + window_schedule_redraw(window); } static struct panel * @@ -345,15 +342,12 @@ static void background_configure(void *data, struct desktop_shell *desktop_shell, uint32_t time, uint32_t edges, - struct wl_surface *surface, + struct window *window, int32_t width, int32_t height) { struct desktop *desktop = data; - struct background *background = - window_get_user_data(wl_surface_get_user_data(surface)); - background_draw(background->window, - width, height, desktop->background_path); + background_draw(window, width, height, desktop->background_path); } static void @@ -474,7 +468,7 @@ unlock_dialog_create(struct desktop *desktop) dialog->button = window_add_item(dialog->window, NULL); desktop_shell_set_lock_surface(desktop->shell, - window_get_wl_surface(dialog->window)); + window_get_wl_shell_surface(dialog->window)); unlock_dialog_draw(dialog); @@ -503,13 +497,13 @@ static void desktop_shell_configure(void *data, struct desktop_shell *desktop_shell, uint32_t time, uint32_t edges, - struct wl_surface *surface, + struct wl_shell_surface *shell_surface, int32_t width, int32_t height) { - struct surface *s = - window_get_user_data(wl_surface_get_user_data(surface)); + struct window *window = wl_shell_surface_get_user_data(shell_surface); + struct surface *s = window_get_user_data(window); - s->configure(data, desktop_shell, time, edges, surface, width, height); + s->configure(data, desktop_shell, time, edges, window, width, height); } static void @@ -619,16 +613,15 @@ int main(int argc, char *argv[]) global_handler, &desktop); wl_list_for_each(output, &desktop.outputs, link) { - struct wl_surface *surface; + struct wl_shell_surface *s; output->panel = panel_create(desktop.display); - surface = window_get_wl_surface(output->panel->window); - desktop_shell_set_panel(desktop.shell, output->output, surface); + s = window_get_wl_shell_surface(output->panel->window); + desktop_shell_set_panel(desktop.shell, output->output, s); output->background = background_create(&desktop); - surface = window_get_wl_surface(output->background->window); - desktop_shell_set_background(desktop.shell, - output->output, surface); + s = window_get_wl_shell_surface(output->background->window); + desktop_shell_set_background(desktop.shell, output->output, s); } config_file = config_file_path("wayland-desktop-shell.ini"); diff --git a/clients/window.c b/clients/window.c index 0f242500..f138e104 100644 --- a/clients/window.c +++ b/clients/window.c @@ -1989,6 +1989,7 @@ window_create_internal(struct display *display, struct window *parent, window->buffer_type = WINDOW_BUFFER_TYPE_SHM; wl_surface_set_user_data(window->surface, window); + wl_shell_surface_set_user_data(window->shell_surface, window); wl_list_insert(display->window_list.prev, &window->link); wl_shell_surface_add_listener(window->shell_surface, diff --git a/compositor/shell.c b/compositor/shell.c index 11907b33..ffa21b43 100644 --- a/compositor/shell.c +++ b/compositor/shell.c @@ -36,6 +36,8 @@ #include "compositor.h" #include "desktop-shell-server-protocol.h" +struct shell_surface; + struct wl_shell { struct wlsc_compositor *compositor; struct wlsc_shell shell; @@ -49,7 +51,7 @@ struct wl_shell { bool locked; bool prepare_event_sent; - struct wlsc_surface *lock_surface; + struct shell_surface *lock_surface; struct wl_listener lock_surface_listener; struct wl_list hidden_surface_list; @@ -436,7 +438,8 @@ desktop_shell_set_background(struct wl_client *client, struct wl_resource *surface_resource) { struct wl_shell *shell = resource->data; - struct wlsc_surface *surface = surface_resource->data; + struct shell_surface *shsurf = surface_resource->data; + struct wlsc_surface *surface = shsurf->surface; struct shell_surface *priv; wl_list_for_each(priv, &shell->backgrounds, link) { @@ -448,20 +451,19 @@ desktop_shell_set_background(struct wl_client *client, } } - priv = get_shell_surface(surface); - priv->type = SHELL_SURFACE_BACKGROUND; - priv->output = output_resource->data; + shsurf->type = SHELL_SURFACE_BACKGROUND; + shsurf->output = output_resource->data; - wl_list_insert(&shell->backgrounds, &priv->link); + wl_list_insert(&shell->backgrounds, &shsurf->link); - surface->x = priv->output->x; - surface->y = priv->output->y; + surface->x = shsurf->output->x; + surface->y = shsurf->output->y; wl_resource_post_event(resource, DESKTOP_SHELL_CONFIGURE, - wlsc_compositor_get_time(), 0, surface, - priv->output->current->width, - priv->output->current->height); + wlsc_compositor_get_time(), 0, surface_resource, + shsurf->output->current->width, + shsurf->output->current->height); } static void @@ -471,7 +473,8 @@ desktop_shell_set_panel(struct wl_client *client, struct wl_resource *surface_resource) { struct wl_shell *shell = resource->data; - struct wlsc_surface *surface = surface_resource->data; + struct shell_surface *shsurf = surface_resource->data; + struct wlsc_surface *surface = shsurf->surface; struct shell_surface *priv; wl_list_for_each(priv, &shell->panels, link) { @@ -483,20 +486,19 @@ desktop_shell_set_panel(struct wl_client *client, } } - priv = get_shell_surface(surface); - priv->type = SHELL_SURFACE_PANEL; - priv->output = output_resource->data; + shsurf->type = SHELL_SURFACE_PANEL; + shsurf->output = output_resource->data; - wl_list_insert(&shell->panels, &priv->link); + wl_list_insert(&shell->panels, &shsurf->link); - surface->x = priv->output->x; - surface->y = priv->output->y; + surface->x = shsurf->output->x; + surface->y = shsurf->output->y; wl_resource_post_event(resource, DESKTOP_SHELL_CONFIGURE, wlsc_compositor_get_time(), 0, surface_resource, - priv->output->current->width, - priv->output->current->height); + shsurf->output->current->width, + shsurf->output->current->height); } static void @@ -516,7 +518,6 @@ desktop_shell_set_lock_surface(struct wl_client *client, struct wl_resource *surface_resource) { struct wl_shell *shell = resource->data; - struct shell_surface *priv; shell->prepare_event_sent = false; @@ -529,8 +530,7 @@ desktop_shell_set_lock_surface(struct wl_client *client, wl_list_insert(&surface_resource->destroy_listener_list, &shell->lock_surface_listener.link); - priv = get_shell_surface(shell->lock_surface); - priv->type = SHELL_SURFACE_LOCK; + shell->lock_surface->type = SHELL_SURFACE_LOCK; } static void diff --git a/protocol/desktop-shell.xml b/protocol/desktop-shell.xml index fef66627..3c3ead4d 100644 --- a/protocol/desktop-shell.xml +++ b/protocol/desktop-shell.xml @@ -3,16 +3,16 @@ - + - + - + @@ -22,7 +22,7 @@ - +