#include "openbox.h"
#include "group.h"
#include "config.h"
+#include "menu.h"
#include "render/render.h"
#include <glib.h>
client_unmanage(client_list->data);
}
+/* called by client_unmanage() to close any menus referencing this client */
+void client_close_menus(gpointer key, gpointer value, gpointer self)
+{
+ if (((Menu *)value)->client == (Client *)self)
+ menu_hide((Menu *)value);
+}
+
void client_unmanage(Client *self)
{
int j;
if (moveresize_client == self)
moveresize_end(TRUE);
+ /* close any windows that are attached to this window */
+ g_hash_table_foreach(menu_hash, client_close_menus, self);
+
+
if (focus_client == self) {
XEvent e;
if (target == self->desktop) return;
- g_message("Setting desktop %u", target);
+ g_message("Setting desktop %u", target+1);
g_assert(target < screen_num_desktops || target == DESKTOP_ALL);
if (shaded != self->shaded)
client_shade(self, shaded);
client_calc_layer(self);
- client_change_state(self); /* change the hint to relect these changes */
+ client_change_state(self); /* change the hint to reflect these changes */
}
Client *client_focus_target(Client *self)
return best_client;
}
+
+void client_set_layer(Client *self, int layer)
+{
+ if (layer < 0) {
+ self->below = TRUE;
+ self->above = FALSE;
+ } else if (layer == 0) {
+ self->below = self->above = FALSE;
+ } else {
+ self->below = FALSE;
+ self->above = TRUE;
+ }
+ client_calc_layer(self);
+ client_change_state(self); /* reflect this in the state hints */
+}