예제 #1
0
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);
}
예제 #2
0
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);
}
예제 #3
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);
}
예제 #4
0
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);
}
예제 #5
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);
}
예제 #6
0
/* 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;
}