tportability - dmenu - Dmenu fork with xft fonts.
 (HTM) git clone git://r-36.net/dmenu
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 11ea52d1709423e0f4e6702aaee2dff2a3b0107e
 (DIR) parent 43540746077d4fd8ef963b5939934d32d59c9417
 (HTM) Author: Connor Lane Smith <cls@lubutu.com>
       Date:   Sun, 15 May 2011 21:54:26 +0100
       
       portability
       Diffstat:
         config.mk                           |       2 +-
         dmenu.c                             |      21 ++++++++++++---------
         draw.c                              |      11 ++++++-----
       
       3 files changed, 19 insertions(+), 15 deletions(-)
       ---
 (DIR) diff --git a/config.mk b/config.mk
       t@@ -18,7 +18,7 @@ LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS}
        
        # flags
        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}
        
        # compiler and linker
 (DIR) diff --git a/dmenu.c b/dmenu.c
       t@@ -3,6 +3,7 @@
        #include <stdio.h>
        #include <stdlib.h>
        #include <string.h>
       +#include <strings.h>
        #include <unistd.h>
        #include <X11/Xlib.h>
        #include <X11/Xatom.h>
       t@@ -231,13 +232,14 @@ insert(const char *str, ssize_t n) {
        void
        keypress(XKeyEvent *ev) {
                char buf[32];
       -        size_t len;
                KeySym ksym;
        
       -        len = strlen(text);
                XLookupString(ev, buf, sizeof buf, &ksym, NULL);
       -        if(ev->state & ControlMask)
       -                switch(tolower(ksym)) {
       +        if(ev->state & ControlMask) {
       +                KeySym lower, upper;
       +
       +                XConvertCase(ksym, &lower, &upper);
       +                switch(lower) {
                        default:
                                return;
                        case XK_a:
       t@@ -290,13 +292,14 @@ keypress(XKeyEvent *ev) {
                                XConvertSelection(dc->dpy, XA_PRIMARY, utf8, utf8, win, CurrentTime);
                                return;
                        }
       +        }
                switch(ksym) {
                default:
                        if(!iscntrl(*buf))
                                insert(buf, strlen(buf));
                        break;
                case XK_Delete:
       -                if(cursor == len)
       +                if(text[cursor] == '\0')
                                return;
                        cursor = nextrune(+1);
                case XK_BackSpace:
       t@@ -304,8 +307,8 @@ keypress(XKeyEvent *ev) {
                                insert(NULL, nextrune(-1) - cursor);
                        break;
                case XK_End:
       -                if(cursor < len) {
       -                        cursor = len;
       +                if(text[cursor] != '\0') {
       +                        cursor = strlen(text);
                                break;
                        }
                        if(next) {
       t@@ -358,7 +361,7 @@ keypress(XKeyEvent *ev) {
                        fputs((sel && !(ev->state & ShiftMask)) ? sel->text : text, stdout);
                        exit(EXIT_SUCCESS);
                case XK_Right:
       -                if(cursor < len) {
       +                if(text[cursor] != '\0') {
                                cursor = nextrune(+1);
                                break;
                        }
       t@@ -385,7 +388,7 @@ void
        match(Bool sub) {
                size_t len = strlen(text);
                Item *lexact, *lprefix, *lsubstr, *exactend, *prefixend, *substrend;
       -        Item *item, *next = NULL;
       +        Item *item, *next;
        
                lexact = lprefix = lsubstr = exactend = prefixend = substrend = NULL;
                for(item = sub ? matches : items; item && item->text; item = next) {
 (DIR) diff --git a/draw.c b/draw.c
       t@@ -15,12 +15,13 @@ static Bool loadfont(DC *dc, const char *fontstr);
        
        void
        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);
                (fill ? XFillRectangles : XDrawRectangles)(dc->dpy, dc->canvas, dc->gc, &r, 1);
        }