summaryrefslogtreecommitdiff
path: root/openbox/focus.c
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-30 22:58:04 +0000
committerDana Jansens <danakj@orodu.net>2003-03-30 22:58:04 +0000
commita6d9be4f664cefb144e0e7ebc9c49e04bb2714e1 (patch)
tree5df6ed1eb5a13418e5a3d6538a375fc744de548b /openbox/focus.c
parent71ade2a9b913f5d13e02aa89e3c09729348c9f82 (diff)
yet more focus fixings. RevertToPointerRoot could mess things up focusing a client and us ignoring the FocusIn of Pointer type. this is all handled now.
Diffstat (limited to 'openbox/focus.c')
-rw-r--r--openbox/focus.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/openbox/focus.c b/openbox/focus.c
index 9d4f2e6e..ab9ac057 100644
--- a/openbox/focus.c
+++ b/openbox/focus.c
@@ -118,10 +118,17 @@ void focus_fallback(gboolean switching_desks)
gboolean under = FALSE;
Client *old = NULL;
+ old = focus_client;
+
+ /* unfocus any focused clients.. they can be focused by Pointer events
+ and such, and then when I try focus them, I won't get a FocusIn event
+ at all for them.
+ */
+ focus_set_client(NULL);
+
if (switching_desks) {
/* don't skip any windows when switching desktops */
- old = focus_client;
- focus_client = NULL;
+ old = NULL;
} else {
if (!config_get("focusFollowsMouse", Config_Bool, &focus_follow))
g_assert_not_reached();
@@ -131,14 +138,11 @@ void focus_fallback(gboolean switching_desks)
if (!under) {
for (it = focus_order[screen_desktop]; it != NULL; it = it->next) {
- if (it->data != focus_client && client_normal(it->data)) {
+ if (it->data != old && client_normal(it->data)) {
/* if we're switching desktops, and we get the already focused
window, then we wont get a FocusIn for it, so just restore
the focus_client so that we know it is focused */
- if (it->data == old) {
- focus_client = old;
- break;
- } else if (client_focus(it->data))
+ if (client_focus(it->data))
break;
}
}