adding some grab calls while i'm making my window border code work... :)

SVN revision: 3871
This commit is contained in:
Carsten Haitzler 2000-11-13 03:45:32 +00:00
parent 70c496497d
commit d40d6c6f01
3 changed files with 93 additions and 0 deletions

View File

@ -235,6 +235,12 @@ void e_window_get_virtual_area(Window win, int *area_x,
void e_get_virtual_area(int *area_x, int *area_y);
void e_window_get_root_relative_location(Window win, int *x, int *y);
void e_button_grab(Window win, int button, int events, Ev_Key_Modifiers mod, int any_mod);
void e_button_ungrab(Window win, int button, Ev_Key_Modifiers mod, int any_mod);
void e_pointer_replay(Time t);
void e_pointer_grab(Window win, Time t);
void e_pointer_ungrab(Time t);
typedef struct _eev Eevent;
typedef struct _ev_fd_handler Ev_Fd_Handler;
typedef struct _ev_pid_handler Ev_Pid_Handler;

View File

@ -442,6 +442,7 @@ e_ev_x_handle_enter_notify(XEvent * xevent)
{
Ev_Window_Enter *e;
if ((xevent->xcrossing.mode == NotifyGrab) || (xevent->xcrossing.mode == NotifyUngrab)) return;
e_pointer_xy_set(xevent->xcrossing.x_root, xevent->xcrossing.y_root);
e = NEW(Ev_Window_Enter, 1);
e->win = xevent->xcrossing.window;
@ -475,6 +476,7 @@ e_ev_x_handle_leave_notify(XEvent * xevent)
{
Ev_Window_Leave *e;
if ((xevent->xcrossing.mode == NotifyGrab) || (xevent->xcrossing.mode == NotifyUngrab)) return;
e_pointer_xy_set(xevent->xcrossing.x_root, xevent->xcrossing.y_root);
{
Ev_Mouse_Move *e;

View File

@ -2473,3 +2473,88 @@ e_window_get_root_relative_location(Window win, int *x, int *y)
if (x) *x = dx;
if (y) *y = dy;
}
void
e_button_grab(Window win, int button, int events, Ev_Key_Modifiers mod, int any_mod)
{
unsigned int b;
unsigned int m;
unsigned int locks[8];
int i;
b = button;
if (b == 0) b = AnyButton;
m = 0;
if (any_mod) m = AnyModifier;
else
{
if (mod & EV_KEY_MODIFIER_SHIFT) m |= e_mod_mask_shift_get();
if (mod & EV_KEY_MODIFIER_CTRL) m |= e_mod_mask_ctrl_get();
if (mod & EV_KEY_MODIFIER_ALT) m |= e_mod_mask_alt_get();
if (mod & EV_KEY_MODIFIER_WIN) m |= e_mod_mask_win_get();
}
locks[0] = 0;
locks[1] = e_lock_mask_caps_get();
locks[2] = e_lock_mask_num_get();
locks[3] = e_lock_mask_scroll_get();
locks[4] = e_lock_mask_caps_get() | e_lock_mask_num_get();
locks[5] = e_lock_mask_caps_get() | e_lock_mask_scroll_get();
locks[6] = e_lock_mask_num_get() | e_lock_mask_scroll_get();
locks[7] = e_lock_mask_caps_get() | e_lock_mask_num_get() | e_lock_mask_scroll_get();
for (i = 0; i < 8; i++)
XGrabButton(disp, b, m | locks[i],
win, False, events,
GrabModeSync, GrabModeAsync, None, None);
}
void
e_button_ungrab(Window win, int button, Ev_Key_Modifiers mod, int any_mod)
{
unsigned int b;
unsigned int m;
unsigned int locks[8];
int i;
b = button;
if (b == 0) b = AnyButton;
m = 0;
if (any_mod) m = AnyModifier;
else
{
if (mod & EV_KEY_MODIFIER_SHIFT) m |= e_mod_mask_shift_get();
if (mod & EV_KEY_MODIFIER_CTRL) m |= e_mod_mask_ctrl_get();
if (mod & EV_KEY_MODIFIER_ALT) m |= e_mod_mask_alt_get();
if (mod & EV_KEY_MODIFIER_WIN) m |= e_mod_mask_win_get();
}
locks[0] = 0;
locks[1] = e_lock_mask_caps_get();
locks[2] = e_lock_mask_num_get();
locks[3] = e_lock_mask_scroll_get();
locks[4] = e_lock_mask_caps_get() | e_lock_mask_num_get();
locks[5] = e_lock_mask_caps_get() | e_lock_mask_scroll_get();
locks[6] = e_lock_mask_num_get() | e_lock_mask_scroll_get();
locks[7] = e_lock_mask_caps_get() | e_lock_mask_num_get() | e_lock_mask_scroll_get();
for (i = 0; i < 8; i++)
XUngrabButton(disp, b, m | locks[i], win);
}
void
e_pointer_replay(Time t)
{
XSync(disp, False);
XAllowEvents(disp, ReplayPointer, t);
XSync(disp, False);
}
void
e_pointer_grab(Window win, Time t)
{
XGrabPointer(disp, win, False, XEV_BUTTON | XEV_MOUSE_MOVE | XEV_IN_OUT,
GrabModeAsync, GrabModeAsync, None, None, t);
}
void
e_pointer_ungrab(Time t)
{
XUngrabPointer(disp, t);
}