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
{
Window win, root;
int key_grab;
Time time;
};
struct _ev_window_focus_out
{
Window win, root;
int key_grab;
Time time;
};

View File

@ -111,6 +111,7 @@ e_ev_x_init(void)
mod_mask_alt = e_mod_mask_alt_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("Scroll_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);
if (current_lock & mod_mask_win)
e_mod_win_set(1);
*/
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;
previous_code = xevent->xkey.keycode;
previous_time = xevent->xkey.time;
/*
if (e_key_get_keysym_from_keycode(xevent->xkey.keycode) == XK_Scroll_Lock)
{
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_flush();
}
*/
e = NEW(Ev_Key_Down, 1);
e->win = xevent->xkey.window;
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->win = xevent->xfocus.window;
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_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->win = xevent->xfocus.window;
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_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
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 */
return;
d = NULL;
@ -1154,7 +1159,12 @@ e_key_grab(char *key, Ev_Key_Modifiers mods, int anymod, int sync)
if (sync)
mode = GrabModeSync;
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)
mod |= mod_shift;
if (mods & EV_KEY_MODIFIER_CTRL)