From 5ceb7be9a3bf86f34ade5a7f72459248d99a4b76 Mon Sep 17 00:00:00 2001 From: Tony-LunarG Date: Thu, 5 Dec 2019 16:05:40 -0700 Subject: Revert "cube: Port Wayland impl from wl-shell to xdg-shell" This reverts commit 6f6e3371c92ac63bf29d5010b2933659e3f8dbef. We've received complaints that this change is incompatible with Wayland users running the Weston compositor Change-Id: Icd0c96a7726969570655b886d8fb623a04543985 --- cube/cube.cpp | 101 ++++++++++------------------------------------------------ 1 file changed, 17 insertions(+), 84 deletions(-) (limited to 'cube/cube.cpp') diff --git a/cube/cube.cpp b/cube/cube.cpp index 5e875a15..ddaa5a5b 100644 --- a/cube/cube.cpp +++ b/cube/cube.cpp @@ -22,8 +22,6 @@ #include #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) #include -#include "xdg-shell-client-header.h" -#include "xdg-decoration-client-header.h" #endif #include @@ -291,12 +289,8 @@ struct Demo { wl_registry *registry; wl_compositor *compositor; wl_surface *window; - xdg_wm_base *wm_base; - zxdg_decoration_manager_v1 *xdg_decoration_mgr; - zxdg_toplevel_decoration_v1 *toplevel_decoration; - xdg_surface *window_surface; - bool xdg_surface_has_been_configured; - xdg_toplevel *window_toplevel; + wl_shell *shell; + wl_shell_surface *shell_surface; wl_seat *seat; wl_pointer *pointer; wl_keyboard *keyboard; @@ -424,7 +418,7 @@ static void pointer_handle_button(void *data, struct wl_pointer *wl_pointer, uin uint32_t state) { Demo *demo = (Demo *)data; if (button == BTN_LEFT && state == WL_POINTER_BUTTON_STATE_PRESSED) { - xdg_toplevel_move(demo->window_toplevel, demo->seat, serial); + wl_shell_surface_move(demo->shell_surface, demo->seat, serial); } } @@ -492,24 +486,16 @@ static const wl_seat_listener seat_listener = { seat_handle_capabilities, }; -static void wm_base_ping(void *data, xdg_wm_base *xdg_wm_base, uint32_t serial) { xdg_wm_base_pong(xdg_wm_base, serial); } - -static const struct xdg_wm_base_listener wm_base_listener = {wm_base_ping}; - static void registry_handle_global(void *data, wl_registry *registry, uint32_t id, const char *interface, uint32_t version) { Demo *demo = (Demo *)data; // pickup wayland objects when they appear - if (strcmp(interface, wl_compositor_interface.name) == 0) { + if (strcmp(interface, "wl_compositor") == 0) { demo->compositor = (wl_compositor *)wl_registry_bind(registry, id, &wl_compositor_interface, 1); - } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { - demo->wm_base = (xdg_wm_base *)wl_registry_bind(registry, id, &xdg_wm_base_interface, 1); - xdg_wm_base_add_listener(demo->wm_base, &wm_base_listener, nullptr); - } else if (strcmp(interface, wl_seat_interface.name) == 0) { + } else if (strcmp(interface, "wl_shell") == 0) { + demo->shell = (wl_shell *)wl_registry_bind(registry, id, &wl_shell_interface, 1); + } else if (strcmp(interface, "wl_seat") == 0) { demo->seat = (wl_seat *)wl_registry_bind(registry, id, &wl_seat_interface, 1); wl_seat_add_listener(demo->seat, &seat_listener, demo); - } else if (strcmp(interface, zxdg_decoration_manager_v1_interface.name) == 0) { - demo->xdg_decoration_mgr = - (zxdg_decoration_manager_v1 *)wl_registry_bind(registry, id, &zxdg_decoration_manager_v1_interface, 1); } } @@ -539,12 +525,8 @@ Demo::Demo() registry{nullptr}, compositor{nullptr}, window{nullptr}, - wm_base{nullptr}, - xdg_decoration_mgr{nullptr}, - toplevel_decoration{nullptr}, - window_surface{nullptr}, - xdg_surface_has_been_configured{false}, - window_toplevel{nullptr}, + shell{nullptr}, + shell_surface{nullptr}, seat{nullptr}, pointer{nullptr}, keyboard{nullptr}, @@ -687,14 +669,9 @@ void Demo::cleanup() { wl_keyboard_destroy(keyboard); wl_pointer_destroy(pointer); wl_seat_destroy(seat); - xdg_toplevel_destroy(window_toplevel); - xdg_surface_destroy(window_surface); + wl_shell_surface_destroy(shell_surface); wl_surface_destroy(window); - xdg_wm_base_destroy(wm_base); - if (xdg_decoration_mgr) { - zxdg_toplevel_decoration_v1_destroy(toplevel_decoration); - zxdg_decoration_manager_v1_destroy(xdg_decoration_mgr); - } + wl_shell_destroy(shell); wl_compositor_destroy(compositor); wl_registry_destroy(registry); wl_display_disconnect(display); @@ -2708,39 +2685,7 @@ void Demo::run() { } } -static void handle_surface_configure(void *data, xdg_surface *xdg_surface, uint32_t serial) { - Demo *demo = (Demo *)data; - xdg_surface_ack_configure(xdg_surface, serial); - if (demo->xdg_surface_has_been_configured) { - demo->resize(); - } - demo->xdg_surface_has_been_configured = true; -} - -static const xdg_surface_listener surface_listener = {handle_surface_configure}; - -static void handle_toplevel_configure(void *data, xdg_toplevel *xdg_toplevel, int32_t width, int32_t height, - struct wl_array *states) { - Demo *demo = (Demo *)data; - demo->width = width; - demo->height = height; - // This will be followed by a surface configure -} - -static void handle_toplevel_close(void *data, xdg_toplevel *xdg_toplevel) { - Demo *demo = (Demo *)data; - demo->quit = true; -} - -static const xdg_toplevel_listener toplevel_listener = {handle_toplevel_configure, handle_toplevel_close}; - void Demo::create_window() { - if (!wm_base) { - printf("Compositor did not provide the standard protocol xdg-wm-base\n"); - fflush(stdout); - exit(1); - } - window = wl_compositor_create_surface(compositor); if (!window) { printf("Can not create wayland_surface from compositor!\n"); @@ -2748,28 +2693,16 @@ void Demo::create_window() { exit(1); } - window_surface = xdg_wm_base_get_xdg_surface(wm_base, window); - if (!window_surface) { - printf("Can not get xdg_surface from wayland_surface!\n"); + shell_surface = wl_shell_get_shell_surface(shell, window); + if (!shell_surface) { + printf("Can not get shell_surface from wayland_surface!\n"); fflush(stdout); exit(1); } - window_toplevel = xdg_surface_get_toplevel(window_surface); - if (!window_toplevel) { - printf("Can not allocate xdg_toplevel for xdg_surface!\n"); - fflush(stdout); - exit(1); - } - xdg_surface_add_listener(window_surface, &surface_listener, this); - xdg_toplevel_add_listener(window_toplevel, &toplevel_listener, this); - xdg_toplevel_set_title(window_toplevel, APP_SHORT_NAME); - if (xdg_decoration_mgr) { - // if supported, let the compositor render titlebars for us - toplevel_decoration = zxdg_decoration_manager_v1_get_toplevel_decoration(xdg_decoration_mgr, window_toplevel); - zxdg_toplevel_decoration_v1_set_mode(toplevel_decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); - } - wl_surface_commit(window); + wl_shell_surface_add_listener(shell_surface, &shell_surface_listener, this); + wl_shell_surface_set_toplevel(shell_surface); + wl_shell_surface_set_title(shell_surface, APP_SHORT_NAME); } #elif defined(VK_USE_PLATFORM_METAL_EXT) void Demo::run() { -- cgit v1.2.3