From: Dana Jansens Date: Mon, 12 Mar 2007 06:04:00 +0000 (+0000) Subject: don't validate inside client_focus. instead, validate before you call it! X-Git-Url: https://git.brokenzipper.com/gitweb?a=commitdiff_plain;h=85a1a0cfb3e6f57b37d7a7b83132698b2d6cdee3;p=chaz%2Fopenbox don't validate inside client_focus. instead, validate before you call it! --- 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);