summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDana Jansens <danakj@orodu.net>2003-03-23 23:47:47 +0000
committerDana Jansens <danakj@orodu.net>2003-03-23 23:47:47 +0000
commit687559cb2d8fce88d0d26223bb9468414a862ab7 (patch)
treed858d6bbd5296ec9d087321ead03f153c86153b5
parent797d54d933baf252316d3f79e0f5378f3cbebe7e (diff)
yet more improvements to focus handling
-rw-r--r--openbox/client.c26
-rw-r--r--openbox/client.h5
-rw-r--r--openbox/event.c22
3 files changed, 19 insertions, 34 deletions
diff --git a/openbox/client.c b/openbox/client.c
index af1e3ba8..8d1cc034 100644
--- a/openbox/client.c
+++ b/openbox/client.c
@@ -1923,8 +1923,6 @@ gboolean client_focus(Client *self)
XSendEvent(ob_display, self->window, FALSE, NoEventMask, &ce);
}
- client_set_focused(self, TRUE);
-
/* XSync(ob_display, FALSE); XXX Why sync? */
return TRUE;
}
@@ -1932,30 +1930,6 @@ gboolean client_focus(Client *self)
void client_unfocus(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)
diff --git a/openbox/client.h b/openbox/client.h
index 808f4e5f..e51315c0 100644
--- a/openbox/client.h
+++ b/openbox/client.h
@@ -320,11 +320,6 @@ gboolean client_normal(Client *self);
/* Returns if the window is focused */
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.
This also maintains things like the client's minsize, and size increments.
@param anchor The corner to keep in the same position when resizing.
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);