better key grab handing support... :)

SVN revision: 4388
This commit is contained in:
Carsten Haitzler 2001-03-18 00:33:16 +00:00
parent dcf719cd51
commit edeb6ec6da
3 changed files with 21 additions and 1 deletions

View File

@ -517,12 +517,14 @@ struct _ev_window_leave
struct _ev_window_focus_in struct _ev_window_focus_in
{ {
Window win, root; Window win, root;
int key_grab;
Time time; Time time;
}; };
struct _ev_window_focus_out struct _ev_window_focus_out
{ {
Window win, root; Window win, root;
int key_grab;
Time time; Time time;
}; };

View File

@ -111,6 +111,7 @@ e_ev_x_init(void)
mod_mask_alt = e_mod_mask_alt_get(); mod_mask_alt = e_mod_mask_alt_get();
mod_mask_win = e_mod_mask_win_get(); mod_mask_win = e_mod_mask_win_get();
/* HRRRMMM lets not do this
e_key_grab("Num_Lock", EV_KEY_MODIFIER_NONE, 1, 1); e_key_grab("Num_Lock", EV_KEY_MODIFIER_NONE, 1, 1);
e_key_grab("Scroll_Lock", EV_KEY_MODIFIER_NONE, 1, 1); e_key_grab("Scroll_Lock", EV_KEY_MODIFIER_NONE, 1, 1);
e_key_grab("Caps_Lock", EV_KEY_MODIFIER_NONE, 1, 1); e_key_grab("Caps_Lock", EV_KEY_MODIFIER_NONE, 1, 1);
@ -129,6 +130,7 @@ e_ev_x_init(void)
e_mod_alt_set(1); e_mod_alt_set(1);
if (current_lock & mod_mask_win) if (current_lock & mod_mask_win)
e_mod_win_set(1); e_mod_win_set(1);
*/
e_add_event_fd(e_x_get_fd(), e_ev_x_handle_events); e_add_event_fd(e_x_get_fd(), e_ev_x_handle_events);
} }
@ -251,6 +253,7 @@ e_ev_x_handle_key_press(XEvent * xevent)
return; return;
previous_code = xevent->xkey.keycode; previous_code = xevent->xkey.keycode;
previous_time = xevent->xkey.time; previous_time = xevent->xkey.time;
/*
if (e_key_get_keysym_from_keycode(xevent->xkey.keycode) == XK_Scroll_Lock) if (e_key_get_keysym_from_keycode(xevent->xkey.keycode) == XK_Scroll_Lock)
{ {
if (e_lock_scroll_get()) if (e_lock_scroll_get())
@ -278,6 +281,7 @@ e_ev_x_handle_key_press(XEvent * xevent)
e_event_allow(ReplayKeyboard, xevent->xkey.time); e_event_allow(ReplayKeyboard, xevent->xkey.time);
e_flush(); e_flush();
} }
*/
e = NEW(Ev_Key_Down, 1); e = NEW(Ev_Key_Down, 1);
e->win = xevent->xkey.window; e->win = xevent->xkey.window;
e->root = xevent->xkey.root; e->root = xevent->xkey.root;
@ -526,6 +530,8 @@ e_ev_x_handle_focus_in(XEvent * xevent)
e = NEW(Ev_Window_Focus_In, 1); e = NEW(Ev_Window_Focus_In, 1);
e->win = xevent->xfocus.window; e->win = xevent->xfocus.window;
e->root = e_window_get_root(e->win); e->root = e_window_get_root(e->win);
if (xevent->xfocus.mode != NotifyNormal) e->key_grab = 1;
else e->key_grab = 0;
e_add_event(EV_WINDOW_FOCUS_IN, e, e_ev_generic_free); e_add_event(EV_WINDOW_FOCUS_IN, e, e_ev_generic_free);
e_focus_window_set(e->win); e_focus_window_set(e->win);
} }
@ -538,6 +544,8 @@ e_ev_x_handle_focus_out(XEvent * xevent)
e = NEW(Ev_Window_Focus_Out, 1); e = NEW(Ev_Window_Focus_Out, 1);
e->win = xevent->xfocus.window; e->win = xevent->xfocus.window;
e->root = e_window_get_root(e->win); e->root = e_window_get_root(e->win);
if (xevent->xfocus.mode != NotifyNormal) e->key_grab = 1;
else e->key_grab = 0;
e_add_event(EV_WINDOW_FOCUS_OUT, e, e_ev_generic_free); e_add_event(EV_WINDOW_FOCUS_OUT, e, e_ev_generic_free);
e_focus_window_set(0); e_focus_window_set(0);
} }

View File

@ -64,6 +64,11 @@ static Window e_window_at_xy_0(Window base, int bx, int by, int x, int y);
static void static void
e_handle_x_error(Display * d, XErrorEvent * ev) e_handle_x_error(Display * d, XErrorEvent * ev)
{ {
char err[16384];
XGetErrorText(d, ev->error_code, err, 16000);
printf("X Error:\n"
"Error: %s\nrequest: %i\nminor: %i\n", err, ev->request_code, ev->minor_code);
/* ignroe all X errors */ /* ignroe all X errors */
return; return;
d = NULL; d = NULL;
@ -1155,6 +1160,11 @@ e_key_grab(char *key, Ev_Key_Modifiers mods, int anymod, int sync)
mode = GrabModeSync; mode = GrabModeSync;
if (!grabkey_win) if (!grabkey_win)
grabkey_win = default_root; grabkey_win = default_root;
if (!grabkey_win)
{
grabkey_win = e_window_override_new(0, -1, -1, 1, 1);
e_window_show(grabkey_win);
}
if (mods & EV_KEY_MODIFIER_SHIFT) if (mods & EV_KEY_MODIFIER_SHIFT)
mod |= mod_shift; mod |= mod_shift;
if (mods & EV_KEY_MODIFIER_CTRL) if (mods & EV_KEY_MODIFIER_CTRL)