summaryrefslogtreecommitdiffstats
path: root/uwac/libuwac/uwac-priv.h
diff options
context:
space:
mode:
Diffstat (limited to 'uwac/libuwac/uwac-priv.h')
-rw-r--r--uwac/libuwac/uwac-priv.h291
1 files changed, 291 insertions, 0 deletions
diff --git a/uwac/libuwac/uwac-priv.h b/uwac/libuwac/uwac-priv.h
new file mode 100644
index 0000000..68799f4
--- /dev/null
+++ b/uwac/libuwac/uwac-priv.h
@@ -0,0 +1,291 @@
+/*
+ * Copyright © 2014 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_PRIV_H_
+#define UWAC_PRIV_H_
+
+#include <uwac/config.h>
+
+#include <stdbool.h>
+#include <wayland-client.h>
+#include "xdg-shell-client-protocol.h"
+#include "keyboard-shortcuts-inhibit-unstable-v1-client-protocol.h"
+#include "xdg-decoration-unstable-v1-client-protocol.h"
+#include "server-decoration-client-protocol.h"
+#include "viewporter-client-protocol.h"
+
+#ifdef BUILD_IVI
+#include "ivi-application-client-protocol.h"
+#endif
+#ifdef BUILD_FULLSCREEN_SHELL
+#include "fullscreen-shell-unstable-v1-client-protocol.h"
+#endif
+
+#ifdef UWAC_HAVE_PIXMAN_REGION
+#include <pixman-1/pixman.h>
+#else
+#include <freerdp/codec/region.h>
+#endif
+
+#include <xkbcommon/xkbcommon.h>
+
+#include <uwac/uwac.h>
+
+extern UwacErrorHandler uwacErrorHandler;
+
+typedef struct uwac_task UwacTask;
+
+/** @brief task struct
+ */
+struct uwac_task
+{
+ void (*run)(UwacTask* task, uint32_t events);
+ struct wl_list link;
+};
+
+/** @brief a global registry object
+ */
+struct uwac_global
+{
+ uint32_t name;
+ char* interface;
+ uint32_t version;
+ struct wl_list link;
+};
+typedef struct uwac_global UwacGlobal;
+
+struct uwac_event_list_item;
+typedef struct uwac_event_list_item UwacEventListItem;
+
+/** @brief double linked list element
+ */
+struct uwac_event_list_item
+{
+ UwacEvent event;
+ UwacEventListItem *tail, *head;
+};
+
+/** @brief main connection object to a wayland display
+ */
+struct uwac_display
+{
+ struct wl_list globals;
+
+ struct wl_display* display;
+ struct wl_registry* registry;
+ struct wl_compositor* compositor;
+ struct wp_viewporter* viewporter;
+ struct wl_subcompositor* subcompositor;
+ struct wl_shell* shell;
+ struct xdg_toplevel* xdg_toplevel;
+ struct xdg_wm_base* xdg_base;
+ struct wl_data_device_manager* devicemanager;
+ struct zwp_keyboard_shortcuts_inhibit_manager_v1* keyboard_inhibit_manager;
+ struct zxdg_decoration_manager_v1* deco_manager;
+ struct org_kde_kwin_server_decoration_manager* kde_deco_manager;
+#ifdef BUILD_IVI
+ struct ivi_application* ivi_application;
+#endif
+#ifdef BUILD_FULLSCREEN_SHELL
+ struct zwp_fullscreen_shell_v1* fullscreen_shell;
+#endif
+
+ struct wl_shm* shm;
+ enum wl_shm_format* shm_formats;
+ uint32_t shm_formats_nb;
+ bool has_rgb565;
+
+ struct wl_data_device_manager* data_device_manager;
+ struct text_cursor_position* text_cursor_position;
+ struct workspace_manager* workspace_manager;
+
+ struct wl_list seats;
+
+ int display_fd;
+ UwacReturnCode last_error;
+ uint32_t display_fd_events;
+ int epoll_fd;
+ bool running;
+ UwacTask dispatch_fd_task;
+ uint32_t serial;
+ uint32_t pointer_focus_serial;
+ int actual_scale;
+
+ struct wl_list windows;
+
+ struct wl_list outputs;
+
+ UwacEventListItem *push_queue, *pop_queue;
+};
+
+/** @brief an output on a wayland display */
+struct uwac_output
+{
+ UwacDisplay* display;
+
+ bool doneNeeded;
+ bool doneReceived;
+
+ UwacPosition position;
+ UwacSize resolution;
+ int transform;
+ int scale;
+ char* make;
+ char* model;
+ uint32_t server_output_id;
+ struct wl_output* output;
+
+ struct wl_list link;
+ char* name;
+ char* description;
+};
+
+/** @brief a seat attached to a wayland display */
+struct uwac_seat
+{
+ UwacDisplay* display;
+ char* name;
+ struct wl_seat* seat;
+ uint32_t seat_id;
+ uint32_t seat_version;
+ struct wl_data_device* data_device;
+ struct wl_data_source* data_source;
+ struct wl_pointer* pointer;
+ struct wl_surface* pointer_surface;
+ struct wl_cursor_image* pointer_image;
+ struct wl_cursor_theme* cursor_theme;
+ struct wl_cursor* default_cursor;
+ void* pointer_data;
+ size_t pointer_size;
+ int pointer_type;
+ struct wl_keyboard* keyboard;
+ struct wl_touch* touch;
+ struct wl_data_offer* offer;
+ struct xkb_context* xkb_context;
+ struct zwp_keyboard_shortcuts_inhibitor_v1* keyboard_inhibitor;
+
+ struct
+ {
+ struct xkb_keymap* keymap;
+ struct xkb_state* state;
+ xkb_mod_mask_t control_mask;
+ xkb_mod_mask_t alt_mask;
+ xkb_mod_mask_t shift_mask;
+ xkb_mod_mask_t caps_mask;
+ xkb_mod_mask_t num_mask;
+ } xkb;
+ uint32_t modifiers;
+ int32_t repeat_rate_sec, repeat_rate_nsec;
+ int32_t repeat_delay_sec, repeat_delay_nsec;
+ uint32_t repeat_sym, repeat_key, repeat_time;
+
+ struct wl_array pressed_keys;
+
+ UwacWindow* pointer_focus;
+
+ UwacWindow* keyboard_focus;
+
+ UwacWindow* touch_focus;
+ bool touch_frame_started;
+
+ int repeat_timer_fd;
+ UwacTask repeat_task;
+ float sx, sy;
+ struct wl_list link;
+
+ void* data_context;
+ UwacDataTransferHandler transfer_data;
+ UwacCancelDataTransferHandler cancel_data;
+ bool ignore_announcement;
+};
+
+/** @brief a buffer used for drawing a surface frame */
+struct uwac_buffer
+{
+ bool used;
+ bool dirty;
+#ifdef UWAC_HAVE_PIXMAN_REGION
+ pixman_region32_t damage;
+#else
+ REGION16 damage;
+#endif
+ struct wl_buffer* wayland_buffer;
+ void* data;
+ size_t size;
+};
+typedef struct uwac_buffer UwacBuffer;
+
+/** @brief a window */
+struct uwac_window
+{
+ UwacDisplay* display;
+ int width, height, stride;
+ int surfaceStates;
+ enum wl_shm_format format;
+
+ int nbuffers;
+ UwacBuffer* buffers;
+
+ struct wl_region* opaque_region;
+ struct wl_region* input_region;
+ ssize_t drawingBufferIdx;
+ ssize_t pendingBufferIdx;
+ struct wl_surface* surface;
+ struct wp_viewport* viewport;
+ struct wl_shell_surface* shell_surface;
+ struct xdg_surface* xdg_surface;
+ struct xdg_toplevel* xdg_toplevel;
+ struct zxdg_toplevel_decoration_v1* deco;
+ struct org_kde_kwin_server_decoration* kde_deco;
+#ifdef BUILD_IVI
+ struct ivi_surface* ivi_surface;
+#endif
+ struct wl_list link;
+
+ uint32_t pointer_enter_serial;
+ uint32_t pointer_cursor_serial;
+ int pointer_current_cursor;
+};
+
+/**@brief data to pass to wl_buffer release listener */
+struct uwac_buffer_release_data
+{
+ UwacWindow* window;
+ int bufferIdx;
+};
+typedef struct uwac_buffer_release_data UwacBufferReleaseData;
+
+/* in uwa-display.c */
+UwacEvent* UwacDisplayNewEvent(UwacDisplay* d, int type);
+int UwacDisplayWatchFd(UwacDisplay* display, int fd, uint32_t events, UwacTask* task);
+
+/* in uwac-input.c */
+UwacSeat* UwacSeatNew(UwacDisplay* d, uint32_t id, uint32_t version);
+void UwacSeatDestroy(UwacSeat* s);
+
+/* in uwac-output.c */
+UwacOutput* UwacCreateOutput(UwacDisplay* d, uint32_t id, uint32_t version);
+int UwacDestroyOutput(UwacOutput* output);
+
+UwacReturnCode UwacSeatRegisterClipboard(UwacSeat* s);
+
+#endif /* UWAC_PRIV_H_ */