#include <getopt.h>
#include <limits.h>
#include <fcntl.h>
+#include <paths.h>
#include <xcb/xcb.h>
#include <xcb/xcb_aux.h>
/* Child process */
setsid();
if (fork() == 0) {
- /* Stores the path of the shell */
- static const char *shell = NULL;
-
- if (shell == NULL)
- if ((shell = getenv("SHELL")) == NULL)
- shell = "/bin/sh";
-
/* This is the child */
- execl(shell, shell, "-c", command, (void*)NULL);
+ execl(_PATH_BSHELL, _PATH_BSHELL, "-c", command, (void*)NULL);
/* not reached */
}
exit(0);
4 + 4, 4 + 4, rect.width - 4 - 4);
/* render close button */
+ const char *close_button_label = "X";
int line_width = 4;
- int w = 20;
+ /* set width to the width of the label */
+ int w = predict_text_width(i3string_from_utf8(close_button_label));
+ /* account for left/right padding, which seems to be set to 8px (total) below */
+ w += 8;
int y = rect.width;
uint32_t values[3];
values[0] = color_button_background;
values[0] = 1;
set_font_colors(pixmap_gc, color_text, color_button_background);
- draw_text_ascii("X", pixmap, pixmap_gc, y - w - line_width + w / 2 - 4,
+ /* the x term here seems to set left/right padding */
+ draw_text_ascii(close_button_label, pixmap, pixmap_gc, y - w - line_width + w / 2 - 4,
4 + 4 - 1, rect.width - y + w + line_width - w / 2 + 4);
y -= w;
/* render custom buttons */
line_width = 1;
for (int c = 0; c < buttoncnt; c++) {
- /* TODO: make w = text extents of the label */
- w = 100;
+ /* set w to the width of the label */
+ w = predict_text_width(buttons[c].label);
+ /* account for left/right padding, which seems to be set to 12px (total) below */
+ w += 12;
y -= 30;
xcb_change_gc(conn, pixmap_gc, XCB_GC_FOREGROUND, (uint32_t[]){ color_button_background });
close = (xcb_rectangle_t){ y - w - (2 * line_width), 2, w + (2 * line_width), rect.height - 6 };
values[0] = color_text;
values[1] = color_button_background;
set_font_colors(pixmap_gc, color_text, color_button_background);
+ /* the x term seems to set left/right padding */
draw_text(buttons[c].label, pixmap, pixmap_gc,
y - w - line_width + 6, 4 + 3, rect.width - y + w + line_width - 6);