mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-11-16 06:59:44 -05:00
data-device: redesign wlr_data_source
This commit is contained in:
parent
79dd4a0ff9
commit
d5f46f4db4
3 changed files with 194 additions and 74 deletions
|
|
@ -30,23 +30,29 @@ struct wlr_data_offer {
|
|||
struct wl_listener source_destroy;
|
||||
};
|
||||
|
||||
struct wlr_data_source {
|
||||
// source metadata
|
||||
struct wl_array mime_types;
|
||||
int32_t actions;
|
||||
|
||||
// source implementation
|
||||
/**
|
||||
* A data source implementation. Only the `send` function is mandatory. Refer to
|
||||
* the matching wl_data_source_* functions documentation to know what they do.
|
||||
*/
|
||||
struct wlr_data_source_impl {
|
||||
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);
|
||||
|
||||
// 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);
|
||||
};
|
||||
|
||||
struct wlr_data_source {
|
||||
const struct wlr_data_source_impl *impl;
|
||||
|
||||
// source metadata
|
||||
struct wl_array mime_types;
|
||||
int32_t actions;
|
||||
|
||||
// source status
|
||||
bool accepted;
|
||||
|
|
@ -128,7 +134,7 @@ struct wlr_drag_drop_event {
|
|||
* Create a wl data device manager global for this display.
|
||||
*/
|
||||
struct wlr_data_device_manager *wlr_data_device_manager_create(
|
||||
struct wl_display *display);
|
||||
struct wl_display *display);
|
||||
|
||||
/**
|
||||
* Destroys a wlr_data_device_manager and removes its wl_data_device_manager global.
|
||||
|
|
@ -144,11 +150,67 @@ void wlr_data_device_manager_destroy(struct wlr_data_device_manager *manager);
|
|||
*/
|
||||
void wlr_seat_client_send_selection(struct wlr_seat_client *seat_client);
|
||||
|
||||
/**
|
||||
* Sets the current selection for the seat. This removes the previous one if
|
||||
* there was any.
|
||||
*/
|
||||
void wlr_seat_set_selection(struct wlr_seat *seat,
|
||||
struct wlr_data_source *source, uint32_t serial);
|
||||
struct wlr_data_source *source, uint32_t serial);
|
||||
|
||||
void wlr_data_source_init(struct wlr_data_source *source);
|
||||
/**
|
||||
* Initializes the data source with the provided implementation.
|
||||
*/
|
||||
void wlr_data_source_init(struct wlr_data_source *source,
|
||||
const struct wlr_data_source_impl *impl);
|
||||
|
||||
/**
|
||||
* Finishes the data source.
|
||||
*/
|
||||
void wlr_data_source_finish(struct wlr_data_source *source);
|
||||
|
||||
/**
|
||||
* Sends the data as the specified MIME type over the passed file descriptor,
|
||||
* then close it.
|
||||
*/
|
||||
void wlr_data_source_send(struct wlr_data_source *source, const char *mime_type,
|
||||
int32_t fd);
|
||||
|
||||
/**
|
||||
* Notifies the data source that a target accepts one of the offered MIME types.
|
||||
* If a target doesn't accept any of the offered types, `mime_type` is NULL.
|
||||
*/
|
||||
void wlr_data_source_accept(struct wlr_data_source *source, uint32_t serial,
|
||||
const char *mime_type);
|
||||
|
||||
/**
|
||||
* Notifies the data source it is no longer valid and should be destroyed. That
|
||||
* potentially destroys immediately the data source.
|
||||
*/
|
||||
void wlr_data_source_cancel(struct wlr_data_source *source);
|
||||
|
||||
/**
|
||||
* Notifies the data source that the drop operation was performed. This does not
|
||||
* indicate acceptance.
|
||||
*
|
||||
* The data source may still be used in the future and should not be destroyed
|
||||
* here.
|
||||
*/
|
||||
void wlr_data_source_dnd_drop(struct wlr_data_source *source);
|
||||
|
||||
/**
|
||||
* Notifies the data source that the drag-and-drop operation concluded. That
|
||||
* potentially destroys immediately the data source.
|
||||
*/
|
||||
void wlr_data_source_dnd_finish(struct wlr_data_source *source);
|
||||
|
||||
/**
|
||||
* Notifies the data source that a target accepts the drag with the specified
|
||||
* action.
|
||||
*
|
||||
* This shouldn't be called after `wlr_data_source_dnd_drop` unless the
|
||||
* drag-and-drop operation ended in an "ask" action.
|
||||
*/
|
||||
void wlr_data_source_dnd_action(struct wlr_data_source *source,
|
||||
enum wl_data_device_manager_dnd_action action);
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue