From edeb6ec6da495ceb3ce460c620b2521a35f4254a Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 18 Mar 2001 00:33:16 +0000 Subject: [PATCH] better key grab handing support... :) SVN revision: 4388 --- legacy/ecore/src/Ecore.h | 2 ++ legacy/ecore/src/e_ev_x.c | 8 ++++++++ legacy/ecore/src/e_x.c | 12 +++++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/legacy/ecore/src/Ecore.h b/legacy/ecore/src/Ecore.h index 32db93af08..4e6ed83756 100644 --- a/legacy/ecore/src/Ecore.h +++ b/legacy/ecore/src/Ecore.h @@ -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; }; diff --git a/legacy/ecore/src/e_ev_x.c b/legacy/ecore/src/e_ev_x.c index 3371f6e210..79c6016786 100644 --- a/legacy/ecore/src/e_ev_x.c +++ b/legacy/ecore/src/e_ev_x.c @@ -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); } diff --git a/legacy/ecore/src/e_x.c b/legacy/ecore/src/e_x.c index 7d0fde2e31..2ac796cba1 100644 --- a/legacy/ecore/src/e_x.c +++ b/legacy/ecore/src/e_x.c @@ -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)