EAPI int ecore_x_dnd_drop(void);
EAPI void ecore_x_dnd_send_status(int will_accept, int suppress, Ecore_X_Rectangle rectangle, Ecore_X_Atom action);
EAPI void ecore_x_dnd_send_finished(void);
+EAPI void ecore_x_dnd_source_action_set(Ecore_X_Atom action);
+EAPI Ecore_X_Atom ecore_x_dnd_source_action_get(void);
EAPI Ecore_X_Window ecore_x_window_new(Ecore_X_Window parent, int x, int y, int w, int h);
EAPI Ecore_X_Window ecore_x_window_override_new(Ecore_X_Window parent, int x, int y, int w, int h);
_source->win = XCB_NONE;
_source->dest = XCB_NONE;
_source->state = ECORE_X_DND_SOURCE_IDLE;
+ _source->prev.window = 0;
_target = calloc(1, sizeof(Ecore_X_DND_Target));
_target->win = XCB_NONE;
ecore_x_window_ignore_set(_source->win, 1);
_source->state = ECORE_X_DND_SOURCE_DRAGGING;
_source->time = _ecore_xcb_event_last_time;
+ _source->prev.window = 0;
/* Default Accepted Action: ask */
_source->action = ECORE_X_ATOM_XDND_ACTION_COPY;
}
ecore_x_window_ignore_set(_source->win, 0);
+ _source->prev.window = 0;
_source->dest = XCB_NONE;
return status;
}
void
+ecore_x_dnd_source_action_set(Ecore_X_Atom action)
+{
+ _source->action = action;
+ if (_source->prev.window)
+ _ecore_x_dnd_drag(_source->prev.window, _source->prev.x, _source->prev.y);
+}
+
+Ecore_X_Atom
+ecore_x_dnd_source_action_get(void)
+{
+ return _source->action;
+}
+
+void
_ecore_x_dnd_drag(Ecore_X_Window root,
int x,
int y)
}
}
+ _source->prev.x = x;
+ _source->prev.y = y;
+ _source->prev.window = root;
_source->dest = win;
}
unsigned short width, height;
} rectangle;
+ struct {
+ Ecore_X_Window window;
+ int x, y;
+ } prev;
+
Ecore_X_Time time;
Ecore_X_Atom action, accepted_action;
_source->win = None;
_source->dest = None;
_source->state = ECORE_X_DND_SOURCE_IDLE;
+ _source->prev.window = 0;
_target = calloc(1, sizeof(Ecore_X_DND_Target));
_target->win = None;
ecore_x_window_ignore_set(_source->win, 1);
_source->state = ECORE_X_DND_SOURCE_DRAGGING;
_source->time = _ecore_x_event_last_time;
+ _source->prev.window = 0;
/* Default Accepted Action: move */
_source->action = ECORE_X_ATOM_XDND_ACTION_MOVE;
}
ecore_x_window_ignore_set(_source->win, 0);
+ _source->prev.window = 0;
+
return status;
}
}
void
+ecore_x_dnd_source_action_set(Ecore_X_Atom action)
+{
+ _source->action = action;
+ if (_source->prev.window)
+ _ecore_x_dnd_drag(_source->prev.window, _source->prev.x, _source->prev.y);
+}
+
+Ecore_X_Atom
+ecore_x_dnd_source_action_get(void)
+{
+ return _source->action;
+}
+
+void
_ecore_x_dnd_drag(Ecore_X_Window root, int x, int y)
{
XEvent xev;
xev.xclient.data.l[4] = _source->action; /* Version 2, Needs to be pre-set */
XSendEvent(_ecore_x_disp, win, False, 0, &xev);
- _source->await_status = 1;
+ _source->await_status = 1;
}
}
+ _source->prev.x = x;
+ _source->prev.y = y;
+ _source->prev.window = root;
_source->dest = win;
}
unsigned short width, height;
} rectangle;
+ struct {
+ Ecore_X_Window window;
+ int x, y;
+ } prev;
+
Time time;
Ecore_X_Atom action, accepted_action;