Blame uwac/libuwac/uwac-priv.h

Packit 1fb8d4
/*
Packit 1fb8d4
 * Copyright © 2014 David FORT <contact@hardening-consulting.com>
Packit 1fb8d4
 *
Packit 1fb8d4
 * Permission to use, copy, modify, distribute, and sell this software and its
Packit 1fb8d4
 * documentation for any purpose is hereby granted without fee, provided that
Packit 1fb8d4
 * the above copyright notice appear in all copies and that both that copyright
Packit 1fb8d4
 * notice and this permission notice appear in supporting documentation, and
Packit 1fb8d4
 * that the name of the copyright holders not be used in advertising or
Packit 1fb8d4
 * publicity pertaining to distribution of the software without specific,
Packit 1fb8d4
 * written prior permission.  The copyright holders make no representations
Packit 1fb8d4
 * about the suitability of this software for any purpose.  It is provided "as
Packit 1fb8d4
 * is" without express or implied warranty.
Packit 1fb8d4
 *
Packit 1fb8d4
 * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
Packit 1fb8d4
 * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
Packit 1fb8d4
 * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
Packit 1fb8d4
 * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
Packit 1fb8d4
 * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
Packit 1fb8d4
 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
Packit 1fb8d4
 * OF THIS SOFTWARE.
Packit 1fb8d4
 */
Packit 1fb8d4
Packit 1fb8d4
#ifndef UWAC_PRIV_H_
Packit 1fb8d4
#define UWAC_PRIV_H_
Packit 1fb8d4
Packit 1fb8d4
#include "config.h"
Packit 1fb8d4
Packit 1fb8d4
#include <stdbool.h>
Packit 1fb8d4
#include <wayland-client.h>
Packit 1fb8d4
#include "xdg-shell-client-protocol.h"
Packit 1fb8d4
#ifdef BUILD_IVI
Packit 1fb8d4
#include "ivi-application-client-protocol.h"
Packit 1fb8d4
#endif
Packit 1fb8d4
#ifdef BUILD_FULLSCREEN_SHELL
Packit 1fb8d4
#include "fullscreen-shell-client-protocol.h"
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#ifdef HAVE_PIXMAN_REGION
Packit 1fb8d4
#include <pixman-1/pixman.h>
Packit 1fb8d4
#else
Packit 1fb8d4
#include <freerdp/codec/region.h>
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
#include <xkbcommon/xkbcommon.h>
Packit 1fb8d4
Packit 1fb8d4
#include <uwac/uwac.h>
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
extern UwacErrorHandler uwacErrorHandler;
Packit 1fb8d4
Packit 1fb8d4
typedef struct uwac_task UwacTask;
Packit 1fb8d4
Packit 1fb8d4
/** @brief */
Packit 1fb8d4
struct uwac_task {
Packit 1fb8d4
	void (*run)(UwacTask *task, uint32_t events);
Packit 1fb8d4
	struct wl_list link;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief a global registry object */
Packit 1fb8d4
struct uwac_global {
Packit 1fb8d4
	uint32_t name;
Packit 1fb8d4
	char *interface;
Packit 1fb8d4
	uint32_t version;
Packit 1fb8d4
	struct wl_list link;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct uwac_global UwacGlobal;
Packit 1fb8d4
Packit 1fb8d4
struct uwac_event_list_item;
Packit 1fb8d4
typedef struct uwac_event_list_item UwacEventListItem;
Packit 1fb8d4
Packit 1fb8d4
/** @brief */
Packit 1fb8d4
struct uwac_event_list_item {
Packit 1fb8d4
	UwacEvent event;
Packit 1fb8d4
	UwacEventListItem *tail, *head;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/** @brief main connection object to a wayland display */
Packit 1fb8d4
struct uwac_display {
Packit 1fb8d4
	struct wl_list globals;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_display *display;
Packit 1fb8d4
	struct wl_registry *registry;
Packit 1fb8d4
	struct wl_compositor *compositor;
Packit 1fb8d4
	struct wl_subcompositor *subcompositor;
Packit 1fb8d4
	struct wl_shell *shell;
Packit 1fb8d4
	struct xdg_shell *xdg_shell;
Packit 1fb8d4
#ifdef BUILD_IVI
Packit 1fb8d4
	struct ivi_application *ivi_application;
Packit 1fb8d4
#endif
Packit 1fb8d4
#ifdef BUILD_FULLSCREEN_SHELL
Packit 1fb8d4
	struct _wl_fullscreen_shell *fullscreen_shell;
Packit 1fb8d4
#endif
Packit 1fb8d4
Packit 1fb8d4
	struct wl_shm *shm;
Packit 1fb8d4
	enum wl_shm_format *shm_formats;
Packit 1fb8d4
	uint32_t shm_formats_nb;
Packit 1fb8d4
	bool has_rgb565;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_data_device_manager *data_device_manager;
Packit 1fb8d4
	struct text_cursor_position *text_cursor_position;
Packit 1fb8d4
	struct workspace_manager *workspace_manager;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_list seats;
Packit 1fb8d4
Packit 1fb8d4
	int display_fd;
Packit 1fb8d4
	UwacReturnCode last_error;
Packit 1fb8d4
	uint32_t display_fd_events;
Packit 1fb8d4
	int epoll_fd;
Packit 1fb8d4
	bool running;
Packit 1fb8d4
	UwacTask dispatch_fd_task;
Packit 1fb8d4
	uint32_t serial;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_cursor_theme *cursor_theme;
Packit 1fb8d4
	struct wl_cursor **cursors;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_list windows;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_list outputs;
Packit 1fb8d4
Packit 1fb8d4
	UwacEventListItem *push_queue, *pop_queue;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief an output on a wayland display */
Packit 1fb8d4
struct uwac_output {
Packit 1fb8d4
	UwacDisplay *display;
Packit 1fb8d4
Packit 1fb8d4
	bool doneNeeded;
Packit 1fb8d4
	bool doneReceived;
Packit 1fb8d4
Packit 1fb8d4
	UwacSize resolution;
Packit 1fb8d4
	int transform;
Packit 1fb8d4
	int scale;
Packit 1fb8d4
	char *make;
Packit 1fb8d4
	char *model;
Packit 1fb8d4
	uint32_t server_output_id;
Packit 1fb8d4
	struct wl_output *output;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_list link;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
/** @brief a seat attached to a wayland display */
Packit 1fb8d4
struct uwac_seat {
Packit 1fb8d4
	UwacDisplay *display;
Packit 1fb8d4
	char *name;
Packit 1fb8d4
	struct wl_seat *seat;
Packit 1fb8d4
	uint32_t seat_id;
Packit 1fb8d4
	uint32_t seat_version;
Packit 1fb8d4
	struct wl_pointer *pointer;
Packit 1fb8d4
	struct wl_keyboard *keyboard;
Packit 1fb8d4
	struct wl_touch *touch;
Packit 1fb8d4
	struct xkb_context *xkb_context;
Packit 1fb8d4
Packit 1fb8d4
	struct {
Packit 1fb8d4
		struct xkb_keymap *keymap;
Packit 1fb8d4
		struct xkb_state *state;
Packit 1fb8d4
		xkb_mod_mask_t control_mask;
Packit 1fb8d4
		xkb_mod_mask_t alt_mask;
Packit 1fb8d4
		xkb_mod_mask_t shift_mask;
Packit 1fb8d4
	} xkb;
Packit 1fb8d4
	uint32_t modifiers;
Packit 1fb8d4
	int32_t repeat_rate_sec, repeat_rate_nsec;
Packit 1fb8d4
	int32_t repeat_delay_sec, repeat_delay_nsec;
Packit 1fb8d4
	uint32_t repeat_sym, repeat_key, repeat_time;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_array pressed_keys;
Packit 1fb8d4
Packit 1fb8d4
	UwacWindow *pointer_focus;
Packit 1fb8d4
Packit 1fb8d4
	UwacWindow *keyboard_focus;
Packit 1fb8d4
Packit 1fb8d4
	UwacWindow *touch_focus;
Packit 1fb8d4
	bool touch_frame_started;
Packit 1fb8d4
Packit 1fb8d4
	int repeat_timer_fd;
Packit 1fb8d4
	UwacTask repeat_task;
Packit 1fb8d4
	float sx, sy;
Packit 1fb8d4
	struct wl_list link;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/** @brief a buffer used for drawing a surface frame */
Packit 1fb8d4
struct uwac_buffer {
Packit 1fb8d4
	bool used;
Packit 1fb8d4
#ifdef HAVE_PIXMAN_REGION
Packit 1fb8d4
	pixman_region32_t damage;
Packit 1fb8d4
#else
Packit 1fb8d4
	REGION16 damage;
Packit 1fb8d4
#endif
Packit 1fb8d4
	struct wl_buffer *wayland_buffer;
Packit 1fb8d4
	void *data;
Packit 1fb8d4
};
Packit 1fb8d4
typedef struct uwac_buffer UwacBuffer;
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/** @brief a window */
Packit 1fb8d4
struct uwac_window {
Packit 1fb8d4
	UwacDisplay *display;
Packit 1fb8d4
	int width, height, stride;
Packit 1fb8d4
	int surfaceStates;
Packit 1fb8d4
	enum wl_shm_format format;
Packit 1fb8d4
Packit 1fb8d4
	int nbuffers;
Packit 1fb8d4
	UwacBuffer *buffers;
Packit 1fb8d4
Packit 1fb8d4
	struct wl_region *opaque_region;
Packit 1fb8d4
	struct wl_region *input_region;
Packit 1fb8d4
	struct wl_callback *frame_callback;
Packit 1fb8d4
	UwacBuffer *drawingBuffer, *pendingBuffer;
Packit 1fb8d4
	struct wl_surface *surface;
Packit 1fb8d4
	struct wl_shell_surface *shell_surface;
Packit 1fb8d4
	struct xdg_surface *xdg_surface;
Packit 1fb8d4
#ifdef BUILD_IVI
Packit 1fb8d4
	struct ivi_surface *ivi_surface;
Packit 1fb8d4
#endif
Packit 1fb8d4
	struct wl_list link;
Packit 1fb8d4
Packit 1fb8d4
	uint32_t pointer_enter_serial;
Packit 1fb8d4
	uint32_t pointer_cursor_serial;
Packit 1fb8d4
	int pointer_current_cursor;
Packit 1fb8d4
};
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/* in uwa-display.c */
Packit 1fb8d4
UwacEvent *UwacDisplayNewEvent(UwacDisplay *d, int type);
Packit 1fb8d4
int UwacDisplayWatchFd(UwacDisplay *display, int fd, uint32_t events, UwacTask *task);
Packit 1fb8d4
Packit 1fb8d4
Packit 1fb8d4
/* in uwac-input.c */
Packit 1fb8d4
UwacSeat *UwacSeatNew(UwacDisplay *d, uint32_t id, uint32_t version);
Packit 1fb8d4
void UwacSeatDestroy(UwacSeat *s);
Packit 1fb8d4
Packit 1fb8d4
/* in uwac-output.c */
Packit 1fb8d4
UwacOutput *UwacCreateOutput(UwacDisplay *d, uint32_t id, uint32_t version);
Packit 1fb8d4
int UwacDestroyOutput(UwacOutput *output);
Packit 1fb8d4
Packit 1fb8d4
#endif /* UWAC_PRIV_H_ */