]> git.lizzy.rs Git - bspwm.git/blobdiff - window.c
Stack tiling windows via focus history
[bspwm.git] / window.c
index 8c48272b8bf4baa013c2e548fc54940e921f4d8d..2b005af801e7d62cd4c993196b6a3c60002092a8 100644 (file)
--- a/window.c
+++ b/window.c
@@ -221,8 +221,14 @@ void window_draw_border(node_t *n, bool focused_window, bool focused_monitor)
 
         xcb_rectangle_t *presel_rectangles;
 
+        uint8_t win_depth = root_depth;
+        xcb_get_geometry_reply_t *geo = xcb_get_geometry_reply(dpy, xcb_get_geometry(dpy, win), NULL);
+        if (geo != NULL)
+            win_depth = geo->depth;
+        free(geo);
+
         xcb_pixmap_t pix = xcb_generate_id(dpy);
-        xcb_create_pixmap(dpy, root_depth, pix, win, full_width, full_height);
+        xcb_create_pixmap(dpy, win_depth, pix, win, full_width, full_height);
 
         xcb_gcontext_t gc = xcb_generate_id(dpy);
         xcb_create_gc(dpy, gc, pix, 0, NULL);
@@ -353,11 +359,21 @@ void toggle_locked(client_t *c)
     c->locked = !c->locked;
 }
 
+void set_urgency(monitor_t *m, desktop_t *d, node_t *n, bool value)
+{
+    if (value && mon->desk->focus == n)
+        return;
+    n->client->urgent = value;
+    put_status();
+    if (m->desk == d)
+        arrange(m, d);
+}
+
 void set_shadow(xcb_window_t win, uint32_t value)
 {
     if (!apply_shadow_property)
         return;
-    xcb_change_property(dpy, XCB_PROP_MODE_REPLACE, win, compton_shadow, XCB_ATOM_CARDINAL, 32, sizeof(value), &value);
+    xcb_change_property(dpy, XCB_PROP_MODE_REPLACE, win, compton_shadow, XCB_ATOM_CARDINAL, 32, 1, &value);
 }
 
 void enable_shadow(xcb_window_t win)
@@ -411,14 +427,14 @@ uint32_t get_border_color(client_t *c, bool focused_window, bool focused_monitor
 
 void update_floating_rectangle(client_t *c)
 {
-    xcb_get_geometry_reply_t *geom = xcb_get_geometry_reply(dpy, xcb_get_geometry(dpy, c->window), NULL);
+    xcb_get_geometry_reply_t *geo = xcb_get_geometry_reply(dpy, xcb_get_geometry(dpy, c->window), NULL);
 
-    if (geom) {
-        c->floating_rectangle = (xcb_rectangle_t) {geom->x, geom->y, geom->width, geom->height};
-        free(geom);
-    } else {
+    if (geo != NULL)
+        c->floating_rectangle = (xcb_rectangle_t) {geo->x, geo->y, geo->width, geo->height};
+    else
         c->floating_rectangle = (xcb_rectangle_t) {0, 0, 32, 24};
-    }
+
+    free(geo);
 }
 
 
@@ -472,11 +488,11 @@ void window_raise(xcb_window_t win)
     xcb_configure_window(dpy, win, XCB_CONFIG_WINDOW_STACK_MODE, values);
 }
 
-void window_pseudo_raise(desktop_t *d, xcb_window_t win)
+void stack_tiled(desktop_t *d)
 {
-    for (node_t *n = first_extrema(d->root); n != NULL; n = next_leaf(n))
-        if (is_tiled(n->client) && n->client->window != win)
-            window_lower(n->client->window);
+    for (node_list_t *x = d->history->tail; x != NULL; x = x->prev)
+        if (x->latest && is_tiled(x->node->client))
+            window_lower(x->node->client->window);
 }
 
 void window_lower(xcb_window_t win)