On 8/31/2011 9:53 AM, ChunEon Park wrote: > > Devilhorn! > I'm Hermet! not hermit :) > My Apologies !!! Just a simple typo ;)
dh > ------------------------------------ > Let's run together for the best moment! > -Regards, Hermet- > > -----Original Message----- > From: "Enlightenment SVN"<no-re...@enlightenment.org> > To: enlightenment-...@lists.sourceforge.net > Cc: > Sent: 11-08-31(수) 04:22:51 > Subject: E SVN: devilhorns trunk/ecore/src/lib/ecore_x/xcb > Log: > Ecore_X(cb): Port Hermits xlib code to support double/triple click for > multi-touch devices to xcb. > Remove dead code. > Add missing flush calls after change_window_attributes. > Quiet down the event code by commenting out some LOGFN's. > Make selection event code more like Xlib. > Add missing flush calls after send_event. > Author: devilhorns > Date: 2011-08-30 12:22:51 -0700 (Tue, 30 Aug 2011) > New Revision: 63009 > Trac: http://trac.enlightenment.org/e/changeset/63009 > Modified: > trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c > Modified: trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c > =================================================================== > --- trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-08-30 18:38:27 > UTC (rev 63008) > +++ trunk/ecore/src/lib/ecore_x/xcb/ecore_xcb_events.c 2011-08-30 19:22:51 > UTC (rev 63009) > @@ -23,6 +23,20 @@ > # define CODESET "INVALID" > #endif > +typedef struct _Ecore_X_Mouse_Down_Info > +{ > + EINA_INLIST; > + int dev; > + Ecore_X_Time last_time; > + Ecore_X_Time last_last_time; > + Ecore_X_Window last_win; > + Ecore_X_Window last_last_win; > + Ecore_X_Window last_event_win; > + Ecore_X_Window last_last_event_win; > + Eina_Bool did_double : 1; > + Eina_Bool did_triple : 1; > +} Ecore_X_Mouse_Down_Info; > + > /* local function prototypes */ > static void _ecore_xcb_event_handle_any_event(xcb_generic_event_t *event); > static void _ecore_xcb_event_handle_key_press(xcb_generic_event_t *event); > @@ -76,28 +90,21 @@ > static void _ecore_xcb_event_key_press(xcb_generic_event_t *event); > static void _ecore_xcb_event_key_release(xcb_generic_event_t *event); > -//static void _ecore_xcb_event_mouse_move(uint16_t timestamp, uint16_t > modifiers, int16_t x, int16_t y, int16_t root_x, int16_t root_y, xcb_window_t > event_win, xcb_window_t win, xcb_window_t root_win, uint8_t same_screen, int > dev, double radx, double rady, double pressure, double angle, int16_t mx, > int16_t my, int16_t mrx, int16_t mry); > static void _ecore_xcb_event_mouse_move_free(void *data __UNUSED__, void > *event); > -//static Ecore_Event_Mouse_Button *_ecore_xcb_event_mouse_button(int event, > uint16_t timestamp, uint16_t modifiers, xcb_button_t buttons, int16_t x, > int16_t y, int16_t root_x, int16_t root_y, xcb_window_t event_win, > xcb_window_t win, xcb_window_t root_win, uint8_t same_screen, int dev, double > radx, double rady, double pressure, double angle, int16_t mx, int16_t my, > int16_t mrx, int16_t mry); > static Ecore_X_Event_Mode _ecore_xcb_event_mode_get(uint8_t mode); > static Ecore_X_Event_Detail _ecore_xcb_event_detail_get(uint8_t detail); > static void _ecore_xcb_event_xdnd_enter_free(void *data __UNUSED__, void > *event); > static void _ecore_xcb_event_selection_notify_free(void *data __UNUSED__, > void *event); > static void _ecore_xcb_event_generic_event_free(void *data, void *event); > +static void _ecore_xcb_event_mouse_down_info_clear(void); > +static Ecore_X_Mouse_Down_Info *_ecore_xcb_event_mouse_down_info_get(int > dev); > /* local variables */ > -static Ecore_X_Time _ecore_xcb_event_last_time; > static Eina_Bool _ecore_xcb_event_last_mouse_move = EINA_FALSE; > static Ecore_Event *_ecore_xcb_event_last_mouse_move_event = NULL; > +static Eina_Inlist *_ecore_xcb_mouse_down_info_list = NULL; > +static Ecore_X_Time _ecore_xcb_event_last_time; > static Ecore_X_Window _ecore_xcb_event_last_window = 0; > -static Ecore_X_Time _ecore_xcb_mouse_down_last_time = 0; > -static Ecore_X_Time _ecore_xcb_mouse_down_last_last_time = 0; > -static Ecore_X_Window _ecore_xcb_mouse_down_last_win = 0; > -static Ecore_X_Window _ecore_xcb_mouse_down_last_last_win = 0; > -static Ecore_X_Window _ecore_xcb_mouse_down_last_event_win = 0; > -static Ecore_X_Window _ecore_xcb_mouse_down_last_last_event_win = 0; > -static Eina_Bool _ecore_xcb_mouse_down_did_double = EINA_FALSE; > -static Eina_Bool _ecore_xcb_mouse_down_did_triple = EINA_FALSE; > /* public variables */ > int16_t _ecore_xcb_event_last_root_x = 0; > @@ -215,6 +222,8 @@ > { > LOGFN(__FILE__, __LINE__, __FUNCTION__); > + _ecore_xcb_event_mouse_down_info_clear(); > + > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > if (_ecore_xcb_event_last_mouse_move_event) > { > @@ -228,7 +237,7 @@ > { > uint8_t response = 0; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > +// LOGFN(__FILE__, __LINE__, __FUNCTION__); > /* strip highest bit (set if event is generated) */ > response = (ev->response_type& ~0x80); > @@ -437,6 +446,7 @@ > free(reply); > xcb_change_window_attributes(_ecore_xcb_conn, win, > XCB_CW_EVENT_MASK,&list); > + ecore_x_flush(); > } > EAPI void > @@ -457,6 +467,7 @@ > free(reply); > xcb_change_window_attributes(_ecore_xcb_conn, win, > XCB_CW_EVENT_MASK,&list); > + ecore_x_flush(); > } > unsigned int > @@ -492,7 +503,7 @@ > { > xcb_generic_event_t *ev; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > +// LOGFN(__FILE__, __LINE__, __FUNCTION__); > ev = malloc(sizeof(xcb_generic_event_t)); > if (!ev) return; > @@ -518,8 +529,6 @@ > { > xcb_button_press_event_t *ev; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_button_press_event_t *)event; > @@ -594,16 +603,6 @@ > ev->event_x, ev->event_y, > ev->root_x, ev->root_y); > - if (_ecore_xcb_mouse_down_did_triple) > - { > - _ecore_xcb_mouse_down_last_time = 0; > - _ecore_xcb_mouse_down_last_win = 0; > - _ecore_xcb_mouse_down_last_last_win = 0; > - _ecore_xcb_mouse_down_last_event_win = 0; > - _ecore_xcb_mouse_down_last_last_event_win = 0; > - _ecore_xcb_mouse_down_last_last_time = 0; > - } > - > e = _ecore_xcb_event_mouse_button(ECORE_EVENT_MOUSE_BUTTON_DOWN, > ev->time, > ev->state, ev->detail, > @@ -618,26 +617,6 @@ > _ecore_xcb_window_grab_allow_events(ev->event, ev->child, > ECORE_EVENT_MOUSE_BUTTON_DOWN, > e, ev->time); > - > - if (child_win == ev->event) > - { > - if (!_ecore_xcb_mouse_down_did_triple) > - { > - _ecore_xcb_mouse_down_last_last_win = > - _ecore_xcb_mouse_down_last_win; > - if (ev->child) > - _ecore_xcb_mouse_down_last_win = ev->child; > - else > - _ecore_xcb_mouse_down_last_win = ev->event; > - > - _ecore_xcb_mouse_down_last_last_event_win = > - _ecore_xcb_mouse_down_last_event_win; > - _ecore_xcb_mouse_down_last_event_win = ev->event; > - _ecore_xcb_mouse_down_last_last_time = > - _ecore_xcb_mouse_down_last_time; > - _ecore_xcb_mouse_down_last_time = ev->time; > - } > - } > } > } > @@ -646,8 +625,6 @@ > { > xcb_button_release_event_t *ev; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_button_release_event_t *)event; > if ((ev->detail<= 3) || (ev->detail> 7)) > @@ -679,8 +656,6 @@ > { > xcb_motion_notify_event_t *ev; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > ev = (xcb_motion_notify_event_t *)event; > /* if (_ecore_xcb_event_last_mouse_move_event) */ > @@ -710,8 +685,6 @@ > xcb_enter_notify_event_t *ev; > Ecore_X_Event_Mouse_In *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_enter_notify_event_t *)event; > @@ -753,8 +726,6 @@ > xcb_leave_notify_event_t *ev; > Ecore_X_Event_Mouse_Out *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_enter_notify_event_t *)event; > @@ -797,7 +768,7 @@ > static void > _ecore_xcb_event_handle_keymap_notify(xcb_generic_event_t *event __UNUSED__) > { > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > +// LOGFN(__FILE__, __LINE__, __FUNCTION__); > // FIXME: handle this event type > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > @@ -809,8 +780,6 @@ > xcb_focus_in_event_t *ev; > Ecore_X_Event_Window_Focus_In *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_focus_in_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Focus_In)))) return; > @@ -831,8 +800,6 @@ > xcb_focus_out_event_t *ev; > Ecore_X_Event_Window_Focus_Out *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_focus_out_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Focus_Out)))) return; > @@ -853,8 +820,6 @@ > xcb_expose_event_t *ev; > Ecore_X_Event_Window_Damage *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_expose_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Damage)))) return; > @@ -876,8 +841,6 @@ > xcb_graphics_exposure_event_t *ev; > Ecore_X_Event_Window_Damage *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_graphics_exposure_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Damage)))) return; > @@ -899,8 +862,6 @@ > xcb_visibility_notify_event_t *ev; > Ecore_X_Event_Window_Visibility_Change *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_visibility_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Visibility_Change)))) > @@ -922,8 +883,6 @@ > xcb_create_notify_event_t *ev; > Ecore_X_Event_Window_Create *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_create_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Create)))) return; > @@ -950,8 +909,6 @@ > xcb_destroy_notify_event_t *ev; > Ecore_X_Event_Window_Destroy *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_destroy_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Destroy)))) return; > @@ -971,8 +928,6 @@ > xcb_map_notify_event_t *ev; > Ecore_X_Event_Window_Show *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_map_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Show)))) return; > @@ -990,8 +945,6 @@ > xcb_unmap_notify_event_t *ev; > Ecore_X_Event_Window_Hide *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_unmap_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Hide)))) return; > @@ -1009,8 +962,6 @@ > xcb_map_request_event_t *ev; > Ecore_X_Event_Window_Show_Request *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_map_request_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Show_Request)))) return; > @@ -1028,8 +979,6 @@ > xcb_reparent_notify_event_t *ev; > Ecore_X_Event_Window_Reparent *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_reparent_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Reparent)))) return; > @@ -1048,8 +997,6 @@ > xcb_configure_notify_event_t *ev; > Ecore_X_Event_Window_Configure *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_configure_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Configure)))) return; > @@ -1076,8 +1023,6 @@ > xcb_configure_request_event_t *ev; > Ecore_X_Event_Window_Configure_Request *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_configure_request_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Configure_Request)))) > @@ -1116,13 +1061,12 @@ > } > static void > -_ecore_xcb_event_handle_gravity_notify(xcb_generic_event_t *event) > +_ecore_xcb_event_handle_gravity_notify(xcb_generic_event_t *event __UNUSED__) > { > +/* > xcb_gravity_notify_event_t *ev; > Ecore_X_Event_Window_Gravity *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_gravity_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Gravity)))) return; > @@ -1132,6 +1076,7 @@ > e->time = _ecore_xcb_event_last_time; > ecore_event_add(ECORE_X_EVENT_WINDOW_GRAVITY, e, NULL, NULL); > +*/ > } > static void > @@ -1140,8 +1085,6 @@ > xcb_resize_request_event_t *ev; > Ecore_X_Event_Window_Resize_Request *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_resize_request_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Resize_Request)))) return; > @@ -1160,8 +1103,6 @@ > xcb_circulate_notify_event_t *ev; > Ecore_X_Event_Window_Stack *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_circulate_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Stack)))) return; > @@ -1183,8 +1124,6 @@ > xcb_circulate_request_event_t *ev; > Ecore_X_Event_Window_Stack_Request *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_circulate_request_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Stack_Request)))) return; > @@ -1206,8 +1145,6 @@ > xcb_property_notify_event_t *ev; > Ecore_X_Event_Window_Property *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_property_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Property)))) return; > @@ -1273,19 +1210,23 @@ > if ((sd = _ecore_xcb_selection_get(ev->selection))&& > (sd->win == ev->owner)) > { > - if (sd->data) > + Ecore_X_Selection_Intern *si; > + > + si = _ecore_xcb_selection_get(ev->selection); > + if (si->data) > { > - Ecore_X_Atom property, type; > - void *data; > + Ecore_X_Atom property = XCB_NONE, type; > + void *data = NULL; > int len = 0, typesize = 0; > type = ev->target; > typesize = 8; > len = sd->length; > + > if (!ecore_x_selection_convert(ev->selection, ev->target, > &data,&len,&type,&typesize)) > property = XCB_NONE; > - else > + else if (data) > { > ecore_x_window_prop_property_set(ev->requestor, ev->property, > type, typesize, data, len); > @@ -1316,7 +1257,7 @@ > { > format = > ecore_x_window_prop_property_get(ev->requestor, ev->property, > - ECORE_X_ATOM_ATOM, 32,&data,&num); > + XCB_ATOM_ATOM, 32,&data,&num); > if (!format) return; > } > else > @@ -1358,8 +1299,6 @@ > xcb_colormap_notify_event_t *ev; > Ecore_X_Event_Window_Colormap *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_colormap_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Colormap)))) return; > @@ -1380,8 +1319,6 @@ > { > xcb_client_message_event_t *ev; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_client_message_event_t *)event; > @@ -1442,7 +1379,7 @@ > if (!ecore_x_window_prop_property_get(target->source, > ECORE_X_ATOM_XDND_TYPE_LIST, > - ECORE_X_ATOM_ATOM, 32, > + XCB_ATOM_ATOM, 32, > &data,&num_ret)) > { > WRN("DND: Could not fetch data type list from source window"); > @@ -1489,12 +1426,12 @@ > target = _ecore_xcb_dnd_target_get(); > if ((target->source != (Ecore_X_Window)ev->data.data32[0]) || > - (target->win != ev->window)) return; > + (target->win != ev->window)) return; // NB: Maybe ev->event ?? > target->pos.x = ev->data.data32[2]>> 16; > target->pos.y = ev->data.data32[2]& 0xFFFFUL; > target->action = ev->data.data32[4]; > target->time = (target->version>= 1) ? > - (Ecore_X_Time)ev->data.data32[3] : ecore_x_current_time_get(); > + (Ecore_X_Time)ev->data.data32[3] : XCB_CURRENT_TIME; > e = calloc(1, sizeof(Ecore_X_Event_Xdnd_Position)); > if (!e) return; > @@ -1704,22 +1641,12 @@ > if (ev->window != root) > { > - xcb_client_message_event_t cm; > - > - cm.response_type = XCB_CLIENT_MESSAGE; > - cm.format = ev->format; > - cm.window = root; > - cm.type = ev->type; > - cm.data.data32[0] = ECORE_X_ATOM_NET_WM_PING; > - cm.data.data32[1] = ev->data.data32[1]; > - cm.data.data32[2] = ev->window;//ev->data.data32[2]; > - cm.data.data32[3] = 0; > - cm.data.data32[4] = 0; > - > + ev->window = root; > xcb_send_event(_ecore_xcb_conn, 0, root, > (XCB_EVENT_MASK_SUBSTRUCTURE_REDIRECT | > XCB_EVENT_MASK_SUBSTRUCTURE_NOTIFY), > - (const char *)&cm); > + (const char *)&ev); > + ecore_x_flush(); > } > } > else if ((ev->type == ECORE_X_ATOM_NET_STARTUP_INFO_BEGIN)&& > @@ -1729,10 +1656,10 @@ > } > else if ((ev->type == ECORE_X_ATOM_NET_STARTUP_INFO)&& (ev->format == 8)) > { > - _ecore_xcb_netwm_startup_info_begin(ev->window, ev->data.data8[0]); > + _ecore_xcb_netwm_startup_info(ev->window, ev->data.data8[0]); > } > else if ((ev->type == 27777)&& (ev->data.data32[0] == 0x7162534)&& > - (ev->format == 32))//&& (ev->window = _private_window)) > + (ev->format == 32)) //&& (ev->window = _private_window)) > { > if (ev->data.data32[1] == 0x10000001) > _ecore_xcb_window_button_grab_remove(ev->data.data32[2]); > @@ -1748,7 +1675,7 @@ > return; > e->win = ev->window; > - e->message_type = ev->type; > + e->message_type = ev->response_type; //NB: Was ev->type; > e->format = ev->format; > for (i = 0; i< 5; i++) > e->data.l[i] = ev->data.data32[i]; > @@ -1762,8 +1689,6 @@ > xcb_mapping_notify_event_t *ev; > Ecore_X_Event_Mapping_Change *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_mapping_notify_event_t *)event; > @@ -1830,8 +1755,6 @@ > Ecore_X_Event_Screen_Change *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > #ifdef ECORE_XCB_RANDR > ev = (xcb_randr_screen_change_notify_event_t *)event; > @@ -1859,8 +1782,6 @@ > xcb_randr_notify_event_t *ev; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > #ifdef ECORE_XCB_RANDR > ev = (xcb_randr_notify_event_t *)event; > @@ -1889,8 +1810,6 @@ > Ecore_X_Event_Randr_Crtc_Change *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > #ifdef ECORE_XCB_RANDR > ev = (xcb_randr_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change)))) > @@ -1917,8 +1836,6 @@ > Ecore_X_Event_Randr_Output_Change *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > #ifdef ECORE_XCB_RANDR > ev = (xcb_randr_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Crtc_Change)))) > @@ -1944,8 +1861,6 @@ > Ecore_X_Event_Randr_Output_Property_Notify *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > #ifdef ECORE_XCB_RANDR > ev = (xcb_randr_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Randr_Output_Property_Notify)))) > @@ -1972,8 +1887,6 @@ > Ecore_X_Event_Screensaver_Notify *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > #ifdef ECORE_XCB_SCREENSAVER > ev = (xcb_screensaver_notify_event_t *)event; > @@ -1995,8 +1908,6 @@ > xcb_shape_notify_event_t *ev; > Ecore_X_Event_Window_Shape *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > ev = (xcb_shape_notify_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Window_Shape)))) return; > @@ -2035,8 +1946,6 @@ > Ecore_X_Event_Sync_Counter *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > #ifdef ECORE_XCB_SYNC > @@ -2057,8 +1966,6 @@ > Ecore_X_Event_Sync_Alarm *e; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > #ifdef ECORE_XCB_SYNC > ev = (xcb_sync_alarm_notify_event_t *)event; > @@ -2080,8 +1987,6 @@ > xcb_xfixes_selection_notify_event_t *ev; > #endif > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > #ifdef ECORE_XCB_XFIXES > ev = (xcb_xfixes_selection_notify_event_t *)event; > @@ -2120,8 +2025,6 @@ > xcb_ge_event_t *ev; > Ecore_X_Event_Generic *e; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > ev = (xcb_ge_event_t *)event; > if (!(e = calloc(1, sizeof(Ecore_X_Event_Generic)))) > return; > @@ -2165,8 +2068,6 @@ > char compose_buffer[256]; > int val = 0; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > xevent = (xcb_key_press_event_t *)event; > @@ -2218,6 +2119,7 @@ > e->same_screen = xevent->same_screen; > e->root_window = xevent->root; > + DBG("Sending Key Down Event: %s", e->keyname); > ecore_event_add(ECORE_EVENT_KEY_DOWN, e, NULL, NULL); > } > _ecore_xcb_event_last_time = xevent->time; > @@ -2235,8 +2137,6 @@ > char compose_buffer[256]; > int val = 0; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > _ecore_xcb_event_last_mouse_move = EINA_FALSE; > xevent = (xcb_key_release_event_t *)event; > @@ -2299,8 +2199,6 @@ > Ecore_Event_Mouse_Move *e; > Ecore_Event *event; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > if (!(e = malloc(sizeof(Ecore_Event_Mouse_Move)))) return; > e->window = win; > @@ -2339,8 +2237,6 @@ > { > Ecore_Event_Mouse_Move *ev; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > ev = event; > if (_ecore_xcb_event_last_mouse_move_event) > { > @@ -2354,9 +2250,8 @@ > _ecore_xcb_event_mouse_button(int event, uint16_t timestamp, uint16_t > modifiers, xcb_button_t buttons, int16_t x, int16_t y, int16_t root_x, > int16_t root_y, xcb_window_t event_win, xcb_window_t win, xcb_window_t > root_win, uint8_t same_screen, int dev, double radx, double rady, double > pressure, double angle, int16_t mx, int16_t my, int16_t mrx, int16_t mry) > { > Ecore_Event_Mouse_Button *e; > + Ecore_X_Mouse_Down_Info *info = NULL; > - LOGFN(__FILE__, __LINE__, __FUNCTION__); > - > if (!(e = malloc(sizeof(Ecore_Event_Mouse_Button)))) return NULL; > e->window = win; > @@ -2373,43 +2268,53 @@ > e->root.x = root_x; > e->root.y = root_y; > - if (event_win == win) > + if ((info = _ecore_xcb_event_mouse_down_info_get(dev))) > { > - if (event == ECORE_EVENT_MOUSE_BUTTON_DOWN) > + if ((event == ECORE_EVENT_MOUSE_BUTTON_DOWN)&& > + (info->did_triple)) > { > - if (((int)(timestamp - _ecore_xcb_mouse_down_last_time)<= > - (int)(1000 * _ecore_xcb_double_click_time))&& > - (win == _ecore_xcb_mouse_down_last_win)&& > - (event_win == _ecore_xcb_mouse_down_last_event_win)) > + info->last_win = 0; > + info->last_last_win = 0; > + info->last_event_win = 0; > + info->last_time = 0; > + info->last_last_time = 0; > + } > + if (event_win == win) > + { > + if (event == ECORE_EVENT_MOUSE_BUTTON_DOWN) > { > - e->double_click = 1; > - _ecore_xcb_mouse_down_did_double = EINA_TRUE; > + if (((int)(timestamp - info->last_time)<= > + (int)(1000 * _ecore_xcb_double_click_time))&& > + (win == info->last_win)&& > + (event_win == info->last_event_win)) > + { > + e->double_click = 1; > + info->did_double = EINA_TRUE; > + } > + else > + { > + info->did_double = EINA_FALSE; > + info->did_triple = EINA_FALSE; > + } > + if (((int)(timestamp - info->last_last_time)<= > + (int)(2 * 1000 * _ecore_xcb_double_click_time))&& > + (win == info->last_win)&& > + (win == info->last_last_win)&& > + (event_win == info->last_event_win)&& > + (event_win == info->last_last_event_win)) > + { > + e->triple_click = 1; > + info->did_triple = EINA_TRUE; > + } > + else > + info->did_triple = EINA_FALSE; > } > else > { > - _ecore_xcb_mouse_down_did_double = EINA_FALSE; > - _ecore_xcb_mouse_down_did_triple = EINA_FALSE; > + if (info->did_double) e->double_click = 1; > + if (info->did_triple) e->triple_click = 1; > } > - if (((int)(timestamp - _ecore_xcb_mouse_down_last_last_time)<= > - (int)(2 * 1000 * _ecore_xcb_double_click_time))&& > - (win == _ecore_xcb_mouse_down_last_win)&& > - (win == _ecore_xcb_mouse_down_last_last_win)&& > - (event_win == _ecore_xcb_mouse_down_last_event_win)&& > - (event_win == _ecore_xcb_mouse_down_last_last_event_win)) > - { > - e->triple_click = 1; > - _ecore_xcb_mouse_down_did_triple = EINA_TRUE; > - } > - else > - _ecore_xcb_mouse_down_did_triple = EINA_FALSE; > } > - else > - { > - if (_ecore_xcb_mouse_down_did_double) > - e->double_click = 1; > - if (_ecore_xcb_mouse_down_did_triple) > - e->triple_click = 1; > - } > } > /* NB: Comment out right now because _ecore_xcb_mouse_up_count is > @@ -2437,6 +2342,17 @@ > ecore_event_add(event, e, NULL, NULL); > + if ((info)&& (event == ECORE_EVENT_MOUSE_BUTTON_DOWN)&& > + (win == event_win)&& (!info->did_triple)) > + { > + info->last_last_win = info->last_win; > + info->last_win = win; > + info->last_last_event_win = info->last_event_win; > + info->last_event_win = event_win; > + info->last_last_time = info->last_time; > + info->last_time = timestamp; > + } > + > return e; > } > @@ -2518,3 +2434,38 @@ > if (e->data) free(data); > free(e); > } > + > +static void > +_ecore_xcb_event_mouse_down_info_clear(void) > +{ > + Eina_Inlist *l; > + Ecore_X_Mouse_Down_Info *info = NULL; > + > + l = _ecore_xcb_mouse_down_info_list; > + while (l) > + { > + info = EINA_INLIST_CONTAINER_GET(l, Ecore_X_Mouse_Down_Info); > + l = eina_inlist_remove(l, l); > + free(info); > + } > + _ecore_xcb_mouse_down_info_list = NULL; > +} > + > +static Ecore_X_Mouse_Down_Info * > +_ecore_xcb_event_mouse_down_info_get(int dev) > +{ > + Eina_Inlist *l; > + Ecore_X_Mouse_Down_Info *info = NULL; > + > + l = _ecore_xcb_mouse_down_info_list; > + EINA_INLIST_FOREACH(l, info) > + if (info->dev == dev) return info; > + > + if (!(info = calloc(1, sizeof(Ecore_X_Mouse_Down_Info)))) return NULL; > + > + info->dev = dev; > + l = eina_inlist_append(l, (Eina_Inlist *)info); > + _ecore_xcb_mouse_down_info_list = l; > + > + return info; > +} ------------------------------------------------------------------------------ Special Offer -- Download ArcSight Logger for FREE! Finally, a world-class log management solution at an even better price-free! And you'll get a free "Love Thy Logs" t-shirt when you download Logger. Secure your free ArcSight Logger TODAY! http://p.sf.net/sfu/arcsisghtdev2dev _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel