diff options
| author | Dana Jansens <danakj@orodu.net> | 2007-03-14 15:51:21 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2007-03-14 15:51:21 +0000 |
| commit | adc5675823de8e3bbe94a1419b04103c6f845dad (patch) | |
| tree | 3501639a27955897151a5e5b44a2e0190216fa5c /openbox/event.c | |
| parent | 768ce7b456fb7455c39bc275b71af381d635ac0a (diff) | |
oh, 2 things in this commit..
1) THIS ONE IS IMPORTANT: don't set client->iconfied if the window is not actually going to be allowed to iconify. heh!
2) changes to focus fallback to avoid crashing and to avoid losing focus all at the same time.
Diffstat (limited to 'openbox/event.c')
| -rw-r--r-- | openbox/event.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/openbox/event.c b/openbox/event.c index 7eef8017..d4d921ef 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -422,7 +422,7 @@ static void event_process(const XEvent *ec, gpointer data) } } -#if 0 /* focus debugging stuff */ +#if 1 /* focus debugging stuff */ if (e->type == FocusIn || e->type == FocusOut) { gint mode = e->xfocus.mode; gint detail = e->xfocus.detail; @@ -655,8 +655,12 @@ static void event_handle_client(ObClient *client, XEvent *e) case FocusOut: /* Look for the followup FocusIn */ if (!XCheckIfEvent(ob_display, &ce, look_for_focusin, NULL)) { - /* There is no FocusIn, move focus where we can still hear events*/ - focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS); + /* There is no FocusIn, this means focus went to a window that + is not being managed. most likely, this went to PointerRoot + or None, meaning the window is no longer around so fallback + focus, but not to that window */ + ob_debug("Focus went to a black hole !\n"); + focus_fallback(FALSE); } else if (ce.xany.window == e->xany.window) { /* If focus didn't actually move anywhere, there is nothing to do*/ break; @@ -667,7 +671,9 @@ static void event_handle_client(ObClient *client, XEvent *e) if (ed.ignored) { /* The FocusIn was ignored, this means it was on a window that isn't a client. */ - focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS); + ob_debug("Focus went to an unmanaged window 0x%x !\n", + ce.xfocus.window); + focus_fallback(TRUE); } } |
