yet more improvements to focus handling
This commit is contained in:
parent
797d54d933
commit
687559cb2d
3 changed files with 19 additions and 34 deletions
|
@ -1923,8 +1923,6 @@ gboolean client_focus(Client *self)
|
||||||
XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce);
|
XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce);
|
||||||
}
|
}
|
||||||
|
|
||||||
client_set_focused(self, TRUE);
|
|
||||||
|
|
||||||
/* XSync(ob_display, FALSE); XXX Why sync? */
|
/* XSync(ob_display, FALSE); XXX Why sync? */
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1932,30 +1930,6 @@ gboolean client_focus(Client *self)
|
||||||
void client_unfocus(Client *self)
|
void client_unfocus(Client *self)
|
||||||
{
|
{
|
||||||
g_assert(focus_client == self);
|
g_assert(focus_client == self);
|
||||||
client_set_focused(self, FALSE);
|
|
||||||
}
|
|
||||||
|
|
||||||
void client_set_focused(Client *self, gboolean focused)
|
|
||||||
{
|
|
||||||
if (focused) {
|
|
||||||
if (focus_client != self) {
|
|
||||||
focus_set_client(self);
|
|
||||||
|
|
||||||
/* focus state can affect the stacking layer */
|
|
||||||
client_calc_layer(self);
|
|
||||||
|
|
||||||
engine_frame_adjust_focus(self->frame);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if (focus_client == self)
|
|
||||||
focus_set_client(NULL);
|
|
||||||
|
|
||||||
/* focus state can affect the stacking layer */
|
|
||||||
client_calc_layer(self);
|
|
||||||
|
|
||||||
if (self->frame != NULL) /* unfocus can happen while being unmanaged */
|
|
||||||
engine_frame_adjust_focus(self->frame);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean client_focused(Client *self)
|
gboolean client_focused(Client *self)
|
||||||
|
|
|
@ -320,11 +320,6 @@ gboolean client_normal(Client *self);
|
||||||
/* Returns if the window is focused */
|
/* Returns if the window is focused */
|
||||||
gboolean client_focused(Client *self);
|
gboolean client_focused(Client *self);
|
||||||
|
|
||||||
/*! Sets the client to a focused or unfocused state. This does not actually
|
|
||||||
change the input focus, but rather is used once focus has been moved to tell
|
|
||||||
the client that it is so. */
|
|
||||||
void client_set_focused(Client *self, gboolean focused);
|
|
||||||
|
|
||||||
/*! Move and/or resize the window.
|
/*! Move and/or resize the window.
|
||||||
This also maintains things like the client's minsize, and size increments.
|
This also maintains things like the client's minsize, and size increments.
|
||||||
@param anchor The corner to keep in the same position when resizing.
|
@param anchor The corner to keep in the same position when resizing.
|
||||||
|
|
|
@ -238,7 +238,11 @@ void event_process(XEvent *e)
|
||||||
if (fi.xfocus.window == e->xfocus.window)
|
if (fi.xfocus.window == e->xfocus.window)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
} else if (window == focus_backup && focus_client != NULL)
|
||||||
|
/* Something's focused but we got a focus event for the backup
|
||||||
|
window. this means that something unfocused before we received
|
||||||
|
the new FocusIn. Just ignore it. */
|
||||||
|
return;
|
||||||
break;
|
break;
|
||||||
case EnterNotify:
|
case EnterNotify:
|
||||||
case LeaveNotify:
|
case LeaveNotify:
|
||||||
|
@ -323,10 +327,22 @@ static void event_handle_client(Client *client, XEvent *e)
|
||||||
|
|
||||||
switch (e->type) {
|
switch (e->type) {
|
||||||
case FocusIn:
|
case FocusIn:
|
||||||
client_set_focused(client, TRUE);
|
if (focus_client != client)
|
||||||
|
focus_set_client(client);
|
||||||
|
|
||||||
|
/* focus state can affect the stacking layer */
|
||||||
|
client_calc_layer(client);
|
||||||
|
|
||||||
|
engine_frame_adjust_focus(client->frame);
|
||||||
break;
|
break;
|
||||||
case FocusOut:
|
case FocusOut:
|
||||||
client_set_focused(client, FALSE);
|
if (focus_client == client)
|
||||||
|
focus_set_client(NULL);
|
||||||
|
|
||||||
|
/* focus state can affect the stacking layer */
|
||||||
|
client_calc_layer(client);
|
||||||
|
|
||||||
|
engine_frame_adjust_focus(client->frame);
|
||||||
break;
|
break;
|
||||||
case ConfigureRequest:
|
case ConfigureRequest:
|
||||||
g_message("ConfigureRequest for window %lx", client->window);
|
g_message("ConfigureRequest for window %lx", client->window);
|
||||||
|
|
Loading…
Reference in a new issue