Browse Source

portability

master
Connor Lane Smith 14 years ago
parent
commit
11ea52d170
  1. 2
      config.mk
  2. 21
      dmenu.c
  3. 11
      draw.c

2
config.mk

@ -18,7 +18,7 @@ LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS}
# flags # flags
CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS} CPPFLAGS = -D_BSD_SOURCE -DVERSION=\"${VERSION}\" ${XINERAMAFLAGS}
CFLAGS = -std=c99 -pedantic -Wall -Os ${INCS} ${CPPFLAGS} CFLAGS = -ansi -pedantic -Wall -Os ${INCS} ${CPPFLAGS}
LDFLAGS = -s ${LIBS} LDFLAGS = -s ${LIBS}
# compiler and linker # compiler and linker

21
dmenu.c

@ -3,6 +3,7 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <strings.h>
#include <unistd.h> #include <unistd.h>
#include <X11/Xlib.h> #include <X11/Xlib.h>
#include <X11/Xatom.h> #include <X11/Xatom.h>
@ -231,13 +232,14 @@ insert(const char *str, ssize_t n) {
void void
keypress(XKeyEvent *ev) { keypress(XKeyEvent *ev) {
char buf[32]; char buf[32];
size_t len;
KeySym ksym; KeySym ksym;
len = strlen(text);
XLookupString(ev, buf, sizeof buf, &ksym, NULL); XLookupString(ev, buf, sizeof buf, &ksym, NULL);
if(ev->state & ControlMask) if(ev->state & ControlMask) {
switch(tolower(ksym)) { KeySym lower, upper;
XConvertCase(ksym, &lower, &upper);
switch(lower) {
default: default:
return; return;
case XK_a: case XK_a:
@ -290,13 +292,14 @@ keypress(XKeyEvent *ev) {
XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime); XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
return; return;
} }
}
switch(ksym) { switch(ksym) {
default: default:
if(!iscntrl(*buf)) if(!iscntrl(*buf))
insert(buf, strlen(buf)); insert(buf, strlen(buf));
break; break;
case XK_Delete: case XK_Delete:
if(cursor == len) if(text[cursor] == '\0')
return; return;
cursor = nextrune(+1); cursor = nextrune(+1);
case XK_BackSpace: case XK_BackSpace:
@ -304,8 +307,8 @@ keypress(XKeyEvent *ev) {
insert(NULL, nextrune(-1) - cursor); insert(NULL, nextrune(-1) - cursor);
break; break;
case XK_End: case XK_End:
if(cursor < len) { if(text[cursor] != '\0') {
cursor = len; cursor = strlen(text);
break; break;
} }
if(next) { if(next) {
@ -358,7 +361,7 @@ keypress(XKeyEvent *ev) {
fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout); fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout);
exit(EXIT_SUCCESS); exit(EXIT_SUCCESS);
case XK_Right: case XK_Right:
if(cursor < len) { if(text[cursor] != '\0') {
cursor = nextrune(+1); cursor = nextrune(+1);
break; break;
} }
@ -385,7 +388,7 @@ void
match(Bool sub) { match(Bool sub) {
size_t len = strlen(text); size_t len = strlen(text);
Item *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend; Item *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend;
Item *item, *next = NULL; Item *item, *next;
lexact = lprefix = lsubstr = exactend = prefixend = substrend = NULL; lexact = lprefix = lsubstr = exactend = prefixend = substrend = NULL;
for(item = sub ? matches : items; item && item->text; item = next) { for(item = sub ? matches : items; item && item->text; item = next) {

11
draw.c

@ -15,12 +15,13 @@ static Bool loadfont(DC *dc, const char *fontstr);
void void
drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) { drawrect(DC *dc, int x, int y, unsigned int w, unsigned int h, Bool fill, unsigned long color) {
XRectangle r = { dc->x + x, dc->y + y, w, h }; XRectangle r;
r.x = dc->x + x;
r.y = dc->y + y;
r.width = fill ? w : w-1;
r.height = fill ? h : h-1;
if(!fill) {
r.width -= 1;
r.height -= 1;
}
XSetForeground(dc->dpy, dc->gc, color); XSetForeground(dc->dpy, dc->gc, color);
(fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1); (fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1);
} }

Loading…
Cancel
Save