don't validate inside client_focus. instead, validate before you call it!
This commit is contained in:
parent
6b7cc88c9d
commit
85a1a0cfb3
5 changed files with 14 additions and 7 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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 */
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in a new issue