diff options
| author | Tony-LunarG <tony@lunarg.com> | 2019-12-05 16:05:40 -0700 |
|---|---|---|
| committer | Tony Barbour <tony@lunarg.com> | 2019-12-06 10:51:52 -0700 |
| commit | 5ceb7be9a3bf86f34ade5a7f72459248d99a4b76 (patch) | |
| tree | 3a65c54ec38b8cf8c2d1dc26c9e3fdabc3f2fab4 /cube | |
| parent | 0a0625a3dca69b9d7ecb73558539ce5e3cd4ddfa (diff) | |
| download | usermoji-5ceb7be9a3bf86f34ade5a7f72459248d99a4b76.tar.xz | |
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
Diffstat (limited to 'cube')
| -rw-r--r-- | cube/CMakeLists.txt | 52 | ||||
| -rw-r--r-- | cube/cube.c | 100 | ||||
| -rw-r--r-- | cube/cube.cpp | 101 |
3 files changed, 41 insertions, 212 deletions
diff --git a/cube/CMakeLists.txt b/cube/CMakeLists.txt index 4a0f76ba..78430dfd 100644 --- a/cube/CMakeLists.txt +++ b/cube/CMakeLists.txt @@ -58,8 +58,6 @@ if(UNIX AND NOT APPLE) # i.e. Linux if(BUILD_WSI_WAYLAND_SUPPORT) find_package(Wayland REQUIRED) - find_package(WaylandScanner REQUIRED) - find_package(WaylandProtocols REQUIRED) include_directories(${WAYLAND_CLIENT_INCLUDE_DIR}) endif() endif() @@ -103,50 +101,6 @@ elseif(UNIX AND NOT APPLE) # i.e. Linux set(CUBE_INCLUDE_DIRS ${WAYLAND_CLIENT_INCLUDE_DIR} ${CUBE_INCLUDE_DIRS}) link_libraries(${WAYLAND_CLIENT_LIBRARIES}) add_definitions(-DVK_USE_PLATFORM_WAYLAND_KHR) - - set(XDG_SHELL_PROTOCOL ${WAYLAND_PROTOCOLS_PATH}/stable/xdg-shell/xdg-shell.xml) - add_custom_command(COMMENT "Generating xdg-shell protocol dispatch data" - OUTPUT xdg-shell-code.c - COMMAND ${WAYLAND_SCANNER_EXECUTABLE} - private-code - ${XDG_SHELL_PROTOCOL} - ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-code.c - MAIN_DEPENDENCY ${XDG_SHELL_PROTOCOL} - DEPENDS ${XDG_SHELL_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE}) - add_custom_command(COMMENT "Generating xdg-shell protocol header" - OUTPUT xdg-shell-client-header.h - COMMAND ${WAYLAND_SCANNER_EXECUTABLE} - client-header - ${XDG_SHELL_PROTOCOL} - ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-header.h - MAIN_DEPENDENCY ${XDG_SHELL_PROTOCOL} - DEPENDS ${XDG_SHELL_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE}) - - set(XDG_DECORATION_PROTOCOL ${WAYLAND_PROTOCOLS_PATH}/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml) - add_custom_command(COMMENT "Generating xdg-decoration protocol dispatch data" - OUTPUT xdg-decoration-code.c - COMMAND ${WAYLAND_SCANNER_EXECUTABLE} - private-code - ${XDG_DECORATION_PROTOCOL} - ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-code.c - MAIN_DEPENDENCY ${XDG_DECORATION_PROTOCOL} - DEPENDS ${XDG_DECORATION_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE}) - add_custom_command(COMMENT "Generating xdg-decoration protocol header" - OUTPUT xdg-decoration-client-header.h - COMMAND ${WAYLAND_SCANNER_EXECUTABLE} - client-header - ${XDG_DECORATION_PROTOCOL} - ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-client-header.h - MAIN_DEPENDENCY ${XDG_DECORATION_PROTOCOL} - DEPENDS ${XDG_DECORATION_PROTOCOL} ${WAYLAND_SCANNER_EXECUTABLE}) - - set(OPTIONAL_WAYLAND_DATA_FILES - ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-code.c - ${CMAKE_CURRENT_BINARY_DIR}/xdg-shell-client-header.h - ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-code.c - ${CMAKE_CURRENT_BINARY_DIR}/xdg-decoration-client-header.h) - include_directories(${CMAKE_CURRENT_BINARY_DIR}) - elseif(CUBE_WSI_SELECTION STREQUAL "DISPLAY") add_definitions(-DVK_USE_PLATFORM_DISPLAY_KHR) else() @@ -218,8 +172,7 @@ elseif(NOT WIN32) ${PROJECT_SOURCE_DIR}/cube/cube.vert ${PROJECT_SOURCE_DIR}/cube/cube.frag cube.vert.inc - cube.frag.inc - ${OPTIONAL_WAYLAND_DATA_FILES}) + cube.frag.inc) target_link_libraries(vkcube Vulkan::Vulkan) CHECK_LIBRARY_EXISTS("rt" clock_gettime "" NEED_RT) if (NEED_RT) @@ -268,8 +221,7 @@ elseif(NOT WIN32) ${PROJECT_SOURCE_DIR}/cube/cube.vert ${PROJECT_SOURCE_DIR}/cube/cube.frag cube.vert.inc - cube.frag.inc - ${OPTIONAL_WAYLAND_DATA_FILES}) + cube.frag.inc) target_link_libraries(vkcubepp Vulkan::Vulkan) endif() else() diff --git a/cube/cube.c b/cube/cube.c index c4f98afe..a7b097be 100644 --- a/cube/cube.c +++ b/cube/cube.c @@ -37,8 +37,6 @@ #include <X11/Xutil.h> #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) #include <linux/input.h> -#include "xdg-shell-client-header.h" -#include "xdg-decoration-client-header.h" #endif #ifdef _WIN32 @@ -323,12 +321,8 @@ struct demo { struct wl_registry *registry; struct wl_compositor *compositor; struct wl_surface *window; - struct xdg_wm_base *xdg_wm_base; - struct zxdg_decoration_manager_v1 *xdg_decoration_mgr; - struct zxdg_toplevel_decoration_v1 *toplevel_decoration; - struct xdg_surface *xdg_surface; - int xdg_surface_has_been_configured; - struct xdg_toplevel *xdg_toplevel; + struct wl_shell *shell; + struct wl_shell_surface *shell_surface; struct wl_seat *seat; struct wl_pointer *pointer; struct wl_keyboard *keyboard; @@ -2372,14 +2366,9 @@ static void demo_cleanup(struct demo *demo) { wl_keyboard_destroy(demo->keyboard); wl_pointer_destroy(demo->pointer); wl_seat_destroy(demo->seat); - xdg_toplevel_destroy(demo->xdg_toplevel); - xdg_surface_destroy(demo->xdg_surface); + wl_shell_surface_destroy(demo->shell_surface); wl_surface_destroy(demo->window); - xdg_wm_base_destroy(demo->xdg_wm_base); - if (demo->xdg_decoration_mgr) { - zxdg_toplevel_decoration_v1_destroy(demo->toplevel_decoration); - zxdg_decoration_manager_v1_destroy(demo->xdg_decoration_mgr); - } + wl_shell_destroy(demo->shell); wl_compositor_destroy(demo->compositor); wl_registry_destroy(demo->registry); wl_display_disconnect(demo->display); @@ -2755,39 +2744,18 @@ static void demo_run(struct demo *demo) { } } -static void handle_surface_configure(void *data, struct xdg_surface *xdg_surface, uint32_t serial) { - struct demo *demo = (struct demo *)data; - xdg_surface_ack_configure(xdg_surface, serial); - if (demo->xdg_surface_has_been_configured) { - demo_resize(demo); - } - demo->xdg_surface_has_been_configured = 1; +static void handle_ping(void *data UNUSED, struct wl_shell_surface *shell_surface, uint32_t serial) { + wl_shell_surface_pong(shell_surface, serial); } -static const struct xdg_surface_listener xdg_surface_listener = {handle_surface_configure}; +static void handle_configure(void *data UNUSED, struct wl_shell_surface *shell_surface UNUSED, uint32_t edges UNUSED, + int32_t width UNUSED, int32_t height UNUSED) {} -static void handle_toplevel_configure(void *data, struct xdg_toplevel *xdg_toplevel UNUSED, int32_t width, int32_t height, - struct wl_array *states UNUSED) { - struct demo *demo = (struct demo *)data; - demo->width = width; - demo->height = height; - /* This should be followed by a surface configure */ -} +static void handle_popup_done(void *data UNUSED, struct wl_shell_surface *shell_surface UNUSED) {} -static void handle_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel UNUSED) { - struct demo *demo = (struct demo *)data; - demo->quit = true; -} - -static const struct xdg_toplevel_listener xdg_toplevel_listener = {handle_toplevel_configure, handle_toplevel_close}; +static const struct wl_shell_surface_listener shell_surface_listener = {handle_ping, handle_configure, handle_popup_done}; static void demo_create_window(struct demo *demo) { - if (!demo->xdg_wm_base) { - printf("Compositor did not provide the standard protocol xdg-wm-base\n"); - fflush(stdout); - exit(1); - } - demo->window = wl_compositor_create_surface(demo->compositor); if (!demo->window) { printf("Can not create wayland_surface from compositor!\n"); @@ -2795,29 +2763,15 @@ static void demo_create_window(struct demo *demo) { exit(1); } - demo->xdg_surface = xdg_wm_base_get_xdg_surface(demo->xdg_wm_base, demo->window); - if (!demo->xdg_surface) { - printf("Can not get xdg_surface from wayland_surface!\n"); + demo->shell_surface = wl_shell_get_shell_surface(demo->shell, demo->window); + if (!demo->shell_surface) { + printf("Can not get shell_surface from wayland_surface!\n"); fflush(stdout); exit(1); } - demo->xdg_toplevel = xdg_surface_get_toplevel(demo->xdg_surface); - if (!demo->xdg_toplevel) { - printf("Can not allocate xdg_toplevel for xdg_surface!\n"); - fflush(stdout); - exit(1); - } - xdg_surface_add_listener(demo->xdg_surface, &xdg_surface_listener, demo); - xdg_toplevel_add_listener(demo->xdg_toplevel, &xdg_toplevel_listener, demo); - xdg_toplevel_set_title(demo->xdg_toplevel, APP_SHORT_NAME); - if (demo->xdg_decoration_mgr) { - // if supported, let the compositor render titlebars for us - demo->toplevel_decoration = - zxdg_decoration_manager_v1_get_toplevel_decoration(demo->xdg_decoration_mgr, demo->xdg_toplevel); - zxdg_toplevel_decoration_v1_set_mode(demo->toplevel_decoration, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE); - } - - wl_surface_commit(demo->window); + wl_shell_surface_add_listener(demo->shell_surface, &shell_surface_listener, demo); + wl_shell_surface_set_toplevel(demo->shell_surface); + wl_shell_surface_set_title(demo->shell_surface, APP_SHORT_NAME); } #elif defined(VK_USE_PLATFORM_ANDROID_KHR) static void demo_run(struct demo *demo) { @@ -3602,7 +3556,7 @@ static void pointer_handle_button(void *data, struct wl_pointer *wl_pointer, uin uint32_t state) { struct demo *demo = data; if (button == BTN_LEFT && state == WL_POINTER_BUTTON_STATE_PRESSED) { - xdg_toplevel_move(demo->xdg_toplevel, demo->seat, serial); + wl_shell_surface_move(demo->shell_surface, demo->seat, serial); } } @@ -3670,31 +3624,21 @@ static const struct wl_seat_listener seat_listener = { seat_handle_capabilities, }; -static void wm_base_ping(void *data UNUSED, struct 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, struct wl_registry *registry, uint32_t id, const char *interface, - uint32_t version UNUSED) { +static void registry_handle_global(void *data, struct wl_registry *registry, uint32_t id, const char *interface, uint32_t version) { struct demo *demo = data; // pickup wayland objects when they appear - if (strcmp(interface, wl_compositor_interface.name) == 0) { + if (strcmp(interface, "wl_compositor") == 0) { uint32_t minVersion = version < 4 ? version : 4; demo->compositor = wl_registry_bind(registry, id, &wl_compositor_interface, minVersion); if (demo->VK_KHR_incremental_present_enabled && minVersion < 4) { fprintf(stderr, "Wayland compositor doesn't support VK_KHR_incremental_present, disabling.\n"); demo->VK_KHR_incremental_present_enabled = false; } - } else if (strcmp(interface, xdg_wm_base_interface.name) == 0) { - demo->xdg_wm_base = wl_registry_bind(registry, id, &xdg_wm_base_interface, 1); - xdg_wm_base_add_listener(demo->xdg_wm_base, &wm_base_listener, NULL); - } else if (strcmp(interface, wl_seat_interface.name) == 0) { + } else if (strcmp(interface, "wl_shell") == 0) { + demo->shell = wl_registry_bind(registry, id, &wl_shell_interface, 1); + } else if (strcmp(interface, "wl_seat") == 0) { demo->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 = wl_registry_bind(registry, id, &zxdg_decoration_manager_v1_interface, 1); } } 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 <X11/Xutil.h> #elif defined(VK_USE_PLATFORM_WAYLAND_KHR) #include <linux/input.h> -#include "xdg-shell-client-header.h" -#include "xdg-decoration-client-header.h" #endif #include <cassert> @@ -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() { |
