static void set_toplevel(struct wl_client * client, struct wl_resource * resource) { struct shell_surface * shell_surface = wl_resource_get_user_data(resource); window_manage(&shell_surface->window); window_set_parent(&shell_surface->window, NULL); }
static void set_maximized(struct wl_client * client, struct wl_resource * resource, struct wl_resource * output_resource) { struct shell_surface * shell_surface = wl_resource_get_user_data(resource); /* TODO: Handle maximized windows. */ window_manage(&shell_surface->window); window_set_parent(&shell_surface->window, NULL); }
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); }
static void set_fullscreen(struct wl_client * client, struct wl_resource * resource, uint32_t method, uint32_t framerate, struct wl_resource * output_resource) { struct shell_surface * shell_surface = wl_resource_get_user_data(resource); struct swc_output * output = output_resource ? wl_resource_get_user_data(output_resource) : NULL; struct screen * screen; screen = output ? output->screen : wl_container_of(swc.screens.next, screen, link); /* TODO: Handle fullscreen windows. */ window_manage(&shell_surface->window); window_set_parent(&shell_surface->window, NULL); }
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); }
/* Iff parent_window is set, the new window will be transient. */ static struct window * new_window(struct stacking *stacking, struct window *parent_window) { struct window *new_window; struct widget *new_widget; new_window = window_create(stacking->display); window_set_parent(new_window, parent_window); new_widget = window_frame_create(new_window, new_window); window_set_title(new_window, "Stacking Test"); window_set_key_handler(new_window, key_handler); window_set_keyboard_focus_handler(new_window, keyboard_focus_handler); window_set_fullscreen_handler(new_window, fullscreen_handler); widget_set_button_handler(new_widget, button_handler); widget_set_redraw_handler(new_widget, redraw_handler); window_set_user_data(new_window, stacking); window_schedule_resize(new_window, 300, 300); return new_window; }