unsigned long quirks;
struct workspace *ws; /* always valid */
struct swm_screen *s; /* always valid, never changes */
- xcb_get_geometry_reply_t *wa;
xcb_size_hints_t sh;
xcb_icccm_get_wm_class_reply_t ch;
xcb_icccm_wm_hints_t hints;
pr = xcb_get_property_reply(conn,
xcb_get_property(conn, 0, win->id, a_swm_iconic,
XCB_ATOM_INTEGER, 0, 1), NULL);
- if (!pr)
+ if (pr == NULL)
goto out;
if (pr->type != XCB_ATOM_INTEGER || pr->format != 32)
goto out;
pc = xcb_get_property(conn, 0, screens[i].root, sup_check,
XCB_ATOM_WINDOW, 0, 1);
pr = xcb_get_property_reply(conn, pc, NULL);
- if (!pr)
+ if (pr == NULL)
continue;
if (pr->format == sup_check) {
id = *((xcb_window_t *)xcb_get_property_value(pr));
c = xcb_get_property(conn, 0, win->id,
ewmh[_NET_WM_WINDOW_TYPE].atom, XCB_ATOM_ATOM, 0, UINT32_MAX);
r = xcb_get_property_reply(conn, c, NULL);
- if (!r)
+ if (r == NULL)
return;
n = xcb_get_property_value_length(r);
int
ewmh_set_win_fullscreen(struct ws_win *win, int fs)
{
- if (!win->ws->r)
+ if (win->ws->r == NULL)
return (0);
if (!win->floating)
c = xcb_get_property(conn, 0, win->id, ewmh[_NET_WM_STATE].atom,
XCB_ATOM_ATOM, 0, UINT32_MAX);
r = xcb_get_property_reply(conn, c, NULL);
- if (!r)
+ if (r == NULL)
return;
states = xcb_get_property_value(r);
nr = xcb_alloc_named_color_reply(conn,
xcb_alloc_named_color(conn, cmap, strlen(colorname),
colorname), NULL);
- if (!nr) {
+ if (nr == NULL) {
strlcat(cname, colorname + 2, sizeof cname - 1);
nr = xcb_alloc_named_color_reply(conn,
xcb_alloc_named_color(conn, cmap, strlen(cname),
font);
}
- if (!bar_font) {
+ if (bar_font == NULL) {
warnx("unable to load font %s", font);
continue;
} else {
c = xcb_get_property(conn, 0, w, a_state, a_state, 0L, 2L);
r = xcb_get_property_reply(conn, c, NULL);
-
if (r) {
if (r->type == a_state && r->format == 32 && r->length == 2)
result = *((uint32_t *)xcb_get_property_value(r));
/* No region with an active focus; try to use pointer. */
qpr = xcb_query_pointer_reply(conn, xcb_query_pointer(conn,
screens[i].root), NULL);
-
if (qpr) {
DNPRINTF(SWM_D_MISC, "root_to_region: pointer: "
"(%d,%d)\n", qpr->root_x, qpr->root_y);
return (win);
r = xcb_query_tree_reply(conn, xcb_query_tree(conn, id), NULL);
- if (!r)
+ if (r == NULL)
return (NULL);
/* if we were looking for the parent return that window instead */
c = xcb_get_property(conn, 0, win, ewmh[_NET_WM_NAME].atom,
XCB_GET_PROPERTY_TYPE_ANY, 0, UINT_MAX);
r = xcb_get_property_reply(conn, c, NULL);
-
if (r) {
if (r->type == XCB_NONE) {
free(r);
c = xcb_get_property(conn, 0, win, XCB_ATOM_WM_NAME,
XCB_GET_PROPERTY_TYPE_ANY, 0, UINT_MAX);
r = xcb_get_property_reply(conn, c, NULL);
-
- if (!r)
+ if (r == NULL)
return (NULL);
if (r->type == XCB_NONE) {
free(r);
DNPRINTF(SWM_D_MISC, "search_resp_search_workspace: resp: %s\n", resp);
q = strdup(resp);
- if (!q) {
+ if (q == NULL) {
DNPRINTF(SWM_D_MISC, "search_resp_search_workspace: strdup: %s",
strerror(errno));
return;
DNPRINTF(SWM_D_MISC, "search_resp_search_window: resp: %s\n", resp);
s = strdup(resp);
- if (!s) {
+ if (s == NULL) {
DNPRINTF(SWM_D_MISC, "search_resp_search_window: strdup: %s",
strerror(errno));
return;
if (win == NULL)
return (0);
- if (!win->ws->r)
+ if (win->ws->r == NULL)
return (0);
/* reject floating toggles in max stack mode */
/* get cursor offset from window root */
xpr = xcb_query_pointer_reply(conn, xcb_query_pointer(conn, win->id),
NULL);
- if (!xpr)
+ if (xpr == NULL)
return;
g = win->g;
/* get cursor offset from window root */
qpr = xcb_query_pointer_reply(conn, xcb_query_pointer(conn, win->id),
NULL);
- if (!qpr) {
+ if (qpr == NULL) {
xcb_ungrab_pointer(conn, XCB_CURRENT_TIME);
return;
}
/* find program */
TAILQ_FOREACH(prog, &spawns, entry) {
- if (!strcasecmp(spawn_name, prog->name))
+ if (strcasecmp(spawn_name, prog->name) == 0)
break;
}
if (prog == NULL) {
for (i = c = 0; i < prog->argc; i++) {
ap = prog->argv[i];
DNPRINTF(SWM_D_SPAWN, "spawn_custom: raw arg: %s\n", ap);
- if (!strcasecmp(ap, "$bar_border")) {
+ if (strcasecmp(ap, "$bar_border") == 0) {
if ((real_args[c] =
strdup(r->s->c[SWM_S_COLOR_BAR_BORDER].name))
== NULL)
err(1, "spawn_custom border color");
- } else if (!strcasecmp(ap, "$bar_color")) {
+ } else if (strcasecmp(ap, "$bar_color") == 0) {
if ((real_args[c] =
strdup(r->s->c[SWM_S_COLOR_BAR].name))
== NULL)
err(1, "spawn_custom bar color");
- } else if (!strcasecmp(ap, "$bar_font")) {
+ } else if (strcasecmp(ap, "$bar_font") == 0) {
if ((real_args[c] = strdup(bar_fonts))
== NULL)
err(1, "spawn_custom bar fonts");
- } else if (!strcasecmp(ap, "$bar_font_color")) {
+ } else if (strcasecmp(ap, "$bar_font_color") == 0) {
if ((real_args[c] =
strdup(r->s->c[SWM_S_COLOR_BAR_FONT].name))
== NULL)
err(1, "spawn_custom color font");
- } else if (!strcasecmp(ap, "$color_focus")) {
+ } else if (strcasecmp(ap, "$color_focus") == 0) {
if ((real_args[c] =
strdup(r->s->c[SWM_S_COLOR_FOCUS].name))
== NULL)
err(1, "spawn_custom color focus");
- } else if (!strcasecmp(ap, "$color_unfocus")) {
+ } else if (strcasecmp(ap, "$color_unfocus") == 0) {
if ((real_args[c] =
strdup(r->s->c[SWM_S_COLOR_UNFOCUS].name))
== NULL)
err(1, "spawn_custom color unfocus");
- } else if (!strcasecmp(ap, "$region_index")) {
+ } else if (strcasecmp(ap, "$region_index") == 0) {
if (asprintf(&real_args[c], "%d",
get_region_index(r) + 1) < 1)
err(1, "spawn_custom region index");
- } else if (!strcasecmp(ap, "$workspace_index")) {
+ } else if (strcasecmp(ap, "$workspace_index") == 0) {
if (asprintf(&real_args[c], "%d", r->ws->idx + 1) < 1)
err(1, "spawn_custom workspace index");
- } else if (!strcasecmp(ap, "$dmenu_bottom")) {
+ } else if (strcasecmp(ap, "$dmenu_bottom") == 0) {
if (!bar_at_bottom)
continue;
if ((real_args[c] = strdup("-b")) == NULL)
struct spawn_prog *sp;
TAILQ_FOREACH(sp, &spawns, entry)
- if (!strcasecmp(sp->name, name))
+ if (strcasecmp(sp->name, name) == 0)
return sp;
return NULL;
cp += (long)strspn(cp, SWM_KEY_WS);
if (strncasecmp(name, "MOD", SWM_MODNAME_SIZE) == 0)
*mod |= currmod;
- else if (!strncasecmp(name, "Mod1", SWM_MODNAME_SIZE))
+ else if (strncasecmp(name, "Mod1", SWM_MODNAME_SIZE) == 0)
*mod |= XCB_MOD_MASK_1;
- else if (!strncasecmp(name, "Mod2", SWM_MODNAME_SIZE))
+ else if (strncasecmp(name, "Mod2", SWM_MODNAME_SIZE) == 0)
*mod += XCB_MOD_MASK_2;
- else if (!strncmp(name, "Mod3", SWM_MODNAME_SIZE))
+ else if (strncmp(name, "Mod3", SWM_MODNAME_SIZE) == 0)
*mod |= XCB_MOD_MASK_3;
- else if (!strncmp(name, "Mod4", SWM_MODNAME_SIZE))
+ else if (strncmp(name, "Mod4", SWM_MODNAME_SIZE) == 0)
*mod |= XCB_MOD_MASK_4;
else if (strncasecmp(name, "SHIFT", SWM_MODNAME_SIZE) == 0)
*mod |= XCB_MOD_MASK_SHIFT;
if (cp)
cp += (long)strspn(cp, SWM_Q_WS);
for (i = 0; i < LENGTH(quirkname); i++) {
- if (!strncasecmp(name, quirkname[i], SWM_QUIRK_LEN)) {
+ if (strncasecmp(name, quirkname[i],
+ SWM_QUIRK_LEN) == 0) {
DNPRINTF(SWM_D_QUIRK,
"parsequirks: %s\n", name);
if (i == 0) {
/* Remove/replace existing quirk. */
TAILQ_FOREACH(qp, &quirks, entry) {
- if (!strcmp(qp->class, class) && !strcmp(qp->name, name)) {
- if (!quirk)
+ if (strcmp(qp->class, class) == 0 &&
+ strcmp(qp->name, name) == 0) {
+ if (quirk == 0)
quirk_remove(qp);
else
quirk_replace(qp, class, name, quirk);
err(1, "setconfvalue: bar_format");
break;
case SWM_S_BAR_JUSTIFY:
- if (!strcmp(value, "left"))
+ if (strcmp(value, "left") == 0)
bar_justify = SWM_BAR_JUSTIFY_LEFT;
- else if (!strcmp(value, "center"))
+ else if (strcmp(value, "center") == 0)
bar_justify = SWM_BAR_JUSTIFY_CENTER;
- else if (!strcmp(value, "right"))
+ else if (strcmp(value, "right") == 0)
bar_justify = SWM_BAR_JUSTIFY_RIGHT;
else
errx(1, "invalid bar_justify");
disable_border = atoi(value);
break;
case SWM_S_FOCUS_CLOSE:
- if (!strcmp(value, "first"))
+ if (strcmp(value, "first") == 0)
focus_close = SWM_STACK_BOTTOM;
- else if (!strcmp(value, "last"))
+ else if (strcmp(value, "last") == 0)
focus_close = SWM_STACK_TOP;
- else if (!strcmp(value, "next"))
+ else if (strcmp(value, "next") == 0)
focus_close = SWM_STACK_ABOVE;
- else if (!strcmp(value, "previous"))
+ else if (strcmp(value, "previous") == 0)
focus_close = SWM_STACK_BELOW;
else
errx(1, "focus_close");
focus_close_wrap = atoi(value);
break;
case SWM_S_FOCUS_DEFAULT:
- if (!strcmp(value, "last"))
+ if (strcmp(value, "last") == 0)
focus_default = SWM_STACK_TOP;
- else if (!strcmp(value, "first"))
+ else if (strcmp(value, "first") == 0)
focus_default = SWM_STACK_BOTTOM;
else
errx(1, "focus_default");
break;
case SWM_S_FOCUS_MODE:
- if (!strcmp(value, "default"))
+ if (strcmp(value, "default") == 0)
focus_mode = SWM_FOCUS_DEFAULT;
- else if (!strcmp(value, "follow") ||
- !strcmp(value, "follow_cursor"))
+ else if (strcmp(value, "follow") == 0 ||
+ strcmp(value, "follow_cursor") == 0)
focus_mode = SWM_FOCUS_FOLLOW;
- else if (!strcmp(value, "manual"))
+ else if (strcmp(value, "manual") == 0)
focus_mode = SWM_FOCUS_MANUAL;
else
errx(1, "focus_mode");
region_padding = 0;
break;
case SWM_S_SPAWN_ORDER:
- if (!strcmp(value, "first"))
+ if (strcmp(value, "first") == 0)
spawn_position = SWM_STACK_BOTTOM;
- else if (!strcmp(value, "last"))
+ else if (strcmp(value, "last") == 0)
spawn_position = SWM_STACK_TOP;
- else if (!strcmp(value, "next"))
+ else if (strcmp(value, "next") == 0)
spawn_position = SWM_STACK_ABOVE;
- else if (!strcmp(value, "previous"))
+ else if (strcmp(value, "previous") == 0)
spawn_position = SWM_STACK_BELOW;
else
errx(1, "spawn_position");
(void)selector;
(void)flags;
- if (!strncasecmp(value, "Mod1", strlen("Mod1")))
+ if (strncasecmp(value, "Mod1", strlen("Mod1")) == 0)
update_modkey(XCB_MOD_MASK_1);
- else if (!strncasecmp(value, "Mod2", strlen("Mod2")))
+ else if (strncasecmp(value, "Mod2", strlen("Mod2")) == 0)
update_modkey(XCB_MOD_MASK_2);
- else if (!strncasecmp(value, "Mod3", strlen("Mod3")))
+ else if (strncasecmp(value, "Mod3", strlen("Mod3")) == 0)
update_modkey(XCB_MOD_MASK_3);
- else if (!strncasecmp(value, "Mod4", strlen("Mod4")))
+ else if (strncasecmp(value, "Mod4", strlen("Mod4")) == 0)
update_modkey(XCB_MOD_MASK_4);
else
return (1);
if (ws_id < 0 || ws_id >= workspace_limit)
errx(1, "layout: invalid workspace %d", ws_id + 1);
- if (!strcasecmp(s, "vertical"))
+ if (strcasecmp(s, "vertical") == 0)
st = SWM_V_STACK;
- else if (!strcasecmp(s, "vertical_flip")) {
+ else if (strcasecmp(s, "vertical_flip") == 0) {
st = SWM_V_STACK;
f = 1;
- } else if (!strcasecmp(s, "horizontal"))
+ } else if (strcasecmp(s, "horizontal") == 0)
st = SWM_H_STACK;
- else if (!strcasecmp(s, "horizontal_flip")) {
+ else if (strcasecmp(s, "horizontal_flip") == 0) {
st = SWM_H_STACK;
f = 1;
- } else if (!strcasecmp(s, "fullscreen"))
+ } else if (strcasecmp(s, "fullscreen") == 0)
st = SWM_MAX_STACK;
else
errx(1, "invalid layout entry, should be 'ws[<idx>]:"
optidx = -1;
for (i = 0; i < LENGTH(configopt); i++) {
opt = &configopt[i];
- if (!strncasecmp(cp, opt->optname, wordlen) &&
+ if (strncasecmp(cp, opt->optname, wordlen) == 0 &&
(int)strlen(opt->optname) == wordlen) {
optidx = i;
break;
DNPRINTF(SWM_D_MISC, "set_child_transient: parent doesn't exist"
" for 0x%x trans 0x%x\n", win->id, win->transient);
- r = root_to_region(win->wa->root, SWM_CK_ALL);
+ r = root_to_region(win->s->root, SWM_CK_ALL);
ws = r->ws;
/* parent doen't exist in our window list */
TAILQ_FOREACH(w, &ws->winlist, entry) {
pc = xcb_get_property(conn, 0, win, apid, XCB_ATOM_CARDINAL, 0, 1);
pr = xcb_get_property_reply(conn, pc, NULL);
- if (!pr)
+ if (pr == NULL)
goto tryharder;
if (pr->type != XCB_ATOM_CARDINAL) {
free(pr);
pc = xcb_get_property(conn, 0, win, apid, XCB_ATOM_STRING,
0, SWM_PROPLEN);
pr = xcb_get_property_reply(conn, pc, NULL);
- if (!pr)
+ if (pr == NULL)
return (0);
if (pr->type != apid) {
free(pr);
xcb_get_property(conn, 0, id, a_swm_ws,
XCB_ATOM_STRING, 0, SWM_PROPLEN),
NULL);
- if (!gpr)
+ if (gpr == NULL)
return (-1);
if (gpr->type) {
proplen = xcb_get_property_value_length(gpr);
struct pid_e *p;
struct quirk *qp;
uint32_t i, wa[2];
+ xcb_get_geometry_reply_t *gr;
xcb_icccm_get_wm_protocols_reply_t wpr;
if ((win = find_window(id)) != NULL) {
DNPRINTF(SWM_D_MISC, "manage_window: win 0x%x is new.\n", id);
}
+ /* Try to get initial window geometry. */
+ gr = xcb_get_geometry_reply(conn, xcb_get_geometry(conn, id), NULL);
+ if (gr == NULL) {
+ DNPRINTF(SWM_D_MISC, "manage_window: get geometry failed.\n");
+ return (NULL);
+ }
+
/* Create and initialize ws_win object. */
if ((win = calloc(1, sizeof(struct ws_win))) == NULL)
err(1, "manage_window: calloc: failed to allocate memory for "
win->id = id;
- /* Get window geometry. */
- win->wa = xcb_get_geometry_reply(conn,
- xcb_get_geometry(conn, win->id),
- NULL);
-
- /* Figure out which region the window belongs to. */
- r = root_to_region(win->wa->root, SWM_CK_ALL);
+ /* Figureout which region the window belongs to. */
+ r = root_to_region(gr->root, SWM_CK_ALL);
/* Ignore window border if there is one. */
- WIDTH(win) = win->wa->width;
- HEIGHT(win) = win->wa->height;
- X(win) = win->wa->x + win->wa->border_width - border_width;
- Y(win) = win->wa->y + win->wa->border_width - border_width;
+ WIDTH(win) = gr->width;
+ HEIGHT(win) = gr->height;
+ X(win) = gr->x + gr->border_width - border_width;
+ Y(win) = gr->y + gr->border_width - border_width;
win->bordered = 1;
win->mapped = mapped;
win->floatmaxed = 0;
win->ewmh_flags = 0;
win->s = r->s; /* this never changes */
+ free(gr);
+
/* Get WM_SIZE_HINTS. */
xcb_icccm_get_wm_normal_hints_reply(conn,
xcb_icccm_get_wm_normal_hints(conn, win->id),
}
TAILQ_FOREACH(qp, &quirks, entry) {
- if (!strcmp(win->ch.class_name, qp->class) &&
- !strcmp(win->ch.instance_name, qp->name)) {
+ if (strcmp(win->ch.class_name, qp->class) == 0 &&
+ strcmp(win->ch.instance_name, qp->name) == 0) {
DNPRINTF(SWM_D_CLASS, "manage_window: on quirks"
"list; mask: 0x%lx\n", qp->quirk);
if (qp->quirk & SWM_Q_FLOAT)
TAILQ_REMOVE(&win->ws->unmanagedlist, win, entry);
- if (win->wa)
- free(win->wa);
-
xcb_icccm_get_wm_class_reply_wipe(&win->ch);
kill_refs(win);
xcb_get_geometry_reply_t *wa;
wa = xcb_get_geometry_reply(conn, xcb_get_geometry(conn, w), NULL);
-
- if (!wa) {
+ if (wa == NULL) {
DNPRINTF(SWM_D_MISC, "print_win_geom: window not found: 0x%x\n",
w);
return;
DNPRINTF(SWM_D_EVENT, "mapnotify: window: 0x%x\n", e->window);
- if ((win = find_window(e->window)) == NULL)
- win = manage_window(e->window, 1);
+ if ((win = manage_window(e->window, 1)) == NULL)
+ return;
win->mapped = 1;
set_win_state(win, XCB_ICCCM_WM_STATE_NORMAL);
win = manage_window(e->window,
(war->map_state == XCB_MAP_STATE_VIEWABLE));
+ if (win == NULL)
+ goto out;
/* The new window should get focus; prepare. */
if (focus_mode != SWM_FOCUS_FOLLOW &&
if (w->ch.class_name &&
win->ch.class_name &&
- !strcmp(w->ch.class_name,
- win->ch.class_name) &&
+ strcmp(w->ch.class_name,
+ win->ch.class_name) == 0 &&
w->ch.instance_name &&
win->ch.instance_name &&
- !strcmp(w->ch.instance_name,
- win->ch.instance_name))
+ strcmp(w->ch.instance_name,
+ win->ch.instance_name) == 0)
break;
}
}
for (i = 0; i < num_screens; i++) {
qtc = xcb_query_tree(conn, screens[i].root);
qtr = xcb_query_tree_reply(conn, qtc, NULL);
- if (!qtr)
+ if (qtr == NULL)
continue;
wins = xcb_query_tree_children(qtr);
no = xcb_query_tree_children_length(qtr);
gac = xcb_get_window_attributes(conn, wins[j]);
gar = xcb_get_window_attributes_reply(conn, gac, NULL);
- if (!gar) {
+ if (gar == NULL) {
DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; "
"doesn't exist.\n", wins[j]);
continue;
for (j = 0; j < no; j++) {
gac = xcb_get_window_attributes(conn, wins[j]);
gar = xcb_get_window_attributes_reply(conn, gac, NULL);
- if (!gar) {
+ if (gar == NULL) {
DNPRINTF(SWM_D_INIT, "grab_windows: skip %#x; "
"doesn't exist.\n", wins[j]);
continue;
num_screens = get_screen_count();
for (i = 0; i < num_screens; ++i) {
- if (screens[i].bar_gc != 0)
+ if (screens[i].bar_gc != XCB_NONE)
xcb_free_gc(conn, screens[i].bar_gc);
if (!bar_font_legacy)
XftColorFree(display, DefaultVisual(display, i),
start_argv = argv;
warnx("Welcome to spectrwm V%s Build: %s", SPECTRWM_VERSION, buildstr);
- if (!setlocale(LC_CTYPE, "") || !setlocale(LC_TIME, ""))
+ if (setlocale(LC_CTYPE, "") == NULL || setlocale(LC_TIME, "") == NULL)
warnx("no locale support");
/* handle some signals */
sact.sa_flags = SA_NOCLDSTOP;
sigaction(SIGCHLD, &sact, NULL);
- if (!(display = XOpenDisplay(0)))
+ if ((display = XOpenDisplay(0)) == NULL)
errx(1, "can not open display");
conn = XGetXCBConnection(display);
free(evt);
}
- if (enable_wm() != 0)
+ if (enable_wm())
errx(1, "another window manager is currently running");
/* Load Xcursors and/or cursorfont glyph cursors. */