diff options
Diffstat (limited to 'include/xwayland/xwm.h')
-rw-r--r-- | include/xwayland/xwm.h | 66 |
1 files changed, 56 insertions, 10 deletions
diff --git a/include/xwayland/xwm.h b/include/xwayland/xwm.h index 9e21ea3a..c5b1af7e 100644 --- a/include/xwayland/xwm.h +++ b/include/xwayland/xwm.h @@ -47,12 +47,27 @@ enum atom_name { INCR, TEXT, TIMESTAMP, + DELETE, NET_WM_WINDOW_TYPE_UTILITY, NET_WM_WINDOW_TYPE_TOOLTIP, NET_WM_WINDOW_TYPE_DND, NET_WM_WINDOW_TYPE_DROPDOWN_MENU, NET_WM_WINDOW_TYPE_POPUP_MENU, NET_WM_WINDOW_TYPE_COMBO, + DND_SELECTION, + DND_AWARE, + DND_STATUS, + DND_POSITION, + DND_ENTER, + DND_LEAVE, + DND_DROP, + DND_FINISHED, + DND_PROXY, + DND_TYPE_LIST, + DND_ACTION_MOVE, + DND_ACTION_COPY, + DND_ACTION_ASK, + DND_ACTION_PRIVATE, ATOM_LAST, }; @@ -64,22 +79,38 @@ enum net_wm_state_action { NET_WM_STATE_TOGGLE = 2, }; +#define XDND_VERSION 5 + +struct wlr_xwm_selection; + +struct wlr_xwm_selection_transfer { + struct wlr_xwm_selection *selection; + + bool incr; + bool flush_property_on_delete; + bool property_set; + struct wl_array source_data; + int source_fd; + struct wl_event_source *source; + + // when sending to x11 + xcb_selection_request_event_t request; + struct wl_list outgoing_link; + + // when receiving from x11 + int property_start; + xcb_get_property_reply_t *property_reply; +}; + struct wlr_xwm_selection { struct wlr_xwm *xwm; xcb_atom_t atom; xcb_window_t window; - xcb_selection_request_event_t request; xcb_window_t owner; xcb_timestamp_t timestamp; - int incr; - int source_fd; - int property_start; - xcb_get_property_reply_t *property_reply; - struct wl_event_source *property_source; - int flush_property_on_delete; - struct wl_array source_data; - xcb_atom_t target; - bool property_set; + + struct wlr_xwm_selection_transfer incoming; + struct wl_list outgoing; }; struct wlr_xwm { @@ -100,11 +131,17 @@ struct wlr_xwm { struct wlr_xwm_selection clipboard_selection; struct wlr_xwm_selection primary_selection; + xcb_window_t dnd_window; + struct wlr_xwm_selection dnd_selection; + struct wlr_xwayland_surface *focus_surface; struct wl_list surfaces; // wlr_xwayland_surface::link struct wl_list unpaired_surfaces; // wlr_xwayland_surface::unpaired_link + struct wlr_drag *drag; + struct wlr_xwayland_surface *drag_focus; + const xcb_query_extension_reply_t *xfixes; #ifdef WLR_HAS_XCB_ERRORS xcb_errors_context_t *errors_context; @@ -114,6 +151,12 @@ struct wlr_xwm { struct wl_listener compositor_destroy; struct wl_listener seat_selection; struct wl_listener seat_primary_selection; + struct wl_listener seat_start_drag; + struct wl_listener seat_drag_focus; + struct wl_listener seat_drag_motion; + struct wl_listener seat_drag_drop; + struct wl_listener seat_drag_destroy; + struct wl_listener seat_drag_source_destroy; }; struct wlr_xwm *xwm_create(struct wlr_xwayland *wlr_xwayland); @@ -124,12 +167,15 @@ void xwm_set_cursor(struct wlr_xwm *xwm, const uint8_t *pixels, uint32_t stride, uint32_t width, uint32_t height, int32_t hotspot_x, int32_t hotspot_y); int xwm_handle_selection_event(struct wlr_xwm *xwm, xcb_generic_event_t *event); +int xwm_handle_selection_client_message(struct wlr_xwm *xwm, + xcb_client_message_event_t *ev); void xwm_selection_init(struct wlr_xwm *xwm); void xwm_selection_finish(struct wlr_xwm *xwm); void xwm_set_seat(struct wlr_xwm *xwm, struct wlr_seat *seat); +char *xwm_get_atom_name(struct wlr_xwm *xwm, xcb_atom_t atom); bool xwm_atoms_contains(struct wlr_xwm *xwm, xcb_atom_t *atoms, size_t num_atoms, enum atom_name needle); |