diff options
| author | Dana Jansens <danakj@orodu.net> | 2003-03-19 07:08:15 +0000 |
|---|---|---|
| committer | Dana Jansens <danakj@orodu.net> | 2003-03-19 07:08:15 +0000 |
| commit | 648c55b829e09c66222a9bbf08d10434622feae2 (patch) | |
| tree | 7e6c2eb58a71e4691c9c5d85325b9d9000019138 /openbox/client.c | |
| parent | 597fad9d8d5b7be27cabeeec750ed15f86377a07 (diff) | |
move the focus_order lists into the kernel
Diffstat (limited to 'openbox/client.c')
| -rw-r--r-- | openbox/client.c | 28 |
1 files changed, 26 insertions, 2 deletions
diff --git a/openbox/client.c b/openbox/client.c index 790dba5a..dfc70348 100644 --- a/openbox/client.c +++ b/openbox/client.c @@ -214,6 +214,7 @@ void client_unmanage_all() void client_unmanage(Client *client) { + guint i; int j; GSList *it; @@ -242,6 +243,15 @@ void client_unmanage(Client *client) stacking_list = g_list_remove(stacking_list, client); g_hash_table_remove(client_map, (gpointer)client->window); + /* update the focus lists */ + if (client->desktop == DESKTOP_ALL) { + for (i = 0; i < screen_num_desktops; ++i) + focus_order[i] = g_list_remove(focus_order[i], client); + } else { + i = client->desktop; + focus_order[i] = g_list_remove(focus_order[i], client); + } + /* once the client is out of the list, update the struts to remove it's influence */ screen_update_struts(); @@ -257,7 +267,7 @@ void client_unmanage(Client *client) client_calc_layer(it->data); } - /* unfocus the client (calls the focus callbacks) (we're out of the + /* unfocus the client (dispatchs the focus event) (we're out of the transient lists already, so being modal doesn't matter) */ if (client->focused) client_unfocus(client); @@ -1622,7 +1632,7 @@ void client_close(Client *self) void client_set_desktop(Client *self, guint target) { - guint old; + guint old, i; if (target == self->desktop) return; @@ -1639,6 +1649,20 @@ void client_set_desktop(Client *self, guint target) client_showhide(self); screen_update_struts(); + /* update the focus lists */ + if (old == DESKTOP_ALL) { + for (i = 0; i < screen_num_desktops; ++i) + focus_order[i] = g_list_remove(focus_order[i], self); + } else { + focus_order[old] = g_list_remove(focus_order[old], self); + } + if (target == DESKTOP_ALL) { + for (i = 0; i < screen_num_desktops; ++i) + focus_order[i] = g_list_prepend(focus_order[i], self); + } else { + focus_order[target] = g_list_prepend(focus_order[target], self); + } + dispatch_client(Event_Client_Desktop, self, target, old); } |
