diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-03-23 23:47:47 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-03-23 23:47:47 +0000 |
| commit | 687559cb2d8fce88d0d26223bb9468414a862ab7 (patch) | |
| tree | d858d6bbd5296ec9d087321ead03f153c86153b5 /openbox/event.c | |
| parent | 797d54d933baf252316d3f79e0f5378f3cbebe7e (diff) | |
yet more improvements to focus handling
Diffstat (limited to 'openbox/event.c')
| -rw-r--r-- | openbox/event.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/openbox/event.c b/openbox/event.c index a5bce992..d3426109 100644 --- a/openbox/event.c +++ b/openbox/event.c @@ -238,7 +238,11 @@ void event_process(XEvent *e) if (fi.xfocus.window == e->xfocus.window) 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; case EnterNotify: case LeaveNotify: @@ -323,10 +327,22 @@ static void event_handle_client(Client *client, XEvent *e) switch (e->type) { 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; 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; case ConfigureRequest: g_message("ConfigureRequest for window %lx", client->window); |
