wmii

git clone git://oldgit.suckless.org/wmii/
Log | Files | Refs | README | LICENSE

commit 083302da1646efadffbe842c30efb4a687009549
parent af6974bdc851782b56b95d7a03af42dad7a996f5
Author: Anselm R. Garbe <arg@10kloc.org>
Date:   Tue, 10 Oct 2006 08:16:53 +0200

removed wmiipsel, wmiisetsid, wmiiwarp (replaced with separate packages spsel, ssid, swarp)

Diffstat:
cmd/Makefile | 9++-------
cmd/wm/column.c | 6+++---
cmd/wm/event.c | 4++--
cmd/wm/geom.c | 7+++++++
cmd/wm/wm.h | 1+
cmd/wmiipsel.c | 47-----------------------------------------------
cmd/wmiisetsid.c | 49-------------------------------------------------
cmd/wmiiwarp.c | 49-------------------------------------------------
liblitz/Makefile | 2+-
liblitz/blitz.c | 89-------------------------------------------------------------------------------
liblitz/blitz.h | 5-----
liblitz/input.c | 426-------------------------------------------------------------------------------
12 files changed, 16 insertions(+), 678 deletions(-)

diff --git a/cmd/Makefile b/cmd/Makefile @@ -7,9 +7,8 @@ CFLAGS += -I../liblitz -I../libixp -I../libcext LDFLAGS += -L../libixp -lixp -L../libcext -lcext X11LDFLAGS += -L../liblitz -llitz -L../libcext -lcext -X11SRC = wmiipsel.c wmiiwarp.c -SRC = wmiir.c wmiisetsid.c -ALLSRC = ${SRC} ${X11SRC} +SRC = wmiir.c +ALLSRC = ${SRC} all: ${ALLSRC:.c=} @echo built wmii commands @@ -22,10 +21,6 @@ ${SRC:.c=}: ${SRC:.c=.o} @echo LD $@ @${CC} -o $@ $@.o ${LDFLAGS} -${X11SRC:.c=}: ${X11SRC:.c=.o} - @echo LD $@ - @${CC} -o $@ $@.o ${X11LDFLAGS} - # Solaris # @${CC} -o $* $*.o ${LDFLAGS} -lsocket diff --git a/cmd/wm/column.c b/cmd/wm/column.c @@ -336,10 +336,10 @@ frame_of_point(XPoint *pt) if(!v) return nil; - for(a=v->area->next; a && !blitz_ispointinrect(pt->x, pt->y, &a->rect); + for(a=v->area->next; a && !ispointinrect(pt->x, pt->y, &a->rect); a=a->next); if(a) - for(f=a->frame; f && !blitz_ispointinrect(pt->x, pt->y, &f->rect); + for(f=a->frame; f && !ispointinrect(pt->x, pt->y, &f->rect); f=f->anext); return f; } @@ -358,7 +358,7 @@ drop_move(Frame *f, XRectangle *new, XPoint *pt) if(!pt) return; - for(tgt=v->area->next; tgt && !blitz_ispointinrect(pt->x, pt->y, &tgt->rect); + for(tgt=v->area->next; tgt && !ispointinrect(pt->x, pt->y, &tgt->rect); tgt=tgt->next); if(tgt) { if(pt->x < 16) { diff --git a/cmd/wm/event.c b/cmd/wm/event.c @@ -67,11 +67,11 @@ buttonrelease(XEvent *e) XButtonPressedEvent *ev = &e->xbutton; if(ev->window == screen->barwin) { for(b=screen->lbar; b; b=b->next) - if(blitz_ispointinrect(ev->x, ev->y, &b->brush.rect)) + if(ispointinrect(ev->x, ev->y, &b->brush.rect)) return write_event("LeftBarClick %d %s\n", ev->button, b->name); for(b=screen->rbar; b; b=b->next) - if(blitz_ispointinrect(ev->x, ev->y, &b->brush.rect)) + if(ispointinrect(ev->x, ev->y, &b->brush.rect)) return write_event("RightBarClick %d %s\n", ev->button, b->name); } diff --git a/cmd/wm/geom.c b/cmd/wm/geom.c @@ -7,6 +7,13 @@ #include "wm.h" +Bool +ispointinrect(int x, int y, XRectangle * r) +{ + return (x >= r->x) && (x <= r->x + r->width) + && (y >= r->y) && (y <= r->y + r->height); +} + BlitzAlign quadofcoord(XRectangle *rect, int x, int y) { diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h @@ -265,6 +265,7 @@ extern void fs_write(P9Req *r); extern void write_event(char *format, ...); /* geom.c */ +extern Bool ispointinrect(int x, int y, XRectangle * r); extern BlitzAlign quadofcoord(XRectangle *rect, int x, int y); extern int strtorect(XRectangle *r, const char *val); diff --git a/cmd/wmiipsel.c b/cmd/wmiipsel.c @@ -1,47 +0,0 @@ -/* - * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com> - * See LICENSE file for license details. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> - -#include <blitz.h> - -static char version[] = "wmiipsel - " VERSION ", (C)opyright MMIV-MMVI Anselm R. Garbe\n"; - -static void -usage() -{ - fprintf(stderr, "%s\n", "usage: wmiipsel [-v]\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - unsigned char *data; - unsigned long i, offset, len, remain; - - /* command line args */ - if(argc > 1) { - if(!strncmp(argv[1], "-v", 3)) { - fprintf(stdout, "%s", version); - exit(0); - } else - usage(); - } - len = offset = remain = 0; - do { - data = blitz_getselection(offset, &len, &remain); - for(i = 0; i < len; i++) - putchar(data[i]); - offset += len; - free(data); - } - while(remain); - if(offset) - putchar('\n'); - return 0; -} diff --git a/cmd/wmiisetsid.c b/cmd/wmiisetsid.c @@ -1,49 +0,0 @@ -/* - * (C)opyright MMVI Anselm R. Garbe <garbeam at gmail dot com> - * See LICENSE file for license details. - */ -#include <stdio.h> -#include <unistd.h> -#include <stdlib.h> -#include <string.h> - -static char version[] = "wmiisetsid - " VERSION ", (C)opyright MMVI Anselm R. Garbe\n"; - -static void -usage() -{ - fprintf(stderr, "%s", "usage: wmiisetsid [-v] cmd [arg ...]\n"); - exit(1); -} - -int -main(int argc, char *argv[]) -{ - /* command line args */ - if(argc < 2) - usage(); - else if(!strncmp(argv[1], "-v", 3)) { - fprintf(stdout, "%s", version); - exit(0); - } - if(getpgrp() == getpid()) { - switch(fork()){ - case -1: - perror("wmiisetsid: fork"); - exit(1); - case 0: - break; - default: - exit(0); - } - } - if(setsid() < 0) { - perror("wmiisetsid: setsid"); - exit(1); - } - execvp(argv[1], argv + 1); - perror("wmiisetsid: execvp"); - exit(1); - return 0; -} - diff --git a/cmd/wmiiwarp.c b/cmd/wmiiwarp.c @@ -1,49 +0,0 @@ -/* - * (C)opyright MMIV-MMV Anselm R. Garbe <garbeam at gmail dot com> - * See LICENSE file for license details. - */ - -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <errno.h> - -#include <X11/Xlib.h> - -#include <cext.h> - -static char version[] = "wmiiwarp - " VERSION ", (C)opyright MMIV-MMV Anselm R. Garbe\n"; - -static void -usage() -{ - fprintf(stderr, "%s", "usage: wmiiwarp <x> <y> [-v]\n"); - exit(1); -} - -int -main(int argc, char **argv) -{ - Display *dpy; - int x, y; - - /* command line args */ - if((argc == 2) && !strncmp(argv[1], "-v", 2)) { - fprintf(stdout, "%s", version); - exit(0); - } - else if(argc != 3) - usage(); - if(!(dpy = XOpenDisplay(0))) { - fprintf(stderr, "%s", "wmiiwarp: cannot open display\n"); - exit(1); - } - if(sscanf(argv[1], "%d", &x) != 1) - usage(); - if(sscanf(argv[2], "%d", &y) != 1) - usage(); - XWarpPointer(dpy, None, RootWindow(dpy, DefaultScreen(dpy)), 0, 0, 0, 0, x, y); - XSetInputFocus(dpy, PointerRoot, RevertToPointerRoot, CurrentTime); - XCloseDisplay(dpy); - return 0; -} diff --git a/liblitz/Makefile b/liblitz/Makefile @@ -6,7 +6,7 @@ include ../config.mk CFLAGS += -I../libixp -I../libcext LDFLAGS += -L../libixp -lixp -L../libcext -lcext -SRC = blitz.c brush.c color.c draw.c font.c +SRC = brush.c color.c draw.c font.c OBJ = ${SRC:.c=.o} all: liblitz.a diff --git a/liblitz/blitz.c b/liblitz/blitz.c @@ -1,89 +0,0 @@ -/* - * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com> - * See LICENSE file for license details. - */ - -#include <string.h> -#include <cext.h> -#include <X11/Xlib.h> -#include <X11/Xatom.h> -#include <X11/Xutil.h> - -#include "blitz.h" - -Bool -blitz_ispointinrect(int x, int y, XRectangle * r) -{ - return (x >= r->x) && (x <= r->x + r->width) - && (y >= r->y) && (y <= r->y + r->height); -} - -void -blitz_selrequest(Blitz *blitz, XSelectionRequestEvent *rq, char *text) -{ - /* - * PRECONDITION: - * 1. XSetSelectionOwner(blitz->dpy, XA_PRIMARY, w, CurrentTime); - * 2. Received SelectionRequest rq - */ - XEvent ev; - Atom target; - XTextProperty ct; - XICCEncodingStyle style; - char *cl[1]; - - ev.xselection.type = SelectionNotify; - ev.xselection.property = None; - ev.xselection.display = rq->display; - ev.xselection.requestor = rq->requestor; - ev.xselection.selection = rq->selection; - ev.xselection.target = rq->target; - ev.xselection.time = rq->time; - - if (rq->target == XA_STRING) { - style = XStringStyle; - target = XA_STRING; - } - cl[0] = text; - XmbTextListToTextProperty(blitz->dpy, cl, 1, style, &ct); - XChangeProperty(blitz->dpy, rq->requestor, rq->property, - target, 8, PropModeReplace, ct.value, ct.nitems); - ev.xselection.property = rq->property; - XSendEvent(blitz->dpy, rq->requestor, False, 0, &ev); -} - -unsigned char * -blitz_getselection(unsigned long offset, unsigned long *len, unsigned long *remain) -{ - Display *dpy; - Atom xa_clip_string; - Window w; - XEvent ev; - Atom typeret; - int format; - unsigned char *data; - unsigned char *result = nil; - - dpy = XOpenDisplay(nil); - if(!dpy) - return nil; - xa_clip_string = XInternAtom(dpy, "BLITZ_SEL_STRING", False); - w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 10, 10, 200, 200, - 1, CopyFromParent, CopyFromParent); - XConvertSelection(dpy, XA_PRIMARY, XA_STRING, xa_clip_string, - w, CurrentTime); - XFlush(dpy); - XNextEvent(dpy, &ev); - if(ev.type == SelectionNotify && ev.xselection.property != None) { - XGetWindowProperty(dpy, w, ev.xselection.property, offset, 4096L, False, - AnyPropertyType, &typeret, &format, len, remain, &data); - if(*len) { - result = cext_emallocz(sizeof(unsigned char) * *len); - memcpy(result, data, *len); - } - XDeleteProperty(dpy, w, ev.xselection.property); - } - XDestroyWindow(dpy, w); - XCloseDisplay(dpy); - return result; -} diff --git a/liblitz/blitz.h b/liblitz/blitz.h @@ -65,11 +65,6 @@ struct BlitzBrush { XRectangle rect; /* relative rect */ }; -/* blitz.c */ -extern unsigned char *blitz_getselection(unsigned long offset, - unsigned long *len, unsigned long *remain); -extern void blitz_selrequest(Blitz *blitz, XSelectionRequestEvent *rq, char *text); - /* brush.c */ extern void blitz_draw_label(BlitzBrush *b, char *text); extern void blitz_draw_tile(BlitzBrush *b); diff --git a/liblitz/input.c b/liblitz/input.c @@ -1,426 +0,0 @@ -/* - * (C)opyright MMIV-MMVI Anselm R. Garbe <garbeam at gmail dot com> - * See LICENSE file for license details. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <cext.h> -#include <X11/keysym.h> -#include <X11/Xutil.h> -#include "blitz.h" - -static void -xchangegc(BlitzInput *i, BlitzColor c) -{ - XGCValues gcv; - - gcv.foreground = c.fg; - gcv.background = c.bg; - if(i->font->set) - XChangeGC(i->blitz->dpy, i->gc, GCForeground | GCBackground, &gcv); - else { - gcv.font = i->font->xfont->fid; - XChangeGC(i->blitz->dpy, i->gc, GCForeground | GCBackground | GCFont, &gcv); - } -} - -static void -xdrawtextpart(BlitzInput *i, char *start, char *end, - unsigned int *xoff, unsigned int yoff) -{ - unsigned int len; - - if(!start || !(len = end - start)) - return; - - if(i->font->set) - XmbDrawImageString(i->blitz->dpy, i->drawable, i->font->set, i->gc, - *xoff, yoff, start, len); - else - XDrawImageString(i->blitz->dpy, i->drawable, i->gc, *xoff, yoff, - start, len); - - *xoff += blitz_textwidth_l(i->font, start, len); -} - -static void -setcursor(BlitzInput *i, Cursor cur) -{ - XDefineCursor(i->blitz->dpy, i->win, cur); - i->cursor = cur; -} - -void -blitz_setinput(BlitzInput *i, char *text) -{ - if(!text) { - if(i->size) { - i->len = 0; - i->text[i->len] = 0; - i->curstart = i->curend = i->text; - } - return; - } - - i->len = strlen(text); - if(i->len + 1 > i->size) { - i->size = 2 * i->len + 1; - i->text = cext_erealloc(i->text, i->size); - } - memcpy(i->text, text, i->len); - i->text[i->len] = 0; - i->curstart = i->curend = i->text + i->len; -} - -static char * -curend(BlitzInput *i) -{ - if(i->curstart < i->curend) - return i->curend; - else - return i->curstart; -} - -static char * -curstart(BlitzInput *i) -{ - if(i->curstart < i->curend) - return i->curstart; - else - return i->curend; -} - -void -blitz_draw_input(BlitzInput *i) -{ - char *start, *end; - unsigned int xoff, yoff, xcursor, h; - - if (!i) - return; - - blitz_drawbg(i->blitz->dpy, i->drawable, i->gc, i->rect, i->color, True); - - h = (i->font->ascent + i->font->descent); - yoff = i->rect.y + (i->rect.height - h) / 2 + i->font->ascent; - xcursor = xoff = i->rect.x + i->font->height / 2; - - start = curstart(i); - end = curend(i); - - /* draw normal text */ - xchangegc(i, i->color); - xdrawtextpart(i, i->text, start, &xoff, yoff); - xcursor = xoff; - /* draw sel text */ - xchangegc(i, i->bcolor[i->button]); - xdrawtextpart(i, start, end, &xoff, yoff); - /* draw remaining normal text */ - xchangegc(i, i->color); - xdrawtextpart(i, end, i->text + i->len, &xoff, yoff); - - /* draw cursor */ - if(!start && !end) - xcursor = xoff; - if(start == end) - blitz_drawcursor(i->blitz->dpy, i->drawable, i->gc, - xcursor, yoff - h + 2, h - 1, i->color); -} - -Bool -blitz_ispointinrect(int x, int y, XRectangle * r) -{ - return (x >= r->x) && (x <= r->x + r->width) - && (y >= r->y) && (y <= r->y + r->height); -} - -static char * -xcharof(BlitzInput *i, int x, char *start, unsigned int len) -{ - unsigned int tw; - - while((len /= 2)) { - tw = blitz_textwidth_l(i->font, start, len); - - if(x >= tw) { - x -= tw; - start += len; - len = strlen(start); - } - } - return start; /* found */ -} - -static char * -charof(BlitzInput *i, int x, int y) -{ - if(!i->text || !blitz_ispointinrect(x, y, &i->rect)) - return nil; - - /* normalize and check x */ - if((x -= (i->rect.x + i->font->height / 2)) < 0) - return i->text; - else if(x > blitz_textwidth_l(i->font, i->text, i->len)) - return i->text + i->len; - - return xcharof(i, x, i->text, i->len); -} - -void -xdraw(BlitzInput *i) -{ - if(i->aux && i->draw) - i->draw(i->aux); -} - -void -blitz_bpress_input(BlitzInput *i, int button, int x, int y) -{ - char *ostart, *oend; - - if(blitz_ispointinrect(x, y, &i->rect)) { - i->drag = True; - setcursor(i, i->input); - } - else { - setcursor(i, i->def); - return; - } - XSetInputFocus(i->blitz->dpy, i->win, - RevertToPointerRoot, CurrentTime); - ostart = i->curstart; - oend = i->curend; - i->curstart = i->curend = charof(i, x, y); - if((i->button = button - Button1) > 2) - i->button = 0; - - if((i->curstart != ostart) || (i->curend != oend)) - xdraw(i); - - if(XGrabPointer(i->blitz->dpy, i->win, False, - ButtonPressMask | ButtonReleaseMask | PointerMotionMask, - GrabModeAsync, GrabModeAsync, None, - i->cursor, CurrentTime) != GrabSuccess) - return; -} - -static void -mark(BlitzInput *i, int x, int y) -{ - char *start, *end; - - start = curstart(i); - end = curend(i); - - if(!start) - return; - - if(start != end) { - i->curstart = i->curend = charof(i, x, y); - return; - } - - if(start == i->text + i->len) { - /* mark everything */ - i->curstart = i->text; - i->curend = i->text + i->len; - return; - } - - if(*start == ' ' && start > i->text && *(start - 1) != ' ') - start = --end; - - while(start > i->text && *(start - 1) != ' ') - start--; - while(*end && *end != ' ') - end++; - - i->curstart = start; - i->curend = end; -} - -void -blitz_brelease_input(BlitzInput *i, int button, int x, int y, unsigned long time) -{ - char *oend; - - if(!blitz_ispointinrect(x, y, &i->rect)) - goto Drop; - XSetInputFocus(i->blitz->dpy, i->win, - RevertToPointerRoot, CurrentTime); - oend = i->curend; - - if((i->button = button - Button1) > 2) - i->button = 0; - - if(!i->button && (time - i->tdbclk < 1000) - && (x == i->xdbclk && y == i->ydbclk)) - { - mark(i, x, y); - i->tdbclk = 0; - i->xdbclk = i->ydbclk = 0; - goto Drop; - } - - i->curend = charof(i, x, y); - i->tdbclk = time; - i->xdbclk = x; - i->ydbclk = y; - -Drop: - XUngrabPointer(i->blitz->dpy, CurrentTime); - i->drag = False; - if(i->button) - i->curstart = i->curend; - setcursor(i, i->def); - xdraw(i); -} - -void -blitz_bmotion_input(BlitzInput *i, int x, int y) -{ - char *oend; - - if(blitz_ispointinrect(x, y, &i->rect)) { - setcursor(i, i->input); - XSetInputFocus(i->blitz->dpy, i->win, - RevertToPointerRoot, CurrentTime); - } - else { - setcursor(i, i->def); - return; - } - - if(!i->drag) - return; - - oend = i->curend; - i->curend = charof(i, x, y); - - if(i->curend != oend) - xdraw(i); -} - -static void -delete(BlitzInput *i, char *start, char *end) -{ - if(!start) - return; - else if((start == end) && (start != i->text)) { - i->curstart = i->curend = --start; - memmove(start, start + 1, strlen(start + 1)); - i->len--; - } - else { - i->curstart = i->curend = start; - memmove(start, end, strlen(end)); - i->len -= (end - start); - } - i->text[i->len] = 0; -} - -static void -insert(BlitzInput *i, char *start, char *end, char *text) -{ - unsigned int len; - int s, e; - - if(!(len = strlen(text))) - return; - if(!start) { - blitz_setinput(i, text); - return; - } - i->len = i->len - (end - start) + len; - if(i->len + 1 > i->size) { - s = start - i->text; - e = end - i->text; - i->size = 2 * i->len + 1; - i->text = cext_erealloc(i->text, i->size); - start = i->text + s; - end = i->text + e; - } - memmove(start + len, end, strlen(end)); - memcpy(start, text, len); - i->curstart = i->curend = start + len; - i->text[i->len] = 0; -} - -void -blitz_kpress_input(BlitzInput *i, unsigned long mod, KeySym k, char *text) -{ - char *start, *end; - - start = curstart(i); - end = curend(i); - if(mod & ControlMask) { - switch (k) { - default: /* ignore other control sequences */ - return; - case XK_A: - case XK_a: - k = XK_Begin; - break; - case XK_E: - case XK_e: - k = XK_End; - break; - case XK_H: - case XK_h: - k = XK_BackSpace; - break; - case XK_U: - case XK_u: - k = XK_BackSpace; - start = i->text; - break; - case XK_W: - case XK_w: - k = XK_BackSpace; - while(start > i->text && (*(--start) == ' ')); - while(start > i->text && (*(start - 1) != ' ')) - --start; - break; - } - } - - if(IsCursorKey(k)) { - switch(k) { - case XK_Begin: - i->curstart = i->curend = i->text; - goto Draw; - case XK_End: - i->curstart = i->curend = i->text + i->len; - goto Draw; - case XK_Left: - if(start != end) - i->curstart = i->curend = start; - else if(start > i->text) - i->curstart = i->curend = --start; - else - i->curstart = i->curend = i->text; - goto Draw; - case XK_Right: - if(start != end) - i->curstart = i->curend = end; - else if(start < i->text + i->len) - i->curstart = i->curend = ++start; - else - i->curstart = i->curend = i->text + i->len; - goto Draw; - } - } - else { - switch(k) { - default: - insert(i, start, end, text); - break; - case XK_BackSpace: - delete(i, start, end); - } - } -Draw: - xdraw(i); -}