]> git.sur5r.net Git - i3/i3/commitdiff
Draw stacking borders correctly
authorMichael Stapelberg <michael+x200@stapelberg.de>
Sun, 1 Mar 2009 02:55:29 +0000 (03:55 +0100)
committerMichael Stapelberg <michael+x200@stapelberg.de>
Sun, 1 Mar 2009 02:55:29 +0000 (03:55 +0100)
src/handlers.c
src/layout.c

index 6d3e50b5f535c94eca458c075a67ff27d906d626..9abea18121309d45f7a7cded5d266fb5d7db1396 100644 (file)
@@ -454,6 +454,15 @@ int handle_expose_event(void *data, xcb_connection_t *conn, xcb_expose_event_t *
         printf("handle_expose_event()\n");
         if (client->container->mode != MODE_STACK)
                 decorate_window(conn, client, client->frame, client->titlegc, 0);
+        else {
+                xcb_change_gc_single(conn, client->titlegc, XCB_GC_FOREGROUND,
+                        get_colorpixel(conn, client, client->frame, "#285577"));
+
+                xcb_rectangle_t rect = {0, 0, client->rect.width, client->rect.height};
+                xcb_poly_fill_rectangle(conn, client->frame, client->titlegc, 1, &rect);
+
+                xcb_flush(conn);
+        }
         return 1;
 }
 
index af3d97e3bfa1bdcf4ab5f5b30b15d0ea1622aad5..b488c9afca4e50ff1c034488534dfda30fb66290 100644 (file)
@@ -108,7 +108,7 @@ void decorate_window(xcb_connection_t *conn, Client *client, xcb_drawable_t draw
            - Draw the window’s title
          */
 
-        /* Draw a green rectangle around the window */
+        /* Draw a rectangle in background color around the window */
         xcb_change_gc_single(conn, gc, XCB_GC_FOREGROUND, background_color);
 
         xcb_rectangle_t rect = {0, offset, client->rect.width, offset + client->rect.height};
@@ -165,17 +165,26 @@ static void resize_client(xcb_connection_t *connection, Client *client) {
                         XCB_CONFIG_WINDOW_WIDTH |
                         XCB_CONFIG_WINDOW_HEIGHT;
         Rect rect;
-        if (client->titlebar_position == TITLEBAR_OFF ||
-            client->container->mode == MODE_STACK) {
-                rect.x = 0;
-                rect.y = 0;
-                rect.width = client->rect.width;
-                rect.height = client->rect.height;
-        } else {
-                rect.x = 2;
-                rect.y = font->height + 2 + 2;
-                rect.width = client->rect.width - (2 + 2);
-                rect.height = client->rect.height - ((font->height + 2 + 2) + 2);
+        switch (client->container->mode) {
+                case MODE_STACK:
+                        rect.x = 2;
+                        rect.y = 0;
+                        rect.width = client->rect.width - (2 + 2);
+                        rect.height = client->rect.height - 2;
+                        break;
+                default:
+                        if (client->titlebar_position == TITLEBAR_OFF) {
+                                rect.x = 0;
+                                rect.y = 0;
+                                rect.width = client->rect.width;
+                                rect.height = client->rect.height;
+                        } else {
+                                rect.x = 2;
+                                rect.y = font->height + 2 + 2;
+                                rect.width = client->rect.width - (2 + 2);
+                                rect.height = client->rect.height - ((font->height + 2 + 2) + 2);
+                        }
+                        break;
         }
 
         printf("child will be at %dx%d with size %dx%d\n", rect.x, rect.y, rect.width, rect.height);