X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=436e84d70158450a5e96403fa38860b44cd75e77;hb=e67f9f1bfadf1be7d65944154a710a097b7ffa1a;hp=09c7ede0b67b5bfc1e90cabcc7ea03567845a935;hpb=ae4071ff80081b461c539001c45d6401adc732ca;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 09c7ede..436e84d 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -1304,7 +1304,7 @@ socket_setnonblock(int fd) } void -bar_print(struct swm_region *r, char *s) +bar_print(struct swm_region *r, const char *s) { int x = 0; size_t len; @@ -1369,6 +1369,15 @@ bar_title_name(char *s, size_t sz, struct swm_region *r) } void +bar_window_float(char *s, size_t sz, struct swm_region *r) +{ + if (r == NULL || r ->ws == NULL || r->ws->focus == NULL) + return; + if (r->ws->focus->floating) + strlcat(s, "(f)", sz); +} + +void bar_window_name(char *s, size_t sz, struct swm_region *r) { unsigned char *title; @@ -1378,11 +1387,7 @@ bar_window_name(char *s, size_t sz, struct swm_region *r) if ((title = get_win_name(r->ws->focus->id)) == NULL) return; - if (r->ws->focus->floating) - strlcat(s, "(f) ", sz); strlcat(s, (char *)title, sz); - strlcat(s, " ", sz); - XFree(title); } @@ -1430,7 +1435,7 @@ bar_workspace_name(char *s, size_t sz, struct swm_region *r) /* build the default bar format according to the defined enabled options */ void -bar_fmt(char *fmtexp, char *fmtnew, struct swm_region *r, size_t sz) +bar_fmt(const char *fmtexp, char *fmtnew, struct swm_region *r, size_t sz) { /* if format provided, just copy the buffers */ if (bar_format != NULL) { @@ -1460,22 +1465,28 @@ bar_fmt(char *fmtexp, char *fmtnew, struct swm_region *r, size_t sz) if (urgent_enabled) strlcat(fmtnew, "* +U* ", sz); - if (title_class_enabled) + if (title_class_enabled) { strlcat(fmtnew, "+C", sz); - if (title_name_enabled) { - /* add a colon if showing the class and something is focused */ - if (title_class_enabled && r != NULL && r->ws != NULL && - r->ws->focus != NULL) - strlcat(fmtnew, ":", sz); - strlcat(fmtnew, "+T", sz); + if (title_name_enabled == 0) + strlcat(fmtnew, " ", sz); } - strlcat(fmtnew, " ", sz); - if (window_name_enabled) - strlcat(fmtnew, "+64W", sz); + /* checks needed by the colon and floating strlcat(3) calls below */ + if (r != NULL && r->ws != NULL && r->ws->focus != NULL) { + if (title_name_enabled) { + if (title_class_enabled) + strlcat(fmtnew, ":", sz); + strlcat(fmtnew, "+T ", sz); + } + if (window_name_enabled) { + if (r->ws->focus->floating) + strlcat(fmtnew, "+F ", sz); + strlcat(fmtnew, "+64W ", sz); + } + } /* finally add the action script output and the version */ - strlcat(fmtnew, " +A +V", sz); + strlcat(fmtnew, " +A +V", sz); } /* replaces the bar format character sequences (like in tmux(1)) */ @@ -1522,6 +1533,9 @@ bar_replace_seq(char *fmt, char *fmtrep, struct swm_region *r, size_t *offrep, case 'D': bar_workspace_name(tmp, sizeof tmp, r); break; + case 'F': + bar_window_float(tmp, sizeof tmp, r); + break; case 'I': snprintf(tmp, sizeof tmp, "%d", r->ws->idx + 1); break; @@ -4572,7 +4586,7 @@ struct key { enum keyfuncid funcid; char *spawn_name; }; -RB_HEAD(key_list, key); +RB_HEAD(key_tree, key); int key_cmp(struct key *kp1, struct key *kp2) @@ -4590,8 +4604,8 @@ key_cmp(struct key *kp1, struct key *kp2) return (0); } -RB_GENERATE_STATIC(key_list, key, entry, key_cmp); -struct key_list keys; +RB_GENERATE(key_tree, key, entry, key_cmp); +struct key_tree keys; /* mouse */ enum { client_click, root_click }; @@ -4615,7 +4629,7 @@ update_modkey(unsigned int mod) struct key *kp; mod_key = mod; - RB_FOREACH(kp, key_list, &keys) + RB_FOREACH(kp, key_tree, &keys) if (kp->mod & ShiftMask) kp->mod = mod | ShiftMask; else @@ -4983,7 +4997,7 @@ key_insert(unsigned int mod, KeySym ks, enum keyfuncid kfid, char *spawn_name) kp->keysym = ks; kp->funcid = kfid; kp->spawn_name = strdupsafe(spawn_name); - RB_INSERT(key_list, &keys, kp); + RB_INSERT(key_tree, &keys, kp); DNPRINTF(SWM_D_KEY, "key_insert: leave\n"); } @@ -4996,7 +5010,7 @@ key_lookup(unsigned int mod, KeySym ks) kp.keysym = ks; kp.mod = mod; - return (RB_FIND(key_list, &keys, &kp)); + return (RB_FIND(key_tree, &keys, &kp)); } void @@ -5004,7 +5018,7 @@ key_remove(struct key *kp) { DNPRINTF(SWM_D_KEY, "key_remove: %s\n", keyfuncs[kp->funcid].name); - RB_REMOVE(key_list, &keys, kp); + RB_REMOVE(key_tree, &keys, kp); free(kp->spawn_name); free(kp); @@ -5267,7 +5281,7 @@ grabkeys(void) if (TAILQ_EMPTY(&screens[k].rl)) continue; XUngrabKey(display, AnyKey, AnyModifier, screens[k].root); - RB_FOREACH(kp, key_list, &keys) { + RB_FOREACH(kp, key_tree, &keys) { if ((code = XKeysymToKeycode(display, kp->keysym))) for (j = 0; j < LENGTH(modifiers); j++) XGrabKey(display, code,