static const char *cvstag =
"$scrotwm$";
-#define SWM_VERSION "0.9.33"
+#define SWM_VERSION "0.9.34"
#include <stdio.h>
#include <stdlib.h>
#include <X11/Xproto.h>
#include <X11/Xutil.h>
#include <X11/extensions/Xrandr.h>
+#include <X11/extensions/XTest.h>
#ifdef __OSX__
#include <osx.h>
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);
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;
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 "
}
}
+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) {
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
/* 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,
}
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)
{
struct ws_win *win;
FILE *lfile;
- char *name;
+ unsigned char *name;
int count = 0;
unsigned long len;
{
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");
kf_iconify,
kf_uniconify,
kf_raise_toggle,
+ kf_button2,
kf_dumpwins, /* MUST BE LAST */
kf_invalid
};
{ "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} },
};
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
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);
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);
/* 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,
setup_ewmh();
/* set some values to work around bad programs */
workaround();
-
/* grab existing windows (before we build the bars) */
grab_windows();