diff --git a/legacy/ecore/src/lib/ecore_x/Ecore_X.h b/legacy/ecore/src/lib/ecore_x/Ecore_X.h index 8ee23caad4..b09dbd8c3e 100644 --- a/legacy/ecore/src/lib/ecore_x/Ecore_X.h +++ b/legacy/ecore/src/lib/ecore_x/Ecore_X.h @@ -298,8 +298,10 @@ struct _Ecore_X_Event_Key_Down char *keysymbol; char *key_compose; int modifiers; + int same_screen; Ecore_X_Window win; Ecore_X_Window event_win; + Ecore_X_Window root_win; Ecore_X_Time time; }; @@ -309,8 +311,10 @@ struct _Ecore_X_Event_Key_Up char *keysymbol; char *key_compose; int modifiers; + int same_screen; Ecore_X_Window win; Ecore_X_Window event_win; + Ecore_X_Window root_win; Ecore_X_Time time; }; @@ -319,11 +323,13 @@ struct _Ecore_X_Event_Mouse_Button_Down int button; int modifiers; int x, y; + int same_screen; struct { int x, y; } root; Ecore_X_Window win; Ecore_X_Window event_win; + Ecore_X_Window root_win; Ecore_X_Time time; unsigned int double_click : 1; unsigned int triple_click : 1; @@ -334,11 +340,13 @@ struct _Ecore_X_Event_Mouse_Button_Up int button; int modifiers; int x, y; + int same_screen; struct { int x, y; } root; Ecore_X_Window win; Ecore_X_Window event_win; + Ecore_X_Window root_win; Ecore_X_Time time; unsigned int double_click : 1; unsigned int triple_click : 1; @@ -348,11 +356,13 @@ struct _Ecore_X_Event_Mouse_Move { int modifiers; int x, y; + int same_screen; struct { int x, y; } root; Ecore_X_Window win; Ecore_X_Window event_win; + Ecore_X_Window root_win; Ecore_X_Time time; }; @@ -360,13 +370,15 @@ struct _Ecore_X_Event_Mouse_In { int modifiers; int x, y; + int same_screen; struct { int x, y; } root; Ecore_X_Window win; Ecore_X_Window event_win; - Ecore_X_Event_Mode mode; - Ecore_X_Event_Detail detail; + Ecore_X_Window root_win; + Ecore_X_Event_Mode mode; + Ecore_X_Event_Detail detail; Ecore_X_Time time; }; @@ -374,13 +386,15 @@ struct _Ecore_X_Event_Mouse_Out { int modifiers; int x, y; + int same_screen; struct { int x, y; } root; Ecore_X_Window win; Ecore_X_Window event_win; - Ecore_X_Event_Mode mode; - Ecore_X_Event_Detail detail; + Ecore_X_Window root_win; + Ecore_X_Event_Mode mode; + Ecore_X_Event_Detail detail; Ecore_X_Time time; }; @@ -390,6 +404,7 @@ struct _Ecore_X_Event_Mouse_Wheel int z; /* ...,-2,-1 = down, 1,2,... = up */ int modifiers; int x, y; + int same_screen; struct { int x, y; @@ -397,6 +412,7 @@ struct _Ecore_X_Event_Mouse_Wheel Ecore_X_Window win; Ecore_X_Window event_win; + Ecore_X_Window root_win; Ecore_X_Time time; }; diff --git a/legacy/ecore/src/lib/ecore_x/ecore_x.c b/legacy/ecore/src/lib/ecore_x/ecore_x.c index afa931c787..fbfde45b96 100644 --- a/legacy/ecore/src/lib/ecore_x/ecore_x.c +++ b/legacy/ecore/src/lib/ecore_x/ecore_x.c @@ -1486,10 +1486,11 @@ EAPI void ecore_x_pointer_xy_get(Ecore_X_Window win, int *x, int *y) { Window rwin, cwin; - int rx, ry, wx, wy; + int rx, ry, wx, wy, ret; unsigned int mask; - XQueryPointer(_ecore_x_disp, win, &rwin, &cwin, &rx, &ry, &wx, &wy, &mask); + ret = XQueryPointer(_ecore_x_disp, win, &rwin, &cwin, &rx, &ry, &wx, &wy, &mask); + if (!ret) wx = wy = -1; if (x) *x = wx; if (y) *y = wy; } diff --git a/legacy/ecore/src/lib/ecore_x/ecore_x_events.c b/legacy/ecore/src/lib/ecore_x/ecore_x_events.c index e51e5bed27..7d18a96ba6 100644 --- a/legacy/ecore/src/lib/ecore_x/ecore_x_events.c +++ b/legacy/ecore/src/lib/ecore_x/ecore_x_events.c @@ -228,6 +228,8 @@ _ecore_x_event_handle_key_press(XEvent *xevent) e->event_win = xevent->xkey.window; e->time = xevent->xkey.time; e->modifiers = xevent->xkey.state; + e->same_screen = xevent->xkey.same_screen; + e->root_win = xevent->xkey.root; _ecore_x_event_last_time = e->time; ecore_event_add(ECORE_X_EVENT_KEY_DOWN, e, _ecore_x_event_free_key_down, NULL); } @@ -279,6 +281,8 @@ _ecore_x_event_handle_key_release(XEvent *xevent) e->event_win = xevent->xkey.window; e->time = xevent->xkey.time; e->modifiers = xevent->xkey.state; + e->same_screen = xevent->xkey.same_screen; + e->root_win = xevent->xkey.root; _ecore_x_event_last_time = e->time; ecore_event_add(ECORE_X_EVENT_KEY_UP, e, _ecore_x_event_free_key_up, NULL); } @@ -331,6 +335,8 @@ _ecore_x_event_handle_button_press(XEvent *xevent) e->win = xevent->xbutton.window; e->event_win = xevent->xbutton.window; + e->same_screen = xevent->xbutton.same_screen; + e->root_win = xevent->xbutton.root; e->time = xevent->xbutton.time; _ecore_x_event_last_time = e->time; _ecore_x_event_last_win = e->win; @@ -374,6 +380,8 @@ _ecore_x_event_handle_button_press(XEvent *xevent) e->root.y = xevent->xbutton.y_root; if (xevent->xbutton.subwindow) e->win = xevent->xbutton.subwindow; else e->win = xevent->xbutton.window; + e->same_screen = xevent->xbutton.same_screen; + e->root_win = xevent->xbutton.root; e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; _ecore_x_event_last_time = e->time; @@ -405,6 +413,8 @@ _ecore_x_event_handle_button_press(XEvent *xevent) e->root.y = xevent->xbutton.y_root; if (xevent->xbutton.subwindow) e->win = xevent->xbutton.subwindow; else e->win = xevent->xbutton.window; + e->same_screen = xevent->xbutton.same_screen; + e->root_win = xevent->xbutton.root; e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; if (e->win == e->event_win) @@ -495,6 +505,8 @@ _ecore_x_event_handle_button_release(XEvent *xevent) e->root.y = xevent->xbutton.y_root; if (xevent->xbutton.subwindow) e->win = xevent->xbutton.subwindow; else e->win = xevent->xbutton.window; + e->same_screen = xevent->xbutton.same_screen; + e->root_win = xevent->xbutton.root; e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; _ecore_x_event_last_time = e->time; @@ -516,6 +528,8 @@ _ecore_x_event_handle_button_release(XEvent *xevent) e->root.y = xevent->xbutton.y_root; if (xevent->xbutton.subwindow) e->win = xevent->xbutton.subwindow; else e->win = xevent->xbutton.window; + e->same_screen = xevent->xbutton.same_screen; + e->root_win = xevent->xbutton.root; e->event_win = xevent->xbutton.window; e->time = xevent->xbutton.time; _ecore_x_mouse_up_count++; @@ -561,6 +575,8 @@ _ecore_x_event_handle_motion_notify(XEvent *xevent) e->root.y = xevent->xmotion.y_root; if (xevent->xmotion.subwindow) e->win = xevent->xmotion.subwindow; else e->win = xevent->xmotion.window; + e->same_screen = xevent->xmotion.same_screen; + e->root_win = xevent->xmotion.root; e->event_win = xevent->xmotion.window; e->time = xevent->xmotion.time; _ecore_x_event_last_time = e->time; @@ -589,6 +605,8 @@ _ecore_x_event_handle_enter_notify(XEvent *xevent) e->root.y = xevent->xcrossing.y_root; if (xevent->xcrossing.subwindow) e->win = xevent->xcrossing.subwindow; else e->win = xevent->xcrossing.window; + e->same_screen = xevent->xcrossing.same_screen; + e->root_win = xevent->xcrossing.root; e->event_win = xevent->xcrossing.window; e->time = xevent->xcrossing.time; _ecore_x_event_last_time = e->time; @@ -609,6 +627,8 @@ _ecore_x_event_handle_enter_notify(XEvent *xevent) e->root.y = xevent->xcrossing.y_root; if (xevent->xcrossing.subwindow) e->win = xevent->xcrossing.subwindow; else e->win = xevent->xcrossing.window; + e->same_screen = xevent->xcrossing.same_screen; + e->root_win = xevent->xcrossing.root; e->event_win = xevent->xcrossing.window; if (xevent->xcrossing.mode == NotifyNormal) e->mode = ECORE_X_EVENT_MODE_NORMAL; else if (xevent->xcrossing.mode == NotifyGrab) e->mode = ECORE_X_EVENT_MODE_GRAB; @@ -639,6 +659,8 @@ _ecore_x_event_handle_leave_notify(XEvent *xevent) e->root.y = xevent->xcrossing.y_root; if (xevent->xcrossing.subwindow) e->win = xevent->xcrossing.subwindow; else e->win = xevent->xcrossing.window; + e->same_screen = xevent->xcrossing.same_screen; + e->root_win = xevent->xcrossing.root; e->event_win = xevent->xcrossing.window; e->time = xevent->xcrossing.time; _ecore_x_event_last_time = e->time; @@ -659,6 +681,8 @@ _ecore_x_event_handle_leave_notify(XEvent *xevent) e->root.y = xevent->xcrossing.y_root; if (xevent->xcrossing.subwindow) e->win = xevent->xcrossing.subwindow; else e->win = xevent->xcrossing.window; + e->same_screen = xevent->xcrossing.same_screen; + e->root_win = xevent->xcrossing.root; e->event_win = xevent->xcrossing.window; if (xevent->xcrossing.mode == NotifyNormal) e->mode = ECORE_X_EVENT_MODE_NORMAL; else if (xevent->xcrossing.mode == NotifyGrab) e->mode = ECORE_X_EVENT_MODE_GRAB;