diff --git a/legacy/ecore/src/Ecore.h b/legacy/ecore/src/Ecore.h index 1bad5babbe..675040ecda 100644 --- a/legacy/ecore/src/Ecore.h +++ b/legacy/ecore/src/Ecore.h @@ -56,23 +56,6 @@ enum _ecore_ev_modifiers typedef enum _ecore_ev_modifiers Ecore_Event_Key_Modifiers; -struct _ecore_xid -{ - Window win; - Window parent; - Window root; - int children_num; - Window *children; - int x, y, w, h; - int mapped; - int mouse_in; - int depth; - int gravity; - int coords_invalid; - int bw; - int grab_button_auto_replay; -}; - #ifdef __cplusplus extern "C" { @@ -332,9 +315,6 @@ extern "C" int bb); void ecore_cursor_free(Cursor c); void ecore_cursor_set(Window win, Cursor c); - void ecore_window_button_grab_auto_replay_set(Window win, - int on); - int ecore_window_button_grab_auto_replay_get(Window win); typedef struct _ecore_event Ecore_Event; typedef struct _ecore_event_fd_handler Ecore_Event_Fd_Handler; @@ -765,6 +745,24 @@ extern "C" Ecore_Event_Ipc_Service *next; }; + +struct _ecore_xid +{ + Window win; + Window parent; + Window root; + int children_num; + Window *children; + int x, y, w, h; + int mapped; + int mouse_in; + int depth; + int gravity; + int coords_invalid; + int bw; + int (*grab_button_auto_replay) (Ecore_Event_Mouse_Down *ev); +}; + void ecore_add_event(Ecore_Event_Type type, void *event, void (*ev_free) (void *event)); void ecore_del_event(void *event); @@ -801,6 +799,10 @@ extern "C" void ecore_event_x_init(void); char *ecore_keypress_translate_into_typeable(Ecore_Event_Key_Down * e); + void ecore_window_button_grab_auto_replay_set(Window win, + int (*func) (Ecore_Event_Mouse_Down *ev)); + void *ecore_window_button_grab_auto_replay_get(Window win); + #define ECORE_ATOM(atom, name) \ if (!atom) (atom) = ecore_atom_get(name); #define MEMCPY(src, dst, type, num) \ diff --git a/legacy/ecore/src/e_ev_x.c b/legacy/ecore/src/e_ev_x.c index 8db368de8b..2b9c426eff 100644 --- a/legacy/ecore/src/e_ev_x.c +++ b/legacy/ecore/src/e_ev_x.c @@ -413,7 +413,8 @@ ecore_event_x_handle_button_press(XEvent * xevent) if (XFindContext(xevent->xbutton.display, e->win, xid_context, (XPointer *) & xid) != XCNOENT) { - if (xid->grab_button_auto_replay) + if ((xid->grab_button_auto_replay) && + (xid->grab_button_auto_replay(e))) { ecore_pointer_replay(e->time); } diff --git a/legacy/ecore/src/e_x.c b/legacy/ecore/src/e_x.c index 48a9b2bf50..dc0d1b3017 100644 --- a/legacy/ecore/src/e_x.c +++ b/legacy/ecore/src/e_x.c @@ -216,7 +216,7 @@ ecore_add_xid(Window win, int x, int y, int w, int h, int depth, Window parent) xid->children = NULL; xid->gravity = ecore_window_get_gravity(win); xid->bw = 0; - xid->grab_button_auto_replay = 0; + xid->grab_button_auto_replay = NULL; XSaveContext(disp, xid->win, xid_context, (XPointer) xid); ecore_add_child(parent, win); return xid; @@ -277,7 +277,7 @@ ecore_validate_xid(Window win) xid->mouse_in = 0; xid->gravity = att.win_gravity; xid->bw = att.border_width; - xid->grab_button_auto_replay = 0; + xid->grab_button_auto_replay = NULL; XSaveContext(disp, xid->win, xid_context, (XPointer) xid); ecore_add_child(xid->parent, win); } @@ -916,7 +916,7 @@ void ecore_event_allow(int mode, Time t) { if (!disp) return; - XAllowEvents(disp, mode, t); + XAllowEvents(disp, mode, t); } int @@ -2933,24 +2933,24 @@ ecore_window_get_root_relative_location(Window win, int *x, int *y) } void -ecore_window_button_grab_auto_replay_set(Window win, int on) +ecore_window_button_grab_auto_replay_set(Window win, int (*func) (Ecore_Event_Mouse_Down *ev)) { Ecore_XID *xid = NULL; if (!disp) return; xid = ecore_validate_xid(win); if (!xid) return; - xid->grab_button_auto_replay = on; + xid->grab_button_auto_replay = func; } -int +void * ecore_window_button_grab_auto_replay_get(Window win) { Ecore_XID *xid = NULL; - if (!disp) return 0; + if (!disp) return NULL; xid = ecore_validate_xid(win); - if (!xid) return 0; + if (!xid) return NULL; return xid->grab_button_auto_replay; } @@ -3041,9 +3041,9 @@ void ecore_pointer_replay(Time t) { if (!disp) return; - XSync(disp, False); - XAllowEvents(disp, ReplayPointer, t); - XSync(disp, False); + XSync(disp, False); + XAllowEvents(disp, ReplayPointer, t); + XSync(disp, False); } void