summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--openbox/action.c3
-rw-r--r--openbox/client.c2
-rw-r--r--openbox/client.h4
-rw-r--r--openbox/event.c10
-rw-r--r--openbox/screen.c2
5 files changed, 14 insertions, 7 deletions
diff --git a/openbox/action.c b/openbox/action.c
index 097eaf8d..73eadf8d 100644
--- a/openbox/action.c
+++ b/openbox/action.c
@@ -1164,7 +1164,8 @@ void action_focus(union ActionData *data)
moving on us */
event_halt_focus_delay();
- client_focus(data->client.any.c);
+ if (client_validate(data->client.any.c))
+ client_focus(data->client.any.c);
}
}
diff --git a/openbox/client.c b/openbox/client.c
index 7e936036..be61a806 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -2937,8 +2937,10 @@ gboolean client_focus(ObClient *self)
/* choose the correct target */
self = client_focus_target(self);
+#if 0
if (!client_validate(self))
return FALSE;
+#endif
if (!client_can_focus(self)) {
if (!self->frame->visible) {
diff --git a/openbox/client.h b/openbox/client.h
index ff460153..845d9ad2 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -472,7 +472,9 @@ ObClient *client_focus_target(ObClient *self);
without focusing it or modifying the focus order lists. */
gboolean client_can_focus(ObClient *self);
-/*! Attempt to focus the client window */
+/*! Attempt to focus the client window
+ NOTE: You should validate the client before calling this !! (client_validate)
+*/
gboolean client_focus(ObClient *self);
/*! Remove focus from the client window */
diff --git a/openbox/event.c b/openbox/event.c
index 5d19e897..16ec8e0a 100644
--- a/openbox/event.c
+++ b/openbox/event.c
@@ -433,7 +433,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;
@@ -1287,9 +1287,11 @@ static gboolean focus_delay_func(gpointer data)
ObClient *c = data;
if (focus_client != c) {
- client_focus(c);
- if (config_focus_raise)
- client_raise(c);
+ if (client_validate(c)) {
+ client_focus(c);
+ if (config_focus_raise)
+ client_raise(c);
+ }
}
return FALSE; /* no repeat */
}
diff --git a/openbox/screen.c b/openbox/screen.c
index 0a5bf2d1..f37c02e9 100644
--- a/openbox/screen.c
+++ b/openbox/screen.c
@@ -894,7 +894,7 @@ void screen_show_desktop(gboolean show)
/* focus desktop */
for (it = focus_order[screen_desktop]; it; it = g_list_next(it))
if (((ObClient*)it->data)->type == OB_CLIENT_TYPE_DESKTOP &&
- client_focus(it->data))
+ client_validate(it->data) && client_focus(it->data))
break;
} else {
focus_fallback(OB_FOCUS_FALLBACK_NOFOCUS);