summaryrefslogtreecommitdiffstats
path: root/uwac/include
diff options
context:
space:
mode:
Diffstat (limited to 'uwac/include')
-rw-r--r--uwac/include/CMakeLists.txt26
-rw-r--r--uwac/include/uwac/uwac-tools.h43
-rw-r--r--uwac/include/uwac/uwac.h668
3 files changed, 737 insertions, 0 deletions
diff --git a/uwac/include/CMakeLists.txt b/uwac/include/CMakeLists.txt
new file mode 100644
index 0000000..6988200
--- /dev/null
+++ b/uwac/include/CMakeLists.txt
@@ -0,0 +1,26 @@
+# UWAC: Using Wayland As Client
+# cmake build script
+#
+# Copyright 2015 David FORT <contact@hardening-consulting.com>
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+if (NOT UWAC_FORCE_STATIC_BUILD)
+ install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/
+ DESTINATION ${UWAC_INCLUDE_DIR}
+ FILES_MATCHING PATTERN "*.h")
+
+ install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/
+ DESTINATION ${UWAC_INCLUDE_DIR}
+ FILES_MATCHING PATTERN "*.h")
+endif()
diff --git a/uwac/include/uwac/uwac-tools.h b/uwac/include/uwac/uwac-tools.h
new file mode 100644
index 0000000..65d2617
--- /dev/null
+++ b/uwac/include/uwac/uwac-tools.h
@@ -0,0 +1,43 @@
+/*
+ * Copyright © 2015 David FORT <contact@hardening-consulting.com>
+ *
+ * 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.
+ */
+
+#ifndef UWAC_TOOLS_H_
+#define UWAC_TOOLS_H_
+
+#include <stdbool.h>
+#include <uwac/uwac.h>
+
+struct uwac_touch_point
+{
+ uint32_t id;
+ wl_fixed_t x, y;
+};
+typedef struct uwac_touch_point UwacTouchPoint;
+
+struct uwac_touch_automata;
+typedef struct uwac_touch_automata UwacTouchAutomata;
+
+UWAC_API void UwacTouchAutomataInit(UwacTouchAutomata* automata);
+UWAC_API void UwacTouchAutomataReset(UwacTouchAutomata* automata);
+UWAC_API bool UwacTouchAutomataInjectEvent(UwacTouchAutomata* automata, UwacEvent* event);
+
+#endif /* UWAC_TOOLS_H_ */
diff --git a/uwac/include/uwac/uwac.h b/uwac/include/uwac/uwac.h
new file mode 100644
index 0000000..928e693
--- /dev/null
+++ b/uwac/include/uwac/uwac.h
@@ -0,0 +1,668 @@
+/*
+ * Copyright © 2014-2015 David FORT <contact@hardening-consulting.com>
+ *
+ * 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.
+ */
+
+#ifndef UWAC_H_
+#define UWAC_H_
+
+#include <wayland-client.h>
+#include <stdbool.h>
+
+#if defined(__GNUC__) && (__GNUC__ >= 4)
+#define UWAC_API __attribute__((visibility("default")))
+#else
+#define UWAC_API
+#endif
+
+typedef struct uwac_position UwacPosition;
+typedef struct uwac_size UwacSize;
+typedef struct uwac_display UwacDisplay;
+typedef struct uwac_output UwacOutput;
+typedef struct uwac_window UwacWindow;
+typedef struct uwac_seat UwacSeat;
+typedef uint32_t UwacSeatId;
+
+/** @brief error codes */
+typedef enum
+{
+ UWAC_SUCCESS = 0,
+ UWAC_ERROR_NOMEMORY,
+ UWAC_ERROR_UNABLE_TO_CONNECT,
+ UWAC_ERROR_INVALID_DISPLAY,
+ UWAC_NOT_ENOUGH_RESOURCES,
+ UWAC_TIMEDOUT,
+ UWAC_NOT_FOUND,
+ UWAC_ERROR_CLOSED,
+ UWAC_ERROR_INTERNAL,
+
+ UWAC_ERROR_LAST,
+} UwacReturnCode;
+
+/** @brief input modifiers */
+enum
+{
+ UWAC_MOD_SHIFT_MASK = 0x01,
+ UWAC_MOD_ALT_MASK = 0x02,
+ UWAC_MOD_CONTROL_MASK = 0x04,
+ UWAC_MOD_CAPS_MASK = 0x08,
+ UWAC_MOD_NUM_MASK = 0x10,
+};
+
+/** @brief a position */
+struct uwac_position
+{
+ int x;
+ int y;
+};
+
+/** @brief a rectangle size measure */
+struct uwac_size
+{
+ int width;
+ int height;
+};
+
+/** @brief event types */
+enum
+{
+ UWAC_EVENT_NEW_SEAT = 0,
+ UWAC_EVENT_REMOVED_SEAT,
+ UWAC_EVENT_NEW_OUTPUT,
+ UWAC_EVENT_CONFIGURE,
+ UWAC_EVENT_POINTER_ENTER,
+ UWAC_EVENT_POINTER_LEAVE,
+ UWAC_EVENT_POINTER_MOTION,
+ UWAC_EVENT_POINTER_BUTTONS,
+ UWAC_EVENT_POINTER_AXIS,
+ UWAC_EVENT_KEYBOARD_ENTER,
+ UWAC_EVENT_KEYBOARD_MODIFIERS,
+ UWAC_EVENT_KEY,
+ UWAC_EVENT_TOUCH_FRAME_BEGIN,
+ UWAC_EVENT_TOUCH_UP,
+ UWAC_EVENT_TOUCH_DOWN,
+ UWAC_EVENT_TOUCH_MOTION,
+ UWAC_EVENT_TOUCH_CANCEL,
+ UWAC_EVENT_TOUCH_FRAME_END,
+ UWAC_EVENT_FRAME_DONE,
+ UWAC_EVENT_CLOSE,
+ UWAC_EVENT_CLIPBOARD_AVAILABLE,
+ UWAC_EVENT_CLIPBOARD_SELECT,
+ UWAC_EVENT_CLIPBOARD_OFFER,
+ UWAC_EVENT_OUTPUT_GEOMETRY,
+ UWAC_EVENT_POINTER_AXIS_DISCRETE,
+ UWAC_EVENT_POINTER_FRAME,
+ UWAC_EVENT_POINTER_SOURCE
+};
+
+/** @brief window states */
+enum
+{
+ UWAC_WINDOW_MAXIMIZED = 0x1,
+ UWAC_WINDOW_RESIZING = 0x2,
+ UWAC_WINDOW_FULLSCREEN = 0x4,
+ UWAC_WINDOW_ACTIVATED = 0x8,
+};
+
+struct uwac_new_output_event
+{
+ int type;
+ UwacOutput* output;
+};
+typedef struct uwac_new_output_event UwacOutputNewEvent;
+
+struct uwac_new_seat_event
+{
+ int type;
+ UwacSeat* seat;
+};
+typedef struct uwac_new_seat_event UwacSeatNewEvent;
+
+struct uwac_removed_seat_event
+{
+ int type;
+ UwacSeatId id;
+};
+typedef struct uwac_removed_seat_event UwacSeatRemovedEvent;
+
+struct uwac_keyboard_enter_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+};
+typedef struct uwac_keyboard_enter_event UwacKeyboardEnterLeaveEvent;
+
+struct uwac_keyboard_modifiers_event
+{
+ int type;
+ uint32_t modifiers;
+};
+typedef struct uwac_keyboard_modifiers_event UwacKeyboardModifiersEvent;
+
+struct uwac_pointer_enter_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+ uint32_t x, y;
+};
+typedef struct uwac_pointer_enter_event UwacPointerEnterLeaveEvent;
+
+struct uwac_pointer_motion_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+ uint32_t x, y;
+};
+typedef struct uwac_pointer_motion_event UwacPointerMotionEvent;
+
+struct uwac_pointer_button_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+ uint32_t x, y;
+ uint32_t button;
+ enum wl_pointer_button_state state;
+};
+typedef struct uwac_pointer_button_event UwacPointerButtonEvent;
+
+struct uwac_pointer_axis_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+ uint32_t x, y;
+ uint32_t axis;
+ wl_fixed_t value;
+};
+typedef struct uwac_pointer_axis_event UwacPointerAxisEvent;
+
+struct uwac_pointer_frame_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+};
+typedef struct uwac_pointer_frame_event UwacPointerFrameEvent;
+
+struct uwac_pointer_source_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+ enum wl_pointer_axis_source axis_source;
+};
+typedef struct uwac_pointer_source_event UwacPointerSourceEvent;
+
+struct uwac_touch_frame_event
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+};
+typedef struct uwac_touch_frame_event UwacTouchFrameBegin;
+typedef struct uwac_touch_frame_event UwacTouchFrameEnd;
+typedef struct uwac_touch_frame_event UwacTouchCancel;
+
+struct uwac_touch_data
+{
+ int type;
+ UwacWindow* window;
+ UwacSeat* seat;
+ int32_t id;
+ wl_fixed_t x;
+ wl_fixed_t y;
+};
+typedef struct uwac_touch_data UwacTouchUp;
+typedef struct uwac_touch_data UwacTouchDown;
+typedef struct uwac_touch_data UwacTouchMotion;
+
+struct uwac_frame_done_event
+{
+ int type;
+ UwacWindow* window;
+};
+typedef struct uwac_frame_done_event UwacFrameDoneEvent;
+
+struct uwac_configure_event
+{
+ int type;
+ UwacWindow* window;
+ int32_t width;
+ int32_t height;
+ int states;
+};
+typedef struct uwac_configure_event UwacConfigureEvent;
+
+struct uwac_key_event
+{
+ int type;
+ UwacWindow* window;
+ uint32_t raw_key;
+ uint32_t sym;
+ bool pressed;
+ bool repeated;
+};
+typedef struct uwac_key_event UwacKeyEvent;
+
+struct uwac_close_event
+{
+ int type;
+ UwacWindow* window;
+};
+typedef struct uwac_close_event UwacCloseEvent;
+
+struct uwac_clipboard_event
+{
+ int type;
+ UwacSeat* seat;
+ char mime[64];
+};
+typedef struct uwac_clipboard_event UwacClipboardEvent;
+
+struct uwac_output_geometry_event
+{
+ int type;
+ UwacOutput* output;
+ int x;
+ int y;
+ int physical_width;
+ int physical_height;
+ int subpixel;
+ const char* make;
+ const char* model;
+ int transform;
+};
+typedef struct uwac_output_geometry_event UwacOutputGeometryEvent;
+
+union uwac_event
+{
+ int type;
+ UwacOutputNewEvent output_new;
+ UwacOutputGeometryEvent output_geometry;
+ UwacSeatNewEvent seat_new;
+ UwacSeatRemovedEvent seat_removed;
+ UwacPointerEnterLeaveEvent mouse_enter_leave;
+ UwacPointerMotionEvent mouse_motion;
+ UwacPointerButtonEvent mouse_button;
+ UwacPointerAxisEvent mouse_axis;
+ UwacPointerFrameEvent mouse_frame;
+ UwacPointerSourceEvent mouse_source;
+ UwacKeyboardEnterLeaveEvent keyboard_enter_leave;
+ UwacKeyboardModifiersEvent keyboard_modifiers;
+ UwacClipboardEvent clipboard;
+ UwacKeyEvent key;
+ UwacTouchFrameBegin touchFrameBegin;
+ UwacTouchUp touchUp;
+ UwacTouchDown touchDown;
+ UwacTouchMotion touchMotion;
+ UwacTouchFrameEnd touchFrameEnd;
+ UwacTouchCancel touchCancel;
+ UwacFrameDoneEvent frame_done;
+ UwacConfigureEvent configure;
+ UwacCloseEvent close;
+};
+typedef union uwac_event UwacEvent;
+
+typedef bool (*UwacErrorHandler)(UwacDisplay* d, UwacReturnCode code, const char* msg, ...);
+typedef void (*UwacDataTransferHandler)(UwacSeat* seat, void* context, const char* mime, int fd);
+typedef void (*UwacCancelDataTransferHandler)(UwacSeat* seat, void* context);
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+ /**
+ * install a handler that will be called when UWAC encounter internal errors. The
+ * handler is supposed to answer if the execution can continue. I can also be used
+ * to log things.
+ *
+ * @param handler the error handling function to install
+ */
+ UWAC_API void UwacInstallErrorHandler(UwacErrorHandler handler);
+
+ /**
+ * Opens the corresponding wayland display, using NULL you will open the default
+ * display.
+ *
+ * @param name the name of the display to open
+ * @return the created UwacDisplay object
+ */
+ UWAC_API UwacDisplay* UwacOpenDisplay(const char* name, UwacReturnCode* err);
+
+ /**
+ * closes the corresponding UwacDisplay
+ *
+ * @param pdisplay a pointer on the display to close
+ * @return UWAC_SUCCESS if the operation was successful, the corresponding error otherwise
+ */
+ UWAC_API UwacReturnCode UwacCloseDisplay(UwacDisplay** pdisplay);
+
+ /**
+ * Returns the file descriptor associated with the UwacDisplay, this is useful when
+ * you want to poll that file descriptor for activity.
+ *
+ * @param display an opened UwacDisplay
+ * @return the corresponding descriptor
+ */
+ UWAC_API int UwacDisplayGetFd(UwacDisplay* display);
+
+ /**
+ * Returns a human readable form of a Uwac error code
+ *
+ * @param error the error number
+ * @return the associated string
+ */
+ UWAC_API const char* UwacErrorString(UwacReturnCode error);
+
+ /**
+ * returns the last error that occurred on a display
+ *
+ * @param display the display
+ * @return the last error that have been set for this display
+ */
+ UWAC_API UwacReturnCode UwacDisplayGetLastError(const UwacDisplay* display);
+
+ /**
+ * retrieves the version of a given interface
+ *
+ * @param display the display connection
+ * @param name the name of the interface
+ * @param version the output variable for the version
+ * @return UWAC_SUCCESS if the interface was found, UWAC_NOT_FOUND otherwise
+ */
+ UWAC_API UwacReturnCode UwacDisplayQueryInterfaceVersion(const UwacDisplay* display,
+ const char* name, uint32_t* version);
+
+ /**
+ * returns the number SHM formats that have been reported by the compositor
+ *
+ * @param display a connected UwacDisplay
+ * @return the number of SHM formats supported
+ */
+ UWAC_API uint32_t UwacDisplayQueryGetNbShmFormats(UwacDisplay* display);
+
+ /**
+ * returns the supported ShmFormats
+ *
+ * @param display a connected UwacDisplay
+ * @param formats a pointer on an array of wl_shm_format with enough place for formats_size
+ *items
+ * @param formats_size the size of the formats array
+ * @param filled the number of filled entries in the formats array
+ * @return UWAC_SUCCESS on success, an error otherwise
+ */
+ UWAC_API UwacReturnCode UwacDisplayQueryShmFormats(const UwacDisplay* display,
+ enum wl_shm_format* formats,
+ int formats_size, int* filled);
+
+ /**
+ * returns the number of registered outputs
+ *
+ * @param display the display to query
+ * @return the number of outputs
+ */
+ UWAC_API uint32_t UwacDisplayGetNbOutputs(const UwacDisplay* display);
+
+ /**
+ * retrieve a particular UwacOutput object
+ *
+ * @param display the display to query
+ * @param index index of the output
+ * @return the given UwacOutput, NULL if something failed (so you should query
+ *UwacDisplayGetLastError() to have the reason)
+ */
+ UWAC_API const UwacOutput* UwacDisplayGetOutput(UwacDisplay* display, int index);
+
+ /**
+ * retrieve the resolution of a given UwacOutput
+ *
+ * @param output the UwacOutput
+ * @param resolution a pointer on the
+ * @return UWAC_SUCCESS on success
+ */
+ UWAC_API UwacReturnCode UwacOutputGetResolution(const UwacOutput* output, UwacSize* resolution);
+
+ /**
+ * retrieve the position of a given UwacOutput
+ *
+ * @param output the UwacOutput
+ * @param pos a pointer on the target position
+ * @return UWAC_SUCCESS on success
+ */
+ UWAC_API UwacReturnCode UwacOutputGetPosition(const UwacOutput* output, UwacPosition* pos);
+
+ /**
+ * creates a window using a SHM surface
+ *
+ * @param display the display to attach the window to
+ * @param width the width of the window
+ * @param height the heigh of the window
+ * @param format format to use for the SHM surface
+ * @return the created UwacWindow, NULL if something failed (use UwacDisplayGetLastError() to
+ *know more about this)
+ */
+ UWAC_API UwacWindow* UwacCreateWindowShm(UwacDisplay* display, uint32_t width, uint32_t height,
+ enum wl_shm_format format);
+
+ /**
+ * destroys the corresponding UwacWindow
+ *
+ * @param window a pointer on the UwacWindow to destroy
+ * @return if the operation completed successfully
+ */
+ UWAC_API UwacReturnCode UwacDestroyWindow(UwacWindow** window);
+
+ /**
+ * Sets the region that should be considered opaque to the compositor.
+ *
+ * @param window the UwacWindow
+ * @param x The horizontal coordinate in pixels
+ * @param y The vertical coordinate in pixels
+ * @param width The width of the region
+ * @param height The height of the region
+ * @return UWAC_SUCCESS on success, an error otherwise
+ */
+ UWAC_API UwacReturnCode UwacWindowSetOpaqueRegion(UwacWindow* window, uint32_t x, uint32_t y,
+ uint32_t width, uint32_t height);
+
+ /**
+ * Sets the region of the window that can trigger input events
+ *
+ * @param window the UwacWindow
+ * @param x The horizontal coordinate in pixels
+ * @param y The vertical coordinate in pixels
+ * @param width The width of the region
+ * @param height The height of the region
+ * @return UWAC_SUCCESS on success, an error otherwise
+ */
+ UWAC_API UwacReturnCode UwacWindowSetInputRegion(UwacWindow* window, uint32_t x, uint32_t y,
+ uint32_t width, uint32_t height);
+
+ /**
+ * retrieves a pointer on the current window content to draw a frame
+ * @param window the UwacWindow
+ * @return a pointer on the current window content
+ */
+ UWAC_API void* UwacWindowGetDrawingBuffer(UwacWindow* window);
+
+ /**
+ * sets a rectangle as dirty for the next frame of a window
+ *
+ * @param window the UwacWindow
+ * @param x left coordinate
+ * @param y top coordinate
+ * @param width the width of the dirty rectangle
+ * @param height the height of the dirty rectangle
+ * @return UWAC_SUCCESS on success, an Uwac error otherwise
+ */
+ UWAC_API UwacReturnCode UwacWindowAddDamage(UwacWindow* window, uint32_t x, uint32_t y,
+ uint32_t width, uint32_t height);
+
+ /**
+ * returns the geometry of the given UwacWindow buffer
+ *
+ * @param window the UwacWindow
+ * @param geometry the geometry to fill
+ * @param stride the length of a buffer line in bytes
+ * @return UWAC_SUCCESS on success, an Uwac error otherwise
+ */
+ UWAC_API UwacReturnCode UwacWindowGetDrawingBufferGeometry(UwacWindow* window,
+ UwacSize* geometry, size_t* stride);
+
+ /**
+ * Sends a frame to the compositor with the content of the drawing buffer
+ *
+ * @param window the UwacWindow to refresh
+ * @param copyContentForNextFrame if true the content to display is copied in the next drawing
+ *buffer
+ * @return UWAC_SUCCESS if the operation was successful
+ */
+ UWAC_API UwacReturnCode UwacWindowSubmitBuffer(UwacWindow* window,
+ bool copyContentForNextFrame);
+
+ /**
+ * returns the geometry of the given UwacWindows
+ *
+ * @param window the UwacWindow
+ * @param geometry the geometry to fill
+ * @return UWAC_SUCCESS on success, an Uwac error otherwise
+ */
+ UWAC_API UwacReturnCode UwacWindowGetGeometry(UwacWindow* window, UwacSize* geometry);
+
+ /**
+ * Sets or unset the fact that the window is set fullscreen. After this call the
+ * application should get prepared to receive a configure event. The output is used
+ * only when going fullscreen, it is optional and not used when exiting fullscreen.
+ *
+ * @param window the UwacWindow
+ * @param output an optional UwacOutput to put the window fullscreen on
+ * @param isFullscreen set or unset fullscreen
+ * @return UWAC_SUCCESS if the operation was a success
+ */
+ UWAC_API UwacReturnCode UwacWindowSetFullscreenState(UwacWindow* window, UwacOutput* output,
+ bool isFullscreen);
+
+ /**
+ * When possible (depending on the shell) sets the title of the UwacWindow
+ *
+ * @param window the UwacWindow
+ * @param name title
+ */
+ UWAC_API void UwacWindowSetTitle(UwacWindow* window, const char* name);
+
+ /**
+ * Sets the app id of the UwacWindow
+ *
+ * @param window the UwacWindow
+ * @param app_id app id
+ */
+ UWAC_API void UwacWindowSetAppId(UwacWindow* window, const char* app_id);
+
+ /** Dispatch the display
+ *
+ * @param display The display to dispatch
+ * @param timeout The maximum time to wait in milliseconds (-1 == infinite).
+ * @return 1 for success, 0 if display not running, -1 on failure
+ */
+ UWAC_API int UwacDisplayDispatch(UwacDisplay* display, int timeout);
+
+ /**
+ * Returns if you have some pending events, and you can UwacNextEvent() without blocking
+ *
+ * @param display the UwacDisplay
+ * @return if there's some pending events
+ */
+ UWAC_API bool UwacHasEvent(UwacDisplay* display);
+
+ /** Waits until an event occurs, and when it's there copy the event from the queue to
+ * event.
+ *
+ * @param display the Uwac display
+ * @param event the event to fill
+ * @return if the operation completed successfully
+ */
+ UWAC_API UwacReturnCode UwacNextEvent(UwacDisplay* display, UwacEvent* event);
+
+ /**
+ * returns the name of the given UwacSeat
+ *
+ * @param seat the UwacSeat
+ * @return the name of the seat
+ */
+ UWAC_API const char* UwacSeatGetName(const UwacSeat* seat);
+
+ /**
+ * returns the id of the given UwacSeat
+ *
+ * @param seat the UwacSeat
+ * @return the id of the seat
+ */
+ UWAC_API UwacSeatId UwacSeatGetId(const UwacSeat* seat);
+
+ /**
+ *
+ */
+ UWAC_API UwacReturnCode UwacClipboardOfferDestroy(UwacSeat* seat);
+ UWAC_API UwacReturnCode UwacClipboardOfferCreate(UwacSeat* seat, const char* mime);
+ UWAC_API UwacReturnCode UwacClipboardOfferAnnounce(UwacSeat* seat, void* context,
+ UwacDataTransferHandler transfer,
+ UwacCancelDataTransferHandler cancel);
+ UWAC_API void* UwacClipboardDataGet(UwacSeat* seat, const char* mime, size_t* size);
+
+ /**
+ * Inhibits or restores keyboard shortcuts.
+ *
+ * @param seat The UwacSeat to inhibit the shortcuts for
+ * @param inhibit Inhibit or restore keyboard shortcuts
+ *
+ * @return UWAC_SUCCESS or an appropriate error code.
+ */
+ UWAC_API UwacReturnCode UwacSeatInhibitShortcuts(UwacSeat* seat, bool inhibit);
+
+ /**
+ * @brief UwacSeatSetMouseCursor Sets the specified image as the new mouse cursor.
+ * Special values: If data == NULL && lenght == 0
+ * the cursor is hidden, if data == NULL && length != 0
+ * the default system cursor is used.
+ *
+ * @param seat The UwacSeat to apply the cursor image to
+ * @param data A pointer to the image data
+ * @param length The size of the image data
+ * @param width The image width in pixel
+ * @param height The image height in pixel
+ * @param hot_x The hotspot horizontal offset in pixel
+ * @param hot_y The hotspot vertical offset in pixel
+ *
+ * @return UWAC_SUCCESS if successful, an appropriate error otherwise.
+ */
+ UWAC_API UwacReturnCode UwacSeatSetMouseCursor(UwacSeat* seat, const void* data, size_t length,
+ size_t width, size_t height, size_t hot_x,
+ size_t hot_y);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* UWAC_H_ */