2017-10-11 21:48:40 +02:00
|
|
|
#ifndef WLR_TYPES_WLR_DATA_DEVICE_H
|
|
|
|
#define WLR_TYPES_WLR_DATA_DEVICE_H
|
|
|
|
|
|
|
|
#include <wayland-server.h>
|
2017-10-14 21:53:30 +02:00
|
|
|
#include <wlr/types/wlr_seat.h>
|
2017-10-11 21:48:40 +02:00
|
|
|
|
2017-10-15 17:06:03 +02:00
|
|
|
extern const struct
|
|
|
|
wlr_pointer_grab_interface wlr_data_device_pointer_drag_interface;
|
|
|
|
|
2017-10-16 13:29:18 +02:00
|
|
|
extern const struct
|
|
|
|
wlr_keyboard_grab_interface wlr_data_device_keyboard_drag_interface;
|
|
|
|
|
2017-11-13 21:41:48 +01:00
|
|
|
extern const struct
|
|
|
|
wlr_touch_grab_interface wlr_data_device_touch_drag_interface;
|
|
|
|
|
2017-10-11 21:48:40 +02:00
|
|
|
struct wlr_data_device_manager {
|
|
|
|
struct wl_global *global;
|
2017-12-07 00:50:55 +01:00
|
|
|
|
|
|
|
struct wl_listener display_destroy;
|
2017-10-11 21:48:40 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wlr_data_offer {
|
|
|
|
struct wl_resource *resource;
|
2017-10-12 17:41:11 +02:00
|
|
|
struct wlr_data_source *source;
|
|
|
|
|
2017-12-29 22:51:33 +01:00
|
|
|
uint32_t actions;
|
|
|
|
enum wl_data_device_manager_dnd_action preferred_action;
|
2017-10-13 13:58:46 +02:00
|
|
|
bool in_ask;
|
|
|
|
|
2017-10-12 17:41:11 +02:00
|
|
|
struct wl_listener source_destroy;
|
2017-10-11 21:48:40 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
struct wlr_data_source {
|
2017-12-29 22:51:33 +01:00
|
|
|
// source metadata
|
2017-10-11 21:48:40 +02:00
|
|
|
struct wl_array mime_types;
|
2017-12-29 22:51:33 +01:00
|
|
|
int32_t actions;
|
|
|
|
|
|
|
|
// source implementation
|
|
|
|
void (*send)(struct wlr_data_source *source, const char *mime_type,
|
|
|
|
int32_t fd);
|
|
|
|
void (*accept)(struct wlr_data_source *source, uint32_t serial,
|
|
|
|
const char *mime_type);
|
|
|
|
void (*cancel)(struct wlr_data_source *source);
|
2017-10-11 21:48:40 +02:00
|
|
|
|
2017-12-29 22:51:33 +01:00
|
|
|
// drag'n'drop implementation
|
|
|
|
void (*dnd_drop)(struct wlr_data_source *source);
|
|
|
|
void (*dnd_finish)(struct wlr_data_source *source);
|
|
|
|
void (*dnd_action)(struct wlr_data_source *source,
|
|
|
|
enum wl_data_device_manager_dnd_action action);
|
|
|
|
|
|
|
|
// source status
|
2017-10-12 17:41:11 +02:00
|
|
|
bool accepted;
|
2017-12-29 22:51:33 +01:00
|
|
|
struct wlr_data_offer *offer;
|
|
|
|
struct wlr_seat_client *seat_client;
|
2017-10-12 17:41:11 +02:00
|
|
|
|
2017-12-29 22:51:33 +01:00
|
|
|
// drag'n'drop status
|
2017-10-13 13:58:46 +02:00
|
|
|
enum wl_data_device_manager_dnd_action current_dnd_action;
|
|
|
|
uint32_t compositor_action;
|
2017-10-15 20:49:43 +02:00
|
|
|
|
2017-10-11 21:48:40 +02:00
|
|
|
struct {
|
|
|
|
struct wl_signal destroy;
|
|
|
|
} events;
|
|
|
|
};
|
|
|
|
|
2017-11-19 15:33:55 +01:00
|
|
|
struct wlr_drag_icon {
|
|
|
|
struct wlr_surface *surface;
|
|
|
|
struct wlr_seat_client *client;
|
|
|
|
struct wl_list link; // wlr_seat::drag_icons
|
|
|
|
bool mapped;
|
|
|
|
|
|
|
|
bool is_pointer;
|
|
|
|
int32_t touch_id;
|
|
|
|
|
2018-01-23 13:37:58 +01:00
|
|
|
int32_t sx, sy;
|
2017-11-19 15:33:55 +01:00
|
|
|
|
|
|
|
struct {
|
2018-01-23 13:37:58 +01:00
|
|
|
struct wl_signal map; // emitted when mapped or unmapped
|
2017-11-19 15:33:55 +01:00
|
|
|
struct wl_signal destroy;
|
|
|
|
} events;
|
|
|
|
|
|
|
|
struct wl_listener surface_destroy;
|
2017-11-19 17:10:27 +01:00
|
|
|
struct wl_listener seat_client_destroy;
|
2017-11-19 15:33:55 +01:00
|
|
|
};
|
|
|
|
|
2017-10-14 21:53:30 +02:00
|
|
|
struct wlr_drag {
|
|
|
|
struct wlr_seat_pointer_grab pointer_grab;
|
2017-10-16 13:29:18 +02:00
|
|
|
struct wlr_seat_keyboard_grab keyboard_grab;
|
2017-11-13 14:22:04 +01:00
|
|
|
struct wlr_seat_touch_grab touch_grab;
|
2017-10-16 13:29:18 +02:00
|
|
|
|
2017-11-13 21:41:48 +01:00
|
|
|
struct wlr_seat *seat;
|
2017-10-30 13:37:54 +01:00
|
|
|
struct wlr_seat_client *seat_client;
|
|
|
|
struct wlr_seat_client *focus_client;
|
2017-10-14 21:53:30 +02:00
|
|
|
|
2017-11-13 21:41:48 +01:00
|
|
|
bool is_pointer_grab;
|
|
|
|
|
2017-11-19 15:33:55 +01:00
|
|
|
struct wlr_drag_icon *icon;
|
2017-10-14 21:53:30 +02:00
|
|
|
struct wlr_surface *focus;
|
|
|
|
struct wlr_data_source *source;
|
|
|
|
|
2017-11-01 13:05:02 +01:00
|
|
|
bool cancelling;
|
2017-11-13 21:41:48 +01:00
|
|
|
int32_t grab_touch_id;
|
2017-11-01 13:05:02 +01:00
|
|
|
|
2017-11-14 14:51:37 +01:00
|
|
|
struct wl_listener point_destroy;
|
2017-10-14 21:53:30 +02:00
|
|
|
struct wl_listener source_destroy;
|
2017-11-19 17:10:27 +01:00
|
|
|
struct wl_listener seat_client_destroy;
|
2017-11-19 15:33:55 +01:00
|
|
|
struct wl_listener icon_destroy;
|
2017-10-14 21:53:30 +02:00
|
|
|
};
|
|
|
|
|
2017-10-11 21:48:40 +02:00
|
|
|
/**
|
|
|
|
* Create a wl data device manager global for this display.
|
|
|
|
*/
|
|
|
|
struct wlr_data_device_manager *wlr_data_device_manager_create(
|
|
|
|
struct wl_display *display);
|
|
|
|
|
2017-11-10 03:38:13 +01:00
|
|
|
/**
|
|
|
|
* Destroys a wlr_data_device_manager and removes its wl_data_device_manager global.
|
|
|
|
*/
|
|
|
|
void wlr_data_device_manager_destroy(struct wlr_data_device_manager *manager);
|
|
|
|
|
2017-10-12 17:41:11 +02:00
|
|
|
/**
|
2017-10-30 13:37:54 +01:00
|
|
|
* Creates a new wl_data_offer if there is a wl_data_source currently set as
|
|
|
|
* the seat selection and sends it to the seat client, followed by the
|
|
|
|
* wl_data_device.selection() event. If there is no current selection, the
|
|
|
|
* wl_data_device.selection() event will carry a NULL wl_data_offer. If the
|
|
|
|
* client does not have a wl_data_device for the seat nothing * will be done.
|
2017-10-12 17:41:11 +02:00
|
|
|
*/
|
2017-10-30 13:37:54 +01:00
|
|
|
void wlr_seat_client_send_selection(struct wlr_seat_client *seat_client);
|
2017-10-12 17:41:11 +02:00
|
|
|
|
2017-10-15 20:49:43 +02:00
|
|
|
void wlr_seat_set_selection(struct wlr_seat *seat,
|
|
|
|
struct wlr_data_source *source, uint32_t serial);
|
|
|
|
|
2017-12-25 16:10:16 +01:00
|
|
|
void wlr_data_source_init(struct wlr_data_source *source);
|
|
|
|
|
2017-12-25 18:18:26 +01:00
|
|
|
void wlr_data_source_finish(struct wlr_data_source *source);
|
|
|
|
|
2017-10-11 21:48:40 +02:00
|
|
|
#endif
|