diff --git a/peachmsg/peachmsg b/peachmsg/peachmsg deleted file mode 100755 index bb6c763..0000000 Binary files a/peachmsg/peachmsg and /dev/null differ diff --git a/peachmsg/peachwm-ipc-unstable-v2-protocol.c b/peachmsg/peachwm-ipc-unstable-v2-protocol.c deleted file mode 100644 index dfc4982..0000000 --- a/peachmsg/peachwm-ipc-unstable-v2-protocol.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -/* - * Copyright (C) 2022 Russell Newcomb - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include -#include -#include -#include "wayland-util.h" - -#ifndef __has_attribute -# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ -#endif - -#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) -#define WL_PRIVATE __attribute__ ((visibility("hidden"))) -#else -#define WL_PRIVATE -#endif - -extern const struct wl_interface wl_output_interface; -extern const struct wl_interface zpeachwm_ipc_output_v2_interface; - -static const struct wl_interface *peachwm_ipc_unstable_v2_types[] = { - NULL, - NULL, - NULL, - NULL, - &zpeachwm_ipc_output_v2_interface, - &wl_output_interface, -}; - -static const struct wl_message zpeachwm_ipc_manager_v2_requests[] = { - { "release", "", peachwm_ipc_unstable_v2_types + 0 }, - { "get_output", "no", peachwm_ipc_unstable_v2_types + 4 }, -}; - -static const struct wl_message zpeachwm_ipc_manager_v2_events[] = { - { "tags", "u", peachwm_ipc_unstable_v2_types + 0 }, - { "layout", "s", peachwm_ipc_unstable_v2_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface zpeachwm_ipc_manager_v2_interface = { - "zpeachwm_ipc_manager_v2", 2, - 2, zpeachwm_ipc_manager_v2_requests, - 2, zpeachwm_ipc_manager_v2_events, -}; - -static const struct wl_message zpeachwm_ipc_output_v2_requests[] = { - { "release", "", peachwm_ipc_unstable_v2_types + 0 }, - { "set_tags", "uu", peachwm_ipc_unstable_v2_types + 0 }, - { "set_client_tags", "uu", peachwm_ipc_unstable_v2_types + 0 }, - { "set_layout", "u", peachwm_ipc_unstable_v2_types + 0 }, -}; - -static const struct wl_message zpeachwm_ipc_output_v2_events[] = { - { "toggle_visibility", "", peachwm_ipc_unstable_v2_types + 0 }, - { "active", "u", peachwm_ipc_unstable_v2_types + 0 }, - { "tag", "uuuu", peachwm_ipc_unstable_v2_types + 0 }, - { "layout", "u", peachwm_ipc_unstable_v2_types + 0 }, - { "title", "s", peachwm_ipc_unstable_v2_types + 0 }, - { "appid", "s", peachwm_ipc_unstable_v2_types + 0 }, - { "layout_symbol", "s", peachwm_ipc_unstable_v2_types + 0 }, - { "frame", "", peachwm_ipc_unstable_v2_types + 0 }, - { "fullscreen", "2u", peachwm_ipc_unstable_v2_types + 0 }, - { "floating", "2u", peachwm_ipc_unstable_v2_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface zpeachwm_ipc_output_v2_interface = { - "zpeachwm_ipc_output_v2", 2, - 4, zpeachwm_ipc_output_v2_requests, - 10, zpeachwm_ipc_output_v2_events, -}; - diff --git a/peachmsg/peachwm-ipc-unstable-v2-protocol.h b/peachmsg/peachwm-ipc-unstable-v2-protocol.h deleted file mode 100644 index ca47b95..0000000 --- a/peachmsg/peachwm-ipc-unstable-v2-protocol.h +++ /dev/null @@ -1,484 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef PEACHWM_IPC_UNSTABLE_V2_CLIENT_PROTOCOL_H -#define PEACHWM_IPC_UNSTABLE_V2_CLIENT_PROTOCOL_H - -#include -#include -#include "wayland-client.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * @page page_peachwm_ipc_unstable_v2 The peachwm_ipc_unstable_v2 protocol - * @section page_ifaces_peachwm_ipc_unstable_v2 Interfaces - * - @subpage page_iface_zpeachwm_ipc_manager_v2 - manage peachwm state - * - @subpage page_iface_zpeachwm_ipc_output_v2 - interact with peachwm output state - * @section page_copyright_peachwm_ipc_unstable_v2 Copyright - *
- *
- * Copyright (C) 2022 Russell Newcomb
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_output; -struct zpeachwm_ipc_manager_v2; -struct zpeachwm_ipc_output_v2; - -#ifndef ZPEACHWM_IPC_MANAGER_V2_INTERFACE -#define ZPEACHWM_IPC_MANAGER_V2_INTERFACE -/** - * @page page_iface_zpeachwm_ipc_manager_v2 zpeachwm_ipc_manager_v2 - * @section page_iface_zpeachwm_ipc_manager_v2_desc Description - * - * This interface is exposed as a global in the Wayland registry and allows - * clients to query and set peachwm state. - * - * Warning! The protocol described in this file is experimental and - * backward incompatible changes may be made. Backward compatible changes - * may be added together with the corresponding interface version bump. - * Backward incompatible changes are done by bumping the version number in - * the protocol and interface names and resetting the interface version. - * Once the protocol is to be declared stable, the 'z' prefix and the - * version number in the protocol and interface names are removed and the - * interface version is reset. - * @section page_iface_zpeachwm_ipc_manager_v2_api API - * See @ref iface_zpeachwm_ipc_manager_v2. - */ -/** - * @defgroup iface_zpeachwm_ipc_manager_v2 The zpeachwm_ipc_manager_v2 interface - * - * This interface is exposed as a global in the Wayland registry and allows - * clients to query and set peachwm state. - * - * Warning! The protocol described in this file is experimental and - * backward incompatible changes may be made. Backward compatible changes - * may be added together with the corresponding interface version bump. - * Backward incompatible changes are done by bumping the version number in - * the protocol and interface names and resetting the interface version. - * Once the protocol is to be declared stable, the 'z' prefix and the - * version number in the protocol and interface names are removed and the - * interface version is reset. - */ -extern const struct wl_interface zpeachwm_ipc_manager_v2_interface; -#endif -#ifndef ZPEACHWM_IPC_OUTPUT_V2_INTERFACE -#define ZPEACHWM_IPC_OUTPUT_V2_INTERFACE -/** - * @page page_iface_zpeachwm_ipc_output_v2 zpeachwm_ipc_output_v2 - * @section page_iface_zpeachwm_ipc_output_v2_desc Description - * - * Observe and control a peachwm output. - * @section page_iface_zpeachwm_ipc_output_v2_api API - * See @ref iface_zpeachwm_ipc_output_v2. - */ -/** - * @defgroup iface_zpeachwm_ipc_output_v2 The zpeachwm_ipc_output_v2 interface - * - * Observe and control a peachwm output. - */ -extern const struct wl_interface zpeachwm_ipc_output_v2_interface; -#endif - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - * @struct zpeachwm_ipc_manager_v2_listener - */ -struct zpeachwm_ipc_manager_v2_listener { - /** - * announces number of tags - * - * This event is sent after binding and announces the number of - * tags. - */ - void (*tags)(void *data, - struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2, - uint32_t amount); - /** - * announces a layout - * - * This event is sent after binding and announces a layout. - * Layouts are announced in order. - */ - void (*layout)(void *data, - struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2, - const char *name); -}; - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -static inline int -zpeachwm_ipc_manager_v2_add_listener(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2, - const struct zpeachwm_ipc_manager_v2_listener *listener, void *data) -{ - return wl_proxy_add_listener((struct wl_proxy *) zpeachwm_ipc_manager_v2, - (void (**)(void)) listener, data); -} - -#define ZPEACHWM_IPC_MANAGER_V2_RELEASE 0 -#define ZPEACHWM_IPC_MANAGER_V2_GET_OUTPUT 1 - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_TAGS_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_LAYOUT_SINCE_VERSION 1 - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_RELEASE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_GET_OUTPUT_SINCE_VERSION 1 - -/** @ingroup iface_zpeachwm_ipc_manager_v2 */ -static inline void -zpeachwm_ipc_manager_v2_set_user_data(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2, void *user_data) -{ - wl_proxy_set_user_data((struct wl_proxy *) zpeachwm_ipc_manager_v2, user_data); -} - -/** @ingroup iface_zpeachwm_ipc_manager_v2 */ -static inline void * -zpeachwm_ipc_manager_v2_get_user_data(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2) -{ - return wl_proxy_get_user_data((struct wl_proxy *) zpeachwm_ipc_manager_v2); -} - -static inline uint32_t -zpeachwm_ipc_manager_v2_get_version(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2) -{ - return wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_manager_v2); -} - -/** @ingroup iface_zpeachwm_ipc_manager_v2 */ -static inline void -zpeachwm_ipc_manager_v2_destroy(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2) -{ - wl_proxy_destroy((struct wl_proxy *) zpeachwm_ipc_manager_v2); -} - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - * - * Indicates that the client will not use the manager object anymore. - * Objects created through this interface remain valid. - */ -static inline void -zpeachwm_ipc_manager_v2_release(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2) -{ - wl_proxy_marshal_flags((struct wl_proxy *) zpeachwm_ipc_manager_v2, - ZPEACHWM_IPC_MANAGER_V2_RELEASE, NULL, wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_manager_v2), WL_MARSHAL_FLAG_DESTROY); -} - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - * - * Get a peachwm_ipc_output for the given wl_output. - */ -static inline struct zpeachwm_ipc_output_v2 * -zpeachwm_ipc_manager_v2_get_output(struct zpeachwm_ipc_manager_v2 *zpeachwm_ipc_manager_v2, struct wl_output *output) -{ - struct wl_proxy *id; - - id = wl_proxy_marshal_flags((struct wl_proxy *) zpeachwm_ipc_manager_v2, - ZPEACHWM_IPC_MANAGER_V2_GET_OUTPUT, &zpeachwm_ipc_output_v2_interface, wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_manager_v2), 0, NULL, output); - - return (struct zpeachwm_ipc_output_v2 *) id; -} - -#ifndef ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM -#define ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM -enum zpeachwm_ipc_output_v2_tag_state { - /** - * no state - */ - ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_NONE = 0, - /** - * tag is active - */ - ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ACTIVE = 1, - /** - * tag has urgent client - */ - ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_URGENT = 2, -}; -#endif /* ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM */ - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * @struct zpeachwm_ipc_output_v2_listener - */ -struct zpeachwm_ipc_output_v2_listener { - /** - * peachwm visibility has been toggled - * - * Indicates that peachwm visibility has been toggled. - */ - void (*toggle_visibility)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2); - /** - * output is active - * - * Indicates the output is active (selected monitor). - */ - void (*active)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - uint32_t active); - /** - * tag state changed - * - * Indicates a tag state change. - * @param tag index of the tag - * @param state state of the tag - * @param clients number of clients in tag - * @param focused 1 if focused client is in this tag - */ - void (*tag)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - uint32_t tag, - uint32_t state, - uint32_t clients, - uint32_t focused); - /** - * layout changed - * - * Indicates the layout changed. - * @param layout index of the layout - */ - void (*layout)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - uint32_t layout); - /** - * title changed - * - * Indicates the focused client title changed. - */ - void (*title)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - const char *title); - /** - * appid changed - * - * Indicates the focused client appid changed. - */ - void (*appid)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - const char *appid); - /** - * layout symbol changed - * - * Indicates the layout symbol changed. - */ - void (*layout_symbol)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - const char *layout); - /** - * frame event - * - * Sent after all state events have been sent for a given state - * change. - */ - void (*frame)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2); - /** - * fullscreen state changed - * - * Indicates the fullscreen state changed. - * @since 2 - */ - void (*fullscreen)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - uint32_t is_fullscreen); - /** - * floating state changed - * - * Indicates the floating state changed. - * @since 2 - */ - void (*floating)(void *data, - struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - uint32_t is_floating); -}; - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -static inline int -zpeachwm_ipc_output_v2_add_listener(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, - const struct zpeachwm_ipc_output_v2_listener *listener, void *data) -{ - return wl_proxy_add_listener((struct wl_proxy *) zpeachwm_ipc_output_v2, - (void (**)(void)) listener, data); -} - -#define ZPEACHWM_IPC_OUTPUT_V2_RELEASE 0 -#define ZPEACHWM_IPC_OUTPUT_V2_SET_TAGS 1 -#define ZPEACHWM_IPC_OUTPUT_V2_SET_CLIENT_TAGS 2 -#define ZPEACHWM_IPC_OUTPUT_V2_SET_LAYOUT 3 - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_TOGGLE_VISIBILITY_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_ACTIVE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_TAG_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_LAYOUT_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_TITLE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_APPID_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_LAYOUT_SYMBOL_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_FRAME_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_FULLSCREEN_SINCE_VERSION 2 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_FLOATING_SINCE_VERSION 2 - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_RELEASE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_SET_TAGS_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_SET_CLIENT_TAGS_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_SET_LAYOUT_SINCE_VERSION 1 - -/** @ingroup iface_zpeachwm_ipc_output_v2 */ -static inline void -zpeachwm_ipc_output_v2_set_user_data(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, void *user_data) -{ - wl_proxy_set_user_data((struct wl_proxy *) zpeachwm_ipc_output_v2, user_data); -} - -/** @ingroup iface_zpeachwm_ipc_output_v2 */ -static inline void * -zpeachwm_ipc_output_v2_get_user_data(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2) -{ - return wl_proxy_get_user_data((struct wl_proxy *) zpeachwm_ipc_output_v2); -} - -static inline uint32_t -zpeachwm_ipc_output_v2_get_version(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2) -{ - return wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_output_v2); -} - -/** @ingroup iface_zpeachwm_ipc_output_v2 */ -static inline void -zpeachwm_ipc_output_v2_destroy(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2) -{ - wl_proxy_destroy((struct wl_proxy *) zpeachwm_ipc_output_v2); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * - * Indicates that the client will not use the peachwm_ipc_output object - * anymore. Objects created through this interface remain valid. - */ -static inline void -zpeachwm_ipc_output_v2_release(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2) -{ - wl_proxy_marshal_flags((struct wl_proxy *) zpeachwm_ipc_output_v2, - ZPEACHWM_IPC_OUTPUT_V2_RELEASE, NULL, wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_output_v2), WL_MARSHAL_FLAG_DESTROY); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * - * set the active tags of this output. - */ -static inline void -zpeachwm_ipc_output_v2_set_tags(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, uint32_t tagmask, uint32_t toggle_tagset) -{ - wl_proxy_marshal_flags((struct wl_proxy *) zpeachwm_ipc_output_v2, - ZPEACHWM_IPC_OUTPUT_V2_SET_TAGS, NULL, wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_output_v2), 0, tagmask, toggle_tagset); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * - * Set the tags of the focused client. - */ -static inline void -zpeachwm_ipc_output_v2_set_client_tags(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, uint32_t and_tags, uint32_t xor_tags) -{ - wl_proxy_marshal_flags((struct wl_proxy *) zpeachwm_ipc_output_v2, - ZPEACHWM_IPC_OUTPUT_V2_SET_CLIENT_TAGS, NULL, wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_output_v2), 0, and_tags, xor_tags); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * - * Set the layout of this output. - */ -static inline void -zpeachwm_ipc_output_v2_set_layout(struct zpeachwm_ipc_output_v2 *zpeachwm_ipc_output_v2, uint32_t index) -{ - wl_proxy_marshal_flags((struct wl_proxy *) zpeachwm_ipc_output_v2, - ZPEACHWM_IPC_OUTPUT_V2_SET_LAYOUT, NULL, wl_proxy_get_version((struct wl_proxy *) zpeachwm_ipc_output_v2), 0, index); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/peachwm b/peachwm deleted file mode 100755 index a9452af..0000000 Binary files a/peachwm and /dev/null differ diff --git a/protocols/cursor-shape-v1-protocol.h b/protocols/cursor-shape-v1-protocol.h deleted file mode 100644 index 08714b3..0000000 --- a/protocols/cursor-shape-v1-protocol.h +++ /dev/null @@ -1,507 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef CURSOR_SHAPE_V1_SERVER_PROTOCOL_H -#define CURSOR_SHAPE_V1_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_cursor_shape_v1 The cursor_shape_v1 protocol - * @section page_ifaces_cursor_shape_v1 Interfaces - * - @subpage page_iface_wp_cursor_shape_manager_v1 - cursor shape manager - * - @subpage page_iface_wp_cursor_shape_device_v1 - cursor shape for a device - * @section page_copyright_cursor_shape_v1 Copyright - *
- *
- * Copyright 2018 The Chromium Authors
- * Copyright 2023 Simon Ser
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_pointer; -struct wp_cursor_shape_device_v1; -struct wp_cursor_shape_manager_v1; -struct zwp_tablet_tool_v2; - -#ifndef WP_CURSOR_SHAPE_MANAGER_V1_INTERFACE -#define WP_CURSOR_SHAPE_MANAGER_V1_INTERFACE -/** - * @page page_iface_wp_cursor_shape_manager_v1 wp_cursor_shape_manager_v1 - * @section page_iface_wp_cursor_shape_manager_v1_desc Description - * - * This global offers an alternative, optional way to set cursor images. This - * new way uses enumerated cursors instead of a wl_surface like - * wl_pointer.set_cursor does. - * - * Warning! The protocol described in this file is currently in the testing - * phase. Backward compatible changes may be added together with the - * corresponding interface version bump. Backward incompatible changes can - * only be done by creating a new major version of the extension. - * @section page_iface_wp_cursor_shape_manager_v1_api API - * See @ref iface_wp_cursor_shape_manager_v1. - */ -/** - * @defgroup iface_wp_cursor_shape_manager_v1 The wp_cursor_shape_manager_v1 interface - * - * This global offers an alternative, optional way to set cursor images. This - * new way uses enumerated cursors instead of a wl_surface like - * wl_pointer.set_cursor does. - * - * Warning! The protocol described in this file is currently in the testing - * phase. Backward compatible changes may be added together with the - * corresponding interface version bump. Backward incompatible changes can - * only be done by creating a new major version of the extension. - */ -extern const struct wl_interface wp_cursor_shape_manager_v1_interface; -#endif -#ifndef WP_CURSOR_SHAPE_DEVICE_V1_INTERFACE -#define WP_CURSOR_SHAPE_DEVICE_V1_INTERFACE -/** - * @page page_iface_wp_cursor_shape_device_v1 wp_cursor_shape_device_v1 - * @section page_iface_wp_cursor_shape_device_v1_desc Description - * - * This interface allows clients to set the cursor shape. - * @section page_iface_wp_cursor_shape_device_v1_api API - * See @ref iface_wp_cursor_shape_device_v1. - */ -/** - * @defgroup iface_wp_cursor_shape_device_v1 The wp_cursor_shape_device_v1 interface - * - * This interface allows clients to set the cursor shape. - */ -extern const struct wl_interface wp_cursor_shape_device_v1_interface; -#endif - -/** - * @ingroup iface_wp_cursor_shape_manager_v1 - * @struct wp_cursor_shape_manager_v1_interface - */ -struct wp_cursor_shape_manager_v1_interface { - /** - * destroy the manager - * - * Destroy the cursor shape manager. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * manage the cursor shape of a pointer device - * - * Obtain a wp_cursor_shape_device_v1 for a wl_pointer object. - * - * When the pointer capability is removed from the wl_seat, the - * wp_cursor_shape_device_v1 object becomes inert. - */ - void (*get_pointer)(struct wl_client *client, - struct wl_resource *resource, - uint32_t cursor_shape_device, - struct wl_resource *pointer); - /** - * manage the cursor shape of a tablet tool device - * - * Obtain a wp_cursor_shape_device_v1 for a zwp_tablet_tool_v2 - * object. - * - * When the zwp_tablet_tool_v2 is removed, the - * wp_cursor_shape_device_v1 object becomes inert. - */ - void (*get_tablet_tool_v2)(struct wl_client *client, - struct wl_resource *resource, - uint32_t cursor_shape_device, - struct wl_resource *tablet_tool); -}; - - -/** - * @ingroup iface_wp_cursor_shape_manager_v1 - */ -#define WP_CURSOR_SHAPE_MANAGER_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_wp_cursor_shape_manager_v1 - */ -#define WP_CURSOR_SHAPE_MANAGER_V1_GET_POINTER_SINCE_VERSION 1 -/** - * @ingroup iface_wp_cursor_shape_manager_v1 - */ -#define WP_CURSOR_SHAPE_MANAGER_V1_GET_TABLET_TOOL_V2_SINCE_VERSION 1 - -#ifndef WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ENUM -#define WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ENUM -/** - * @ingroup iface_wp_cursor_shape_device_v1 - * cursor shapes - * - * This enum describes cursor shapes. - * - * The names are taken from the CSS W3C specification: - * https://w3c.github.io/csswg-drafts/css-ui/#cursor - * with a few additions. - * - * Note that there are some groups of cursor shapes that are related: - * The first group is drag-and-drop cursors which are used to indicate - * the selected action during dnd operations. The second group is resize - * cursors which are used to indicate resizing and moving possibilities - * on window borders. It is recommended that the shapes in these groups - * should use visually compatible images and metaphors. - */ -enum wp_cursor_shape_device_v1_shape { - /** - * default cursor - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DEFAULT = 1, - /** - * a context menu is available for the object under the cursor - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CONTEXT_MENU = 2, - /** - * help is available for the object under the cursor - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_HELP = 3, - /** - * pointer that indicates a link or another interactive element - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_POINTER = 4, - /** - * progress indicator - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_PROGRESS = 5, - /** - * program is busy, user should wait - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_WAIT = 6, - /** - * a cell or set of cells may be selected - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CELL = 7, - /** - * simple crosshair - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CROSSHAIR = 8, - /** - * text may be selected - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_TEXT = 9, - /** - * vertical text may be selected - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_VERTICAL_TEXT = 10, - /** - * drag-and-drop: alias of/shortcut to something is to be created - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALIAS = 11, - /** - * drag-and-drop: something is to be copied - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_COPY = 12, - /** - * drag-and-drop: something is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_MOVE = 13, - /** - * drag-and-drop: the dragged item cannot be dropped at the current cursor location - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NO_DROP = 14, - /** - * drag-and-drop: the requested action will not be carried out - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NOT_ALLOWED = 15, - /** - * drag-and-drop: something can be grabbed - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_GRAB = 16, - /** - * drag-and-drop: something is being grabbed - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_GRABBING = 17, - /** - * resizing: the east border is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_E_RESIZE = 18, - /** - * resizing: the north border is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_N_RESIZE = 19, - /** - * resizing: the north-east corner is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NE_RESIZE = 20, - /** - * resizing: the north-west corner is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NW_RESIZE = 21, - /** - * resizing: the south border is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_S_RESIZE = 22, - /** - * resizing: the south-east corner is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_SE_RESIZE = 23, - /** - * resizing: the south-west corner is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_SW_RESIZE = 24, - /** - * resizing: the west border is to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_W_RESIZE = 25, - /** - * resizing: the east and west borders are to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_EW_RESIZE = 26, - /** - * resizing: the north and south borders are to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NS_RESIZE = 27, - /** - * resizing: the north-east and south-west corners are to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NESW_RESIZE = 28, - /** - * resizing: the north-west and south-east corners are to be moved - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NWSE_RESIZE = 29, - /** - * resizing: that the item/column can be resized horizontally - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_COL_RESIZE = 30, - /** - * resizing: that the item/row can be resized vertically - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ROW_RESIZE = 31, - /** - * something can be scrolled in any direction - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_SCROLL = 32, - /** - * something can be zoomed in - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ZOOM_IN = 33, - /** - * something can be zoomed out - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ZOOM_OUT = 34, - /** - * drag-and-drop: the user will select which action will be carried out (non-css value) - * @since 2 - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DND_ASK = 35, - /** - * resizing: something can be moved or resized in any direction (non-css value) - * @since 2 - */ - WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_RESIZE = 36, -}; -/** - * @ingroup iface_wp_cursor_shape_device_v1 - */ -#define WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DND_ASK_SINCE_VERSION 2 -/** - * @ingroup iface_wp_cursor_shape_device_v1 - */ -#define WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_RESIZE_SINCE_VERSION 2 -#endif /* WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ENUM */ - -#ifndef WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ENUM_IS_VALID -#define WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ENUM_IS_VALID -/** - * @ingroup iface_wp_cursor_shape_device_v1 - * Validate a wp_cursor_shape_device_v1 shape value. - * - * @return true on success, false on error. - * @ref wp_cursor_shape_device_v1_shape - */ -static inline bool -wp_cursor_shape_device_v1_shape_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DEFAULT: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CONTEXT_MENU: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_HELP: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_POINTER: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_PROGRESS: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_WAIT: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CELL: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_CROSSHAIR: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_TEXT: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_VERTICAL_TEXT: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALIAS: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_COPY: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_MOVE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NO_DROP: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NOT_ALLOWED: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_GRAB: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_GRABBING: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_E_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_N_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NE_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NW_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_S_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_SE_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_SW_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_W_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_EW_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NS_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NESW_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_NWSE_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_COL_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ROW_RESIZE: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_SCROLL: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ZOOM_IN: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ZOOM_OUT: - return version >= 1; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_DND_ASK: - return version >= 2; - case WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ALL_RESIZE: - return version >= 2; - default: - return false; - } -} -#endif /* WP_CURSOR_SHAPE_DEVICE_V1_SHAPE_ENUM_IS_VALID */ - -#ifndef WP_CURSOR_SHAPE_DEVICE_V1_ERROR_ENUM -#define WP_CURSOR_SHAPE_DEVICE_V1_ERROR_ENUM -enum wp_cursor_shape_device_v1_error { - /** - * the specified shape value is invalid - */ - WP_CURSOR_SHAPE_DEVICE_V1_ERROR_INVALID_SHAPE = 1, -}; -#endif /* WP_CURSOR_SHAPE_DEVICE_V1_ERROR_ENUM */ - -#ifndef WP_CURSOR_SHAPE_DEVICE_V1_ERROR_ENUM_IS_VALID -#define WP_CURSOR_SHAPE_DEVICE_V1_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_wp_cursor_shape_device_v1 - * Validate a wp_cursor_shape_device_v1 error value. - * - * @return true on success, false on error. - * @ref wp_cursor_shape_device_v1_error - */ -static inline bool -wp_cursor_shape_device_v1_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case WP_CURSOR_SHAPE_DEVICE_V1_ERROR_INVALID_SHAPE: - return version >= 1; - default: - return false; - } -} -#endif /* WP_CURSOR_SHAPE_DEVICE_V1_ERROR_ENUM_IS_VALID */ - -/** - * @ingroup iface_wp_cursor_shape_device_v1 - * @struct wp_cursor_shape_device_v1_interface - */ -struct wp_cursor_shape_device_v1_interface { - /** - * destroy the cursor shape device - * - * Destroy the cursor shape device. - * - * The device cursor shape remains unchanged. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set device cursor to the shape - * - * Sets the device cursor to the specified shape. The compositor - * will change the cursor image based on the specified shape. - * - * The cursor actually changes only if the input device focus is - * one of the requesting client's surfaces. If any, the previous - * cursor image (surface or shape) is replaced. - * - * The "shape" argument must be a valid enum entry, otherwise the - * invalid_shape protocol error is raised. - * - * This is similar to the wl_pointer.set_cursor and - * zwp_tablet_tool_v2.set_cursor requests, but this request accepts - * a shape instead of contents in the form of a surface. Clients - * can mix set_cursor and set_shape requests. - * - * The serial parameter must match the latest wl_pointer.enter or - * zwp_tablet_tool_v2.proximity_in serial number sent to the - * client. Otherwise the request will be ignored. - * @param serial serial number of the enter event - */ - void (*set_shape)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial, - uint32_t shape); -}; - - -/** - * @ingroup iface_wp_cursor_shape_device_v1 - */ -#define WP_CURSOR_SHAPE_DEVICE_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_wp_cursor_shape_device_v1 - */ -#define WP_CURSOR_SHAPE_DEVICE_V1_SET_SHAPE_SINCE_VERSION 1 - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/protocols/ext-workspace-v1-protocol.c b/protocols/ext-workspace-v1-protocol.c deleted file mode 100644 index 605fefb..0000000 --- a/protocols/ext-workspace-v1-protocol.c +++ /dev/null @@ -1,120 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -/* - * Copyright © 2019 Christopher Billington - * Copyright © 2020 Ilia Bozhinov - * Copyright © 2022 Victoria Brekenfeld - * - * Permission to use, copy, modify, distribute, and sell this - * software and its documentation for any purpose is hereby granted - * without fee, provided that the above copyright notice appear in - * all copies and that both that copyright notice and this permission - * notice appear in supporting documentation, and that the name of - * the copyright holders not be used in advertising or publicity - * pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no - * representations about the suitability of this software for any - * purpose. It is provided "as is" without express or implied - * warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS - * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND - * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY - * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES - * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN - * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, - * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF - * THIS SOFTWARE. - */ - -#include -#include -#include -#include "wayland-util.h" - -#ifndef __has_attribute -# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ -#endif - -#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) -#define WL_PRIVATE __attribute__ ((visibility("hidden"))) -#else -#define WL_PRIVATE -#endif - -extern const struct wl_interface ext_workspace_group_handle_v1_interface; -extern const struct wl_interface ext_workspace_handle_v1_interface; -extern const struct wl_interface wl_output_interface; - -static const struct wl_interface *ext_workspace_v1_types[] = { - NULL, - &ext_workspace_group_handle_v1_interface, - &ext_workspace_handle_v1_interface, - &wl_output_interface, - &wl_output_interface, - &ext_workspace_handle_v1_interface, - &ext_workspace_handle_v1_interface, - &ext_workspace_group_handle_v1_interface, -}; - -static const struct wl_message ext_workspace_manager_v1_requests[] = { - { "commit", "", ext_workspace_v1_types + 0 }, - { "stop", "", ext_workspace_v1_types + 0 }, -}; - -static const struct wl_message ext_workspace_manager_v1_events[] = { - { "workspace_group", "n", ext_workspace_v1_types + 1 }, - { "workspace", "n", ext_workspace_v1_types + 2 }, - { "done", "", ext_workspace_v1_types + 0 }, - { "finished", "", ext_workspace_v1_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface ext_workspace_manager_v1_interface = { - "ext_workspace_manager_v1", 1, - 2, ext_workspace_manager_v1_requests, - 4, ext_workspace_manager_v1_events, -}; - -static const struct wl_message ext_workspace_group_handle_v1_requests[] = { - { "create_workspace", "s", ext_workspace_v1_types + 0 }, - { "destroy", "", ext_workspace_v1_types + 0 }, -}; - -static const struct wl_message ext_workspace_group_handle_v1_events[] = { - { "capabilities", "u", ext_workspace_v1_types + 0 }, - { "output_enter", "o", ext_workspace_v1_types + 3 }, - { "output_leave", "o", ext_workspace_v1_types + 4 }, - { "workspace_enter", "o", ext_workspace_v1_types + 5 }, - { "workspace_leave", "o", ext_workspace_v1_types + 6 }, - { "removed", "", ext_workspace_v1_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface ext_workspace_group_handle_v1_interface = { - "ext_workspace_group_handle_v1", 1, - 2, ext_workspace_group_handle_v1_requests, - 6, ext_workspace_group_handle_v1_events, -}; - -static const struct wl_message ext_workspace_handle_v1_requests[] = { - { "destroy", "", ext_workspace_v1_types + 0 }, - { "activate", "", ext_workspace_v1_types + 0 }, - { "deactivate", "", ext_workspace_v1_types + 0 }, - { "assign", "o", ext_workspace_v1_types + 7 }, - { "remove", "", ext_workspace_v1_types + 0 }, -}; - -static const struct wl_message ext_workspace_handle_v1_events[] = { - { "id", "s", ext_workspace_v1_types + 0 }, - { "name", "s", ext_workspace_v1_types + 0 }, - { "coordinates", "a", ext_workspace_v1_types + 0 }, - { "state", "u", ext_workspace_v1_types + 0 }, - { "capabilities", "u", ext_workspace_v1_types + 0 }, - { "removed", "", ext_workspace_v1_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface ext_workspace_handle_v1_interface = { - "ext_workspace_handle_v1", 1, - 5, ext_workspace_handle_v1_requests, - 6, ext_workspace_handle_v1_events, -}; - diff --git a/protocols/ext-workspace-v1-protocol.h b/protocols/ext-workspace-v1-protocol.h deleted file mode 100644 index 34ae038..0000000 --- a/protocols/ext-workspace-v1-protocol.h +++ /dev/null @@ -1,752 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef EXT_WORKSPACE_V1_SERVER_PROTOCOL_H -#define EXT_WORKSPACE_V1_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_ext_workspace_v1 The ext_workspace_v1 protocol - * @section page_ifaces_ext_workspace_v1 Interfaces - * - @subpage page_iface_ext_workspace_manager_v1 - list and control workspaces - * - @subpage page_iface_ext_workspace_group_handle_v1 - a workspace group assigned to a set of outputs - * - @subpage page_iface_ext_workspace_handle_v1 - a workspace handing a group of surfaces - * @section page_copyright_ext_workspace_v1 Copyright - *
- *
- * Copyright © 2019 Christopher Billington
- * Copyright © 2020 Ilia Bozhinov
- * Copyright © 2022 Victoria Brekenfeld
- *
- * Permission to use, copy, modify, distribute, and sell this
- * software and its documentation for any purpose is hereby granted
- * without fee, provided that the above copyright notice appear in
- * all copies and that both that copyright notice and this permission
- * notice appear in supporting documentation, and that the name of
- * the copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- * 
- */ -struct ext_workspace_group_handle_v1; -struct ext_workspace_handle_v1; -struct ext_workspace_manager_v1; -struct wl_output; - -#ifndef EXT_WORKSPACE_MANAGER_V1_INTERFACE -#define EXT_WORKSPACE_MANAGER_V1_INTERFACE -/** - * @page page_iface_ext_workspace_manager_v1 ext_workspace_manager_v1 - * @section page_iface_ext_workspace_manager_v1_desc Description - * - * Workspaces, also called virtual desktops, are groups of surfaces. A - * compositor with a concept of workspaces may only show some such groups of - * surfaces (those of 'active' workspaces) at a time. 'Activating' a - * workspace is a request for the compositor to display that workspace's - * surfaces as normal, whereas the compositor may hide or otherwise - * de-emphasise surfaces that are associated only with 'inactive' workspaces. - * Workspaces are grouped by which sets of outputs they correspond to, and - * may contain surfaces only from those outputs. In this way, it is possible - * for each output to have its own set of workspaces, or for all outputs (or - * any other arbitrary grouping) to share workspaces. Compositors may - * optionally conceptually arrange each group of workspaces in an - * N-dimensional grid. - * - * The purpose of this protocol is to enable the creation of taskbars and - * docks by providing them with a list of workspaces and their properties, - * and allowing them to activate and deactivate workspaces. - * - * After a client binds the ext_workspace_manager_v1, each workspace will be - * sent via the workspace event. - * @section page_iface_ext_workspace_manager_v1_api API - * See @ref iface_ext_workspace_manager_v1. - */ -/** - * @defgroup iface_ext_workspace_manager_v1 The ext_workspace_manager_v1 interface - * - * Workspaces, also called virtual desktops, are groups of surfaces. A - * compositor with a concept of workspaces may only show some such groups of - * surfaces (those of 'active' workspaces) at a time. 'Activating' a - * workspace is a request for the compositor to display that workspace's - * surfaces as normal, whereas the compositor may hide or otherwise - * de-emphasise surfaces that are associated only with 'inactive' workspaces. - * Workspaces are grouped by which sets of outputs they correspond to, and - * may contain surfaces only from those outputs. In this way, it is possible - * for each output to have its own set of workspaces, or for all outputs (or - * any other arbitrary grouping) to share workspaces. Compositors may - * optionally conceptually arrange each group of workspaces in an - * N-dimensional grid. - * - * The purpose of this protocol is to enable the creation of taskbars and - * docks by providing them with a list of workspaces and their properties, - * and allowing them to activate and deactivate workspaces. - * - * After a client binds the ext_workspace_manager_v1, each workspace will be - * sent via the workspace event. - */ -extern const struct wl_interface ext_workspace_manager_v1_interface; -#endif -#ifndef EXT_WORKSPACE_GROUP_HANDLE_V1_INTERFACE -#define EXT_WORKSPACE_GROUP_HANDLE_V1_INTERFACE -/** - * @page page_iface_ext_workspace_group_handle_v1 ext_workspace_group_handle_v1 - * @section page_iface_ext_workspace_group_handle_v1_desc Description - * - * A ext_workspace_group_handle_v1 object represents a workspace group - * that is assigned a set of outputs and contains a number of workspaces. - * - * The set of outputs assigned to the workspace group is conveyed to the client via - * output_enter and output_leave events, and its workspaces are conveyed with - * workspace events. - * - * For example, a compositor which has a set of workspaces for each output may - * advertise a workspace group (and its workspaces) per output, whereas a compositor - * where a workspace spans all outputs may advertise a single workspace group for all - * outputs. - * @section page_iface_ext_workspace_group_handle_v1_api API - * See @ref iface_ext_workspace_group_handle_v1. - */ -/** - * @defgroup iface_ext_workspace_group_handle_v1 The ext_workspace_group_handle_v1 interface - * - * A ext_workspace_group_handle_v1 object represents a workspace group - * that is assigned a set of outputs and contains a number of workspaces. - * - * The set of outputs assigned to the workspace group is conveyed to the client via - * output_enter and output_leave events, and its workspaces are conveyed with - * workspace events. - * - * For example, a compositor which has a set of workspaces for each output may - * advertise a workspace group (and its workspaces) per output, whereas a compositor - * where a workspace spans all outputs may advertise a single workspace group for all - * outputs. - */ -extern const struct wl_interface ext_workspace_group_handle_v1_interface; -#endif -#ifndef EXT_WORKSPACE_HANDLE_V1_INTERFACE -#define EXT_WORKSPACE_HANDLE_V1_INTERFACE -/** - * @page page_iface_ext_workspace_handle_v1 ext_workspace_handle_v1 - * @section page_iface_ext_workspace_handle_v1_desc Description - * - * A ext_workspace_handle_v1 object represents a workspace that handles a - * group of surfaces. - * - * Each workspace has: - * - a name, conveyed to the client with the name event - * - potentially an id conveyed with the id event - * - a list of states, conveyed to the client with the state event - * - and optionally a set of coordinates, conveyed to the client with the - * coordinates event - * - * The client may request that the compositor activate or deactivate the workspace. - * - * Each workspace can belong to only a single workspace group. - * Depending on the compositor policy, there might be workspaces with - * the same name in different workspace groups, but these workspaces are still - * separate (e.g. one of them might be active while the other is not). - * @section page_iface_ext_workspace_handle_v1_api API - * See @ref iface_ext_workspace_handle_v1. - */ -/** - * @defgroup iface_ext_workspace_handle_v1 The ext_workspace_handle_v1 interface - * - * A ext_workspace_handle_v1 object represents a workspace that handles a - * group of surfaces. - * - * Each workspace has: - * - a name, conveyed to the client with the name event - * - potentially an id conveyed with the id event - * - a list of states, conveyed to the client with the state event - * - and optionally a set of coordinates, conveyed to the client with the - * coordinates event - * - * The client may request that the compositor activate or deactivate the workspace. - * - * Each workspace can belong to only a single workspace group. - * Depending on the compositor policy, there might be workspaces with - * the same name in different workspace groups, but these workspaces are still - * separate (e.g. one of them might be active while the other is not). - */ -extern const struct wl_interface ext_workspace_handle_v1_interface; -#endif - -/** - * @ingroup iface_ext_workspace_manager_v1 - * @struct ext_workspace_manager_v1_interface - */ -struct ext_workspace_manager_v1_interface { - /** - * all requests about the workspaces have been sent - * - * The client must send this request after it has finished - * sending other requests. The compositor must process a series of - * requests preceding a commit request atomically. - * - * This allows changes to the workspace properties to be seen as - * atomic, even if they happen via multiple events, and even if - * they involve multiple ext_workspace_handle_v1 objects, for - * example, deactivating one workspace and activating another. - */ - void (*commit)(struct wl_client *client, - struct wl_resource *resource); - /** - * stop sending events - * - * Indicates the client no longer wishes to receive events for - * new workspace groups. However the compositor may emit further - * workspace events, until the finished event is emitted. The - * compositor is expected to send the finished event eventually - * once the stop request has been processed. - * - * The client must not send any requests after this one, doing so - * will raise a wl_display invalid_object error. - */ - void (*stop)(struct wl_client *client, - struct wl_resource *resource); -}; - -#define EXT_WORKSPACE_MANAGER_V1_WORKSPACE_GROUP 0 -#define EXT_WORKSPACE_MANAGER_V1_WORKSPACE 1 -#define EXT_WORKSPACE_MANAGER_V1_DONE 2 -#define EXT_WORKSPACE_MANAGER_V1_FINISHED 3 - -/** - * @ingroup iface_ext_workspace_manager_v1 - */ -#define EXT_WORKSPACE_MANAGER_V1_WORKSPACE_GROUP_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_manager_v1 - */ -#define EXT_WORKSPACE_MANAGER_V1_WORKSPACE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_manager_v1 - */ -#define EXT_WORKSPACE_MANAGER_V1_DONE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_manager_v1 - */ -#define EXT_WORKSPACE_MANAGER_V1_FINISHED_SINCE_VERSION 1 - -/** - * @ingroup iface_ext_workspace_manager_v1 - */ -#define EXT_WORKSPACE_MANAGER_V1_COMMIT_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_manager_v1 - */ -#define EXT_WORKSPACE_MANAGER_V1_STOP_SINCE_VERSION 1 - -/** - * @ingroup iface_ext_workspace_manager_v1 - * Sends an workspace_group event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_manager_v1_send_workspace_group(struct wl_resource *resource_, struct wl_resource *workspace_group) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_MANAGER_V1_WORKSPACE_GROUP, workspace_group); -} - -/** - * @ingroup iface_ext_workspace_manager_v1 - * Sends an workspace event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_manager_v1_send_workspace(struct wl_resource *resource_, struct wl_resource *workspace) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_MANAGER_V1_WORKSPACE, workspace); -} - -/** - * @ingroup iface_ext_workspace_manager_v1 - * Sends an done event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_manager_v1_send_done(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_MANAGER_V1_DONE); -} - -/** - * @ingroup iface_ext_workspace_manager_v1 - * Sends an finished event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_manager_v1_send_finished(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_MANAGER_V1_FINISHED); -} - -#ifndef EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_ENUM -#define EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_ENUM -enum ext_workspace_group_handle_v1_group_capabilities { - /** - * create_workspace request is available - */ - EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_CREATE_WORKSPACE = 1, -}; -#endif /* EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_ENUM */ - -#ifndef EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_ENUM_IS_VALID -#define EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_ENUM_IS_VALID -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Validate a ext_workspace_group_handle_v1 group_capabilities value. - * - * @return true on success, false on error. - * @ref ext_workspace_group_handle_v1_group_capabilities - */ -static inline bool -ext_workspace_group_handle_v1_group_capabilities_is_valid(uint32_t value, uint32_t version) { - uint32_t valid = 0; - if (version >= 1) - valid |= EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_CREATE_WORKSPACE; - return (value & ~valid) == 0; -} -#endif /* EXT_WORKSPACE_GROUP_HANDLE_V1_GROUP_CAPABILITIES_ENUM_IS_VALID */ - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * @struct ext_workspace_group_handle_v1_interface - */ -struct ext_workspace_group_handle_v1_interface { - /** - * create a new workspace - * - * Request that the compositor create a new workspace with the - * given name and assign it to this group. - * - * There is no guarantee that the compositor will create a new - * workspace, or that the created workspace will have the provided - * name. - */ - void (*create_workspace)(struct wl_client *client, - struct wl_resource *resource, - const char *workspace); - /** - * destroy the ext_workspace_group_handle_v1 object - * - * Destroys the ext_workspace_group_handle_v1 object. - * - * This request should be send either when the client does not want - * to use the workspace group object any more or after the removed - * event to finalize the destruction of the object. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); -}; - -#define EXT_WORKSPACE_GROUP_HANDLE_V1_CAPABILITIES 0 -#define EXT_WORKSPACE_GROUP_HANDLE_V1_OUTPUT_ENTER 1 -#define EXT_WORKSPACE_GROUP_HANDLE_V1_OUTPUT_LEAVE 2 -#define EXT_WORKSPACE_GROUP_HANDLE_V1_WORKSPACE_ENTER 3 -#define EXT_WORKSPACE_GROUP_HANDLE_V1_WORKSPACE_LEAVE 4 -#define EXT_WORKSPACE_GROUP_HANDLE_V1_REMOVED 5 - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_CAPABILITIES_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_OUTPUT_ENTER_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_OUTPUT_LEAVE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_WORKSPACE_ENTER_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_WORKSPACE_LEAVE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_REMOVED_SINCE_VERSION 1 - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_CREATE_WORKSPACE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_group_handle_v1 - */ -#define EXT_WORKSPACE_GROUP_HANDLE_V1_DESTROY_SINCE_VERSION 1 - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Sends an capabilities event to the client owning the resource. - * @param resource_ The client's resource - * @param capabilities capabilities - */ -static inline void -ext_workspace_group_handle_v1_send_capabilities(struct wl_resource *resource_, uint32_t capabilities) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_GROUP_HANDLE_V1_CAPABILITIES, capabilities); -} - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Sends an output_enter event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_group_handle_v1_send_output_enter(struct wl_resource *resource_, struct wl_resource *output) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_GROUP_HANDLE_V1_OUTPUT_ENTER, output); -} - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Sends an output_leave event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_group_handle_v1_send_output_leave(struct wl_resource *resource_, struct wl_resource *output) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_GROUP_HANDLE_V1_OUTPUT_LEAVE, output); -} - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Sends an workspace_enter event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_group_handle_v1_send_workspace_enter(struct wl_resource *resource_, struct wl_resource *workspace) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_GROUP_HANDLE_V1_WORKSPACE_ENTER, workspace); -} - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Sends an workspace_leave event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_group_handle_v1_send_workspace_leave(struct wl_resource *resource_, struct wl_resource *workspace) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_GROUP_HANDLE_V1_WORKSPACE_LEAVE, workspace); -} - -/** - * @ingroup iface_ext_workspace_group_handle_v1 - * Sends an removed event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_group_handle_v1_send_removed(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_GROUP_HANDLE_V1_REMOVED); -} - -#ifndef EXT_WORKSPACE_HANDLE_V1_STATE_ENUM -#define EXT_WORKSPACE_HANDLE_V1_STATE_ENUM -/** - * @ingroup iface_ext_workspace_handle_v1 - * types of states on the workspace - * - * The different states that a workspace can have. - */ -enum ext_workspace_handle_v1_state { - /** - * the workspace is active - */ - EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE = 1, - /** - * the workspace requests attention - */ - EXT_WORKSPACE_HANDLE_V1_STATE_URGENT = 2, - /** - * the workspace is not visible - * - * The workspace is not visible in its workspace group, and - * clients attempting to visualize the compositor workspace state - * should not display such workspaces. - */ - EXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN = 4, -}; -#endif /* EXT_WORKSPACE_HANDLE_V1_STATE_ENUM */ - -#ifndef EXT_WORKSPACE_HANDLE_V1_STATE_ENUM_IS_VALID -#define EXT_WORKSPACE_HANDLE_V1_STATE_ENUM_IS_VALID -/** - * @ingroup iface_ext_workspace_handle_v1 - * Validate a ext_workspace_handle_v1 state value. - * - * @return true on success, false on error. - * @ref ext_workspace_handle_v1_state - */ -static inline bool -ext_workspace_handle_v1_state_is_valid(uint32_t value, uint32_t version) { - uint32_t valid = 0; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_STATE_ACTIVE; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_STATE_URGENT; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_STATE_HIDDEN; - return (value & ~valid) == 0; -} -#endif /* EXT_WORKSPACE_HANDLE_V1_STATE_ENUM_IS_VALID */ - -#ifndef EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ENUM -#define EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ENUM -enum ext_workspace_handle_v1_workspace_capabilities { - /** - * activate request is available - */ - EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ACTIVATE = 1, - /** - * deactivate request is available - */ - EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_DEACTIVATE = 2, - /** - * remove request is available - */ - EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_REMOVE = 4, - /** - * assign request is available - */ - EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ASSIGN = 8, -}; -#endif /* EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ENUM */ - -#ifndef EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ENUM_IS_VALID -#define EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ENUM_IS_VALID -/** - * @ingroup iface_ext_workspace_handle_v1 - * Validate a ext_workspace_handle_v1 workspace_capabilities value. - * - * @return true on success, false on error. - * @ref ext_workspace_handle_v1_workspace_capabilities - */ -static inline bool -ext_workspace_handle_v1_workspace_capabilities_is_valid(uint32_t value, uint32_t version) { - uint32_t valid = 0; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ACTIVATE; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_DEACTIVATE; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_REMOVE; - if (version >= 1) - valid |= EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ASSIGN; - return (value & ~valid) == 0; -} -#endif /* EXT_WORKSPACE_HANDLE_V1_WORKSPACE_CAPABILITIES_ENUM_IS_VALID */ - -/** - * @ingroup iface_ext_workspace_handle_v1 - * @struct ext_workspace_handle_v1_interface - */ -struct ext_workspace_handle_v1_interface { - /** - * destroy the ext_workspace_handle_v1 object - * - * Destroys the ext_workspace_handle_v1 object. - * - * This request should be made either when the client does not want - * to use the workspace object any more or after the remove event - * to finalize the destruction of the object. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * activate the workspace - * - * Request that this workspace be activated. - * - * There is no guarantee the workspace will be actually activated, - * and behaviour may be compositor-dependent. For example, - * activating a workspace may or may not deactivate all other - * workspaces in the same group. - */ - void (*activate)(struct wl_client *client, - struct wl_resource *resource); - /** - * deactivate the workspace - * - * Request that this workspace be deactivated. - * - * There is no guarantee the workspace will be actually - * deactivated. - */ - void (*deactivate)(struct wl_client *client, - struct wl_resource *resource); - /** - * assign workspace to group - * - * Requests that this workspace is assigned to the given - * workspace group. - * - * There is no guarantee the workspace will be assigned. - */ - void (*assign)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *workspace_group); - /** - * remove the workspace - * - * Request that this workspace be removed. - * - * There is no guarantee the workspace will be actually removed. - */ - void (*remove)(struct wl_client *client, - struct wl_resource *resource); -}; - -#define EXT_WORKSPACE_HANDLE_V1_ID 0 -#define EXT_WORKSPACE_HANDLE_V1_NAME 1 -#define EXT_WORKSPACE_HANDLE_V1_COORDINATES 2 -#define EXT_WORKSPACE_HANDLE_V1_STATE 3 -#define EXT_WORKSPACE_HANDLE_V1_CAPABILITIES 4 -#define EXT_WORKSPACE_HANDLE_V1_REMOVED 5 - -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_ID_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_NAME_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_COORDINATES_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_STATE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_CAPABILITIES_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_REMOVED_SINCE_VERSION 1 - -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_ACTIVATE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_DEACTIVATE_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_ASSIGN_SINCE_VERSION 1 -/** - * @ingroup iface_ext_workspace_handle_v1 - */ -#define EXT_WORKSPACE_HANDLE_V1_REMOVE_SINCE_VERSION 1 - -/** - * @ingroup iface_ext_workspace_handle_v1 - * Sends an id event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_handle_v1_send_id(struct wl_resource *resource_, const char *id) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_HANDLE_V1_ID, id); -} - -/** - * @ingroup iface_ext_workspace_handle_v1 - * Sends an name event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_handle_v1_send_name(struct wl_resource *resource_, const char *name) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_HANDLE_V1_NAME, name); -} - -/** - * @ingroup iface_ext_workspace_handle_v1 - * Sends an coordinates event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_handle_v1_send_coordinates(struct wl_resource *resource_, struct wl_array *coordinates) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_HANDLE_V1_COORDINATES, coordinates); -} - -/** - * @ingroup iface_ext_workspace_handle_v1 - * Sends an state event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_handle_v1_send_state(struct wl_resource *resource_, uint32_t state) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_HANDLE_V1_STATE, state); -} - -/** - * @ingroup iface_ext_workspace_handle_v1 - * Sends an capabilities event to the client owning the resource. - * @param resource_ The client's resource - * @param capabilities capabilities - */ -static inline void -ext_workspace_handle_v1_send_capabilities(struct wl_resource *resource_, uint32_t capabilities) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_HANDLE_V1_CAPABILITIES, capabilities); -} - -/** - * @ingroup iface_ext_workspace_handle_v1 - * Sends an removed event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -ext_workspace_handle_v1_send_removed(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, EXT_WORKSPACE_HANDLE_V1_REMOVED); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/protocols/peachwm-ipc-unstable-v2-protocol.c b/protocols/peachwm-ipc-unstable-v2-protocol.c deleted file mode 100644 index dfc4982..0000000 --- a/protocols/peachwm-ipc-unstable-v2-protocol.c +++ /dev/null @@ -1,94 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -/* - * Copyright (C) 2022 Russell Newcomb - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice (including the next - * paragraph) shall be included in all copies or substantial portions of the - * Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - -#include -#include -#include -#include "wayland-util.h" - -#ifndef __has_attribute -# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */ -#endif - -#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4) -#define WL_PRIVATE __attribute__ ((visibility("hidden"))) -#else -#define WL_PRIVATE -#endif - -extern const struct wl_interface wl_output_interface; -extern const struct wl_interface zpeachwm_ipc_output_v2_interface; - -static const struct wl_interface *peachwm_ipc_unstable_v2_types[] = { - NULL, - NULL, - NULL, - NULL, - &zpeachwm_ipc_output_v2_interface, - &wl_output_interface, -}; - -static const struct wl_message zpeachwm_ipc_manager_v2_requests[] = { - { "release", "", peachwm_ipc_unstable_v2_types + 0 }, - { "get_output", "no", peachwm_ipc_unstable_v2_types + 4 }, -}; - -static const struct wl_message zpeachwm_ipc_manager_v2_events[] = { - { "tags", "u", peachwm_ipc_unstable_v2_types + 0 }, - { "layout", "s", peachwm_ipc_unstable_v2_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface zpeachwm_ipc_manager_v2_interface = { - "zpeachwm_ipc_manager_v2", 2, - 2, zpeachwm_ipc_manager_v2_requests, - 2, zpeachwm_ipc_manager_v2_events, -}; - -static const struct wl_message zpeachwm_ipc_output_v2_requests[] = { - { "release", "", peachwm_ipc_unstable_v2_types + 0 }, - { "set_tags", "uu", peachwm_ipc_unstable_v2_types + 0 }, - { "set_client_tags", "uu", peachwm_ipc_unstable_v2_types + 0 }, - { "set_layout", "u", peachwm_ipc_unstable_v2_types + 0 }, -}; - -static const struct wl_message zpeachwm_ipc_output_v2_events[] = { - { "toggle_visibility", "", peachwm_ipc_unstable_v2_types + 0 }, - { "active", "u", peachwm_ipc_unstable_v2_types + 0 }, - { "tag", "uuuu", peachwm_ipc_unstable_v2_types + 0 }, - { "layout", "u", peachwm_ipc_unstable_v2_types + 0 }, - { "title", "s", peachwm_ipc_unstable_v2_types + 0 }, - { "appid", "s", peachwm_ipc_unstable_v2_types + 0 }, - { "layout_symbol", "s", peachwm_ipc_unstable_v2_types + 0 }, - { "frame", "", peachwm_ipc_unstable_v2_types + 0 }, - { "fullscreen", "2u", peachwm_ipc_unstable_v2_types + 0 }, - { "floating", "2u", peachwm_ipc_unstable_v2_types + 0 }, -}; - -WL_PRIVATE const struct wl_interface zpeachwm_ipc_output_v2_interface = { - "zpeachwm_ipc_output_v2", 2, - 4, zpeachwm_ipc_output_v2_requests, - 10, zpeachwm_ipc_output_v2_events, -}; - diff --git a/protocols/peachwm-ipc-unstable-v2-protocol.h b/protocols/peachwm-ipc-unstable-v2-protocol.h deleted file mode 100644 index 8cb8d2b..0000000 --- a/protocols/peachwm-ipc-unstable-v2-protocol.h +++ /dev/null @@ -1,447 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef PEACHWM_IPC_UNSTABLE_V2_SERVER_PROTOCOL_H -#define PEACHWM_IPC_UNSTABLE_V2_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_peachwm_ipc_unstable_v2 The peachwm_ipc_unstable_v2 protocol - * @section page_ifaces_peachwm_ipc_unstable_v2 Interfaces - * - @subpage page_iface_zpeachwm_ipc_manager_v2 - manage peachwm state - * - @subpage page_iface_zpeachwm_ipc_output_v2 - interact with peachwm output state - * @section page_copyright_peachwm_ipc_unstable_v2 Copyright - *
- *
- * Copyright (C) 2022 Russell Newcomb
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_output; -struct zpeachwm_ipc_manager_v2; -struct zpeachwm_ipc_output_v2; - -#ifndef ZPEACHWM_IPC_MANAGER_V2_INTERFACE -#define ZPEACHWM_IPC_MANAGER_V2_INTERFACE -/** - * @page page_iface_zpeachwm_ipc_manager_v2 zpeachwm_ipc_manager_v2 - * @section page_iface_zpeachwm_ipc_manager_v2_desc Description - * - * This interface is exposed as a global in the Wayland registry and allows - * clients to query and set peachwm state. - * - * Warning! The protocol described in this file is experimental and - * backward incompatible changes may be made. Backward compatible changes - * may be added together with the corresponding interface version bump. - * Backward incompatible changes are done by bumping the version number in - * the protocol and interface names and resetting the interface version. - * Once the protocol is to be declared stable, the 'z' prefix and the - * version number in the protocol and interface names are removed and the - * interface version is reset. - * @section page_iface_zpeachwm_ipc_manager_v2_api API - * See @ref iface_zpeachwm_ipc_manager_v2. - */ -/** - * @defgroup iface_zpeachwm_ipc_manager_v2 The zpeachwm_ipc_manager_v2 interface - * - * This interface is exposed as a global in the Wayland registry and allows - * clients to query and set peachwm state. - * - * Warning! The protocol described in this file is experimental and - * backward incompatible changes may be made. Backward compatible changes - * may be added together with the corresponding interface version bump. - * Backward incompatible changes are done by bumping the version number in - * the protocol and interface names and resetting the interface version. - * Once the protocol is to be declared stable, the 'z' prefix and the - * version number in the protocol and interface names are removed and the - * interface version is reset. - */ -extern const struct wl_interface zpeachwm_ipc_manager_v2_interface; -#endif -#ifndef ZPEACHWM_IPC_OUTPUT_V2_INTERFACE -#define ZPEACHWM_IPC_OUTPUT_V2_INTERFACE -/** - * @page page_iface_zpeachwm_ipc_output_v2 zpeachwm_ipc_output_v2 - * @section page_iface_zpeachwm_ipc_output_v2_desc Description - * - * Observe and control a peachwm output. - * @section page_iface_zpeachwm_ipc_output_v2_api API - * See @ref iface_zpeachwm_ipc_output_v2. - */ -/** - * @defgroup iface_zpeachwm_ipc_output_v2 The zpeachwm_ipc_output_v2 interface - * - * Observe and control a peachwm output. - */ -extern const struct wl_interface zpeachwm_ipc_output_v2_interface; -#endif - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - * @struct zpeachwm_ipc_manager_v2_interface - */ -struct zpeachwm_ipc_manager_v2_interface { - /** - * release peachwm_ipc_manager - * - * Indicates that the client will not use the manager object - * anymore. Objects created through this interface remain valid. - */ - void (*release)(struct wl_client *client, - struct wl_resource *resource); - /** - * get a peachwm_ipc_output for a wl_output - * - * Get a peachwm_ipc_output for the given wl_output. - */ - void (*get_output)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *output); -}; - -#define ZPEACHWM_IPC_MANAGER_V2_TAGS 0 -#define ZPEACHWM_IPC_MANAGER_V2_LAYOUT 1 - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_TAGS_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_LAYOUT_SINCE_VERSION 1 - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_RELEASE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - */ -#define ZPEACHWM_IPC_MANAGER_V2_GET_OUTPUT_SINCE_VERSION 1 - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - * Sends an tags event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_manager_v2_send_tags(struct wl_resource *resource_, uint32_t amount) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_MANAGER_V2_TAGS, amount); -} - -/** - * @ingroup iface_zpeachwm_ipc_manager_v2 - * Sends an layout event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_manager_v2_send_layout(struct wl_resource *resource_, const char *name) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_MANAGER_V2_LAYOUT, name); -} - -#ifndef ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM -#define ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM -enum zpeachwm_ipc_output_v2_tag_state { - /** - * no state - */ - ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_NONE = 0, - /** - * tag is active - */ - ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ACTIVE = 1, - /** - * tag has urgent client - */ - ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_URGENT = 2, -}; -#endif /* ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM */ - -#ifndef ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM_IS_VALID -#define ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM_IS_VALID -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Validate a zpeachwm_ipc_output_v2 tag_state value. - * - * @return true on success, false on error. - * @ref zpeachwm_ipc_output_v2_tag_state - */ -static inline bool -zpeachwm_ipc_output_v2_tag_state_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_NONE: - return version >= 1; - case ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ACTIVE: - return version >= 1; - case ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_URGENT: - return version >= 1; - default: - return false; - } -} -#endif /* ZPEACHWM_IPC_OUTPUT_V2_TAG_STATE_ENUM_IS_VALID */ - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * @struct zpeachwm_ipc_output_v2_interface - */ -struct zpeachwm_ipc_output_v2_interface { - /** - * release peachwm_ipc_output - * - * Indicates that the client will not use the peachwm_ipc_output - * object anymore. Objects created through this interface remain - * valid. - */ - void (*release)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the active tags of this output - * - * set the active tags of this output. - * @param tagmask bitmask of the tags that should be set - * @param toggle_tagset whether to toggle the tagset - */ - void (*set_tags)(struct wl_client *client, - struct wl_resource *resource, - uint32_t tagmask, - uint32_t toggle_tagset); - /** - * set the tags of the focused client - * - * Set the tags of the focused client. - */ - void (*set_client_tags)(struct wl_client *client, - struct wl_resource *resource, - uint32_t and_tags, - uint32_t xor_tags); - /** - * set the layout of this output - * - * Set the layout of this output. - */ - void (*set_layout)(struct wl_client *client, - struct wl_resource *resource, - uint32_t index); -}; - -#define ZPEACHWM_IPC_OUTPUT_V2_TOGGLE_VISIBILITY 0 -#define ZPEACHWM_IPC_OUTPUT_V2_ACTIVE 1 -#define ZPEACHWM_IPC_OUTPUT_V2_TAG 2 -#define ZPEACHWM_IPC_OUTPUT_V2_LAYOUT 3 -#define ZPEACHWM_IPC_OUTPUT_V2_TITLE 4 -#define ZPEACHWM_IPC_OUTPUT_V2_APPID 5 -#define ZPEACHWM_IPC_OUTPUT_V2_LAYOUT_SYMBOL 6 -#define ZPEACHWM_IPC_OUTPUT_V2_FRAME 7 -#define ZPEACHWM_IPC_OUTPUT_V2_FULLSCREEN 8 -#define ZPEACHWM_IPC_OUTPUT_V2_FLOATING 9 - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_TOGGLE_VISIBILITY_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_ACTIVE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_TAG_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_LAYOUT_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_TITLE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_APPID_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_LAYOUT_SYMBOL_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_FRAME_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_FULLSCREEN_SINCE_VERSION 2 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_FLOATING_SINCE_VERSION 2 - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_RELEASE_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_SET_TAGS_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_SET_CLIENT_TAGS_SINCE_VERSION 1 -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - */ -#define ZPEACHWM_IPC_OUTPUT_V2_SET_LAYOUT_SINCE_VERSION 1 - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an toggle_visibility event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_toggle_visibility(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_TOGGLE_VISIBILITY); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an active event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_active(struct wl_resource *resource_, uint32_t active) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_ACTIVE, active); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an tag event to the client owning the resource. - * @param resource_ The client's resource - * @param tag index of the tag - * @param state state of the tag - * @param clients number of clients in tag - * @param focused 1 if focused client is in this tag - */ -static inline void -zpeachwm_ipc_output_v2_send_tag(struct wl_resource *resource_, uint32_t tag, uint32_t state, uint32_t clients, uint32_t focused) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_TAG, tag, state, clients, focused); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an layout event to the client owning the resource. - * @param resource_ The client's resource - * @param layout index of the layout - */ -static inline void -zpeachwm_ipc_output_v2_send_layout(struct wl_resource *resource_, uint32_t layout) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_LAYOUT, layout); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an title event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_title(struct wl_resource *resource_, const char *title) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_TITLE, title); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an appid event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_appid(struct wl_resource *resource_, const char *appid) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_APPID, appid); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an layout_symbol event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_layout_symbol(struct wl_resource *resource_, const char *layout) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_LAYOUT_SYMBOL, layout); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an frame event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_frame(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_FRAME); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an fullscreen event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_fullscreen(struct wl_resource *resource_, uint32_t is_fullscreen) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_FULLSCREEN, is_fullscreen); -} - -/** - * @ingroup iface_zpeachwm_ipc_output_v2 - * Sends an floating event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zpeachwm_ipc_output_v2_send_floating(struct wl_resource *resource_, uint32_t is_floating) -{ - wl_resource_post_event(resource_, ZPEACHWM_IPC_OUTPUT_V2_FLOATING, is_floating); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/protocols/pointer-constraints-unstable-v1-protocol.h b/protocols/pointer-constraints-unstable-v1-protocol.h deleted file mode 100644 index 0d48fcd..0000000 --- a/protocols/pointer-constraints-unstable-v1-protocol.h +++ /dev/null @@ -1,615 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef POINTER_CONSTRAINTS_UNSTABLE_V1_SERVER_PROTOCOL_H -#define POINTER_CONSTRAINTS_UNSTABLE_V1_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_pointer_constraints_unstable_v1 The pointer_constraints_unstable_v1 protocol - * protocol for constraining pointer motions - * - * @section page_desc_pointer_constraints_unstable_v1 Description - * - * This protocol specifies a set of interfaces used for adding constraints to - * the motion of a pointer. Possible constraints include confining pointer - * motions to a given region, or locking it to its current position. - * - * In order to constrain the pointer, a client must first bind the global - * interface "wp_pointer_constraints" which, if a compositor supports pointer - * constraints, is exposed by the registry. Using the bound global object, the - * client uses the request that corresponds to the type of constraint it wants - * to make. See wp_pointer_constraints for more details. - * - * Warning! The protocol described in this file is experimental and backward - * incompatible changes may be made. Backward compatible changes may be added - * together with the corresponding interface version bump. Backward - * incompatible changes are done by bumping the version number in the protocol - * and interface names and resetting the interface version. Once the protocol - * is to be declared stable, the 'z' prefix and the version number in the - * protocol and interface names are removed and the interface version number is - * reset. - * - * @section page_ifaces_pointer_constraints_unstable_v1 Interfaces - * - @subpage page_iface_zwp_pointer_constraints_v1 - constrain the movement of a pointer - * - @subpage page_iface_zwp_locked_pointer_v1 - receive relative pointer motion events - * - @subpage page_iface_zwp_confined_pointer_v1 - confined pointer object - * @section page_copyright_pointer_constraints_unstable_v1 Copyright - *
- *
- * Copyright © 2014      Jonas Ådahl
- * Copyright © 2015      Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_pointer; -struct wl_region; -struct wl_surface; -struct zwp_confined_pointer_v1; -struct zwp_locked_pointer_v1; -struct zwp_pointer_constraints_v1; - -#ifndef ZWP_POINTER_CONSTRAINTS_V1_INTERFACE -#define ZWP_POINTER_CONSTRAINTS_V1_INTERFACE -/** - * @page page_iface_zwp_pointer_constraints_v1 zwp_pointer_constraints_v1 - * @section page_iface_zwp_pointer_constraints_v1_desc Description - * - * The global interface exposing pointer constraining functionality. It - * exposes two requests: lock_pointer for locking the pointer to its - * position, and confine_pointer for locking the pointer to a region. - * - * The lock_pointer and confine_pointer requests create the objects - * wp_locked_pointer and wp_confined_pointer respectively, and the client can - * use these objects to interact with the lock. - * - * For any surface, only one lock or confinement may be active across all - * wl_pointer objects of the same seat. If a lock or confinement is requested - * when another lock or confinement is active or requested on the same surface - * and with any of the wl_pointer objects of the same seat, an - * 'already_constrained' error will be raised. - * @section page_iface_zwp_pointer_constraints_v1_api API - * See @ref iface_zwp_pointer_constraints_v1. - */ -/** - * @defgroup iface_zwp_pointer_constraints_v1 The zwp_pointer_constraints_v1 interface - * - * The global interface exposing pointer constraining functionality. It - * exposes two requests: lock_pointer for locking the pointer to its - * position, and confine_pointer for locking the pointer to a region. - * - * The lock_pointer and confine_pointer requests create the objects - * wp_locked_pointer and wp_confined_pointer respectively, and the client can - * use these objects to interact with the lock. - * - * For any surface, only one lock or confinement may be active across all - * wl_pointer objects of the same seat. If a lock or confinement is requested - * when another lock or confinement is active or requested on the same surface - * and with any of the wl_pointer objects of the same seat, an - * 'already_constrained' error will be raised. - */ -extern const struct wl_interface zwp_pointer_constraints_v1_interface; -#endif -#ifndef ZWP_LOCKED_POINTER_V1_INTERFACE -#define ZWP_LOCKED_POINTER_V1_INTERFACE -/** - * @page page_iface_zwp_locked_pointer_v1 zwp_locked_pointer_v1 - * @section page_iface_zwp_locked_pointer_v1_desc Description - * - * The wp_locked_pointer interface represents a locked pointer state. - * - * While the lock of this object is active, the wl_pointer objects of the - * associated seat will not emit any wl_pointer.motion events. - * - * This object will send the event 'locked' when the lock is activated. - * Whenever the lock is activated, it is guaranteed that the locked surface - * will already have received pointer focus and that the pointer will be - * within the region passed to the request creating this object. - * - * To unlock the pointer, send the destroy request. This will also destroy - * the wp_locked_pointer object. - * - * If the compositor decides to unlock the pointer the unlocked event is - * sent. See wp_locked_pointer.unlock for details. - * - * When unlocking, the compositor may warp the cursor position to the set - * cursor position hint. If it does, it will not result in any relative - * motion events emitted via wp_relative_pointer. - * - * If the surface the lock was requested on is destroyed and the lock is not - * yet activated, the wp_locked_pointer object is now defunct and must be - * destroyed. - * @section page_iface_zwp_locked_pointer_v1_api API - * See @ref iface_zwp_locked_pointer_v1. - */ -/** - * @defgroup iface_zwp_locked_pointer_v1 The zwp_locked_pointer_v1 interface - * - * The wp_locked_pointer interface represents a locked pointer state. - * - * While the lock of this object is active, the wl_pointer objects of the - * associated seat will not emit any wl_pointer.motion events. - * - * This object will send the event 'locked' when the lock is activated. - * Whenever the lock is activated, it is guaranteed that the locked surface - * will already have received pointer focus and that the pointer will be - * within the region passed to the request creating this object. - * - * To unlock the pointer, send the destroy request. This will also destroy - * the wp_locked_pointer object. - * - * If the compositor decides to unlock the pointer the unlocked event is - * sent. See wp_locked_pointer.unlock for details. - * - * When unlocking, the compositor may warp the cursor position to the set - * cursor position hint. If it does, it will not result in any relative - * motion events emitted via wp_relative_pointer. - * - * If the surface the lock was requested on is destroyed and the lock is not - * yet activated, the wp_locked_pointer object is now defunct and must be - * destroyed. - */ -extern const struct wl_interface zwp_locked_pointer_v1_interface; -#endif -#ifndef ZWP_CONFINED_POINTER_V1_INTERFACE -#define ZWP_CONFINED_POINTER_V1_INTERFACE -/** - * @page page_iface_zwp_confined_pointer_v1 zwp_confined_pointer_v1 - * @section page_iface_zwp_confined_pointer_v1_desc Description - * - * The wp_confined_pointer interface represents a confined pointer state. - * - * This object will send the event 'confined' when the confinement is - * activated. Whenever the confinement is activated, it is guaranteed that - * the surface the pointer is confined to will already have received pointer - * focus and that the pointer will be within the region passed to the request - * creating this object. It is up to the compositor to decide whether this - * requires some user interaction and if the pointer will warp to within the - * passed region if outside. - * - * To unconfine the pointer, send the destroy request. This will also destroy - * the wp_confined_pointer object. - * - * If the compositor decides to unconfine the pointer the unconfined event is - * sent. The wp_confined_pointer object is at this point defunct and should - * be destroyed. - * @section page_iface_zwp_confined_pointer_v1_api API - * See @ref iface_zwp_confined_pointer_v1. - */ -/** - * @defgroup iface_zwp_confined_pointer_v1 The zwp_confined_pointer_v1 interface - * - * The wp_confined_pointer interface represents a confined pointer state. - * - * This object will send the event 'confined' when the confinement is - * activated. Whenever the confinement is activated, it is guaranteed that - * the surface the pointer is confined to will already have received pointer - * focus and that the pointer will be within the region passed to the request - * creating this object. It is up to the compositor to decide whether this - * requires some user interaction and if the pointer will warp to within the - * passed region if outside. - * - * To unconfine the pointer, send the destroy request. This will also destroy - * the wp_confined_pointer object. - * - * If the compositor decides to unconfine the pointer the unconfined event is - * sent. The wp_confined_pointer object is at this point defunct and should - * be destroyed. - */ -extern const struct wl_interface zwp_confined_pointer_v1_interface; -#endif - -#ifndef ZWP_POINTER_CONSTRAINTS_V1_ERROR_ENUM -#define ZWP_POINTER_CONSTRAINTS_V1_ERROR_ENUM -/** - * @ingroup iface_zwp_pointer_constraints_v1 - * wp_pointer_constraints error values - * - * These errors can be emitted in response to wp_pointer_constraints - * requests. - */ -enum zwp_pointer_constraints_v1_error { - /** - * pointer constraint already requested on that surface - */ - ZWP_POINTER_CONSTRAINTS_V1_ERROR_ALREADY_CONSTRAINED = 1, -}; -#endif /* ZWP_POINTER_CONSTRAINTS_V1_ERROR_ENUM */ - -#ifndef ZWP_POINTER_CONSTRAINTS_V1_ERROR_ENUM_IS_VALID -#define ZWP_POINTER_CONSTRAINTS_V1_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_zwp_pointer_constraints_v1 - * Validate a zwp_pointer_constraints_v1 error value. - * - * @return true on success, false on error. - * @ref zwp_pointer_constraints_v1_error - */ -static inline bool -zwp_pointer_constraints_v1_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWP_POINTER_CONSTRAINTS_V1_ERROR_ALREADY_CONSTRAINED: - return version >= 1; - default: - return false; - } -} -#endif /* ZWP_POINTER_CONSTRAINTS_V1_ERROR_ENUM_IS_VALID */ - -#ifndef ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ENUM -#define ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ENUM -/** - * @ingroup iface_zwp_pointer_constraints_v1 - * constraint lifetime - * - * These values represent different lifetime semantics. They are passed - * as arguments to the factory requests to specify how the constraint - * lifetimes should be managed. - */ -enum zwp_pointer_constraints_v1_lifetime { - /** - * the pointer constraint is defunct once deactivated - * - * A oneshot pointer constraint will never reactivate once it has - * been deactivated. See the corresponding deactivation event - * (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) - * for details. - */ - ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT = 1, - /** - * the pointer constraint may reactivate - * - * A persistent pointer constraint may again reactivate once it - * has been deactivated. See the corresponding deactivation event - * (wp_locked_pointer.unlocked and wp_confined_pointer.unconfined) - * for details. - */ - ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT = 2, -}; -#endif /* ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ENUM */ - -#ifndef ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ENUM_IS_VALID -#define ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ENUM_IS_VALID -/** - * @ingroup iface_zwp_pointer_constraints_v1 - * Validate a zwp_pointer_constraints_v1 lifetime value. - * - * @return true on success, false on error. - * @ref zwp_pointer_constraints_v1_lifetime - */ -static inline bool -zwp_pointer_constraints_v1_lifetime_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ONESHOT: - return version >= 1; - case ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_PERSISTENT: - return version >= 1; - default: - return false; - } -} -#endif /* ZWP_POINTER_CONSTRAINTS_V1_LIFETIME_ENUM_IS_VALID */ - -/** - * @ingroup iface_zwp_pointer_constraints_v1 - * @struct zwp_pointer_constraints_v1_interface - */ -struct zwp_pointer_constraints_v1_interface { - /** - * destroy the pointer constraints manager object - * - * Used by the client to notify the server that it will no longer - * use this pointer constraints object. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * lock pointer to a position - * - * The lock_pointer request lets the client request to disable - * movements of the virtual pointer (i.e. the cursor), effectively - * locking the pointer to a position. This request may not take - * effect immediately; in the future, when the compositor deems - * implementation-specific constraints are satisfied, the pointer - * lock will be activated and the compositor sends a locked event. - * - * The protocol provides no guarantee that the constraints are ever - * satisfied, and does not require the compositor to send an error - * if the constraints cannot ever be satisfied. It is thus possible - * to request a lock that will never activate. - * - * There may not be another pointer constraint of any kind - * requested or active on the surface for any of the wl_pointer - * objects of the seat of the passed pointer when requesting a - * lock. If there is, an error will be raised. See general pointer - * lock documentation for more details. - * - * The intersection of the region passed with this request and the - * input region of the surface is used to determine where the - * pointer must be in order for the lock to activate. It is up to - * the compositor whether to warp the pointer or require some kind - * of user interaction for the lock to activate. If the region is - * null the surface input region is used. - * - * A surface may receive pointer focus without the lock being - * activated. - * - * The request creates a new object wp_locked_pointer which is used - * to interact with the lock as well as receive updates about its - * state. See the the description of wp_locked_pointer for further - * information. - * - * Note that while a pointer is locked, the wl_pointer objects of - * the corresponding seat will not emit any wl_pointer.motion - * events, but relative motion events will still be emitted via - * wp_relative_pointer objects of the same seat. wl_pointer.axis - * and wl_pointer.button events are unaffected. - * @param surface surface to lock pointer to - * @param pointer the pointer that should be locked - * @param region region of surface - * @param lifetime lock lifetime - */ - void (*lock_pointer)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *surface, - struct wl_resource *pointer, - struct wl_resource *region, - uint32_t lifetime); - /** - * confine pointer to a region - * - * The confine_pointer request lets the client request to confine - * the pointer cursor to a given region. This request may not take - * effect immediately; in the future, when the compositor deems - * implementation- specific constraints are satisfied, the pointer - * confinement will be activated and the compositor sends a - * confined event. - * - * The intersection of the region passed with this request and the - * input region of the surface is used to determine where the - * pointer must be in order for the confinement to activate. It is - * up to the compositor whether to warp the pointer or require some - * kind of user interaction for the confinement to activate. If the - * region is null the surface input region is used. - * - * The request will create a new object wp_confined_pointer which - * is used to interact with the confinement as well as receive - * updates about its state. See the the description of - * wp_confined_pointer for further information. - * @param surface surface to lock pointer to - * @param pointer the pointer that should be confined - * @param region region of surface - * @param lifetime confinement lifetime - */ - void (*confine_pointer)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *surface, - struct wl_resource *pointer, - struct wl_resource *region, - uint32_t lifetime); -}; - - -/** - * @ingroup iface_zwp_pointer_constraints_v1 - */ -#define ZWP_POINTER_CONSTRAINTS_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_pointer_constraints_v1 - */ -#define ZWP_POINTER_CONSTRAINTS_V1_LOCK_POINTER_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_pointer_constraints_v1 - */ -#define ZWP_POINTER_CONSTRAINTS_V1_CONFINE_POINTER_SINCE_VERSION 1 - -/** - * @ingroup iface_zwp_locked_pointer_v1 - * @struct zwp_locked_pointer_v1_interface - */ -struct zwp_locked_pointer_v1_interface { - /** - * destroy the locked pointer object - * - * Destroy the locked pointer object. If applicable, the - * compositor will unlock the pointer. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the pointer cursor position hint - * - * Set the cursor position hint relative to the top left corner - * of the surface. - * - * If the client is drawing its own cursor, it should update the - * position hint to the position of its own cursor. A compositor - * may use this information to warp the pointer upon unlock in - * order to avoid pointer jumps. - * - * The cursor position hint is double-buffered state, see - * wl_surface.commit. - * @param surface_x surface-local x coordinate - * @param surface_y surface-local y coordinate - */ - void (*set_cursor_position_hint)(struct wl_client *client, - struct wl_resource *resource, - wl_fixed_t surface_x, - wl_fixed_t surface_y); - /** - * set a new lock region - * - * Set a new region used to lock the pointer. - * - * The new lock region is double-buffered, see wl_surface.commit. - * - * For details about the lock region, see wp_locked_pointer. - * @param region region of surface - */ - void (*set_region)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *region); -}; - -#define ZWP_LOCKED_POINTER_V1_LOCKED 0 -#define ZWP_LOCKED_POINTER_V1_UNLOCKED 1 - -/** - * @ingroup iface_zwp_locked_pointer_v1 - */ -#define ZWP_LOCKED_POINTER_V1_LOCKED_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_locked_pointer_v1 - */ -#define ZWP_LOCKED_POINTER_V1_UNLOCKED_SINCE_VERSION 1 - -/** - * @ingroup iface_zwp_locked_pointer_v1 - */ -#define ZWP_LOCKED_POINTER_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_locked_pointer_v1 - */ -#define ZWP_LOCKED_POINTER_V1_SET_CURSOR_POSITION_HINT_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_locked_pointer_v1 - */ -#define ZWP_LOCKED_POINTER_V1_SET_REGION_SINCE_VERSION 1 - -/** - * @ingroup iface_zwp_locked_pointer_v1 - * Sends an locked event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwp_locked_pointer_v1_send_locked(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWP_LOCKED_POINTER_V1_LOCKED); -} - -/** - * @ingroup iface_zwp_locked_pointer_v1 - * Sends an unlocked event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwp_locked_pointer_v1_send_unlocked(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWP_LOCKED_POINTER_V1_UNLOCKED); -} - -/** - * @ingroup iface_zwp_confined_pointer_v1 - * @struct zwp_confined_pointer_v1_interface - */ -struct zwp_confined_pointer_v1_interface { - /** - * destroy the confined pointer object - * - * Destroy the confined pointer object. If applicable, the - * compositor will unconfine the pointer. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set a new confine region - * - * Set a new region used to confine the pointer. - * - * The new confine region is double-buffered, see - * wl_surface.commit. - * - * If the confinement is active when the new confinement region is - * applied and the pointer ends up outside of newly applied region, - * the pointer may warped to a position within the new confinement - * region. If warped, a wl_pointer.motion event will be emitted, - * but no wp_relative_pointer.relative_motion event. - * - * The compositor may also, instead of using the new region, - * unconfine the pointer. - * - * For details about the confine region, see wp_confined_pointer. - * @param region region of surface - */ - void (*set_region)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *region); -}; - -#define ZWP_CONFINED_POINTER_V1_CONFINED 0 -#define ZWP_CONFINED_POINTER_V1_UNCONFINED 1 - -/** - * @ingroup iface_zwp_confined_pointer_v1 - */ -#define ZWP_CONFINED_POINTER_V1_CONFINED_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_confined_pointer_v1 - */ -#define ZWP_CONFINED_POINTER_V1_UNCONFINED_SINCE_VERSION 1 - -/** - * @ingroup iface_zwp_confined_pointer_v1 - */ -#define ZWP_CONFINED_POINTER_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_zwp_confined_pointer_v1 - */ -#define ZWP_CONFINED_POINTER_V1_SET_REGION_SINCE_VERSION 1 - -/** - * @ingroup iface_zwp_confined_pointer_v1 - * Sends an confined event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwp_confined_pointer_v1_send_confined(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWP_CONFINED_POINTER_V1_CONFINED); -} - -/** - * @ingroup iface_zwp_confined_pointer_v1 - * Sends an unconfined event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwp_confined_pointer_v1_send_unconfined(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWP_CONFINED_POINTER_V1_UNCONFINED); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/protocols/wlr-layer-shell-unstable-v1-protocol.h b/protocols/wlr-layer-shell-unstable-v1-protocol.h deleted file mode 100644 index dd34d59..0000000 --- a/protocols/wlr-layer-shell-unstable-v1-protocol.h +++ /dev/null @@ -1,730 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef WLR_LAYER_SHELL_UNSTABLE_V1_SERVER_PROTOCOL_H -#define WLR_LAYER_SHELL_UNSTABLE_V1_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_wlr_layer_shell_unstable_v1 The wlr_layer_shell_unstable_v1 protocol - * @section page_ifaces_wlr_layer_shell_unstable_v1 Interfaces - * - @subpage page_iface_zwlr_layer_shell_v1 - create surfaces that are layers of the desktop - * - @subpage page_iface_zwlr_layer_surface_v1 - layer metadata interface - * @section page_copyright_wlr_layer_shell_unstable_v1 Copyright - *
- *
- * Copyright © 2017 Drew DeVault
- *
- * Permission to use, copy, modify, distribute, and sell this
- * software and its documentation for any purpose is hereby granted
- * without fee, provided that the above copyright notice appear in
- * all copies and that both that copyright notice and this permission
- * notice appear in supporting documentation, and that the name of
- * the copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- * 
- */ -struct wl_output; -struct wl_surface; -struct xdg_popup; -struct zwlr_layer_shell_v1; -struct zwlr_layer_surface_v1; - -#ifndef ZWLR_LAYER_SHELL_V1_INTERFACE -#define ZWLR_LAYER_SHELL_V1_INTERFACE -/** - * @page page_iface_zwlr_layer_shell_v1 zwlr_layer_shell_v1 - * @section page_iface_zwlr_layer_shell_v1_desc Description - * - * Clients can use this interface to assign the surface_layer role to - * wl_surfaces. Such surfaces are assigned to a "layer" of the output and - * rendered with a defined z-depth respective to each other. They may also be - * anchored to the edges and corners of a screen and specify input handling - * semantics. This interface should be suitable for the implementation of - * many desktop shell components, and a broad number of other applications - * that interact with the desktop. - * @section page_iface_zwlr_layer_shell_v1_api API - * See @ref iface_zwlr_layer_shell_v1. - */ -/** - * @defgroup iface_zwlr_layer_shell_v1 The zwlr_layer_shell_v1 interface - * - * Clients can use this interface to assign the surface_layer role to - * wl_surfaces. Such surfaces are assigned to a "layer" of the output and - * rendered with a defined z-depth respective to each other. They may also be - * anchored to the edges and corners of a screen and specify input handling - * semantics. This interface should be suitable for the implementation of - * many desktop shell components, and a broad number of other applications - * that interact with the desktop. - */ -extern const struct wl_interface zwlr_layer_shell_v1_interface; -#endif -#ifndef ZWLR_LAYER_SURFACE_V1_INTERFACE -#define ZWLR_LAYER_SURFACE_V1_INTERFACE -/** - * @page page_iface_zwlr_layer_surface_v1 zwlr_layer_surface_v1 - * @section page_iface_zwlr_layer_surface_v1_desc Description - * - * An interface that may be implemented by a wl_surface, for surfaces that - * are designed to be rendered as a layer of a stacked desktop-like - * environment. - * - * Layer surface state (layer, size, anchor, exclusive zone, - * margin, interactivity) is double-buffered, and will be applied at the - * time wl_surface.commit of the corresponding wl_surface is called. - * - * Attaching a null buffer to a layer surface unmaps it. - * - * Unmapping a layer_surface means that the surface cannot be shown by the - * compositor until it is explicitly mapped again. The layer_surface - * returns to the state it had right after layer_shell.get_layer_surface. - * The client can re-map the surface by performing a commit without any - * buffer attached, waiting for a configure event and handling it as usual. - * @section page_iface_zwlr_layer_surface_v1_api API - * See @ref iface_zwlr_layer_surface_v1. - */ -/** - * @defgroup iface_zwlr_layer_surface_v1 The zwlr_layer_surface_v1 interface - * - * An interface that may be implemented by a wl_surface, for surfaces that - * are designed to be rendered as a layer of a stacked desktop-like - * environment. - * - * Layer surface state (layer, size, anchor, exclusive zone, - * margin, interactivity) is double-buffered, and will be applied at the - * time wl_surface.commit of the corresponding wl_surface is called. - * - * Attaching a null buffer to a layer surface unmaps it. - * - * Unmapping a layer_surface means that the surface cannot be shown by the - * compositor until it is explicitly mapped again. The layer_surface - * returns to the state it had right after layer_shell.get_layer_surface. - * The client can re-map the surface by performing a commit without any - * buffer attached, waiting for a configure event and handling it as usual. - */ -extern const struct wl_interface zwlr_layer_surface_v1_interface; -#endif - -#ifndef ZWLR_LAYER_SHELL_V1_ERROR_ENUM -#define ZWLR_LAYER_SHELL_V1_ERROR_ENUM -enum zwlr_layer_shell_v1_error { - /** - * wl_surface has another role - */ - ZWLR_LAYER_SHELL_V1_ERROR_ROLE = 0, - /** - * layer value is invalid - */ - ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER = 1, - /** - * wl_surface has a buffer attached or committed - */ - ZWLR_LAYER_SHELL_V1_ERROR_ALREADY_CONSTRUCTED = 2, -}; -#endif /* ZWLR_LAYER_SHELL_V1_ERROR_ENUM */ - -#ifndef ZWLR_LAYER_SHELL_V1_ERROR_ENUM_IS_VALID -#define ZWLR_LAYER_SHELL_V1_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_layer_shell_v1 - * Validate a zwlr_layer_shell_v1 error value. - * - * @return true on success, false on error. - * @ref zwlr_layer_shell_v1_error - */ -static inline bool -zwlr_layer_shell_v1_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWLR_LAYER_SHELL_V1_ERROR_ROLE: - return version >= 1; - case ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER: - return version >= 1; - case ZWLR_LAYER_SHELL_V1_ERROR_ALREADY_CONSTRUCTED: - return version >= 1; - default: - return false; - } -} -#endif /* ZWLR_LAYER_SHELL_V1_ERROR_ENUM_IS_VALID */ - -#ifndef ZWLR_LAYER_SHELL_V1_LAYER_ENUM -#define ZWLR_LAYER_SHELL_V1_LAYER_ENUM -/** - * @ingroup iface_zwlr_layer_shell_v1 - * available layers for surfaces - * - * These values indicate which layers a surface can be rendered in. They - * are ordered by z depth, bottom-most first. Traditional shell surfaces - * will typically be rendered between the bottom and top layers. - * Fullscreen shell surfaces are typically rendered at the top layer. - * Multiple surfaces can share a single layer, and ordering within a - * single layer is undefined. - */ -enum zwlr_layer_shell_v1_layer { - ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND = 0, - ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM = 1, - ZWLR_LAYER_SHELL_V1_LAYER_TOP = 2, - ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY = 3, -}; -#endif /* ZWLR_LAYER_SHELL_V1_LAYER_ENUM */ - -#ifndef ZWLR_LAYER_SHELL_V1_LAYER_ENUM_IS_VALID -#define ZWLR_LAYER_SHELL_V1_LAYER_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_layer_shell_v1 - * Validate a zwlr_layer_shell_v1 layer value. - * - * @return true on success, false on error. - * @ref zwlr_layer_shell_v1_layer - */ -static inline bool -zwlr_layer_shell_v1_layer_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND: - return version >= 1; - case ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM: - return version >= 1; - case ZWLR_LAYER_SHELL_V1_LAYER_TOP: - return version >= 1; - case ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY: - return version >= 1; - default: - return false; - } -} -#endif /* ZWLR_LAYER_SHELL_V1_LAYER_ENUM_IS_VALID */ - -/** - * @ingroup iface_zwlr_layer_shell_v1 - * @struct zwlr_layer_shell_v1_interface - */ -struct zwlr_layer_shell_v1_interface { - /** - * create a layer_surface from a surface - * - * Create a layer surface for an existing surface. This assigns - * the role of layer_surface, or raises a protocol error if another - * role is already assigned. - * - * Creating a layer surface from a wl_surface which has a buffer - * attached or committed is a client error, and any attempts by a - * client to attach or manipulate a buffer prior to the first - * layer_surface.configure call must also be treated as errors. - * - * After creating a layer_surface object and setting it up, the - * client must perform an initial commit without any buffer - * attached. The compositor will reply with a - * layer_surface.configure event. The client must acknowledge it - * and is then allowed to attach a buffer to map the surface. - * - * You may pass NULL for output to allow the compositor to decide - * which output to use. Generally this will be the one that the - * user most recently interacted with. - * - * Clients can specify a namespace that defines the purpose of the - * layer surface. - * @param layer layer to add this surface to - * @param namespace namespace for the layer surface - */ - void (*get_layer_surface)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *surface, - struct wl_resource *output, - uint32_t layer, - const char *namespace); - /** - * destroy the layer_shell object - * - * This request indicates that the client will not use the - * layer_shell object any more. Objects that have been created - * through this instance are not affected. - * @since 3 - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); -}; - - -/** - * @ingroup iface_zwlr_layer_shell_v1 - */ -#define ZWLR_LAYER_SHELL_V1_GET_LAYER_SURFACE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_shell_v1 - */ -#define ZWLR_LAYER_SHELL_V1_DESTROY_SINCE_VERSION 3 - -#ifndef ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM -#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM -/** - * @ingroup iface_zwlr_layer_surface_v1 - * types of keyboard interaction possible for a layer shell surface - * - * Types of keyboard interaction possible for layer shell surfaces. The - * rationale for this is twofold: (1) some applications are not interested - * in keyboard events and not allowing them to be focused can improve the - * desktop experience; (2) some applications will want to take exclusive - * keyboard focus. - */ -enum zwlr_layer_surface_v1_keyboard_interactivity { - /** - * no keyboard focus is possible - * - * This value indicates that this surface is not interested in - * keyboard events and the compositor should never assign it the - * keyboard focus. - * - * This is the default value, set for newly created layer shell - * surfaces. - * - * This is useful for e.g. desktop widgets that display information - * or only have interaction with non-keyboard input devices. - */ - ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE = 0, - /** - * request exclusive keyboard focus - * - * Request exclusive keyboard focus if this surface is above the - * shell surface layer. - * - * For the top and overlay layers, the seat will always give - * exclusive keyboard focus to the top-most layer which has - * keyboard interactivity set to exclusive. If this layer contains - * multiple surfaces with keyboard interactivity set to exclusive, - * the compositor determines the one receiving keyboard events in - * an implementation- defined manner. In this case, no guarantee is - * made when this surface will receive keyboard focus (if ever). - * - * For the bottom and background layers, the compositor is allowed - * to use normal focus semantics. - * - * This setting is mainly intended for applications that need to - * ensure they receive all keyboard events, such as a lock screen - * or a password prompt. - */ - ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE = 1, - /** - * request regular keyboard focus semantics - * - * This requests the compositor to allow this surface to be - * focused and unfocused by the user in an implementation-defined - * manner. The user should be able to unfocus this surface even - * regardless of the layer it is on. - * - * Typically, the compositor will want to use its normal mechanism - * to manage keyboard focus between layer shell surfaces with this - * setting and regular toplevels on the desktop layer (e.g. click - * to focus). Nevertheless, it is possible for a compositor to - * require a special interaction to focus or unfocus layer shell - * surfaces (e.g. requiring a click even if focus follows the mouse - * normally, or providing a keybinding to switch focus between - * layers). - * - * This setting is mainly intended for desktop shell components - * (e.g. panels) that allow keyboard interaction. Using this option - * can allow implementing a desktop shell that can be fully usable - * without the mouse. - * @since 4 - */ - ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND = 2, -}; -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND_SINCE_VERSION 4 -#endif /* ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM */ - -#ifndef ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM_IS_VALID -#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Validate a zwlr_layer_surface_v1 keyboard_interactivity value. - * - * @return true on success, false on error. - * @ref zwlr_layer_surface_v1_keyboard_interactivity - */ -static inline bool -zwlr_layer_surface_v1_keyboard_interactivity_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE: - return version >= 1; - case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE: - return version >= 1; - case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND: - return version >= 4; - default: - return false; - } -} -#endif /* ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM_IS_VALID */ - -#ifndef ZWLR_LAYER_SURFACE_V1_ERROR_ENUM -#define ZWLR_LAYER_SURFACE_V1_ERROR_ENUM -enum zwlr_layer_surface_v1_error { - /** - * provided surface state is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE = 0, - /** - * size is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE = 1, - /** - * anchor bitfield is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR = 2, - /** - * keyboard interactivity is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY = 3, -}; -#endif /* ZWLR_LAYER_SURFACE_V1_ERROR_ENUM */ - -#ifndef ZWLR_LAYER_SURFACE_V1_ERROR_ENUM_IS_VALID -#define ZWLR_LAYER_SURFACE_V1_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Validate a zwlr_layer_surface_v1 error value. - * - * @return true on success, false on error. - * @ref zwlr_layer_surface_v1_error - */ -static inline bool -zwlr_layer_surface_v1_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE: - return version >= 1; - case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE: - return version >= 1; - case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR: - return version >= 1; - case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY: - return version >= 1; - default: - return false; - } -} -#endif /* ZWLR_LAYER_SURFACE_V1_ERROR_ENUM_IS_VALID */ - -#ifndef ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM -#define ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM -enum zwlr_layer_surface_v1_anchor { - /** - * the top edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP = 1, - /** - * the bottom edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM = 2, - /** - * the left edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT = 4, - /** - * the right edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT = 8, -}; -#endif /* ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM */ - -#ifndef ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM_IS_VALID -#define ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Validate a zwlr_layer_surface_v1 anchor value. - * - * @return true on success, false on error. - * @ref zwlr_layer_surface_v1_anchor - */ -static inline bool -zwlr_layer_surface_v1_anchor_is_valid(uint32_t value, uint32_t version) { - uint32_t valid = 0; - if (version >= 1) - valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP; - if (version >= 1) - valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM; - if (version >= 1) - valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT; - if (version >= 1) - valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; - return (value & ~valid) == 0; -} -#endif /* ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM_IS_VALID */ - -/** - * @ingroup iface_zwlr_layer_surface_v1 - * @struct zwlr_layer_surface_v1_interface - */ -struct zwlr_layer_surface_v1_interface { - /** - * sets the size of the surface - * - * Sets the size of the surface in surface-local coordinates. The - * compositor will display the surface centered with respect to its - * anchors. - * - * If you pass 0 for either value, the compositor will assign it - * and inform you of the assignment in the configure event. You - * must set your anchor to opposite edges in the dimensions you - * omit; not doing so is a protocol error. Both values are 0 by - * default. - * - * Size is double-buffered, see wl_surface.commit. - */ - void (*set_size)(struct wl_client *client, - struct wl_resource *resource, - uint32_t width, - uint32_t height); - /** - * configures the anchor point of the surface - * - * Requests that the compositor anchor the surface to the - * specified edges and corners. If two orthogonal edges are - * specified (e.g. 'top' and 'left'), then the anchor point will be - * the intersection of the edges (e.g. the top left corner of the - * output); otherwise the anchor point will be centered on that - * edge, or in the center if none is specified. - * - * Anchor is double-buffered, see wl_surface.commit. - */ - void (*set_anchor)(struct wl_client *client, - struct wl_resource *resource, - uint32_t anchor); - /** - * configures the exclusive geometry of this surface - * - * Requests that the compositor avoids occluding an area with - * other surfaces. The compositor's use of this information is - * implementation-dependent - do not assume that this region will - * not actually be occluded. - * - * A positive value is only meaningful if the surface is anchored - * to one edge or an edge and both perpendicular edges. If the - * surface is not anchored, anchored to only two perpendicular - * edges (a corner), anchored to only two parallel edges or - * anchored to all edges, a positive value will be treated the same - * as zero. - * - * A positive zone is the distance from the edge in surface-local - * coordinates to consider exclusive. - * - * Surfaces that do not wish to have an exclusive zone may instead - * specify how they should interact with surfaces that do. If set - * to zero, the surface indicates that it would like to be moved to - * avoid occluding surfaces with a positive exclusive zone. If set - * to -1, the surface indicates that it would not like to be moved - * to accommodate for other surfaces, and the compositor should - * extend it all the way to the edges it is anchored to. - * - * For example, a panel might set its exclusive zone to 10, so that - * maximized shell surfaces are not shown on top of it. A - * notification might set its exclusive zone to 0, so that it is - * moved to avoid occluding the panel, but shell surfaces are shown - * underneath it. A wallpaper or lock screen might set their - * exclusive zone to -1, so that they stretch below or over the - * panel. - * - * The default value is 0. - * - * Exclusive zone is double-buffered, see wl_surface.commit. - */ - void (*set_exclusive_zone)(struct wl_client *client, - struct wl_resource *resource, - int32_t zone); - /** - * sets a margin from the anchor point - * - * Requests that the surface be placed some distance away from - * the anchor point on the output, in surface-local coordinates. - * Setting this value for edges you are not anchored to has no - * effect. - * - * The exclusive zone includes the margin. - * - * Margin is double-buffered, see wl_surface.commit. - */ - void (*set_margin)(struct wl_client *client, - struct wl_resource *resource, - int32_t top, - int32_t right, - int32_t bottom, - int32_t left); - /** - * requests keyboard events - * - * Set how keyboard events are delivered to this surface. By - * default, layer shell surfaces do not receive keyboard events; - * this request can be used to change this. - * - * This setting is inherited by child surfaces set by the get_popup - * request. - * - * Layer surfaces receive pointer, touch, and tablet events - * normally. If you do not want to receive them, set the input - * region on your surface to an empty region. - * - * Keyboard interactivity is double-buffered, see - * wl_surface.commit. - */ - void (*set_keyboard_interactivity)(struct wl_client *client, - struct wl_resource *resource, - uint32_t keyboard_interactivity); - /** - * assign this layer_surface as an xdg_popup parent - * - * This assigns an xdg_popup's parent to this layer_surface. This - * popup should have been created via xdg_surface::get_popup with - * the parent set to NULL, and this request must be invoked before - * committing the popup's initial state. - * - * See the documentation of xdg_popup for more details about what - * an xdg_popup is and how it is used. - */ - void (*get_popup)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *popup); - /** - * ack a configure event - * - * When a configure event is received, if a client commits the - * surface in response to the configure event, then the client must - * make an ack_configure request sometime before the commit - * request, passing along the serial of the configure event. - * - * If the client receives multiple configure events before it can - * respond to one, it only has to ack the last configure event. - * - * A client is not required to commit immediately after sending an - * ack_configure request - it may even ack_configure several times - * before its next surface commit. - * - * A client may send multiple ack_configure requests before - * committing, but only the last request sent before a commit - * indicates which configure event the client really is responding - * to. - * @param serial the serial from the configure event - */ - void (*ack_configure)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); - /** - * destroy the layer_surface - * - * This request destroys the layer surface. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * change the layer of the surface - * - * Change the layer that the surface is rendered on. - * - * Layer is double-buffered, see wl_surface.commit. - * @param layer layer to move this surface to - * @since 2 - */ - void (*set_layer)(struct wl_client *client, - struct wl_resource *resource, - uint32_t layer); -}; - -#define ZWLR_LAYER_SURFACE_V1_CONFIGURE 0 -#define ZWLR_LAYER_SURFACE_V1_CLOSED 1 - -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_CLOSED_SINCE_VERSION 1 - -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_ANCHOR_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_ZONE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_MARGIN_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_KEYBOARD_INTERACTIVITY_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_GET_POPUP_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_ACK_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_LAYER_SINCE_VERSION 2 - -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwlr_layer_surface_v1_send_configure(struct wl_resource *resource_, uint32_t serial, uint32_t width, uint32_t height) -{ - wl_resource_post_event(resource_, ZWLR_LAYER_SURFACE_V1_CONFIGURE, serial, width, height); -} - -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Sends an closed event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwlr_layer_surface_v1_send_closed(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWLR_LAYER_SURFACE_V1_CLOSED); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/protocols/wlr-output-power-management-unstable-v1-protocol.h b/protocols/wlr-output-power-management-unstable-v1-protocol.h deleted file mode 100644 index 93d6a58..0000000 --- a/protocols/wlr-output-power-management-unstable-v1-protocol.h +++ /dev/null @@ -1,285 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef WLR_OUTPUT_POWER_MANAGEMENT_UNSTABLE_V1_SERVER_PROTOCOL_H -#define WLR_OUTPUT_POWER_MANAGEMENT_UNSTABLE_V1_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_wlr_output_power_management_unstable_v1 The wlr_output_power_management_unstable_v1 protocol - * Control power management modes of outputs - * - * @section page_desc_wlr_output_power_management_unstable_v1 Description - * - * This protocol allows clients to control power management modes - * of outputs that are currently part of the compositor space. The - * intent is to allow special clients like desktop shells to power - * down outputs when the system is idle. - * - * To modify outputs not currently part of the compositor space see - * wlr-output-management. - * - * Warning! The protocol described in this file is experimental and - * backward incompatible changes may be made. Backward compatible changes - * may be added together with the corresponding interface version bump. - * Backward incompatible changes are done by bumping the version number in - * the protocol and interface names and resetting the interface version. - * Once the protocol is to be declared stable, the 'z' prefix and the - * version number in the protocol and interface names are removed and the - * interface version number is reset. - * - * @section page_ifaces_wlr_output_power_management_unstable_v1 Interfaces - * - @subpage page_iface_zwlr_output_power_manager_v1 - manager to create per-output power management - * - @subpage page_iface_zwlr_output_power_v1 - adjust power management mode for an output - * @section page_copyright_wlr_output_power_management_unstable_v1 Copyright - *
- *
- * Copyright © 2019 Purism SPC
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_output; -struct zwlr_output_power_manager_v1; -struct zwlr_output_power_v1; - -#ifndef ZWLR_OUTPUT_POWER_MANAGER_V1_INTERFACE -#define ZWLR_OUTPUT_POWER_MANAGER_V1_INTERFACE -/** - * @page page_iface_zwlr_output_power_manager_v1 zwlr_output_power_manager_v1 - * @section page_iface_zwlr_output_power_manager_v1_desc Description - * - * This interface is a manager that allows creating per-output power - * management mode controls. - * @section page_iface_zwlr_output_power_manager_v1_api API - * See @ref iface_zwlr_output_power_manager_v1. - */ -/** - * @defgroup iface_zwlr_output_power_manager_v1 The zwlr_output_power_manager_v1 interface - * - * This interface is a manager that allows creating per-output power - * management mode controls. - */ -extern const struct wl_interface zwlr_output_power_manager_v1_interface; -#endif -#ifndef ZWLR_OUTPUT_POWER_V1_INTERFACE -#define ZWLR_OUTPUT_POWER_V1_INTERFACE -/** - * @page page_iface_zwlr_output_power_v1 zwlr_output_power_v1 - * @section page_iface_zwlr_output_power_v1_desc Description - * - * This object offers requests to set the power management mode of - * an output. - * @section page_iface_zwlr_output_power_v1_api API - * See @ref iface_zwlr_output_power_v1. - */ -/** - * @defgroup iface_zwlr_output_power_v1 The zwlr_output_power_v1 interface - * - * This object offers requests to set the power management mode of - * an output. - */ -extern const struct wl_interface zwlr_output_power_v1_interface; -#endif - -/** - * @ingroup iface_zwlr_output_power_manager_v1 - * @struct zwlr_output_power_manager_v1_interface - */ -struct zwlr_output_power_manager_v1_interface { - /** - * get a power management for an output - * - * Create a output power management mode control that can be used - * to adjust the power management mode for a given output. - */ - void (*get_output_power)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *output); - /** - * destroy the manager - * - * All objects created by the manager will still remain valid, - * until their appropriate destroy request has been called. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); -}; - - -/** - * @ingroup iface_zwlr_output_power_manager_v1 - */ -#define ZWLR_OUTPUT_POWER_MANAGER_V1_GET_OUTPUT_POWER_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_output_power_manager_v1 - */ -#define ZWLR_OUTPUT_POWER_MANAGER_V1_DESTROY_SINCE_VERSION 1 - -#ifndef ZWLR_OUTPUT_POWER_V1_MODE_ENUM -#define ZWLR_OUTPUT_POWER_V1_MODE_ENUM -enum zwlr_output_power_v1_mode { - /** - * Output is turned off. - */ - ZWLR_OUTPUT_POWER_V1_MODE_OFF = 0, - /** - * Output is turned on, no power saving - */ - ZWLR_OUTPUT_POWER_V1_MODE_ON = 1, -}; -#endif /* ZWLR_OUTPUT_POWER_V1_MODE_ENUM */ - -#ifndef ZWLR_OUTPUT_POWER_V1_MODE_ENUM_IS_VALID -#define ZWLR_OUTPUT_POWER_V1_MODE_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_output_power_v1 - * Validate a zwlr_output_power_v1 mode value. - * - * @return true on success, false on error. - * @ref zwlr_output_power_v1_mode - */ -static inline bool -zwlr_output_power_v1_mode_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWLR_OUTPUT_POWER_V1_MODE_OFF: - return version >= 1; - case ZWLR_OUTPUT_POWER_V1_MODE_ON: - return version >= 1; - default: - return false; - } -} -#endif /* ZWLR_OUTPUT_POWER_V1_MODE_ENUM_IS_VALID */ - -#ifndef ZWLR_OUTPUT_POWER_V1_ERROR_ENUM -#define ZWLR_OUTPUT_POWER_V1_ERROR_ENUM -enum zwlr_output_power_v1_error { - /** - * inexistent power save mode - */ - ZWLR_OUTPUT_POWER_V1_ERROR_INVALID_MODE = 1, -}; -#endif /* ZWLR_OUTPUT_POWER_V1_ERROR_ENUM */ - -#ifndef ZWLR_OUTPUT_POWER_V1_ERROR_ENUM_IS_VALID -#define ZWLR_OUTPUT_POWER_V1_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_zwlr_output_power_v1 - * Validate a zwlr_output_power_v1 error value. - * - * @return true on success, false on error. - * @ref zwlr_output_power_v1_error - */ -static inline bool -zwlr_output_power_v1_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case ZWLR_OUTPUT_POWER_V1_ERROR_INVALID_MODE: - return version >= 1; - default: - return false; - } -} -#endif /* ZWLR_OUTPUT_POWER_V1_ERROR_ENUM_IS_VALID */ - -/** - * @ingroup iface_zwlr_output_power_v1 - * @struct zwlr_output_power_v1_interface - */ -struct zwlr_output_power_v1_interface { - /** - * Set an outputs power save mode - * - * Set an output's power save mode to the given mode. The mode - * change is effective immediately. If the output does not support - * the given mode a failed event is sent. - * @param mode the power save mode to set - */ - void (*set_mode)(struct wl_client *client, - struct wl_resource *resource, - uint32_t mode); - /** - * destroy this power management - * - * Destroys the output power management mode control object. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); -}; - -#define ZWLR_OUTPUT_POWER_V1_MODE 0 -#define ZWLR_OUTPUT_POWER_V1_FAILED 1 - -/** - * @ingroup iface_zwlr_output_power_v1 - */ -#define ZWLR_OUTPUT_POWER_V1_MODE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_output_power_v1 - */ -#define ZWLR_OUTPUT_POWER_V1_FAILED_SINCE_VERSION 1 - -/** - * @ingroup iface_zwlr_output_power_v1 - */ -#define ZWLR_OUTPUT_POWER_V1_SET_MODE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_output_power_v1 - */ -#define ZWLR_OUTPUT_POWER_V1_DESTROY_SINCE_VERSION 1 - -/** - * @ingroup iface_zwlr_output_power_v1 - * Sends an mode event to the client owning the resource. - * @param resource_ The client's resource - * @param mode the output's new power management mode - */ -static inline void -zwlr_output_power_v1_send_mode(struct wl_resource *resource_, uint32_t mode) -{ - wl_resource_post_event(resource_, ZWLR_OUTPUT_POWER_V1_MODE, mode); -} - -/** - * @ingroup iface_zwlr_output_power_v1 - * Sends an failed event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwlr_output_power_v1_send_failed(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWLR_OUTPUT_POWER_V1_FAILED); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/protocols/xdg-shell-protocol.h b/protocols/xdg-shell-protocol.h deleted file mode 100644 index 1ce3039..0000000 --- a/protocols/xdg-shell-protocol.h +++ /dev/null @@ -1,2392 +0,0 @@ -/* Generated by wayland-scanner 1.25.0 */ - -#ifndef XDG_SHELL_SERVER_PROTOCOL_H -#define XDG_SHELL_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_xdg_shell The xdg_shell protocol - * @section page_ifaces_xdg_shell Interfaces - * - @subpage page_iface_xdg_wm_base - create desktop-style surfaces - * - @subpage page_iface_xdg_positioner - child surface positioner - * - @subpage page_iface_xdg_surface - desktop user interface surface base interface - * - @subpage page_iface_xdg_toplevel - toplevel surface - * - @subpage page_iface_xdg_popup - short-lived, popup surfaces for menus - * @section page_copyright_xdg_shell Copyright - *
- *
- * Copyright © 2008-2013 Kristian Høgsberg
- * Copyright © 2013      Rafael Antognolli
- * Copyright © 2013      Jasper St. Pierre
- * Copyright © 2010-2013 Intel Corporation
- * Copyright © 2015-2017 Samsung Electronics Co., Ltd
- * Copyright © 2015-2017 Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_output; -struct wl_seat; -struct wl_surface; -struct xdg_popup; -struct xdg_positioner; -struct xdg_surface; -struct xdg_toplevel; -struct xdg_wm_base; - -#ifndef XDG_WM_BASE_INTERFACE -#define XDG_WM_BASE_INTERFACE -/** - * @page page_iface_xdg_wm_base xdg_wm_base - * @section page_iface_xdg_wm_base_desc Description - * - * The xdg_wm_base interface is exposed as a global object enabling clients - * to turn their wl_surfaces into windows in a desktop environment. It - * defines the basic functionality needed for clients and the compositor to - * create windows that can be dragged, resized, maximized, etc, as well as - * creating transient windows such as popup menus. - * @section page_iface_xdg_wm_base_api API - * See @ref iface_xdg_wm_base. - */ -/** - * @defgroup iface_xdg_wm_base The xdg_wm_base interface - * - * The xdg_wm_base interface is exposed as a global object enabling clients - * to turn their wl_surfaces into windows in a desktop environment. It - * defines the basic functionality needed for clients and the compositor to - * create windows that can be dragged, resized, maximized, etc, as well as - * creating transient windows such as popup menus. - */ -extern const struct wl_interface xdg_wm_base_interface; -#endif -#ifndef XDG_POSITIONER_INTERFACE -#define XDG_POSITIONER_INTERFACE -/** - * @page page_iface_xdg_positioner xdg_positioner - * @section page_iface_xdg_positioner_desc Description - * - * The xdg_positioner provides a collection of rules for the placement of a - * child surface relative to a parent surface. Rules can be defined to ensure - * the child surface remains within the visible area's borders, and to - * specify how the child surface changes its position, such as sliding along - * an axis, or flipping around a rectangle. These positioner-created rules are - * constrained by the requirement that a child surface must intersect with or - * be at least partially adjacent to its parent surface. - * - * See the various requests for details about possible rules. - * - * At the time of the request, the compositor makes a copy of the rules - * specified by the xdg_positioner. Thus, after the request is complete the - * xdg_positioner object can be destroyed or reused; further changes to the - * object will have no effect on previous usages. - * - * For an xdg_positioner object to be considered complete, it must have a - * non-zero size set by set_size, and a non-zero anchor rectangle set by - * set_anchor_rect. Passing an incomplete xdg_positioner object when - * positioning a surface raises an invalid_positioner error. - * @section page_iface_xdg_positioner_api API - * See @ref iface_xdg_positioner. - */ -/** - * @defgroup iface_xdg_positioner The xdg_positioner interface - * - * The xdg_positioner provides a collection of rules for the placement of a - * child surface relative to a parent surface. Rules can be defined to ensure - * the child surface remains within the visible area's borders, and to - * specify how the child surface changes its position, such as sliding along - * an axis, or flipping around a rectangle. These positioner-created rules are - * constrained by the requirement that a child surface must intersect with or - * be at least partially adjacent to its parent surface. - * - * See the various requests for details about possible rules. - * - * At the time of the request, the compositor makes a copy of the rules - * specified by the xdg_positioner. Thus, after the request is complete the - * xdg_positioner object can be destroyed or reused; further changes to the - * object will have no effect on previous usages. - * - * For an xdg_positioner object to be considered complete, it must have a - * non-zero size set by set_size, and a non-zero anchor rectangle set by - * set_anchor_rect. Passing an incomplete xdg_positioner object when - * positioning a surface raises an invalid_positioner error. - */ -extern const struct wl_interface xdg_positioner_interface; -#endif -#ifndef XDG_SURFACE_INTERFACE -#define XDG_SURFACE_INTERFACE -/** - * @page page_iface_xdg_surface xdg_surface - * @section page_iface_xdg_surface_desc Description - * - * An interface that may be implemented by a wl_surface, for - * implementations that provide a desktop-style user interface. - * - * It provides a base set of functionality required to construct user - * interface elements requiring management by the compositor, such as - * toplevel windows, menus, etc. The types of functionality are split into - * xdg_surface roles. - * - * Creating an xdg_surface does not set the role for a wl_surface. In order - * to map an xdg_surface, the client must create a role-specific object - * using, e.g., get_toplevel, get_popup. The wl_surface for any given - * xdg_surface can have at most one role, and may not be assigned any role - * not based on xdg_surface. - * - * A role must be assigned before any other requests are made to the - * xdg_surface object. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_surface state to take effect. - * - * Creating an xdg_surface from a wl_surface which has a buffer attached or - * committed is a client error, and any attempts by a client to attach or - * manipulate a buffer prior to the first xdg_surface.configure call must - * also be treated as errors. - * - * After creating a role-specific object and setting it up (e.g. by sending - * the title, app ID, size constraints, parent, etc), the client must - * perform an initial commit without any buffer attached. The compositor - * will reply with initial wl_surface state such as - * wl_surface.preferred_buffer_scale followed by an xdg_surface.configure - * event. The client must acknowledge it and is then allowed to attach a - * buffer to map the surface. - * - * Mapping an xdg_surface-based role surface is defined as making it - * possible for the surface to be shown by the compositor. Note that - * a mapped surface is not guaranteed to be visible once it is mapped. - * - * For an xdg_surface to be mapped by the compositor, the following - * conditions must be met: - * (1) the client has assigned an xdg_surface-based role to the surface - * (2) the client has set and committed the xdg_surface state and the - * role-dependent state to the surface - * (3) the client has committed a buffer to the surface - * - * A newly-unmapped surface is considered to have met condition (1) out - * of the 3 required conditions for mapping a surface if its role surface - * has not been destroyed, i.e. the client must perform the initial commit - * again before attaching a buffer. - * @section page_iface_xdg_surface_api API - * See @ref iface_xdg_surface. - */ -/** - * @defgroup iface_xdg_surface The xdg_surface interface - * - * An interface that may be implemented by a wl_surface, for - * implementations that provide a desktop-style user interface. - * - * It provides a base set of functionality required to construct user - * interface elements requiring management by the compositor, such as - * toplevel windows, menus, etc. The types of functionality are split into - * xdg_surface roles. - * - * Creating an xdg_surface does not set the role for a wl_surface. In order - * to map an xdg_surface, the client must create a role-specific object - * using, e.g., get_toplevel, get_popup. The wl_surface for any given - * xdg_surface can have at most one role, and may not be assigned any role - * not based on xdg_surface. - * - * A role must be assigned before any other requests are made to the - * xdg_surface object. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_surface state to take effect. - * - * Creating an xdg_surface from a wl_surface which has a buffer attached or - * committed is a client error, and any attempts by a client to attach or - * manipulate a buffer prior to the first xdg_surface.configure call must - * also be treated as errors. - * - * After creating a role-specific object and setting it up (e.g. by sending - * the title, app ID, size constraints, parent, etc), the client must - * perform an initial commit without any buffer attached. The compositor - * will reply with initial wl_surface state such as - * wl_surface.preferred_buffer_scale followed by an xdg_surface.configure - * event. The client must acknowledge it and is then allowed to attach a - * buffer to map the surface. - * - * Mapping an xdg_surface-based role surface is defined as making it - * possible for the surface to be shown by the compositor. Note that - * a mapped surface is not guaranteed to be visible once it is mapped. - * - * For an xdg_surface to be mapped by the compositor, the following - * conditions must be met: - * (1) the client has assigned an xdg_surface-based role to the surface - * (2) the client has set and committed the xdg_surface state and the - * role-dependent state to the surface - * (3) the client has committed a buffer to the surface - * - * A newly-unmapped surface is considered to have met condition (1) out - * of the 3 required conditions for mapping a surface if its role surface - * has not been destroyed, i.e. the client must perform the initial commit - * again before attaching a buffer. - */ -extern const struct wl_interface xdg_surface_interface; -#endif -#ifndef XDG_TOPLEVEL_INTERFACE -#define XDG_TOPLEVEL_INTERFACE -/** - * @page page_iface_xdg_toplevel xdg_toplevel - * @section page_iface_xdg_toplevel_desc Description - * - * This interface defines an xdg_surface role which allows a surface to, - * among other things, set window-like properties such as maximize, - * fullscreen, and minimize, set application-specific metadata like title and - * id, and well as trigger user interactive operations such as interactive - * resize and move. - * - * An xdg_toplevel by default is responsible for providing the full intended - * visual representation of the toplevel, which depending on the window - * state, may mean things like a title bar, window controls and drop shadow. - * - * Unmapping an xdg_toplevel means that the surface cannot be shown - * by the compositor until it is explicitly mapped again. - * All active operations (e.g., move, resize) are canceled and all - * attributes (e.g. title, state, stacking, ...) are discarded for - * an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to - * the state it had right after xdg_surface.get_toplevel. The client - * can re-map the toplevel by performing a commit without any buffer - * attached, waiting for a configure event and handling it as usual (see - * xdg_surface description). - * - * Attaching a null buffer to a toplevel unmaps the surface. - * @section page_iface_xdg_toplevel_api API - * See @ref iface_xdg_toplevel. - */ -/** - * @defgroup iface_xdg_toplevel The xdg_toplevel interface - * - * This interface defines an xdg_surface role which allows a surface to, - * among other things, set window-like properties such as maximize, - * fullscreen, and minimize, set application-specific metadata like title and - * id, and well as trigger user interactive operations such as interactive - * resize and move. - * - * An xdg_toplevel by default is responsible for providing the full intended - * visual representation of the toplevel, which depending on the window - * state, may mean things like a title bar, window controls and drop shadow. - * - * Unmapping an xdg_toplevel means that the surface cannot be shown - * by the compositor until it is explicitly mapped again. - * All active operations (e.g., move, resize) are canceled and all - * attributes (e.g. title, state, stacking, ...) are discarded for - * an xdg_toplevel surface when it is unmapped. The xdg_toplevel returns to - * the state it had right after xdg_surface.get_toplevel. The client - * can re-map the toplevel by performing a commit without any buffer - * attached, waiting for a configure event and handling it as usual (see - * xdg_surface description). - * - * Attaching a null buffer to a toplevel unmaps the surface. - */ -extern const struct wl_interface xdg_toplevel_interface; -#endif -#ifndef XDG_POPUP_INTERFACE -#define XDG_POPUP_INTERFACE -/** - * @page page_iface_xdg_popup xdg_popup - * @section page_iface_xdg_popup_desc Description - * - * A popup surface is a short-lived, temporary surface. It can be used to - * implement for example menus, popovers, tooltips and other similar user - * interface concepts. - * - * A popup can be made to take an explicit grab. See xdg_popup.grab for - * details. - * - * When the popup is dismissed, a popup_done event will be sent out, and at - * the same time the surface will be unmapped. See the xdg_popup.popup_done - * event for details. - * - * Explicitly destroying the xdg_popup object will also dismiss the popup and - * unmap the surface. Clients that want to dismiss the popup when another - * surface of their own is clicked should dismiss the popup using the destroy - * request. - * - * A newly created xdg_popup will be stacked on top of all previously created - * xdg_popup surfaces associated with the same xdg_toplevel. - * - * The parent of an xdg_popup must be mapped (see the xdg_surface - * description) before the xdg_popup itself. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_popup state to take effect. - * @section page_iface_xdg_popup_api API - * See @ref iface_xdg_popup. - */ -/** - * @defgroup iface_xdg_popup The xdg_popup interface - * - * A popup surface is a short-lived, temporary surface. It can be used to - * implement for example menus, popovers, tooltips and other similar user - * interface concepts. - * - * A popup can be made to take an explicit grab. See xdg_popup.grab for - * details. - * - * When the popup is dismissed, a popup_done event will be sent out, and at - * the same time the surface will be unmapped. See the xdg_popup.popup_done - * event for details. - * - * Explicitly destroying the xdg_popup object will also dismiss the popup and - * unmap the surface. Clients that want to dismiss the popup when another - * surface of their own is clicked should dismiss the popup using the destroy - * request. - * - * A newly created xdg_popup will be stacked on top of all previously created - * xdg_popup surfaces associated with the same xdg_toplevel. - * - * The parent of an xdg_popup must be mapped (see the xdg_surface - * description) before the xdg_popup itself. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_popup state to take effect. - */ -extern const struct wl_interface xdg_popup_interface; -#endif - -#ifndef XDG_WM_BASE_ERROR_ENUM -#define XDG_WM_BASE_ERROR_ENUM -enum xdg_wm_base_error { - /** - * given wl_surface has another role - */ - XDG_WM_BASE_ERROR_ROLE = 0, - /** - * xdg_wm_base was destroyed before children - */ - XDG_WM_BASE_ERROR_DEFUNCT_SURFACES = 1, - /** - * the client tried to map or destroy a non-topmost popup - */ - XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP = 2, - /** - * the client specified an invalid popup parent surface - */ - XDG_WM_BASE_ERROR_INVALID_POPUP_PARENT = 3, - /** - * the client provided an invalid surface state - */ - XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE = 4, - /** - * the client provided an invalid positioner - */ - XDG_WM_BASE_ERROR_INVALID_POSITIONER = 5, - /** - * the client didn’t respond to a ping event in time - */ - XDG_WM_BASE_ERROR_UNRESPONSIVE = 6, -}; -#endif /* XDG_WM_BASE_ERROR_ENUM */ - -#ifndef XDG_WM_BASE_ERROR_ENUM_IS_VALID -#define XDG_WM_BASE_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_xdg_wm_base - * Validate a xdg_wm_base error value. - * - * @return true on success, false on error. - * @ref xdg_wm_base_error - */ -static inline bool -xdg_wm_base_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_WM_BASE_ERROR_ROLE: - return version >= 1; - case XDG_WM_BASE_ERROR_DEFUNCT_SURFACES: - return version >= 1; - case XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP: - return version >= 1; - case XDG_WM_BASE_ERROR_INVALID_POPUP_PARENT: - return version >= 1; - case XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE: - return version >= 1; - case XDG_WM_BASE_ERROR_INVALID_POSITIONER: - return version >= 1; - case XDG_WM_BASE_ERROR_UNRESPONSIVE: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_WM_BASE_ERROR_ENUM_IS_VALID */ - -/** - * @ingroup iface_xdg_wm_base - * @struct xdg_wm_base_interface - */ -struct xdg_wm_base_interface { - /** - * destroy xdg_wm_base - * - * Destroy this xdg_wm_base object. - * - * Destroying a bound xdg_wm_base object while there are surfaces - * still alive created by this xdg_wm_base object instance is - * illegal and will result in a defunct_surfaces error. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * create a positioner object - * - * Create a positioner object. A positioner object is used to - * position surfaces relative to some parent surface. See the - * interface description and xdg_surface.get_popup for details. - */ - void (*create_positioner)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id); - /** - * create a shell surface from a surface - * - * This creates an xdg_surface for the given surface. An - * xdg_surface is used as basis to define a role to a given - * surface, such as xdg_toplevel or xdg_popup. It also manages - * functionality shared between xdg_surface based surface roles. - * - * While xdg_surface itself is not a role, the corresponding - * surface may only be assigned a role extending xdg_surface, such - * as xdg_toplevel or xdg_popup. It is illegal to create an - * xdg_surface for a wl_surface which already has anassigned role - * and this will result in a role error. - * - * See the documentation of xdg_surface for more details about what - * an xdg_surface is and how it is used. - */ - void (*get_xdg_surface)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *surface); - /** - * respond to a ping event - * - * A client must respond to a ping event with a pong request or - * the client may be deemed unresponsive. See xdg_wm_base.ping and - * xdg_wm_base.error.unresponsive. - * @param serial serial of the ping event - */ - void (*pong)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); -}; - -#define XDG_WM_BASE_PING 0 - -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_PING_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_CREATE_POSITIONER_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_GET_XDG_SURFACE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_PONG_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_wm_base - * Sends an ping event to the client owning the resource. - * @param resource_ The client's resource - * @param serial pass this to the pong request - */ -static inline void -xdg_wm_base_send_ping(struct wl_resource *resource_, uint32_t serial) -{ - wl_resource_post_event(resource_, XDG_WM_BASE_PING, serial); -} - -#ifndef XDG_POSITIONER_ERROR_ENUM -#define XDG_POSITIONER_ERROR_ENUM -enum xdg_positioner_error { - /** - * invalid input provided - */ - XDG_POSITIONER_ERROR_INVALID_INPUT = 0, -}; -#endif /* XDG_POSITIONER_ERROR_ENUM */ - -#ifndef XDG_POSITIONER_ERROR_ENUM_IS_VALID -#define XDG_POSITIONER_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_xdg_positioner - * Validate a xdg_positioner error value. - * - * @return true on success, false on error. - * @ref xdg_positioner_error - */ -static inline bool -xdg_positioner_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_POSITIONER_ERROR_INVALID_INPUT: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_POSITIONER_ERROR_ENUM_IS_VALID */ - -#ifndef XDG_POSITIONER_ANCHOR_ENUM -#define XDG_POSITIONER_ANCHOR_ENUM -enum xdg_positioner_anchor { - XDG_POSITIONER_ANCHOR_NONE = 0, - XDG_POSITIONER_ANCHOR_TOP = 1, - XDG_POSITIONER_ANCHOR_BOTTOM = 2, - XDG_POSITIONER_ANCHOR_LEFT = 3, - XDG_POSITIONER_ANCHOR_RIGHT = 4, - XDG_POSITIONER_ANCHOR_TOP_LEFT = 5, - XDG_POSITIONER_ANCHOR_BOTTOM_LEFT = 6, - XDG_POSITIONER_ANCHOR_TOP_RIGHT = 7, - XDG_POSITIONER_ANCHOR_BOTTOM_RIGHT = 8, -}; -#endif /* XDG_POSITIONER_ANCHOR_ENUM */ - -#ifndef XDG_POSITIONER_ANCHOR_ENUM_IS_VALID -#define XDG_POSITIONER_ANCHOR_ENUM_IS_VALID -/** - * @ingroup iface_xdg_positioner - * Validate a xdg_positioner anchor value. - * - * @return true on success, false on error. - * @ref xdg_positioner_anchor - */ -static inline bool -xdg_positioner_anchor_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_POSITIONER_ANCHOR_NONE: - return version >= 1; - case XDG_POSITIONER_ANCHOR_TOP: - return version >= 1; - case XDG_POSITIONER_ANCHOR_BOTTOM: - return version >= 1; - case XDG_POSITIONER_ANCHOR_LEFT: - return version >= 1; - case XDG_POSITIONER_ANCHOR_RIGHT: - return version >= 1; - case XDG_POSITIONER_ANCHOR_TOP_LEFT: - return version >= 1; - case XDG_POSITIONER_ANCHOR_BOTTOM_LEFT: - return version >= 1; - case XDG_POSITIONER_ANCHOR_TOP_RIGHT: - return version >= 1; - case XDG_POSITIONER_ANCHOR_BOTTOM_RIGHT: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_POSITIONER_ANCHOR_ENUM_IS_VALID */ - -#ifndef XDG_POSITIONER_GRAVITY_ENUM -#define XDG_POSITIONER_GRAVITY_ENUM -enum xdg_positioner_gravity { - XDG_POSITIONER_GRAVITY_NONE = 0, - XDG_POSITIONER_GRAVITY_TOP = 1, - XDG_POSITIONER_GRAVITY_BOTTOM = 2, - XDG_POSITIONER_GRAVITY_LEFT = 3, - XDG_POSITIONER_GRAVITY_RIGHT = 4, - XDG_POSITIONER_GRAVITY_TOP_LEFT = 5, - XDG_POSITIONER_GRAVITY_BOTTOM_LEFT = 6, - XDG_POSITIONER_GRAVITY_TOP_RIGHT = 7, - XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT = 8, -}; -#endif /* XDG_POSITIONER_GRAVITY_ENUM */ - -#ifndef XDG_POSITIONER_GRAVITY_ENUM_IS_VALID -#define XDG_POSITIONER_GRAVITY_ENUM_IS_VALID -/** - * @ingroup iface_xdg_positioner - * Validate a xdg_positioner gravity value. - * - * @return true on success, false on error. - * @ref xdg_positioner_gravity - */ -static inline bool -xdg_positioner_gravity_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_POSITIONER_GRAVITY_NONE: - return version >= 1; - case XDG_POSITIONER_GRAVITY_TOP: - return version >= 1; - case XDG_POSITIONER_GRAVITY_BOTTOM: - return version >= 1; - case XDG_POSITIONER_GRAVITY_LEFT: - return version >= 1; - case XDG_POSITIONER_GRAVITY_RIGHT: - return version >= 1; - case XDG_POSITIONER_GRAVITY_TOP_LEFT: - return version >= 1; - case XDG_POSITIONER_GRAVITY_BOTTOM_LEFT: - return version >= 1; - case XDG_POSITIONER_GRAVITY_TOP_RIGHT: - return version >= 1; - case XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_POSITIONER_GRAVITY_ENUM_IS_VALID */ - -#ifndef XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM -#define XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM -/** - * @ingroup iface_xdg_positioner - * constraint adjustments - * - * The constraint adjustment value define ways the compositor will adjust - * the position of the surface, if the unadjusted position would result - * in the surface being partly constrained. - * - * Whether a surface is considered 'constrained' is left to the compositor - * to determine. For example, the surface may be partly outside the - * compositor's defined 'work area', thus necessitating the child surface's - * position be adjusted until it is entirely inside the work area. - * - * The adjustments can be combined, according to a defined precedence: 1) - * Flip, 2) Slide, 3) Resize. - */ -enum xdg_positioner_constraint_adjustment { - /** - * don't move the child surface when constrained - * - * Don't alter the surface position even if it is constrained on - * some axis, for example partially outside the edge of an output. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE = 0, - /** - * move along the x axis until unconstrained - * - * Slide the surface along the x axis until it is no longer - * constrained. - * - * First try to slide towards the direction of the gravity on the x - * axis until either the edge in the opposite direction of the - * gravity is unconstrained or the edge in the direction of the - * gravity is constrained. - * - * Then try to slide towards the opposite direction of the gravity - * on the x axis until either the edge in the direction of the - * gravity is unconstrained or the edge in the opposite direction - * of the gravity is constrained. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1, - /** - * move along the y axis until unconstrained - * - * Slide the surface along the y axis until it is no longer - * constrained. - * - * First try to slide towards the direction of the gravity on the y - * axis until either the edge in the opposite direction of the - * gravity is unconstrained or the edge in the direction of the - * gravity is constrained. - * - * Then try to slide towards the opposite direction of the gravity - * on the y axis until either the edge in the direction of the - * gravity is unconstrained or the edge in the opposite direction - * of the gravity is constrained. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 2, - /** - * invert the anchor and gravity on the x axis - * - * Invert the anchor and gravity on the x axis if the surface is - * constrained on the x axis. For example, if the left edge of the - * surface is constrained, the gravity is 'left' and the anchor is - * 'left', change the gravity to 'right' and the anchor to 'right'. - * - * If the adjusted position also ends up being constrained, the - * resulting position of the flip_x adjustment will be the one - * before the adjustment. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X = 4, - /** - * invert the anchor and gravity on the y axis - * - * Invert the anchor and gravity on the y axis if the surface is - * constrained on the y axis. For example, if the bottom edge of - * the surface is constrained, the gravity is 'bottom' and the - * anchor is 'bottom', change the gravity to 'top' and the anchor - * to 'top'. - * - * The adjusted position is calculated given the original anchor - * rectangle and offset, but with the new flipped anchor and - * gravity values. - * - * If the adjusted position also ends up being constrained, the - * resulting position of the flip_y adjustment will be the one - * before the adjustment. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y = 8, - /** - * horizontally resize the surface - * - * Resize the surface horizontally so that it is completely - * unconstrained. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X = 16, - /** - * vertically resize the surface - * - * Resize the surface vertically so that it is completely - * unconstrained. - */ - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 32, -}; -#endif /* XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM */ - -#ifndef XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM_IS_VALID -#define XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM_IS_VALID -/** - * @ingroup iface_xdg_positioner - * Validate a xdg_positioner constraint_adjustment value. - * - * @return true on success, false on error. - * @ref xdg_positioner_constraint_adjustment - */ -static inline bool -xdg_positioner_constraint_adjustment_is_valid(uint32_t value, uint32_t version) { - uint32_t valid = 0; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X; - if (version >= 1) - valid |= XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y; - return (value & ~valid) == 0; -} -#endif /* XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM_IS_VALID */ - -/** - * @ingroup iface_xdg_positioner - * @struct xdg_positioner_interface - */ -struct xdg_positioner_interface { - /** - * destroy the xdg_positioner object - * - * Notify the compositor that the xdg_positioner will no longer - * be used. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the size of the to-be positioned rectangle - * - * Set the size of the surface that is to be positioned with the - * positioner object. The size is in surface-local coordinates and - * corresponds to the window geometry. See - * xdg_surface.set_window_geometry. - * - * If a zero or negative size is set the invalid_input error is - * raised. - * @param width width of positioned rectangle - * @param height height of positioned rectangle - */ - void (*set_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t width, - int32_t height); - /** - * set the anchor rectangle within the parent surface - * - * Specify the anchor rectangle within the parent surface that - * the child surface will be placed relative to. The rectangle is - * relative to the window geometry as defined by - * xdg_surface.set_window_geometry of the parent surface. - * - * When the xdg_positioner object is used to position a child - * surface, the anchor rectangle may not extend outside the window - * geometry of the positioned child's parent surface. - * - * If a negative size is set the invalid_input error is raised. - * @param x x position of anchor rectangle - * @param y y position of anchor rectangle - * @param width width of anchor rectangle - * @param height height of anchor rectangle - */ - void (*set_anchor_rect)(struct wl_client *client, - struct wl_resource *resource, - int32_t x, - int32_t y, - int32_t width, - int32_t height); - /** - * set anchor rectangle anchor - * - * Defines the anchor point for the anchor rectangle. The - * specified anchor is used to derive an anchor point that the - * child surface will be positioned relative to. If a corner anchor - * is set (e.g. 'top_left' or 'bottom_right'), the anchor point - * will be at the specified corner; otherwise, the derived anchor - * point will be centered on the specified edge, or in the center - * of the anchor rectangle if no edge is specified. - * @param anchor anchor point - */ - void (*set_anchor)(struct wl_client *client, - struct wl_resource *resource, - uint32_t anchor); - /** - * set child surface gravity - * - * Defines in what direction a surface should be positioned, - * relative to the anchor point of the parent surface. If a corner - * gravity is specified (e.g. 'bottom_right' or 'top_left'), then - * the child surface will be placed towards the specified gravity; - * otherwise, the child surface will be centered over the anchor - * point on any axis that had no gravity specified. If the gravity - * is not in the ‘gravity’ enum, an invalid_input error is - * raised. - * @param gravity gravity direction - */ - void (*set_gravity)(struct wl_client *client, - struct wl_resource *resource, - uint32_t gravity); - /** - * set the adjustment to be done when constrained - * - * Specify how the window should be positioned if the originally - * intended position caused the surface to be constrained, meaning - * at least partially outside positioning boundaries set by the - * compositor. The adjustment is set by constructing a bitmask - * describing the adjustment to be made when the surface is - * constrained on that axis. - * - * If no bit for one axis is set, the compositor will assume that - * the child surface should not change its position on that axis - * when constrained. - * - * If more than one bit for one axis is set, the order of how - * adjustments are applied is specified in the corresponding - * adjustment descriptions. - * - * The default adjustment is none. - * @param constraint_adjustment bit mask of constraint adjustments - */ - void (*set_constraint_adjustment)(struct wl_client *client, - struct wl_resource *resource, - uint32_t constraint_adjustment); - /** - * set surface position offset - * - * Specify the surface position offset relative to the position - * of the anchor on the anchor rectangle and the anchor on the - * surface. For example if the anchor of the anchor rectangle is at - * (x, y), the surface has the gravity bottom|right, and the offset - * is (ox, oy), the calculated surface position will be (x + ox, y - * + oy). The offset position of the surface is the one used for - * constraint testing. See set_constraint_adjustment. - * - * An example use case is placing a popup menu on top of a user - * interface element, while aligning the user interface element of - * the parent surface with some user interface element placed - * somewhere in the popup surface. - * @param x surface position x offset - * @param y surface position y offset - */ - void (*set_offset)(struct wl_client *client, - struct wl_resource *resource, - int32_t x, - int32_t y); - /** - * continuously reconstrain the surface - * - * When set reactive, the surface is reconstrained if the - * conditions used for constraining changed, e.g. the parent window - * moved. - * - * If the conditions changed and the popup was reconstrained, an - * xdg_popup.configure event is sent with updated geometry, - * followed by an xdg_surface.configure event. - * @since 3 - */ - void (*set_reactive)(struct wl_client *client, - struct wl_resource *resource); - /** - * set parent size - * - * Set the parent window geometry the compositor should use when - * positioning the popup. The compositor may use this information - * to determine the future state the popup should be constrained - * using. If this doesn't match the dimension of the parent the - * popup is eventually positioned against, the behavior is - * undefined. - * - * The arguments are given in the surface-local coordinate space. - * @param parent_width future window geometry width of parent - * @param parent_height future window geometry height of parent - * @since 3 - */ - void (*set_parent_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t parent_width, - int32_t parent_height); - /** - * set parent configure this is a response to - * - * Set the serial of an xdg_surface.configure event this - * positioner will be used in response to. The compositor may use - * this information together with set_parent_size to determine what - * future state the popup should be constrained using. - * @param serial serial of parent configure event - * @since 3 - */ - void (*set_parent_configure)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); -}; - - -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_ANCHOR_RECT_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_ANCHOR_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_GRAVITY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_OFFSET_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_REACTIVE_SINCE_VERSION 3 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_PARENT_SIZE_SINCE_VERSION 3 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_PARENT_CONFIGURE_SINCE_VERSION 3 - -#ifndef XDG_SURFACE_ERROR_ENUM -#define XDG_SURFACE_ERROR_ENUM -enum xdg_surface_error { - /** - * Surface was not fully constructed - */ - XDG_SURFACE_ERROR_NOT_CONSTRUCTED = 1, - /** - * Surface was already constructed - */ - XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED = 2, - /** - * Attaching a buffer to an unconfigured surface - */ - XDG_SURFACE_ERROR_UNCONFIGURED_BUFFER = 3, - /** - * Invalid serial number when acking a configure event - */ - XDG_SURFACE_ERROR_INVALID_SERIAL = 4, - /** - * Width or height was zero or negative - */ - XDG_SURFACE_ERROR_INVALID_SIZE = 5, - /** - * Surface was destroyed before its role object - */ - XDG_SURFACE_ERROR_DEFUNCT_ROLE_OBJECT = 6, -}; -#endif /* XDG_SURFACE_ERROR_ENUM */ - -#ifndef XDG_SURFACE_ERROR_ENUM_IS_VALID -#define XDG_SURFACE_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_xdg_surface - * Validate a xdg_surface error value. - * - * @return true on success, false on error. - * @ref xdg_surface_error - */ -static inline bool -xdg_surface_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_SURFACE_ERROR_NOT_CONSTRUCTED: - return version >= 1; - case XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED: - return version >= 1; - case XDG_SURFACE_ERROR_UNCONFIGURED_BUFFER: - return version >= 1; - case XDG_SURFACE_ERROR_INVALID_SERIAL: - return version >= 1; - case XDG_SURFACE_ERROR_INVALID_SIZE: - return version >= 1; - case XDG_SURFACE_ERROR_DEFUNCT_ROLE_OBJECT: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_SURFACE_ERROR_ENUM_IS_VALID */ - -/** - * @ingroup iface_xdg_surface - * @struct xdg_surface_interface - */ -struct xdg_surface_interface { - /** - * destroy the xdg_surface - * - * Destroy the xdg_surface object. An xdg_surface must only be - * destroyed after its role object has been destroyed, otherwise a - * defunct_role_object error is raised. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * assign the xdg_toplevel surface role - * - * This creates an xdg_toplevel object for the given xdg_surface - * and gives the associated wl_surface the xdg_toplevel role. - * - * See the documentation of xdg_toplevel for more details about - * what an xdg_toplevel is and how it is used. - */ - void (*get_toplevel)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id); - /** - * assign the xdg_popup surface role - * - * This creates an xdg_popup object for the given xdg_surface and - * gives the associated wl_surface the xdg_popup role. - * - * If null is passed as a parent, a parent surface must be - * specified using some other protocol, before committing the - * initial state. - * - * See the documentation of xdg_popup for more details about what - * an xdg_popup is and how it is used. - * @param parent parent surface for this popup - * @param positioner positioner for this popup - */ - void (*get_popup)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *parent, - struct wl_resource *positioner); - /** - * set the new window geometry - * - * The window geometry of a surface is its "visible bounds" from - * the user's perspective. Client-side decorations often have - * invisible portions like drop-shadows which should be ignored for - * the purposes of aligning, placing and constraining windows. Note - * that in some situations, compositors may clip rendering to the - * window geometry, so the client should avoid putting functional - * elements outside of it. - * - * The window geometry is double-buffered state, see - * wl_surface.commit. - * - * When maintaining a position, the compositor should treat the (x, - * y) coordinate of the window geometry as the top left corner of - * the window. A client changing the (x, y) window geometry - * coordinate should in general not alter the position of the - * window. - * - * Once the window geometry of the surface is set, it is not - * possible to unset it, and it will remain the same until - * set_window_geometry is called again, even if a new subsurface or - * buffer is attached. - * - * If never set, the value is the full bounds of the surface, - * including any subsurfaces. This updates dynamically on every - * commit. This unset is meant for extremely simple clients. - * - * The arguments are given in the surface-local coordinate space of - * the wl_surface associated with this xdg_surface, and may extend - * outside of the wl_surface itself to mark parts of the subsurface - * tree as part of the window geometry. - * - * When applied, the effective window geometry will be the set - * window geometry clamped to the bounding rectangle of the - * combined geometry of the surface of the xdg_surface and the - * associated subsurfaces. - * - * The effective geometry will not be recalculated unless a new - * call to set_window_geometry is done and the new pending surface - * state is subsequently applied. - * - * The width and height of the effective window geometry must be - * greater than zero. Setting an invalid size will raise an - * invalid_size error. - * @param x x coordinate of the top-left corner of the window inside this surface - * @param y y coordinate of the top-left corner of the window inside this surface - * @param width width of the window - * @param height height of the window - */ - void (*set_window_geometry)(struct wl_client *client, - struct wl_resource *resource, - int32_t x, - int32_t y, - int32_t width, - int32_t height); - /** - * ack a configure event - * - * When a configure event is received, if a client commits the - * surface in response to the configure event, then the client must - * make an ack_configure request sometime before the commit - * request, passing along the serial of the configure event. - * - * For instance, for toplevel surfaces the compositor might use - * this information to move a surface to the top left only when the - * client has drawn itself for the maximized or fullscreen state. - * - * If the client receives multiple configure events before it can - * respond to one, it only has to ack the last configure event. - * Acking a configure event that was never sent raises an - * invalid_serial error. - * - * A client is not required to commit immediately after sending an - * ack_configure request - it may even ack_configure several times - * before its next surface commit. - * - * A client may send multiple ack_configure requests before - * committing, but only the last request sent before a commit - * indicates which configure event the client really is responding - * to. - * - * Sending an ack_configure request consumes the serial number sent - * with the request, as well as serial numbers sent by all - * configure events sent on this xdg_surface prior to the configure - * event referenced by the committed serial. - * - * It is an error to issue multiple ack_configure requests - * referencing a serial from the same configure event, or to issue - * an ack_configure request referencing a serial from a configure - * event issued before the event identified by the last - * ack_configure request for the same xdg_surface. Doing so will - * raise an invalid_serial error. - * @param serial the serial from the configure event - */ - void (*ack_configure)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); -}; - -#define XDG_SURFACE_CONFIGURE 0 - -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_CONFIGURE_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_GET_TOPLEVEL_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_GET_POPUP_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_SET_WINDOW_GEOMETRY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_ACK_CONFIGURE_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_surface - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - * @param serial serial of the configure event - */ -static inline void -xdg_surface_send_configure(struct wl_resource *resource_, uint32_t serial) -{ - wl_resource_post_event(resource_, XDG_SURFACE_CONFIGURE, serial); -} - -#ifndef XDG_TOPLEVEL_ERROR_ENUM -#define XDG_TOPLEVEL_ERROR_ENUM -enum xdg_toplevel_error { - /** - * provided value is not a valid variant of the resize_edge enum - */ - XDG_TOPLEVEL_ERROR_INVALID_RESIZE_EDGE = 0, - /** - * invalid parent toplevel - */ - XDG_TOPLEVEL_ERROR_INVALID_PARENT = 1, - /** - * client provided an invalid min or max size - */ - XDG_TOPLEVEL_ERROR_INVALID_SIZE = 2, -}; -#endif /* XDG_TOPLEVEL_ERROR_ENUM */ - -#ifndef XDG_TOPLEVEL_ERROR_ENUM_IS_VALID -#define XDG_TOPLEVEL_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_xdg_toplevel - * Validate a xdg_toplevel error value. - * - * @return true on success, false on error. - * @ref xdg_toplevel_error - */ -static inline bool -xdg_toplevel_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_TOPLEVEL_ERROR_INVALID_RESIZE_EDGE: - return version >= 1; - case XDG_TOPLEVEL_ERROR_INVALID_PARENT: - return version >= 1; - case XDG_TOPLEVEL_ERROR_INVALID_SIZE: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_TOPLEVEL_ERROR_ENUM_IS_VALID */ - -#ifndef XDG_TOPLEVEL_RESIZE_EDGE_ENUM -#define XDG_TOPLEVEL_RESIZE_EDGE_ENUM -/** - * @ingroup iface_xdg_toplevel - * edge values for resizing - * - * These values are used to indicate which edge of a surface - * is being dragged in a resize operation. - */ -enum xdg_toplevel_resize_edge { - XDG_TOPLEVEL_RESIZE_EDGE_NONE = 0, - XDG_TOPLEVEL_RESIZE_EDGE_TOP = 1, - XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM = 2, - XDG_TOPLEVEL_RESIZE_EDGE_LEFT = 4, - XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT = 5, - XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT = 6, - XDG_TOPLEVEL_RESIZE_EDGE_RIGHT = 8, - XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT = 9, - XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT = 10, -}; -#endif /* XDG_TOPLEVEL_RESIZE_EDGE_ENUM */ - -#ifndef XDG_TOPLEVEL_RESIZE_EDGE_ENUM_IS_VALID -#define XDG_TOPLEVEL_RESIZE_EDGE_ENUM_IS_VALID -/** - * @ingroup iface_xdg_toplevel - * Validate a xdg_toplevel resize_edge value. - * - * @return true on success, false on error. - * @ref xdg_toplevel_resize_edge - */ -static inline bool -xdg_toplevel_resize_edge_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_TOPLEVEL_RESIZE_EDGE_NONE: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_TOP: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_LEFT: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_RIGHT: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT: - return version >= 1; - case XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_TOPLEVEL_RESIZE_EDGE_ENUM_IS_VALID */ - -#ifndef XDG_TOPLEVEL_STATE_ENUM -#define XDG_TOPLEVEL_STATE_ENUM -/** - * @ingroup iface_xdg_toplevel - * types of state on the surface - * - * The different state values used on the surface. This is designed for - * state values like maximized, fullscreen. It is paired with the - * configure event to ensure that both the client and the compositor - * setting the state can be synchronized. - * - * States set in this way are double-buffered, see wl_surface.commit. - */ -enum xdg_toplevel_state { - /** - * the surface is maximized - * the surface is maximized - * - * The surface is maximized. The window geometry specified in the - * configure event must be obeyed by the client, or the - * xdg_wm_base.invalid_surface_state error is raised. - * - * The client should draw without shadow or other decoration - * outside of the window geometry. - */ - XDG_TOPLEVEL_STATE_MAXIMIZED = 1, - /** - * the surface is fullscreen - * the surface is fullscreen - * - * The surface is fullscreen. The window geometry specified in - * the configure event is a maximum; the client cannot resize - * beyond it. For a surface to cover the whole fullscreened area, - * the geometry dimensions must be obeyed by the client. For more - * details, see xdg_toplevel.set_fullscreen. - */ - XDG_TOPLEVEL_STATE_FULLSCREEN = 2, - /** - * the surface is being resized - * the surface is being resized - * - * The surface is being resized. The window geometry specified in - * the configure event is a maximum; the client cannot resize - * beyond it. Clients that have aspect ratio or cell sizing - * configuration can use a smaller size, however. - */ - XDG_TOPLEVEL_STATE_RESIZING = 3, - /** - * the surface is now activated - * the surface is now activated - * - * Client window decorations should be painted as if the window - * is active. Do not assume this means that the window actually has - * keyboard or pointer focus. - */ - XDG_TOPLEVEL_STATE_ACTIVATED = 4, - /** - * the surface’s left edge is tiled - * - * The window is currently in a tiled layout and the left edge is - * considered to be adjacent to another part of the tiling grid. - * - * The client should draw without shadow or other decoration - * outside of the window geometry on the left edge. - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_LEFT = 5, - /** - * the surface’s right edge is tiled - * - * The window is currently in a tiled layout and the right edge - * is considered to be adjacent to another part of the tiling grid. - * - * The client should draw without shadow or other decoration - * outside of the window geometry on the right edge. - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_RIGHT = 6, - /** - * the surface’s top edge is tiled - * - * The window is currently in a tiled layout and the top edge is - * considered to be adjacent to another part of the tiling grid. - * - * The client should draw without shadow or other decoration - * outside of the window geometry on the top edge. - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_TOP = 7, - /** - * the surface’s bottom edge is tiled - * - * The window is currently in a tiled layout and the bottom edge - * is considered to be adjacent to another part of the tiling grid. - * - * The client should draw without shadow or other decoration - * outside of the window geometry on the bottom edge. - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_BOTTOM = 8, - /** - * surface repaint is suspended - * - * The surface is currently not ordinarily being repainted; for - * example because its content is occluded by another window, or - * its outputs are switched off due to screen locking. - * @since 6 - */ - XDG_TOPLEVEL_STATE_SUSPENDED = 9, - /** - * the surface’s left edge is constrained - * - * The left edge of the window is currently constrained, meaning - * it shouldn't attempt to resize from that edge. It can for - * example mean it's tiled next to a monitor edge on the - * constrained side of the window. - * @since 7 - */ - XDG_TOPLEVEL_STATE_CONSTRAINED_LEFT = 10, - /** - * the surface’s right edge is constrained - * - * The right edge of the window is currently constrained, meaning - * it shouldn't attempt to resize from that edge. It can for - * example mean it's tiled next to a monitor edge on the - * constrained side of the window. - * @since 7 - */ - XDG_TOPLEVEL_STATE_CONSTRAINED_RIGHT = 11, - /** - * the surface’s top edge is constrained - * - * The top edge of the window is currently constrained, meaning - * it shouldn't attempt to resize from that edge. It can for - * example mean it's tiled next to a monitor edge on the - * constrained side of the window. - * @since 7 - */ - XDG_TOPLEVEL_STATE_CONSTRAINED_TOP = 12, - /** - * the surface’s bottom edge is constrained - * - * The bottom edge of the window is currently constrained, - * meaning it shouldn't attempt to resize from that edge. It can - * for example mean it's tiled next to a monitor edge on the - * constrained side of the window. - * @since 7 - */ - XDG_TOPLEVEL_STATE_CONSTRAINED_BOTTOM = 13, -}; -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_LEFT_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_TOP_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_BOTTOM_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_SUSPENDED_SINCE_VERSION 6 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_CONSTRAINED_LEFT_SINCE_VERSION 7 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_CONSTRAINED_RIGHT_SINCE_VERSION 7 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_CONSTRAINED_TOP_SINCE_VERSION 7 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_CONSTRAINED_BOTTOM_SINCE_VERSION 7 -#endif /* XDG_TOPLEVEL_STATE_ENUM */ - -#ifndef XDG_TOPLEVEL_STATE_ENUM_IS_VALID -#define XDG_TOPLEVEL_STATE_ENUM_IS_VALID -/** - * @ingroup iface_xdg_toplevel - * Validate a xdg_toplevel state value. - * - * @return true on success, false on error. - * @ref xdg_toplevel_state - */ -static inline bool -xdg_toplevel_state_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_TOPLEVEL_STATE_MAXIMIZED: - return version >= 1; - case XDG_TOPLEVEL_STATE_FULLSCREEN: - return version >= 1; - case XDG_TOPLEVEL_STATE_RESIZING: - return version >= 1; - case XDG_TOPLEVEL_STATE_ACTIVATED: - return version >= 1; - case XDG_TOPLEVEL_STATE_TILED_LEFT: - return version >= 2; - case XDG_TOPLEVEL_STATE_TILED_RIGHT: - return version >= 2; - case XDG_TOPLEVEL_STATE_TILED_TOP: - return version >= 2; - case XDG_TOPLEVEL_STATE_TILED_BOTTOM: - return version >= 2; - case XDG_TOPLEVEL_STATE_SUSPENDED: - return version >= 6; - case XDG_TOPLEVEL_STATE_CONSTRAINED_LEFT: - return version >= 7; - case XDG_TOPLEVEL_STATE_CONSTRAINED_RIGHT: - return version >= 7; - case XDG_TOPLEVEL_STATE_CONSTRAINED_TOP: - return version >= 7; - case XDG_TOPLEVEL_STATE_CONSTRAINED_BOTTOM: - return version >= 7; - default: - return false; - } -} -#endif /* XDG_TOPLEVEL_STATE_ENUM_IS_VALID */ - -#ifndef XDG_TOPLEVEL_WM_CAPABILITIES_ENUM -#define XDG_TOPLEVEL_WM_CAPABILITIES_ENUM -enum xdg_toplevel_wm_capabilities { - /** - * show_window_menu is available - */ - XDG_TOPLEVEL_WM_CAPABILITIES_WINDOW_MENU = 1, - /** - * set_maximized and unset_maximized are available - */ - XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE = 2, - /** - * set_fullscreen and unset_fullscreen are available - */ - XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN = 3, - /** - * set_minimized is available - */ - XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE = 4, -}; -#endif /* XDG_TOPLEVEL_WM_CAPABILITIES_ENUM */ - -#ifndef XDG_TOPLEVEL_WM_CAPABILITIES_ENUM_IS_VALID -#define XDG_TOPLEVEL_WM_CAPABILITIES_ENUM_IS_VALID -/** - * @ingroup iface_xdg_toplevel - * Validate a xdg_toplevel wm_capabilities value. - * - * @return true on success, false on error. - * @ref xdg_toplevel_wm_capabilities - */ -static inline bool -xdg_toplevel_wm_capabilities_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_TOPLEVEL_WM_CAPABILITIES_WINDOW_MENU: - return version >= 1; - case XDG_TOPLEVEL_WM_CAPABILITIES_MAXIMIZE: - return version >= 1; - case XDG_TOPLEVEL_WM_CAPABILITIES_FULLSCREEN: - return version >= 1; - case XDG_TOPLEVEL_WM_CAPABILITIES_MINIMIZE: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_TOPLEVEL_WM_CAPABILITIES_ENUM_IS_VALID */ - -/** - * @ingroup iface_xdg_toplevel - * @struct xdg_toplevel_interface - */ -struct xdg_toplevel_interface { - /** - * destroy the xdg_toplevel - * - * This request destroys the role surface and unmaps the surface; - * see "Unmapping" behavior in interface section for details. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the parent of this surface - * - * Set the "parent" of this surface. This surface should be - * stacked above the parent surface and all other ancestor - * surfaces. - * - * Parent surfaces should be set on dialogs, toolboxes, or other - * "auxiliary" surfaces, so that the parent is raised when the - * dialog is raised. - * - * Setting a null parent for a child surface unsets its parent. - * Setting a null parent for a surface which currently has no - * parent is a no-op. - * - * Only mapped surfaces can have child surfaces. Setting a parent - * which is not mapped is equivalent to setting a null parent. If a - * surface becomes unmapped, its children's parent is set to the - * parent of the now-unmapped surface. If the now-unmapped surface - * has no parent, its children's parent is unset. If the - * now-unmapped surface becomes mapped again, its parent-child - * relationship is not restored. - * - * The parent toplevel must not be one of the child toplevel's - * descendants, and the parent must be different from the child - * toplevel, otherwise the invalid_parent protocol error is raised. - * @param parent parent surface for this surface - */ - void (*set_parent)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *parent); - /** - * set surface title - * - * Set a short title for the surface. - * - * This string may be used to identify the surface in a task bar, - * window list, or other user interface elements provided by the - * compositor. - * - * The string must be encoded in UTF-8. - * @param title title of the surface - */ - void (*set_title)(struct wl_client *client, - struct wl_resource *resource, - const char *title); - /** - * set application ID - * - * Set an application identifier for the surface. - * - * The app ID identifies the general class of applications to which - * the surface belongs. The compositor can use this to group - * multiple surfaces together, or to determine how to launch a new - * application. - * - * For D-Bus activatable applications, the app ID is used as the - * D-Bus service name. - * - * The compositor shell will try to group application surfaces - * together by their app ID. As a best practice, it is suggested to - * select app ID's that match the basename of the application's - * .desktop file. For example, "org.freedesktop.FooViewer" where - * the .desktop file is "org.freedesktop.FooViewer.desktop". - * - * Like other properties, a set_app_id request can be sent after - * the xdg_toplevel has been mapped to update the property. - * - * See the desktop-entry specification [0] for more details on - * application identifiers and how they relate to well-known D-Bus - * names and .desktop files. - * - * [0] https://standards.freedesktop.org/desktop-entry-spec/ - * @param app_id application identifier surface belongs to - */ - void (*set_app_id)(struct wl_client *client, - struct wl_resource *resource, - const char *app_id); - /** - * show the window menu - * - * Clients implementing client-side decorations might want to - * show a context menu when right-clicking on the decorations, - * giving the user a menu that they can use to maximize or minimize - * the window. - * - * This request asks the compositor to pop up such a window menu at - * the given position, relative to the local surface coordinates of - * the parent surface. There are no guarantees as to what menu - * items the window menu contains, or even if a window menu will be - * drawn at all. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - * @param x the x position to pop up the window menu at - * @param y the y position to pop up the window menu at - */ - void (*show_window_menu)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial, - int32_t x, - int32_t y); - /** - * start an interactive move - * - * Start an interactive, user-driven move of the surface. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. The - * passed serial is used to determine the type of interactive move - * (touch, pointer, etc). - * - * The server may ignore move requests depending on the state of - * the surface (e.g. fullscreen or maximized), or if the passed - * serial is no longer valid. - * - * If triggered, the surface will lose the focus of the device - * (wl_pointer, wl_touch, etc) used for the move. It is up to the - * compositor to visually indicate that the move is taking place, - * such as updating a pointer cursor, during the move. There is no - * guarantee that the device focus will return when the move is - * completed. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - */ - void (*move)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial); - /** - * start an interactive resize - * - * Start a user-driven, interactive resize of the surface. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. The - * passed serial is used to determine the type of interactive - * resize (touch, pointer, etc). - * - * The server may ignore resize requests depending on the state of - * the surface (e.g. fullscreen or maximized). - * - * If triggered, the client will receive configure events with the - * "resize" state enum value and the expected sizes. See the - * "resize" enum value for more details about what is required. The - * client must also acknowledge configure events using - * "ack_configure". After the resize is completed, the client will - * receive another "configure" event without the resize state. - * - * If triggered, the surface also will lose the focus of the device - * (wl_pointer, wl_touch, etc) used for the resize. It is up to the - * compositor to visually indicate that the resize is taking place, - * such as updating a pointer cursor, during the resize. There is - * no guarantee that the device focus will return when the resize - * is completed. - * - * The edges parameter specifies how the surface should be resized, - * and is one of the values of the resize_edge enum. Values not - * matching a variant of the enum will cause the - * invalid_resize_edge protocol error. The compositor may use this - * information to update the surface position for example when - * dragging the top left corner. The compositor may also use this - * information to adapt its behavior, e.g. choose an appropriate - * cursor image. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - * @param edges which edge or corner is being dragged - */ - void (*resize)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial, - uint32_t edges); - /** - * set the maximum size - * - * Set a maximum size for the window. - * - * The client can specify a maximum size so that the compositor - * does not try to configure the window beyond this size. - * - * The width and height arguments are in window geometry - * coordinates. See xdg_surface.set_window_geometry. - * - * Values set in this way are double-buffered, see - * wl_surface.commit. - * - * The compositor can use this information to allow or disallow - * different states like maximize or fullscreen and draw accurate - * animations. - * - * Similarly, a tiling window manager may use this information to - * place and resize client windows in a more effective way. - * - * The client should not rely on the compositor to obey the maximum - * size. The compositor may decide to ignore the values set by the - * client and request a larger size. - * - * If never set, or a value of zero in the request, means that the - * client has no expected maximum size in the given dimension. As a - * result, a client wishing to reset the maximum size to an - * unspecified state can use zero for width and height in the - * request. - * - * Requesting a maximum size to be smaller than the minimum size of - * a surface is illegal and will result in an invalid_size error. - * - * The width and height must be greater than or equal to zero. - * Using strictly negative values for width or height will result - * in an invalid_size error. - * @param width maximum width of the window - * @param height maximum height of the window - */ - void (*set_max_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t width, - int32_t height); - /** - * set the minimum size - * - * Set a minimum size for the window. - * - * The client can specify a minimum size so that the compositor - * does not try to configure the window below this size. - * - * The width and height arguments are in window geometry - * coordinates. See xdg_surface.set_window_geometry. - * - * Values set in this way are double-buffered, see - * wl_surface.commit. - * - * The compositor can use this information to allow or disallow - * different states like maximize or fullscreen and draw accurate - * animations. - * - * Similarly, a tiling window manager may use this information to - * place and resize client windows in a more effective way. - * - * The client should not rely on the compositor to obey the minimum - * size. The compositor may decide to ignore the values set by the - * client and request a smaller size. - * - * If never set, or a value of zero in the request, means that the - * client has no expected minimum size in the given dimension. As a - * result, a client wishing to reset the minimum size to an - * unspecified state can use zero for width and height in the - * request. - * - * Requesting a minimum size to be larger than the maximum size of - * a surface is illegal and will result in an invalid_size error. - * - * The width and height must be greater than or equal to zero. - * Using strictly negative values for width and height will result - * in an invalid_size error. - * @param width minimum width of the window - * @param height minimum height of the window - */ - void (*set_min_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t width, - int32_t height); - /** - * maximize the window - * - * Maximize the surface. - * - * After requesting that the surface should be maximized, the - * compositor will respond by emitting a configure event. Whether - * this configure actually sets the window maximized is subject to - * compositor policies. The client must then update its content, - * drawing in the configured state. The client must also - * acknowledge the configure when committing the new content (see - * ack_configure). - * - * It is up to the compositor to decide how and where to maximize - * the surface, for example which output and what region of the - * screen should be used. - * - * If the surface was already maximized, the compositor will still - * emit a configure event with the "maximized" state. - * - * If the surface is in a fullscreen state, this request has no - * direct effect. It may alter the state the surface is returned to - * when unmaximized unless overridden by the compositor. - */ - void (*set_maximized)(struct wl_client *client, - struct wl_resource *resource); - /** - * unmaximize the window - * - * Unmaximize the surface. - * - * After requesting that the surface should be unmaximized, the - * compositor will respond by emitting a configure event. Whether - * this actually un-maximizes the window is subject to compositor - * policies. If available and applicable, the compositor will - * include the window geometry dimensions the window had prior to - * being maximized in the configure event. The client must then - * update its content, drawing it in the configured state. The - * client must also acknowledge the configure when committing the - * new content (see ack_configure). - * - * It is up to the compositor to position the surface after it was - * unmaximized; usually the position the surface had before - * maximizing, if applicable. - * - * If the surface was already not maximized, the compositor will - * still emit a configure event without the "maximized" state. - * - * If the surface is in a fullscreen state, this request has no - * direct effect. It may alter the state the surface is returned to - * when unmaximized unless overridden by the compositor. - */ - void (*unset_maximized)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the window as fullscreen on an output - * - * Make the surface fullscreen. - * - * After requesting that the surface should be fullscreened, the - * compositor will respond by emitting a configure event. Whether - * the client is actually put into a fullscreen state is subject to - * compositor policies. The client must also acknowledge the - * configure when committing the new content (see ack_configure). - * - * The output passed by the request indicates the client's - * preference as to which display it should be set fullscreen on. - * If this value is NULL, it's up to the compositor to choose which - * display will be used to map this surface. - * - * If the surface doesn't cover the whole output, the compositor - * will position the surface in the center of the output and - * compensate with border fill covering the rest of the output. The - * content of the border fill is undefined, but should be assumed - * to be in some way that attempts to blend into the surrounding - * area (e.g. solid black). - * - * If the fullscreened surface is not opaque, the compositor must - * make sure that other screen content not part of the same surface - * tree (made up of subsurfaces, popups or similarly coupled - * surfaces) are not visible below the fullscreened surface. - * @param output preferred output to place surface on - */ - void (*set_fullscreen)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *output); - /** - * unset the window as fullscreen - * - * Make the surface no longer fullscreen. - * - * After requesting that the surface should be unfullscreened, the - * compositor will respond by emitting a configure event. Whether - * this actually removes the fullscreen state of the client is - * subject to compositor policies. - * - * Making a surface unfullscreen sets states for the surface based - * on the following: * the state(s) it may have had before becoming - * fullscreen * any state(s) decided by the compositor * any - * state(s) requested by the client while the surface was - * fullscreen - * - * The compositor may include the previous window geometry - * dimensions in the configure event, if applicable. - * - * The client must also acknowledge the configure when committing - * the new content (see ack_configure). - */ - void (*unset_fullscreen)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the window as minimized - * - * Request that the compositor minimize your surface. There is no - * way to know if the surface is currently minimized, nor is there - * any way to unset minimization on this surface. - * - * If you are looking to throttle redrawing when minimized, please - * instead use the wl_surface.frame event for this, as this will - * also work with live previews on windows in Alt-Tab, Expose or - * similar compositor features. - */ - void (*set_minimized)(struct wl_client *client, - struct wl_resource *resource); -}; - -#define XDG_TOPLEVEL_CONFIGURE 0 -#define XDG_TOPLEVEL_CLOSE 1 -#define XDG_TOPLEVEL_CONFIGURE_BOUNDS 2 -#define XDG_TOPLEVEL_WM_CAPABILITIES 3 - -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_CLOSE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_CONFIGURE_BOUNDS_SINCE_VERSION 4 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_WM_CAPABILITIES_SINCE_VERSION 5 - -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_PARENT_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_TITLE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_APP_ID_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SHOW_WINDOW_MENU_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_MOVE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_RESIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MAX_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MIN_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MAXIMIZED_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_UNSET_MAXIMIZED_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_FULLSCREEN_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_UNSET_FULLSCREEN_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MINIMIZED_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_toplevel - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - * @param width suggested width of window - * @param height suggested height of window - * @param states suggested states of the window - */ -static inline void -xdg_toplevel_send_configure(struct wl_resource *resource_, int32_t width, int32_t height, struct wl_array *states) -{ - wl_resource_post_event(resource_, XDG_TOPLEVEL_CONFIGURE, width, height, states); -} - -/** - * @ingroup iface_xdg_toplevel - * Sends an close event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -xdg_toplevel_send_close(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, XDG_TOPLEVEL_CLOSE); -} - -/** - * @ingroup iface_xdg_toplevel - * Sends an configure_bounds event to the client owning the resource. - * @param resource_ The client's resource - * @param width suggested maximum width of surface - * @param height suggested maximum height of surface - */ -static inline void -xdg_toplevel_send_configure_bounds(struct wl_resource *resource_, int32_t width, int32_t height) -{ - wl_resource_post_event(resource_, XDG_TOPLEVEL_CONFIGURE_BOUNDS, width, height); -} - -/** - * @ingroup iface_xdg_toplevel - * Sends an wm_capabilities event to the client owning the resource. - * @param resource_ The client's resource - * @param capabilities array of 32-bit capabilities - */ -static inline void -xdg_toplevel_send_wm_capabilities(struct wl_resource *resource_, struct wl_array *capabilities) -{ - wl_resource_post_event(resource_, XDG_TOPLEVEL_WM_CAPABILITIES, capabilities); -} - -#ifndef XDG_POPUP_ERROR_ENUM -#define XDG_POPUP_ERROR_ENUM -enum xdg_popup_error { - /** - * tried to grab after being mapped - */ - XDG_POPUP_ERROR_INVALID_GRAB = 0, -}; -#endif /* XDG_POPUP_ERROR_ENUM */ - -#ifndef XDG_POPUP_ERROR_ENUM_IS_VALID -#define XDG_POPUP_ERROR_ENUM_IS_VALID -/** - * @ingroup iface_xdg_popup - * Validate a xdg_popup error value. - * - * @return true on success, false on error. - * @ref xdg_popup_error - */ -static inline bool -xdg_popup_error_is_valid(uint32_t value, uint32_t version) { - switch (value) { - case XDG_POPUP_ERROR_INVALID_GRAB: - return version >= 1; - default: - return false; - } -} -#endif /* XDG_POPUP_ERROR_ENUM_IS_VALID */ - -/** - * @ingroup iface_xdg_popup - * @struct xdg_popup_interface - */ -struct xdg_popup_interface { - /** - * remove xdg_popup interface - * - * This destroys the popup. Explicitly destroying the xdg_popup - * object will also dismiss the popup, and unmap the surface. - * - * If this xdg_popup is not the "topmost" popup, the - * xdg_wm_base.not_the_topmost_popup protocol error will be sent. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * make the popup take an explicit grab - * - * This request makes the created popup take an explicit grab. An - * explicit grab will be dismissed when the user dismisses the - * popup, or when the client destroys the xdg_popup. This can be - * done by the user clicking outside the surface, using the - * keyboard, or even locking the screen through closing the lid or - * a timeout. - * - * If the compositor denies the grab, the popup will be immediately - * dismissed. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. The - * serial number of the event should be passed as 'serial'. - * - * The parent of a grabbing popup must either be an xdg_toplevel - * surface or another xdg_popup with an explicit grab. If the - * parent is another xdg_popup it means that the popups are nested, - * with this popup now being the topmost popup. - * - * Nested popups must be destroyed in the reverse order they were - * created in, e.g. the only popup you are allowed to destroy at - * all times is the topmost one. - * - * When compositors choose to dismiss a popup, they may dismiss - * every nested grabbing popup as well. When a compositor dismisses - * popups, it will follow the same dismissing order as required - * from the client. - * - * If the topmost grabbing popup is destroyed, the grab will be - * returned to the parent of the popup, if that parent previously - * had an explicit grab. - * - * If the parent is a grabbing popup which has already been - * dismissed, this popup will be immediately dismissed. If the - * parent is a popup that did not take an explicit grab, an error - * will be raised. - * - * During a popup grab, the client owning the grab will receive - * pointer and touch events for all their surfaces as normal - * (similar to an "owner-events" grab in X11 parlance), while the - * top most grabbing popup will always have keyboard focus. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - */ - void (*grab)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial); - /** - * recalculate the popup's location - * - * Reposition an already-mapped popup. The popup will be placed - * given the details in the passed xdg_positioner object, and a - * xdg_popup.repositioned followed by xdg_popup.configure and - * xdg_surface.configure will be emitted in response. Any - * parameters set by the previous positioner will be discarded. - * - * The passed token will be sent in the corresponding - * xdg_popup.repositioned event. The new popup position will not - * take effect until the corresponding configure event is - * acknowledged by the client. See xdg_popup.repositioned for - * details. The token itself is opaque, and has no other special - * meaning. - * - * If multiple reposition requests are sent, the compositor may - * skip all but the last one. - * - * If the popup is repositioned in response to a configure event - * for its parent, the client should send an - * xdg_positioner.set_parent_configure and possibly an - * xdg_positioner.set_parent_size request to allow the compositor - * to properly constrain the popup. - * - * If the popup is repositioned together with a parent that is - * being resized, but not in response to a configure event, the - * client should send an xdg_positioner.set_parent_size request. - * @param token reposition request token - * @since 3 - */ - void (*reposition)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *positioner, - uint32_t token); -}; - -#define XDG_POPUP_CONFIGURE 0 -#define XDG_POPUP_POPUP_DONE 1 -#define XDG_POPUP_REPOSITIONED 2 - -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_POPUP_DONE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_REPOSITIONED_SINCE_VERSION 3 - -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_GRAB_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_REPOSITION_SINCE_VERSION 3 - -/** - * @ingroup iface_xdg_popup - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - * @param x x position relative to parent surface window geometry - * @param y y position relative to parent surface window geometry - * @param width window geometry width - * @param height window geometry height - */ -static inline void -xdg_popup_send_configure(struct wl_resource *resource_, int32_t x, int32_t y, int32_t width, int32_t height) -{ - wl_resource_post_event(resource_, XDG_POPUP_CONFIGURE, x, y, width, height); -} - -/** - * @ingroup iface_xdg_popup - * Sends an popup_done event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -xdg_popup_send_popup_done(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, XDG_POPUP_POPUP_DONE); -} - -/** - * @ingroup iface_xdg_popup - * Sends an repositioned event to the client owning the resource. - * @param resource_ The client's resource - * @param token reposition request token - */ -static inline void -xdg_popup_send_repositioned(struct wl_resource *resource_, uint32_t token) -{ - wl_resource_post_event(resource_, XDG_POPUP_REPOSITIONED, token); -} - -#ifdef __cplusplus -} -#endif - -#endif