#define CLIENT_NOPROPAGATEMASK (ButtonPressMask | ButtonReleaseMask | \
ButtonMotionMask)
-GList *client_list = NULL;
+GList *client_list = NULL;
+GSList *client_destructors = NULL;
static void client_get_all(ObClient *self);
static void client_toggle_border(ObClient *self, gboolean show);
{
}
+void client_add_destructor(ObClientDestructorFunc func)
+{
+ client_destructors = g_slist_prepend(client_destructors, (gpointer)func);
+}
+
+void client_remove_destructor(ObClientDestructorFunc func)
+{
+ client_destructors = g_slist_remove(client_destructors, (gpointer)func);
+}
+
void client_set_list()
{
Window *windows, *win_it;
place_client(self, &x, &y);
+ /* make sure the window is visible */
client_find_onscreen(self, &x, &y,
self->frame->area.width,
self->frame->area.height,
TRUE, TRUE);
}
- /* make sure the window is visible */
- client_move_onscreen(self, client_normal(self));
-
client_showhide(self);
/* use client_focus instead of client_activate cuz client_activate does
}
}
- if (moveresize_client == self)
- moveresize_end(TRUE);
-
- /* menus can be associated with a client, so close any that are since
- we are disappearing now */
- menu_frame_hide_all_client(self);
-
+ for (it = client_destructors; it; it = g_slist_next(it)) {
+ ObClientDestructorFunc func = (ObClientDestructorFunc) it->data;
+ func(self);
+ }
+
if (focus_client == self) {
XEvent e;
void client_setup_decor_and_functions(ObClient *self)
{
/* start with everything (cept fullscreen) */
- self->decorations = (OB_FRAME_DECOR_TITLEBAR |
- OB_FRAME_DECOR_HANDLE |
- OB_FRAME_DECOR_GRIPS |
- OB_FRAME_DECOR_BORDER |
- OB_FRAME_DECOR_ICON |
- OB_FRAME_DECOR_ALLDESKTOPS |
- OB_FRAME_DECOR_ICONIFY |
- OB_FRAME_DECOR_MAXIMIZE |
- OB_FRAME_DECOR_SHADE);
- self->functions = (OB_CLIENT_FUNC_RESIZE |
- OB_CLIENT_FUNC_MOVE |
- OB_CLIENT_FUNC_ICONIFY |
- OB_CLIENT_FUNC_MAXIMIZE |
- OB_CLIENT_FUNC_SHADE);
+ self->decorations =
+ (OB_FRAME_DECOR_TITLEBAR |
+ (ob_rr_theme->show_handle ? OB_FRAME_DECOR_HANDLE : 0) |
+ OB_FRAME_DECOR_GRIPS |
+ OB_FRAME_DECOR_BORDER |
+ OB_FRAME_DECOR_ICON |
+ OB_FRAME_DECOR_ALLDESKTOPS |
+ OB_FRAME_DECOR_ICONIFY |
+ OB_FRAME_DECOR_MAXIMIZE |
+ OB_FRAME_DECOR_SHADE);
+ self->functions =
+ (OB_CLIENT_FUNC_RESIZE |
+ OB_CLIENT_FUNC_MOVE |
+ OB_CLIENT_FUNC_ICONIFY |
+ OB_CLIENT_FUNC_MAXIMIZE |
+ OB_CLIENT_FUNC_SHADE);
if (self->delete_window) {
self->functions |= OB_CLIENT_FUNC_CLOSE;
self->decorations |= OB_FRAME_DECOR_CLOSE;