/* Generated by wayland-scanner 1.26.0 */

#ifndef XFCE_OUTPUT_PRIVATE_V1_CLIENT_PROTOCOL_H
#define XFCE_OUTPUT_PRIVATE_V1_CLIENT_PROTOCOL_H

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

#ifdef  __cplusplus
extern "C" {
#endif

/**
 * @page page_xfce_output_private_v1 The xfce_output_private_v1 protocol
 * @section page_ifaces_xfce_output_private_v1 Interfaces
 * - @subpage page_iface_xfce_output_manager_private_v1 - Xfce output extensions
 * - @subpage page_iface_xfce_output_v1 - 
 * @section page_copyright_xfce_output_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 wl_output;
struct wl_seat;
struct xfce_output_manager_private_v1;
struct xfce_output_v1;

#ifndef XFCE_OUTPUT_MANAGER_PRIVATE_V1_INTERFACE
#define XFCE_OUTPUT_MANAGER_PRIVATE_V1_INTERFACE
/**
 * @page page_iface_xfce_output_manager_private_v1 xfce_output_manager_private_v1
 * @section page_iface_xfce_output_manager_private_v1_desc Description
 *
 * This protocol advertises extensions to the existing wl_output and
 * xdg_output_v1 protocols.
 *
 * 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.
 *
 * This protocol depends on the wl_output protocol (with a soft dependency on
 * the xdg_output_v1 protocol).
 * @section page_iface_xfce_output_manager_private_v1_api API
 * See @ref iface_xfce_output_manager_private_v1.
 */
/**
 * @defgroup iface_xfce_output_manager_private_v1 The xfce_output_manager_private_v1 interface
 *
 * This protocol advertises extensions to the existing wl_output and
 * xdg_output_v1 protocols.
 *
 * 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.
 *
 * This protocol depends on the wl_output protocol (with a soft dependency on
 * the xdg_output_v1 protocol).
 */
extern const struct wl_interface xfce_output_manager_private_v1_interface;
#endif
#ifndef XFCE_OUTPUT_V1_INTERFACE
#define XFCE_OUTPUT_V1_INTERFACE
/**
 * @page page_iface_xfce_output_v1 xfce_output_v1
 * @section page_iface_xfce_output_v1_api API
 * See @ref iface_xfce_output_v1.
 */
/**
 * @defgroup iface_xfce_output_v1 The xfce_output_v1 interface
 */
extern const struct wl_interface xfce_output_v1_interface;
#endif

#define XFCE_OUTPUT_MANAGER_PRIVATE_V1_GET_XFCE_OUTPUT 0
#define XFCE_OUTPUT_MANAGER_PRIVATE_V1_RELEASE 1


/**
 * @ingroup iface_xfce_output_manager_private_v1
 */
#define XFCE_OUTPUT_MANAGER_PRIVATE_V1_GET_XFCE_OUTPUT_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_manager_private_v1
 */
#define XFCE_OUTPUT_MANAGER_PRIVATE_V1_RELEASE_SINCE_VERSION 1

/** @ingroup iface_xfce_output_manager_private_v1 */
static inline void
xfce_output_manager_private_v1_set_user_data(struct xfce_output_manager_private_v1 *xfce_output_manager_private_v1, void *user_data)
{
	wl_proxy_set_user_data((struct wl_proxy *) xfce_output_manager_private_v1, user_data);
}

/** @ingroup iface_xfce_output_manager_private_v1 */
static inline void *
xfce_output_manager_private_v1_get_user_data(struct xfce_output_manager_private_v1 *xfce_output_manager_private_v1)
{
	return wl_proxy_get_user_data((struct wl_proxy *) xfce_output_manager_private_v1);
}

static inline uint32_t
xfce_output_manager_private_v1_get_version(struct xfce_output_manager_private_v1 *xfce_output_manager_private_v1)
{
	return wl_proxy_get_version((struct wl_proxy *) xfce_output_manager_private_v1);
}

/** @ingroup iface_xfce_output_manager_private_v1 */
static inline void
xfce_output_manager_private_v1_destroy(struct xfce_output_manager_private_v1 *xfce_output_manager_private_v1)
{
	wl_proxy_destroy((struct wl_proxy *) xfce_output_manager_private_v1);
}

/**
 * @ingroup iface_xfce_output_manager_private_v1
 *
 * This creates a new xfce_output_v1 object for the given wl_output.
 */
static inline struct xfce_output_v1 *
xfce_output_manager_private_v1_get_xfce_output(struct xfce_output_manager_private_v1 *xfce_output_manager_private_v1, struct wl_output *output)
{
	struct wl_proxy *id;

	id = wl_proxy_marshal_flags((struct wl_proxy *) xfce_output_manager_private_v1,
			 XFCE_OUTPUT_MANAGER_PRIVATE_V1_GET_XFCE_OUTPUT, &xfce_output_v1_interface, wl_proxy_get_version((struct wl_proxy *) xfce_output_manager_private_v1), 0, NULL, output);

	return (struct xfce_output_v1 *) id;
}

/**
 * @ingroup iface_xfce_output_manager_private_v1
 */
static inline void
xfce_output_manager_private_v1_release(struct xfce_output_manager_private_v1 *xfce_output_manager_private_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_output_manager_private_v1,
			 XFCE_OUTPUT_MANAGER_PRIVATE_V1_RELEASE, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_output_manager_private_v1), WL_MARSHAL_FLAG_DESTROY);
}

/**
 * @ingroup iface_xfce_output_v1
 * @struct xfce_output_v1_listener
 */
struct xfce_output_v1_listener {
	/**
	 * Advertises the serial number of a device
	 *
	 * This informs the client of the output's hardware serial
	 * number.
	 *
	 * This event is emitted on creation of the xfce_output_v1
	 * instance, if the serial number is available.
	 *
	 * Since the serial number will never change during the lifetime of
	 * this output object, it is safe to assume you will only get this
	 * event once for each xfce_output_v1.
	 *
	 * This event is a property that is a part of the 'done' grouping.
	 * See the xfce_output_v1.done event for more information.
	 */
	void (*serial)(void *data,
		       struct xfce_output_v1 *xfce_output_v1,
		       const char *serial);
	/**
	 * Advertises the EDID of a device
	 *
	 * The EDID data is raw binary data exposed by the monitor's
	 * hardware and will need to be parsed in order to be useful.
	 *
	 * This event is emitted on creation of the xfce_output_v1
	 * instance, if the EDID is available.
	 *
	 * Since the EDID will never change during the lifetime of this
	 * output object, it is safe to assume you will only get this event
	 * once for each xfce_output_v1.
	 *
	 * This event is a property that is a part of the 'done' grouping.
	 * See the xfce_output_v1.done event for more information.
	 * @param fd A file descriptor that can be mapped into memory
	 * @param size The size of the memory region referred to by fd
	 */
	void (*edid)(void *data,
		     struct xfce_output_v1 *xfce_output_v1,
		     int32_t fd,
		     uint32_t size);
	/**
	 * Emitted when the output becomes primary
	 *
	 * The user or compositor may have designated an output as
	 * "primary", which is the output that might usually hold the
	 * desktop's main UI elements, like a panel or dock.
	 *
	 * Since only one output can be primary, receiving this event means
	 * that the previous primary output is no longer primary.
	 *
	 * This event is a property that is a part of the 'done' grouping.
	 * See the xfce_output_v1.done event for more information.
	 */
	void (*primary)(void *data,
			struct xfce_output_v1 *xfce_output_v1);
	/**
	 * Advertises the usable space on the output
	 *
	 * An output's workarea is the area that is usable for the
	 * display of regular surfaces. For example, a panel or dock may
	 * reserve space at the edge of the screen where other surfaces
	 * should not be placed, so the area taken up by the panel or dock
	 * would be excluded by the workkarea.
	 *
	 * Coordinates and size are presented in output-relative, logical
	 * coordinates that may be scaled (see xdg_output_v1.logical_size
	 * for details), with the (0, 0) origin in the top-left corner.
	 *
	 * The workarea event will always be emitted after binding the
	 * object, even if the coordinates and size represent the full
	 * output area. It will be emitted again any time the workarea
	 * changes.
	 *
	 * This event is a property that is a part of the 'done' grouping.
	 * See the xfce_output_v1.done event for more information.
	 * @param x x-origin of the workarea
	 * @param y y-origin of the workarea
	 * @param width Width of the workarea
	 * @param height Height of the workarea
	 */
	void (*workarea)(void *data,
			 struct xfce_output_v1 *xfce_output_v1,
			 int32_t x,
			 int32_t y,
			 uint32_t width,
			 uint32_t height);
	/**
	 * Initial properties have been sent
	 *
	 * Sent after a grouping of event properties has been sent.
	 *
	 * After initially creating the object, all known properties will
	 * be sent before this event is sent. When properties change, their
	 * events will be succeeded by this event.
	 *
	 * See the individual events to learn which events are part of the
	 * initial 'done' group.
	 */
	void (*done)(void *data,
		     struct xfce_output_v1 *xfce_output_v1);
	/**
	 * Emitted when a pointer enters this output
	 *
	 * The pointer for a seat can only be on one output at a time,
	 * so, aside from the first emission of this event, it will never
	 * be emitted without being preceded by a pointer_leave event from
	 * another xfce_output_v1 instance.
	 *
	 * This event will be emitted at bind time to inform new clients of
	 * the output the pointer is currently on.
	 *
	 * Note that this event is _not_ part of the 'done' group.
	 */
	void (*pointer_enter)(void *data,
			      struct xfce_output_v1 *xfce_output_v1,
			      struct wl_seat *seat);
	/**
	 * Emitted when a pointer leaves this output
	 *
	 * The pointer for a seat can only be on one output at a time, so
	 * this event will never be emitted without being preceded by a
	 * pointer_enter event on the same object.
	 *
	 * Note that this event is _not_ part of the 'done' group.
	 */
	void (*pointer_leave)(void *data,
			      struct xfce_output_v1 *xfce_output_v1,
			      struct wl_seat *seat);
};

/**
 * @ingroup iface_xfce_output_v1
 */
static inline int
xfce_output_v1_add_listener(struct xfce_output_v1 *xfce_output_v1,
			    const struct xfce_output_v1_listener *listener, void *data)
{
	return wl_proxy_add_listener((struct wl_proxy *) xfce_output_v1,
				     (void (**)(void)) listener, data);
}

#define XFCE_OUTPUT_V1_DESTROY 0

/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_SERIAL_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_EDID_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_PRIMARY_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_WORKAREA_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_DONE_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_POINTER_ENTER_SINCE_VERSION 1
/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_POINTER_LEAVE_SINCE_VERSION 1

/**
 * @ingroup iface_xfce_output_v1
 */
#define XFCE_OUTPUT_V1_DESTROY_SINCE_VERSION 1

/** @ingroup iface_xfce_output_v1 */
static inline void
xfce_output_v1_set_user_data(struct xfce_output_v1 *xfce_output_v1, void *user_data)
{
	wl_proxy_set_user_data((struct wl_proxy *) xfce_output_v1, user_data);
}

/** @ingroup iface_xfce_output_v1 */
static inline void *
xfce_output_v1_get_user_data(struct xfce_output_v1 *xfce_output_v1)
{
	return wl_proxy_get_user_data((struct wl_proxy *) xfce_output_v1);
}

static inline uint32_t
xfce_output_v1_get_version(struct xfce_output_v1 *xfce_output_v1)
{
	return wl_proxy_get_version((struct wl_proxy *) xfce_output_v1);
}

/**
 * @ingroup iface_xfce_output_v1
 */
static inline void
xfce_output_v1_destroy(struct xfce_output_v1 *xfce_output_v1)
{
	wl_proxy_marshal_flags((struct wl_proxy *) xfce_output_v1,
			 XFCE_OUTPUT_V1_DESTROY, NULL, wl_proxy_get_version((struct wl_proxy *) xfce_output_v1), WL_MARSHAL_FLAG_DESTROY);
}

#ifdef  __cplusplus
}
#endif

#endif
