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);
};
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 *
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
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);
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
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");
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,
#include "compositor.h"
#include "desktop-shell-server-protocol.h"
+struct shell_surface;
+
struct wl_shell {
struct wlsc_compositor *compositor;
struct wlsc_shell 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;
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) {
}
}
- 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
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) {
}
}
- 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
struct wl_resource *surface_resource)
{
struct wl_shell *shell = resource->data;
- struct shell_surface *priv;
shell->prepare_event_sent = false;
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
<interface name="desktop_shell" version="1">
<request name="set_background">
<arg name="output" type="object" interface="wl_output"/>
- <arg name="surface" type="object" interface="wl_surface"/>
+ <arg name="surface" type="object" interface="wl_shell_surface"/>
</request>
<request name="set_panel">
<arg name="output" type="object" interface="wl_output"/>
- <arg name="surface" type="object" interface="wl_surface"/>
+ <arg name="surface" type="object" interface="wl_shell_surface"/>
</request>
<request name="set_lock_surface">
- <arg name="surface" type="object" interface="wl_surface"/>
+ <arg name="surface" type="object" interface="wl_shell_surface"/>
</request>
<request name="unlock"/>
<event name="configure">
<arg name="time" type="uint"/>
<arg name="edges" type="uint"/>
- <arg name="surface" type="object" interface="wl_surface"/>
+ <arg name="surface" type="object" interface="wl_shell_surface"/>
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</event>