some extra handy calls :)

SVN revision: 20169
This commit is contained in:
Carsten Haitzler 2006-02-01 11:24:49 +00:00
parent bef77eed98
commit 23f7254cce
3 changed files with 92 additions and 1 deletions

View File

@ -1038,6 +1038,7 @@ EAPI void ecore_x_window_defaults_set(Ecore_X_Window win);
EAPI int ecore_x_window_visible_get(Ecore_X_Window win);
EAPI Ecore_X_Window ecore_x_window_at_xy_get(int x, int y);
EAPI Ecore_X_Window ecore_x_window_at_xy_with_skip_get(int x, int y, Ecore_X_Window *skip, int skip_num);
EAPI Ecore_X_Window ecore_x_window_at_xy_begin_get(Ecore_X_Window begin, int x, int y);
EAPI Ecore_X_Window ecore_x_window_parent_get(Ecore_X_Window win);
EAPI void ecore_x_window_background_color_set(Ecore_X_Window win,
@ -1143,7 +1144,10 @@ EAPI void ecore_x_gc_del(Ecore_X_GC gc);
EAPI int ecore_x_client_message32_send(Ecore_X_Window win, Ecore_X_Atom type, Ecore_X_Event_Mask mask, long d0, long d1, long d2, long d3, long d4);
EAPI int ecore_x_client_message8_send(Ecore_X_Window win, Ecore_X_Atom type, const void *data, int len);
EAPI int ecore_x_mouse_move_send(Ecore_X_Window win, int x, int y);
EAPI int ecore_x_mouse_down_send(Ecore_X_Window win, int x, int y, int b);
EAPI int ecore_x_mouse_up_send(Ecore_X_Window win, int x, int y, int b);
/* FIXME: these funcs need categorising */
EAPI void ecore_x_drawable_geometry_get(Ecore_X_Drawable d, int *x, int *y, int *w, int *h);

View File

@ -1652,6 +1652,81 @@ ecore_x_client_message8_send(Ecore_X_Window win, Ecore_X_Atom type,
return XSendEvent(_ecore_x_disp, win, False, NoEventMask, &xev);
}
EAPI int
ecore_x_mouse_move_send(Ecore_X_Window win, int x, int y)
{
XEvent xev;
XWindowAttributes att;
Window tw;
int rx, ry;
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
xev.xmotion.type = MotionNotify;
xev.xmotion.window = win;
xev.xmotion.root = att.root;
xev.xmotion.subwindow = win;
xev.xmotion.time = _ecore_x_event_last_time;
xev.xmotion.x = x;
xev.xmotion.y = y;
xev.xmotion.x_root = rx;
xev.xmotion.y_root = ry;
xev.xmotion.state = 0;
xev.xmotion.is_hint = 0;
xev.xmotion.same_screen = 1;
return XSendEvent(_ecore_x_disp, win, True, PointerMotionMask, &xev);
}
EAPI int
ecore_x_mouse_down_send(Ecore_X_Window win, int x, int y, int b)
{
XEvent xev;
XWindowAttributes att;
Window tw;
int rx, ry;
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
xev.xbutton.type = ButtonPress;
xev.xbutton.window = win;
xev.xbutton.root = att.root;
xev.xbutton.subwindow = win;
xev.xbutton.time = _ecore_x_event_last_time;
xev.xbutton.x = x;
xev.xbutton.y = y;
xev.xbutton.x_root = rx;
xev.xbutton.y_root = ry;
xev.xbutton.state = 1 << b;
xev.xbutton.button = b;
xev.xbutton.same_screen = 1;
return XSendEvent(_ecore_x_disp, win, True, ButtonPressMask, &xev);
}
EAPI int
ecore_x_mouse_up_send(Ecore_X_Window win, int x, int y, int b)
{
XEvent xev;
XWindowAttributes att;
Window tw;
int rx, ry;
XGetWindowAttributes(_ecore_x_disp, win, &att);
XTranslateCoordinates(_ecore_x_disp, win, att.root, x, y, &rx, &ry, &tw);
xev.xbutton.type = ButtonRelease;
xev.xbutton.window = win;
xev.xbutton.root = att.root;
xev.xbutton.subwindow = win;
xev.xbutton.time = _ecore_x_event_last_time;
xev.xbutton.x = x;
xev.xbutton.y = y;
xev.xbutton.x_root = rx;
xev.xbutton.y_root = ry;
xev.xbutton.state = 0;
xev.xbutton.button = b;
xev.xbutton.same_screen = 1;
return XSendEvent(_ecore_x_disp, win, True, ButtonReleaseMask, &xev);
}
EAPI void
ecore_x_focus_reset(void)
{

View File

@ -798,6 +798,18 @@ ecore_x_window_at_xy_with_skip_get(int x, int y, Ecore_X_Window *skip, int skip_
return win ? win : root;
}
EAPI Ecore_X_Window
ecore_x_window_at_xy_begin_get(Ecore_X_Window begin, int x, int y)
{
Ecore_X_Window win, root;
ecore_x_grab();
win = _ecore_x_window_at_xy_get(begin, 0, 0, x, y, NULL, 0);
ecore_x_ungrab();
return win ? win : begin;
}
/**
* Retrieves the parent window of the given window.
* @param win The given window.