Ecore_X(cb): Dnd now works with efm. Add some debugging prints (to

debug gtk dnd events).



SVN revision: 63301
This commit is contained in:
Christopher Michael 2011-09-08 23:11:33 +00:00
parent 67a369fee3
commit 8da3a6993f
2 changed files with 24 additions and 6 deletions

View File

@ -15,7 +15,7 @@ typedef struct _Version_Cache_Item
static Eina_Bool _ecore_xcb_dnd_converter_copy(char *target __UNUSED__, void *data, int size, void **data_ret, int *size_ret, Ecore_X_Atom *tprop __UNUSED__, int *count __UNUSED__);
/* local variables */
static int _ecore_xcb_dnd_init_count;
static int _ecore_xcb_dnd_init_count = 0;
static Ecore_X_DND_Source *_source = NULL;
static Ecore_X_DND_Target *_target = NULL;
static Version_Cache_Item *_version_cache = NULL;
@ -90,6 +90,7 @@ ecore_x_dnd_send_status(Eina_Bool will_accept, Eina_Bool suppress, Ecore_X_Recta
if (_target->state == ECORE_X_DND_TARGET_IDLE) return;
DBG("Ecore_X_Dnd_Send_Status");
memset(&ev, 0, sizeof(xcb_client_message_event_t));
_target->will_accept = will_accept;
@ -131,17 +132,18 @@ ecore_x_dnd_drop(void)
memset(&ev, 0, sizeof(xcb_client_message_event_t));
DBG("Ecore_X_Dnd_Drop");
if (_source->dest)
{
ev.response_type = XCB_CLIENT_MESSAGE;
ev.format = 32;
ev.window = _source->dest;
ev.data.data32[0] = _source->win;
ev.data.data32[1] = 0;
if (_source->will_accept)
{
ev.type = ECORE_X_ATOM_XDND_DROP;
ev.data.data32[0] = _source->win;
ev.data.data32[1] = 0;
ev.data.data32[2] = _source->time;
xcb_send_event(_ecore_xcb_conn, 0, _source->dest,
@ -153,6 +155,9 @@ ecore_x_dnd_drop(void)
else
{
ev.type = ECORE_X_ATOM_XDND_LEAVE;
ev.data.data32[0] = _source->win;
ev.data.data32[1] = 0;
xcb_send_event(_ecore_xcb_conn, 0, _source->dest,
XCB_EVENT_MASK_NO_EVENT, (const char *)&ev);
ecore_x_flush();
@ -178,6 +183,7 @@ ecore_x_dnd_aware_set(Ecore_X_Window win, Eina_Bool on)
LOGFN(__FILE__, __LINE__, __FUNCTION__);
DBG("Ecore_X_Dnd_Aware_Set");
if (on)
ecore_x_window_prop_property_set(win, ECORE_X_ATOM_XDND_AWARE,
ECORE_X_ATOM_ATOM, 32, &prop_data, 1);
@ -284,6 +290,7 @@ ecore_x_dnd_type_set(Ecore_X_Window win, const char *type, Eina_Bool on)
LOGFN(__FILE__, __LINE__, __FUNCTION__);
DBG("Ecore_X_Dnd_Type_Set");
atom = ecore_x_atom_get(type);
ecore_x_window_prop_property_get(win, ECORE_X_ATOM_XDND_TYPE_LIST,
ECORE_X_ATOM_ATOM, 32, &old_data, &num);
@ -337,6 +344,7 @@ ecore_x_dnd_types_set(Ecore_X_Window win, const char **types, unsigned int num_t
LOGFN(__FILE__, __LINE__, __FUNCTION__);
DBG("Ecore_X_Dnd_Types_Set");
if (!num_types)
ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_TYPE_LIST);
else
@ -366,6 +374,7 @@ ecore_x_dnd_actions_set(Ecore_X_Window win, Ecore_X_Atom *actions, unsigned int
LOGFN(__FILE__, __LINE__, __FUNCTION__);
DBG("Ecore_X_Dnd_Actions_Set");
if (!num_actions)
ecore_x_window_prop_property_del(win, ECORE_X_ATOM_XDND_ACTION_LIST);
else
@ -408,6 +417,7 @@ ecore_x_dnd_begin(Ecore_X_Window source, unsigned char *data, int size)
if (!ecore_x_dnd_version_get(source)) return EINA_FALSE;
DBG("Ecore_X_Dnd_Begin");
/* Take ownership of XdndSelection */
if (!ecore_x_selection_xdnd_set(source, data, size)) return EINA_FALSE;
@ -444,6 +454,7 @@ ecore_x_dnd_send_finished(void)
if (_target->state == ECORE_X_DND_TARGET_IDLE) return;
DBG("Ecore_X_Dnd_Send_Finished");
memset(&ev, 0, sizeof(xcb_client_message_event_t));
ev.response_type = XCB_CLIENT_MESSAGE;
@ -500,6 +511,7 @@ _ecore_xcb_dnd_drag(Ecore_X_Window root, int x, int y)
LOGFN(__FILE__, __LINE__, __FUNCTION__);
DBG("Ecore_X_Dnd_Drag");
memset(&ev, 0, sizeof(xcb_client_message_event_t));
ev.response_type = XCB_CLIENT_MESSAGE;

View File

@ -1358,6 +1358,7 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
Ecore_X_Event_Xdnd_Enter *e;
Ecore_X_DND_Target *target;
DBG("Got Xdnd Enter Event");
if (!(e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Enter)))) return;
target = _ecore_xcb_dnd_target_get();
target->state = ECORE_X_DND_TARGET_ENTERED;
@ -1379,7 +1380,7 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
if (!ecore_x_window_prop_property_get(target->source,
ECORE_X_ATOM_XDND_TYPE_LIST,
XCB_ATOM_ATOM, 32,
ECORE_X_ATOM_ATOM, 32,
&data, &num_ret))
{
WRN("DND: Could not fetch data type list from source window");
@ -1424,9 +1425,10 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
Ecore_X_Event_Xdnd_Position *e;
Ecore_X_DND_Target *target;
DBG("Got Xdnd Position Event");
target = _ecore_xcb_dnd_target_get();
if ((target->source != (Ecore_X_Window)ev->data.data32[0]) ||
(target->win != ev->window)) return; // NB: Maybe ev->event ??
(target->win != ev->window)) return;
target->pos.x = ev->data.data32[2] >> 16;
target->pos.y = ev->data.data32[2] & 0xFFFFUL;
target->action = ev->data.data32[4];
@ -1447,6 +1449,7 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
Ecore_X_Event_Xdnd_Status *e;
Ecore_X_DND_Source *source;
DBG("Got Xdnd Status Event");
source = _ecore_xcb_dnd_source_get();
if ((source->win != ev->window) ||
(source->dest != (Ecore_X_Window)ev->data.data32[0]))
@ -1479,6 +1482,7 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
Ecore_X_Event_Xdnd_Leave *e;
Ecore_X_DND_Target *target;
DBG("Got Xdnd Leave Event");
target = _ecore_xcb_dnd_target_get();
if ((target->source != (Ecore_X_Window)ev->data.data32[0]) ||
(target->win != ev->window))
@ -1495,12 +1499,13 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
Ecore_X_Event_Xdnd_Drop *e;
Ecore_X_DND_Target *target;
DBG("Got Xdnd Drop Event");
target = _ecore_xcb_dnd_target_get();
if ((target->source != (Ecore_X_Window)ev->data.data32[0]) ||
(target->win != ev->window))
return;
target->time = (target->version >= 1) ?
(Ecore_X_Time)ev->data.data32[2] : ecore_x_current_time_get();
(Ecore_X_Time)ev->data.data32[2] : _ecore_xcb_event_last_time;
e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Drop));
if (!e) return;
@ -1517,6 +1522,7 @@ _ecore_xcb_event_handle_client_message(xcb_generic_event_t *event)
Ecore_X_DND_Source *source;
Eina_Bool completed = EINA_TRUE;
DBG("Got Xdnd Finished Event");
source = _ecore_xcb_dnd_source_get();
if ((source->win != ev->window) ||
(source->dest != (Ecore_X_Window)ev->data.data32[0]))