X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=4730a0f20143a61460ef0dce3034803e981c9464;hb=af1157519cecb67d3039e1861d99bf070f0cfba0;hp=227c3f4ea353ca3da2b82e7658b7e80e3a00410d;hpb=8d322b0d37a0b57175ae4aaed1334760708faba7;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index 227c3f4..4730a0f 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -55,7 +55,7 @@ static const char *cvstag = "$scrotwm$"; -#define SWM_VERSION "0.9.33" +#define SWM_VERSION "0.9.34" #include #include @@ -87,6 +87,7 @@ static const char *cvstag = #include #include #include +#include #ifdef __OSX__ #include @@ -613,12 +614,11 @@ void ewmh_autoquirk(struct ws_win *win) { int success, i; - unsigned long *data = NULL; - unsigned long n; + unsigned long *data = NULL, n; Atom type; success = get_property(win->id, ewmh[_NET_WM_WINDOW_TYPE].atom, (~0L), - XA_ATOM, &n, (unsigned char **)&data); + XA_ATOM, &n, (void *)&data); if (!success) { XFree(data); @@ -807,7 +807,7 @@ ewmh_get_win_state(struct ws_win *win) win->ewmh_flags |= SWM_F_MANUAL; success = get_property(win->id, ewmh[_NET_WM_STATE].atom, - (~0L), XA_ATOM, &n, (unsigned char **)&states); + (~0L), XA_ATOM, &n, (void *)&states); if (!success) return; @@ -1166,8 +1166,8 @@ custom_region(char *val) if (w < 1 || h < 1) errx(1, "region %ux%u+%u+%u too small\n", w, h, x, y); - if (x < 0 || x > DisplayWidth(display, sidx) || - y < 0 || y > DisplayHeight(display, sidx) || + if (x > DisplayWidth(display, sidx) || + y > DisplayHeight(display, sidx) || w + x > DisplayWidth(display, sidx) || h + y > DisplayHeight(display, sidx)) { fprintf(stderr, "ignoring region %ux%u+%u+%u " @@ -1262,18 +1262,21 @@ bar_window_name(char *s, ssize_t sz, struct ws_win *cur_focus) } } +int urgent[SWM_WS_MAX]; void bar_urgent(char *s, ssize_t sz) { XWMHints *wmh = NULL; struct ws_win *win; - int i, j, got_some = 0; - char a[32], b[8]; + int i, j; + char b[8]; if (urgent_enabled == 0) return; - a[0] = '\0'; + for (i = 0; i < SWM_WS_MAX; i++) + urgent[i] = 0; + for (i = 0; i < ScreenCount(display); i++) for (j = 0; j < SWM_WS_MAX; j++) TAILQ_FOREACH(win, &screens[i].ws[j].winlist, entry) { @@ -1281,19 +1284,20 @@ bar_urgent(char *s, ssize_t sz) if (wmh == NULL) continue; - if (wmh->flags & XUrgencyHint) { - snprintf(b, sizeof b, "%d ", j + 1); - strlcat(a, b, sizeof a); - got_some = 1; - } + if (wmh->flags & XUrgencyHint) + urgent[j] = 1; XFree(wmh); } - if (got_some) { - strlcat(s, a, sz); - strlcat(s, " ", sz); - } else - strlcat(s, " ", sz); + strlcat(s, "* ", sz); + for (i = 0; i < SWM_WS_MAX; i++) { + if (urgent[i]) + snprintf(b, sizeof b, "%d ", i + 1); + else + snprintf(b, sizeof b, "- "); + strlcat(s, b, sz); + } + strlcat(s, "* ", sz); } void @@ -3053,7 +3057,8 @@ send_to_ws(struct swm_region *r, union arg *args) /* Try to update the window's workspace property */ ws_idx_atom = XInternAtom(display, "_SWM_WS", False); if (ws_idx_atom && - snprintf(ws_idx_str, SWM_PROPLEN, "%d", nws->idx) < SWM_PROPLEN) { + snprintf((char *)ws_idx_str, SWM_PROPLEN, "%d", nws->idx) < + SWM_PROPLEN) { DNPRINTF(SWM_D_PROP, "setting property _SWM_WS to %s\n", ws_idx_str); XChangeProperty(display, win->id, ws_idx_atom, XA_STRING, 8, @@ -3064,6 +3069,13 @@ send_to_ws(struct swm_region *r, union arg *args) } void +pressbutton(struct swm_region *r, union arg *args) +{ + XTestFakeButtonEvent(display, args->id, True, CurrentTime); + XTestFakeButtonEvent(display, args->id, False, CurrentTime); +} + +void raise_toggle(struct swm_region *r, union arg *args) { if (r && r->ws == NULL) @@ -3127,7 +3139,7 @@ uniconify(struct swm_region *r, union arg *args) { struct ws_win *win; FILE *lfile; - char *name; + unsigned char *name; int count = 0; unsigned long len; @@ -3178,7 +3190,8 @@ search_do_resp(void) { ssize_t rbytes; struct ws_win *win; - char *name, *resp, *s; + unsigned char *name; + char *resp, *s; unsigned long len; DNPRINTF(SWM_D_MISC, "search_do_resp:\n"); @@ -3562,6 +3575,7 @@ enum keyfuncid { kf_iconify, kf_uniconify, kf_raise_toggle, + kf_button2, kf_dumpwins, /* MUST BE LAST */ kf_invalid }; @@ -3639,6 +3653,7 @@ struct keyfunc { { "iconify", iconify, {0} }, { "uniconify", uniconify, {0} }, { "raise_toggle", raise_toggle, {0} }, + { "button2", pressbutton, {2} }, { "dumpwins", dumpwins, {0} }, /* MUST BE LAST */ { "invalid key func", NULL, {0} }, }; @@ -4231,6 +4246,7 @@ setup_keys(void) setkeybinding(MODKEY, XK_w, kf_iconify, NULL); setkeybinding(MODKEY|ShiftMask, XK_w, kf_uniconify, NULL); setkeybinding(MODKEY|ShiftMask, XK_r, kf_raise_toggle,NULL); + setkeybinding(MODKEY, XK_v, kf_button2, NULL); #ifdef SWM_DEBUG setkeybinding(MODKEY|ShiftMask, XK_d, kf_dumpwins, NULL); #endif @@ -4973,7 +4989,7 @@ tryharder: if (prop == NULL) return (0); - ret = strtonum(prop, 0, UINT_MAX, &errstr); + ret = strtonum((const char *)prop, 0, UINT_MAX, &errstr); /* ignore error because strtonum returns 0 anyway */ XFree(prop); @@ -5067,7 +5083,7 @@ manage_window(Window id) p = NULL; } else if (prop && win->transient == 0) { DNPRINTF(SWM_D_PROP, "got property _SWM_WS=%s\n", prop); - ws_idx = strtonum(prop, 0, 9, &errstr); + ws_idx = strtonum((const char *)prop, 0, 9, &errstr); if (errstr) { DNPRINTF(SWM_D_EVENT, "window idx is %s: %s", errstr, prop); @@ -5108,7 +5124,8 @@ manage_window(Window id) /* Set window properties so we can remember this after reincarnation */ if (ws_idx_atom && prop == NULL && - snprintf(ws_idx_str, SWM_PROPLEN, "%d", ws->idx) < SWM_PROPLEN) { + snprintf((char *)ws_idx_str, SWM_PROPLEN, "%d", ws->idx) < + SWM_PROPLEN) { DNPRINTF(SWM_D_PROP, "setting property _SWM_WS to %s\n", ws_idx_str); XChangeProperty(display, win->id, ws_idx_atom, XA_STRING, 8, @@ -6195,7 +6212,6 @@ main(int argc, char *argv[]) setup_ewmh(); /* set some values to work around bad programs */ workaround(); - /* grab existing windows (before we build the bars) */ grab_windows();