/* Generated by wayland-scanner 1.26.0 */

#ifndef XFCE_FOREIGN_TOPLEVEL_MANAGEMENT_PRIVATE_V1_CLIENT_PROTOCOL_H
#define XFCE_FOREIGN_TOPLEVEL_MANAGEMENT_PRIVATE_V1_CLIENT_PROTOCOL_H

#include <stdint.h>
#include <stddef.h>
#include "wayland-client.h"

#ifdef  __cplusplus
extern "C" {
#endif

/**
 * @page page_xfce_foreign_toplevel_management_private_v1 The xfce_foreign_toplevel_management_private_v1 protocol
 * @section page_ifaces_xfce_foreign_toplevel_management_private_v1 Interfaces
 * - @subpage page_iface_xfce_foreign_toplevel_manager_private_v1 - Extensions to wlr-foreign-toplevel-management
 * - @subpage page_iface_xfce_foreign_toplevel_handle_v1 - 
 * - @subpage page_iface_xfce_foreign_toplevel_icon_pixels_v1 - A toplevel icon's pixel data
 * @section page_copyright_xfce_foreign_toplevel_management_private_v1 Copyright
 * <pre>
 *
 * Copyright © 2024 Brian Tarricone <brian@tarricone.org>
 *
 * 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.
 * </pre>
 */
struct ext_workspace_handle_v1;
struct wl_output;
struct wl_seat;
struct xfce_foreign_toplevel_handle_v1;
struct xfce_foreign_toplevel_icon_pixels_v1;
struct xfce_foreign_toplevel_manager_private_v1;
struct zwlr_foreign_toplevel_handle_v1;

#ifndef XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_INTERFACE
#define XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_INTERFACE
/**
 * @page page_iface_xfce_foreign_toplevel_manager_private_v1 xfce_foreign_toplevel_manager_private_v1
 * @section page_iface_xfce_foreign_toplevel_manager_private_v1_desc Description
 *
 * This protocol advertises extensions to the existing
 * wlr-foreign-toplevel-management protocol, and provides a bridge to the
 * ext-workspace protocol, so clients can learn what workspace each toplevel
 * is on.
 *
 * It is intended to be private to the Xfce desktop implementation, and
 * should not be used by other applications. This protocol may introduce
 * incompatible changes at any time, without warning, and without following
 * normal, accepted guidelines about Wayland protocol versioning.
 * @section page_iface_xfce_foreign_toplevel_manager_private_v1_api API
 * See @ref iface_xfce_foreign_toplevel_manager_private_v1.
 */
/**
 * @defgroup iface_xfce_foreign_toplevel_manager_private_v1 The xfce_foreign_toplevel_manager_private_v1 interface
 *
 * This protocol advertises extensions to the existing
 * wlr-foreign-toplevel-management protocol, and provides a bridge to the
 * ext-workspace protocol, so clients can learn what workspace each toplevel
 * is on.
 *
 * It is intended to be private to the Xfce desktop implementation, and
 * should not be used by other applications. This protocol may introduce
 * incompatible changes at any time, without warning, and without following
 * normal, accepted guidelines about Wayland protocol versioning.
 */
extern const struct wl_interface xfce_foreign_toplevel_manager_private_v1_interface;
#endif
#ifndef XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_INTERFACE
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_INTERFACE
/**
 * @page page_iface_xfce_foreign_toplevel_handle_v1 xfce_foreign_toplevel_handle_v1
 * @section page_iface_xfce_foreign_toplevel_handle_v1_api API
 * See @ref iface_xfce_foreign_toplevel_handle_v1.
 */
/**
 * @defgroup iface_xfce_foreign_toplevel_handle_v1 The xfce_foreign_toplevel_handle_v1 interface
 */
extern const struct wl_interface xfce_foreign_toplevel_handle_v1_interface;
#endif
#ifndef XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_INTERFACE
#define XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_INTERFACE
/**
 * @page page_iface_xfce_foreign_toplevel_icon_pixels_v1 xfce_foreign_toplevel_icon_pixels_v1
 * @section page_iface_xfce_foreign_toplevel_icon_pixels_v1_desc Description
 *
 * Provides the pixel data of a toplevel's icon.
 * @section page_iface_xfce_foreign_toplevel_icon_pixels_v1_api API
 * See @ref iface_xfce_foreign_toplevel_icon_pixels_v1.
 */
/**
 * @defgroup iface_xfce_foreign_toplevel_icon_pixels_v1 The xfce_foreign_toplevel_icon_pixels_v1 interface
 *
 * Provides the pixel data of a toplevel's icon.
 */
extern const struct wl_interface xfce_foreign_toplevel_icon_pixels_v1_interface;
#endif

#ifndef XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_ERROR_ENUM
#define XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_ERROR_ENUM
/**
 * @ingroup iface_xfce_foreign_toplevel_manager_private_v1
 * Protocol errors for the xfce_foreign_toplevel_manager_private_v1 interface
 */
enum xfce_foreign_toplevel_manager_private_v1_error {
	/**
	 * The wlr_foreign_toplevel_handle_v1 is invalid
	 */
	XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_ERROR_INVALID_HANDLE = 0,
	/**
	 * The wlr_foreign_toplevel_handle_v1 already has a bound xfce_foreign_toplevel_handle_v1 instance
	 */
	XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_ERROR_ALREADY_BOUND = 1,
};
#endif /* XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_ERROR_ENUM */

#define XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_GET_XFCE_FOREIGN_TOPLEVEL_HANDLE 0
#define XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_DESTROY 1


/**
 * @ingroup iface_xfce_foreign_toplevel_manager_private_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_GET_XFCE_FOREIGN_TOPLEVEL_HANDLE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_manager_private_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_DESTROY_SINCE_VERSION 1

/** @ingroup iface_xfce_foreign_toplevel_manager_private_v1 */
static inline void
xfce_foreign_toplevel_manager_private_v1_set_user_data(struct xfce_foreign_toplevel_manager_private_v1 *xfce_foreign_toplevel_manager_private_v1, void *user_data)
{
	wl_proxy_set_user_data((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1, user_data);
}

/** @ingroup iface_xfce_foreign_toplevel_manager_private_v1 */
static inline void *
xfce_foreign_toplevel_manager_private_v1_get_user_data(struct xfce_foreign_toplevel_manager_private_v1 *xfce_foreign_toplevel_manager_private_v1)
{
	return wl_proxy_get_user_data((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1);
}

static inline uint32_t
xfce_foreign_toplevel_manager_private_v1_get_version(struct xfce_foreign_toplevel_manager_private_v1 *xfce_foreign_toplevel_manager_private_v1)
{
	return wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_manager_private_v1
 *
 * This creates a new xfce_foreign_toplevel_handle_v1 instance for the
 * given zwlr_foreign_toplevel_handle_v1 object.
 *
 * On creation of the xfce_foreign_toplevel_handle_v1 instance, all
 * relevant property events will be emitted, followed by the
 * wlr_foreign_toplevel_handle_v1.done event, in order to communicate the
 * initial state of the toplevel.
 *
 * Note that the done event behaves differently between the initial
 * property list and subsequent updates. On the initial property list,
 * *two* done events will be received: on after the
 * wlr_foreign_toplevel_handle_v1 has sent all properties, and another
 * after the xfce_foreign_toplevel_handle_v1 has sent all properties. For
 * later updates, property changes for both the wlr and xfce handles will
 * be batched under a single done event.
 *
 * If a xfce_foreign_toplevel_handle_v1 instance is already bound to the
 * provided wlr_foreign_toplevel_handle_v1 instance, an already_bound
 * protocol error is raised.
 *
 * The lifecycle of this object is tied to the corresponding
 * zwlr_foreign_toplevel_handle_v1 object. When the
 * zwlr_foreign_toplevel_handle_v1.closed event is emitted, the returned
 * xfce_foreign_toplevel_handle_v1 instance will also become inert and
 * should be destroyed.
 */
static inline struct xfce_foreign_toplevel_handle_v1 *
xfce_foreign_toplevel_manager_private_v1_get_xfce_foreign_toplevel_handle(struct xfce_foreign_toplevel_manager_private_v1 *xfce_foreign_toplevel_manager_private_v1, struct zwlr_foreign_toplevel_handle_v1 *foreign_toplevel_handle)
{
	struct wl_proxy *id;

	id = wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1,
			 XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_GET_XFCE_FOREIGN_TOPLEVEL_HANDLE, &xfce_foreign_toplevel_handle_v1_interface, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1), 0, NULL, foreign_toplevel_handle);

	return (struct xfce_foreign_toplevel_handle_v1 *) id;
}

/**
 * @ingroup iface_xfce_foreign_toplevel_manager_private_v1
 *
 * Indicates to the compositor that the client no longer wishes to receive
 * events on this interface.
 *
 * The client still may receive more events that have been queued before
 * the compositor processes this event.
 */
static inline void
xfce_foreign_toplevel_manager_private_v1_destroy(struct xfce_foreign_toplevel_manager_private_v1 *xfce_foreign_toplevel_manager_private_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1,
			 XFCE_FOREIGN_TOPLEVEL_MANAGER_PRIVATE_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_manager_private_v1), WL_MARSHAL_FLAG_DESTROY);
}

#ifndef XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ENUM
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ENUM
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 * Extended toplevel state information
 *
 * This enumeration includes toplevel states that are not a part of the
 * base xdg-toplevel interface.
 */
enum xfce_foreign_toplevel_handle_v1_state {
	/**
	 * The toplevel is 'rolled up' or 'shaded', usually meaning the window's title bar is visible, but the contents are not
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_SHADED = 0,
	/**
	 * The toplevel should not be shown in the desktop pager view
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_SKIP_PAGER = 1,
	/**
	 * The toplevel should not be shown in a desktop task or window list
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_SKIP_TASKLIST = 2,
	/**
	 * The toplevel should be shown on all workspaces within its workspace group
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_STICKY = 3,
	/**
	 * The toplevel should be stacked above other windows
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ABOVE = 4,
	/**
	 * The toplevel should be stacked below other windows
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_BELOW = 5,
	/**
	 * The toplevel has some urgent information waiting
	 */
	XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_DEMANDS_ATTENTION = 6,
};
#endif /* XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ENUM */

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 * @struct xfce_foreign_toplevel_handle_v1_listener
 */
struct xfce_foreign_toplevel_handle_v1_listener {
	/**
	 * Emitted when the toplevel's state changes
	 *
	 * Reports the current state of the toplevel. This state should
	 * be combined with the state reported by
	 * wlr_foreign_toplevel_handle_v1 in order to see the complete
	 * state of the toplevel.
	 *
	 * After all property changes have been made on this toplevel, the
	 * wlr_foreign_toplevel_handle_v1.done event will be sent.
	 * @param state List of active states from the state enum
	 */
	void (*state)(void *data,
		      struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1,
		      struct wl_array *state);
	/**
	 * Emitted when the toplevel's icon name has changed
	 *
	 * If a themed icon name is set on this toplevel, this event will
	 * be emitted to inform clients of the toplevel's icon.
	 *
	 * This event is mutually-exclusive with the no_icon event, and
	 * receiving it replaces the no-icon state.
	 *
	 * When a toplevel's icon changes, this event will be emitted
	 * within a "done" group. The client should treat any icon event
	 * grouping as fully replacing any previously-sent icon event
	 * grouping.
	 *
	 * This event requires the xdg-toplevel-icon protocol, or a similar
	 * protocol that allows applications to associate icon names with
	 * their toplevels.
	 *
	 * After all property changes have been made on this toplevel, the
	 * wlr_foreign_toplevel_handle_v1.done event will be sent.
	 */
	void (*icon_name)(void *data,
			  struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1,
			  const char *name);
	/**
	 * Advertises the size and scale of a raster icon available for this toplevel
	 *
	 * If raw icon pixel data is set on this toplevel, this event
	 * will be emitted for each size/scale combination of icon data
	 * known to the compositor.
	 *
	 * This event is mutually-exclusive with the no_icon event, and
	 * receiving it replaces the no-icon state.
	 *
	 * If the client wishes to fetch a particular size and scale of
	 * icon, it can use the get_icon_pixels request.
	 *
	 * If the set of icon sizes/scales changes (that is, new
	 * scales/sizes are added, or some existing scales/sizes are
	 * removed), events describing the entire list of available
	 * sizes/scales will be re-emitted, along with a repeat of the
	 * icon_name event (if available).
	 *
	 * The entire set will also be re-emitted if the icon pixel data
	 * for any size/scale combination changes.
	 *
	 * When a toplevel's icon changes, this event will be emitted
	 * within a "done" group. The client should treat any icon event
	 * grouping as fully replacing any previously-sent icon event
	 * grouping.
	 *
	 * This event requires the xdg-toplevel-icon protocol, or a similar
	 * protocol that allows applications to associate icon pixel data
	 * with their toplevels.
	 *
	 * After all property changes have been made on this toplevel, the
	 * wlr_foreign_toplevel_handle_v1.done event will be sent.
	 * @param size Width and height of the icon, in logical pixels
	 * @param scale The UI scale factor this pixel data corresponds to
	 */
	void (*icon_size)(void *data,
			  struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1,
			  uint32_t size,
			  uint32_t scale);
	/**
	 * Informs clients that the toplevel has no custom icon
	 *
	 * The client should instead use the toplevel's app_id as
	 * reported by wlr_foreign_toplevel_handle_v1 in order to determine
	 * a suitable icon.
	 *
	 * This event is mutually-exclusive with the icon_name and
	 * icon_size events, and receiving it clears any
	 * previously-advertised icon state.
	 *
	 * When a toplevel's icon changes, this event will be emitted
	 * within a "done" group. The client should treat any icon event
	 * grouping as fully replacing any previously-sent icon event
	 * grouping.
	 *
	 * After all property changes have been made on this toplevel, the
	 * wlr_foreign_toplevel_handle_v1.done event will be sent.
	 */
	void (*no_icon)(void *data,
			struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1);
	/**
	 * Emitted when the toplevel enters a workspace
	 *
	 * Emitted when this toplevel is placed on the specified
	 * workspace.
	 *
	 * A toplevel can either be on only one workspace, or on all
	 * workspaces in a particular group.
	 *
	 * If a workspace is made "sticky", that is, placed on all
	 * workspaces, this event will not be emitted for any workspaces.
	 * Instead, the state event will include the sticky state.
	 *
	 * A workspace_enter event will always be preceded by a
	 * workspace_leave event, except for the first workspace_enter
	 * event received after the object is created.
	 *
	 * If the client has not yet bound the ext_workspace_manager_v1
	 * global, and/or the ext_workspace_handle_v1 instances have not
	 * been created for the client, this event will be deferred until
	 * the workspace handle instances are created and available to the
	 * client.
	 *
	 * After all property changes have been made on this toplevel, the
	 * wlr_foreign_toplevel_handle_v1.done event will be sent.
	 */
	void (*workspace_enter)(void *data,
				struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1,
				struct ext_workspace_handle_v1 *workspace);
	/**
	 * Emitted when the toplevel leaves a workspace
	 *
	 * Emitted when this toplevel is removed from the specified
	 * workspace.
	 *
	 * A toplevel can either be on only one workspace, or on all
	 * workspaces in a particular group.
	 *
	 * If a workspace is made "sticky", that is, placed on all
	 * workspaces, this event will be emitted for the previous single
	 * workspace it was on, followed by a new state event that includes
	 * the sticky state.
	 *
	 * A workspace_leave event will always be preceded by a
	 * workspace_enter event.
	 *
	 * If the workspace referenced by the ext_workspace_handle_v1 is
	 * being destroyed, this event will be sent before the
	 * ext_workspace_handle_v1 itself is destroyed.
	 *
	 * After all property changes have been made on this toplevel, the
	 * wlr_foreign_toplevel_handle_v1.done event will be sent.
	 */
	void (*workspace_leave)(void *data,
				struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1,
				struct ext_workspace_handle_v1 *workspace);
};

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
static inline int
xfce_foreign_toplevel_handle_v1_add_listener(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1,
					     const struct xfce_foreign_toplevel_handle_v1_listener *listener, void *data)
{
	return wl_proxy_add_listener((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
				     (void (**)(void)) listener, data);
}

#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_SHADED 0
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_SHADED 1
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_STICKY 2
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_STICKY 3
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_ABOVE 4
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_ABOVE 5
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_BELOW 6
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_BELOW 7
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_HIGHLIGHT 8
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNHIGHLIGHT 9
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE 10
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_RESIZE 11
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_TO_OUTPUT 12
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_TO_WORKSPACE 13
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_GET_ICON_PIXELS 14
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_DESTROY 15

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_ICON_NAME_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_ICON_SIZE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_NO_ICON_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_WORKSPACE_ENTER_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_WORKSPACE_LEAVE_SINCE_VERSION 1

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_SHADED_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_SHADED_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_STICKY_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_STICKY_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_ABOVE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_ABOVE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_BELOW_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_BELOW_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_HIGHLIGHT_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNHIGHLIGHT_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_RESIZE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_TO_OUTPUT_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_TO_WORKSPACE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_GET_ICON_PIXELS_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_DESTROY_SINCE_VERSION 1

/** @ingroup iface_xfce_foreign_toplevel_handle_v1 */
static inline void
xfce_foreign_toplevel_handle_v1_set_user_data(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, void *user_data)
{
	wl_proxy_set_user_data((struct wl_proxy *) xfce_foreign_toplevel_handle_v1, user_data);
}

/** @ingroup iface_xfce_foreign_toplevel_handle_v1 */
static inline void *
xfce_foreign_toplevel_handle_v1_get_user_data(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	return wl_proxy_get_user_data((struct wl_proxy *) xfce_foreign_toplevel_handle_v1);
}

static inline uint32_t
xfce_foreign_toplevel_handle_v1_get_version(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	return wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
static inline void
xfce_foreign_toplevel_handle_v1_set_shaded(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_SHADED, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
static inline void
xfce_foreign_toplevel_handle_v1_unset_shaded(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_SHADED, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * A sticky toplevel appears on all workspaces in its workspace group.
 */
static inline void
xfce_foreign_toplevel_handle_v1_set_sticky(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_STICKY, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
static inline void
xfce_foreign_toplevel_handle_v1_unset_sticky(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_STICKY, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * The window will be kept in a layer above other regularly-stacked windows.
 *
 * This state is mutually-exclusive with the "below" state; setting the
 * "above" state will unset "below" if it is set.
 */
static inline void
xfce_foreign_toplevel_handle_v1_set_above(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_ABOVE, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
static inline void
xfce_foreign_toplevel_handle_v1_unset_above(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_ABOVE, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * The window will be kept in a layer below other regularly-stacked windows.
 *
 * This state is mutually-exclusive with the "above" state; setting the
 * "below" state will unset "above" if it is set.
 */
static inline void
xfce_foreign_toplevel_handle_v1_set_below(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_SET_BELOW, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 */
static inline void
xfce_foreign_toplevel_handle_v1_unset_below(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_BELOW, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Asks the compositor to visually highlight the window, such as drawing a
 * wireframe or box around its position.
 *
 * The compositor may un-highlight any other currently-highlighted window
 * before highlighting this one.
 *
 * The compositor is free to ignore the request.
 */
static inline void
xfce_foreign_toplevel_handle_v1_highlight(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, struct wl_seat *seat)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_HIGHLIGHT, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0, seat);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Asks the compositor to stop higlighting the window.
 *
 * The compositor will ignore this request if the client making this
 * request did not also request the currently-active highlight, if any.
 */
static inline void
xfce_foreign_toplevel_handle_v1_unhighlight(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_UNHIGHLIGHT, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Asks the compositor to start a user-driven move of this toplevel. The
 * user will be able to move the toplevel using whatever facilities the
 * compositor provides.
 *
 * The compositor may choose to ignore this request.
 */
static inline void
xfce_foreign_toplevel_handle_v1_move(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, struct wl_seat *seat)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0, seat);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Asks the compositor to start a user-driven resize of this toplevel. The
 * user will be able to resize the toplevel using whatever facilities the
 * compositor provides.
 *
 * The compositor may choose to ignore this request.
 */
static inline void
xfce_foreign_toplevel_handle_v1_resize(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, struct wl_seat *seat)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_RESIZE, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0, seat);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * This has no effect if the toplevel is already on the specified output.
 *
 * The compositor may choose to ignore this request.
 */
static inline void
xfce_foreign_toplevel_handle_v1_move_to_output(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, struct wl_output *output)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_TO_OUTPUT, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0, output);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Requests that the compositor move the toplevel to the specified workspace.
 *
 * Sticky windows cannot be moved to a particular workspace. The sticky
 * state must first be unset.
 *
 * The compositor may choose to ignore this request.
 */
static inline void
xfce_foreign_toplevel_handle_v1_move_to_workspace(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, struct ext_workspace_handle_v1 *workspace)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_MOVE_TO_WORKSPACE, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0, workspace);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Requests an xfce_foreign_toplevel_icon_pixels_v1 handle for this toplevel.
 *
 * The size/scale pair must be a pair received in a previously received
 * icon_size event, and that event must not have been obsoleted by a
 * further icon event grouping.
 */
static inline struct xfce_foreign_toplevel_icon_pixels_v1 *
xfce_foreign_toplevel_handle_v1_get_icon_pixels(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1, uint32_t size, uint32_t scale)
{
	struct wl_proxy *id;

	id = wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_GET_ICON_PIXELS, &xfce_foreign_toplevel_icon_pixels_v1_interface, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), 0, NULL, size, scale);

	return (struct xfce_foreign_toplevel_icon_pixels_v1 *) id;
}

/**
 * @ingroup iface_xfce_foreign_toplevel_handle_v1
 *
 * Destroys the object.
 *
 * The client should call this when it no longer wishes to receive events
 * for this toplevel, or after the zwlr_foreign_toplevel_handle_v1.closed
 * event has been received.
 */
static inline void
xfce_foreign_toplevel_handle_v1_destroy(struct xfce_foreign_toplevel_handle_v1 *xfce_foreign_toplevel_handle_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_handle_v1,
			 XFCE_FOREIGN_TOPLEVEL_HANDLE_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_handle_v1), WL_MARSHAL_FLAG_DESTROY);
}

#ifndef XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILURE_REASON_ENUM
#define XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILURE_REASON_ENUM
enum xfce_foreign_toplevel_icon_pixels_v1_failure_reason {
	/**
	 * The associated toplevel does not have any icon pixel data
	 */
	XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILURE_REASON_NO_PIXEL_DATA = 0,
	/**
	 * The specified size and/or scale is not available
	 */
	XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILURE_REASON_INVALID_ARGS = 1,
	/**
	 * An unexpected error occurred
	 */
	XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILURE_REASON_UNKNOWN = 2,
};
#endif /* XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILURE_REASON_ENUM */

/**
 * @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1
 * @struct xfce_foreign_toplevel_icon_pixels_v1_listener
 */
struct xfce_foreign_toplevel_icon_pixels_v1_listener {
	/**
	 * The icon's pixel data
	 *
	 * The pixel data is provided in litte-endian ARGB32 format, with
	 * premultiplied alpha.
	 *
	 * The total size of the mapping can be calculated by multiplying
	 * stride with height.
	 *
	 * The compositor will not use this object for any other purpose
	 * after sending this event; after reading the pixel data, you
	 * should call destroy.
	 * @param fd A mappable file descriptor containing the pixel data
	 * @param width The pixel width of the data
	 * @param height The pixel height of the data
	 * @param stride The size in bytes of each row of data
	 */
	void (*pixels)(void *data,
		       struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1,
		       int32_t fd,
		       uint32_t width,
		       uint32_t height,
		       uint32_t stride);
	/**
	 * The icon's pixel data could not be provided
	 *
	 * The icon's pixel data cannot be provided for the supplied
	 * reason.
	 *
	 * The client should destroy this object after receiving this
	 * event.
	 */
	void (*failed)(void *data,
		       struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1,
		       uint32_t reason);
};

/**
 * @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1
 */
static inline int
xfce_foreign_toplevel_icon_pixels_v1_add_listener(struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1,
						  const struct xfce_foreign_toplevel_icon_pixels_v1_listener *listener, void *data)
{
	return wl_proxy_add_listener((struct wl_proxy *) xfce_foreign_toplevel_icon_pixels_v1,
				     (void (**)(void)) listener, data);
}

#define XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_DESTROY 0

/**
 * @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_PIXELS_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_FAILED_SINCE_VERSION 1

/**
 * @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1
 */
#define XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_DESTROY_SINCE_VERSION 1

/** @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1 */
static inline void
xfce_foreign_toplevel_icon_pixels_v1_set_user_data(struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1, void *user_data)
{
	wl_proxy_set_user_data((struct wl_proxy *) xfce_foreign_toplevel_icon_pixels_v1, user_data);
}

/** @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1 */
static inline void *
xfce_foreign_toplevel_icon_pixels_v1_get_user_data(struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1)
{
	return wl_proxy_get_user_data((struct wl_proxy *) xfce_foreign_toplevel_icon_pixels_v1);
}

static inline uint32_t
xfce_foreign_toplevel_icon_pixels_v1_get_version(struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1)
{
	return wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_icon_pixels_v1);
}

/**
 * @ingroup iface_xfce_foreign_toplevel_icon_pixels_v1
 *
 * Informs the compositor that the client no longer has a need for this
 * instance. While this does destroy the object, the compositor may have
 * already sent a pixels or failed event that has not yet been processed by
 * the client, and should be ignored.
 */
static inline void
xfce_foreign_toplevel_icon_pixels_v1_destroy(struct xfce_foreign_toplevel_icon_pixels_v1 *xfce_foreign_toplevel_icon_pixels_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_foreign_toplevel_icon_pixels_v1,
			 XFCE_FOREIGN_TOPLEVEL_ICON_PIXELS_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_foreign_toplevel_icon_pixels_v1), WL_MARSHAL_FLAG_DESTROY);
}

#ifdef  __cplusplus
}
#endif

#endif
