42 void move(
const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods)
override;
43 void drop(
const QPoint &globalPos, Qt::MouseButtons b, Qt::KeyboardModifiers mods)
override;
50 void handleEnter(QPlatformWindow *window,
const xcb_client_message_event_t *event, xcb_window_t proxy = 0);
51 void handlePosition(QPlatformWindow *w,
const xcb_client_message_event_t *event);
52 void handleLeave(QPlatformWindow *w,
const xcb_client_message_event_t *event);
53 void handleDrop(QPlatformWindow *,
const xcb_client_message_event_t *event,
54 Qt::MouseButtons b = { }, Qt::KeyboardModifiers mods = { });
56 void handleStatus(
const xcb_client_message_event_t *event);
76 void handle_xdnd_position(QPlatformWindow *w,
const xcb_client_message_event_t *event,
77 Qt::MouseButtons b = { }, Qt::KeyboardModifiers mods = { });
78 void handle_xdnd_status(
const xcb_client_message_event_t *event);
81 Qt::DropAction toDropAction(xcb_atom_t atom)
const;
82 Qt::DropActions toDropActions(
const QList<xcb_atom_t> &atoms)
const;
83 xcb_atom_t toXdndAction(Qt::DropAction a)
const;
85 void readActionList();
86 void setActionList(Qt::DropAction requestedAction, Qt::DropActions supportedActions);
87 void startListeningForActionListChanges();
88 void stopListeningForActionListChanges();
95 Qt::DropAction accepted_drop_action;
97 QWindow *desktop_proxy;
99 xcb_atom_t xdnd_dragsource;
102 enum { xdnd_max_type = 100 };
103 QList<xcb_atom_t> xdnd_types;
106 xcb_timestamp_t target_time;
107 xcb_timestamp_t source_time;
110 QRect source_sameanswer;
111 bool waiting_for_status;
118 xcb_window_t xdndCollectionWindow = XCB_NONE;
121 xcb_window_t current_target;
123 xcb_window_t current_proxy_target;
125 QXcbVirtualDesktop *current_virtual_desktop;
128 static constexpr std::chrono::minutes XdndDropTransactionTimeout{10};
129 QBasicTimer cleanup_timer;
131 QList<xcb_atom_t> drag_types;
133 QList<xcb_atom_t> current_actions;
138 xcb_timestamp_t timestamp;
140 xcb_window_t proxy_target;
141 QPlatformWindow *targetWindow;
147 QList<Transaction> transactions;
149 int transaction_expiry_timer;
150 void restartDropExpiryTimer();
151 int findTransactionByWindow(xcb_window_t window);
152 int findTransactionByTime(xcb_timestamp_t timestamp);
153 xcb_window_t findRealWindow(
const QPoint & pos, xcb_window_t w,
int md,
bool ignoreNonXdndAwareWindows);