Adding reference to xdg-xmenu, by OliverLew.
[xmenu] / xmenu.c
diff --git a/xmenu.c b/xmenu.c
index 56d470b..3c83cd3 100644 (file)
--- a/xmenu.c
+++ b/xmenu.c
@@ -96,7 +96,6 @@ static Atom wmdelete;
 static Atom netatom[NetLast];
 
 /* flags */
 static Atom netatom[NetLast];
 
 /* flags */
-static int fflag = 0;   /* whether glyphs should align based on the first font */
 static int iflag = 0;   /* whether to disable icons */
 static int mflag = 0;   /* whether the user specified a monitor with -p */
 static int pflag = 0;   /* whether the user specified a position with -p */
 static int iflag = 0;   /* whether to disable icons */
 static int mflag = 0;   /* whether the user specified a monitor with -p */
 static int pflag = 0;   /* whether the user specified a position with -p */
@@ -118,11 +117,8 @@ main(int argc, char *argv[])
        XClassHint classh;
        int ch;
 
        XClassHint classh;
        int ch;
 
-       while ((ch = getopt(argc, argv, "fip:w")) != -1) {
+       while ((ch = getopt(argc, argv, "ip:w")) != -1) {
                switch (ch) {
                switch (ch) {
-               case 'f':
-                       fflag = 1;
-                       break;
                case 'i':
                        iflag = 1;
                        break;
                case 'i':
                        iflag = 1;
                        break;
@@ -260,9 +256,8 @@ parsefonts(const char *s)
                i = 0;
                while (isspace(*p))
                        p++;
                i = 0;
                while (isspace(*p))
                        p++;
-               while (i < sizeof buf && *p != '\0' && *p != ',') {
+               while (i < sizeof buf && *p != '\0' && *p != ',')
                        buf[i++] = *p++;
                        buf[i++] = *p++;
-               }
                if (i >= sizeof buf)
                        errx(1, "font name too long");
                if (*p == ',')
                if (i >= sizeof buf)
                        errx(1, "font name too long");
                if (*p == ',')
@@ -305,7 +300,7 @@ initmonitor(void)
        if ((info = XineramaQueryScreens(dpy, &nmons)) != NULL) {
                int selmon = 0;
 
        if ((info = XineramaQueryScreens(dpy, &nmons)) != NULL) {
                int selmon = 0;
 
-               if (!mflag || (mflag && (config.monitor < 0 || config.monitor >= nmons))) {
+               if (!mflag || config.monitor < 0 || config.monitor >= nmons) {
                        for (i = 0; i < nmons; i++) {
                                if (BETWEEN(cursx, info[i].x_org, info[i].x_org + info[i].width) &&
                                    BETWEEN(cursy, info[i].y_org, info[i].y_org + info[i].height)) {
                        for (i = 0; i < nmons; i++) {
                                if (BETWEEN(cursx, info[i].x_org, info[i].x_org + info[i].width) &&
                                    BETWEEN(cursy, info[i].y_org, info[i].y_org + info[i].height)) {
@@ -648,11 +643,11 @@ getnextutf8char(const char *s, const char **next_ret)
 static XftFont *
 getfontucode(FcChar32 ucode)
 {
 static XftFont *
 getfontucode(FcChar32 ucode)
 {
-       FcCharSet *fccharset;
-       FcPattern *fcpattern;
-       FcPattern *match;
+       FcCharSet *fccharset = NULL;
+       FcPattern *fcpattern = NULL;
+       FcPattern *match = NULL;
+       XftFont *retfont = NULL;
        XftResult result;
        XftResult result;
-       XftFont *retfont;
        size_t i;
 
        for (i = 0; i < dc.nfonts; i++)
        size_t i;
 
        for (i = 0; i < dc.nfonts; i++)
@@ -663,14 +658,18 @@ getfontucode(FcChar32 ucode)
        fccharset = FcCharSetCreate();
        FcCharSetAddChar(fccharset, ucode);
 
        fccharset = FcCharSetCreate();
        FcCharSetAddChar(fccharset, ucode);
 
-       /* create a pattern akin to the dc.pattern but containing our code point */
-       fcpattern = FcPatternDuplicate(dc.pattern);
-       FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
+       /* create a pattern akin to the dc.pattern but containing our charset */
+       if (fccharset) {
+               fcpattern = FcPatternDuplicate(dc.pattern);
+               FcPatternAddCharSet(fcpattern, FC_CHARSET, fccharset);
+       }
 
        /* find pattern matching fcpattern */
 
        /* find pattern matching fcpattern */
-       FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
-       FcDefaultSubstitute(fcpattern);
-       match = XftFontMatch(dpy, screen, fcpattern, &result);
+       if (fcpattern) {
+               FcConfigSubstitute(NULL, fcpattern, FcMatchPattern);
+               FcDefaultSubstitute(fcpattern);
+               match = XftFontMatch(dpy, screen, fcpattern, &result);
+       }
 
        /* if found a pattern, open its font */
        if (match) {
 
        /* if found a pattern, open its font */
        if (match) {
@@ -678,8 +677,8 @@ getfontucode(FcChar32 ucode)
                if (retfont && XftCharExists(dpy, retfont, ucode) == FcTrue) {
                        if ((dc.fonts = realloc(dc.fonts, dc.nfonts+1)) == NULL)
                                err(1, "realloc");
                if (retfont && XftCharExists(dpy, retfont, ucode) == FcTrue) {
                        if ((dc.fonts = realloc(dc.fonts, dc.nfonts+1)) == NULL)
                                err(1, "realloc");
-                       dc.fonts[dc.nfonts++] = retfont;
-                       return retfont;
+                       dc.fonts[dc.nfonts] = retfont;
+                       return dc.fonts[dc.nfonts++];
                } else {
                        XftFontClose(dpy, retfont);
                }
                } else {
                        XftFontClose(dpy, retfont);
                }
@@ -694,9 +693,6 @@ static int
 drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text)
 {
        int textwidth = 0;
 drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text)
 {
        int textwidth = 0;
-       int texty;
-
-       texty = y + (h - (dc.fonts[0]->ascent + dc.fonts[0]->descent))/2 + dc.fonts[0]->ascent;
 
        while (*text) {
                XftFont *currfont;
 
        while (*text) {
                XftFont *currfont;
@@ -713,8 +709,9 @@ drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *t
                textwidth += ext.xOff;
 
                if (draw) {
                textwidth += ext.xOff;
 
                if (draw) {
-                       if (!fflag)
-                               texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent;
+                       int texty;
+
+                       texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent;
                        XftDrawStringUtf8(draw, color, currfont, x, texty, (XftChar8 *)text, len);
                        x += ext.xOff;
                }
                        XftDrawStringUtf8(draw, color, currfont, x, texty, (XftChar8 *)text, len);
                        x += ext.xOff;
                }
@@ -1316,6 +1313,6 @@ cleanup(void)
 static void
 usage(void)
 {
 static void
 usage(void)
 {
-       (void)fprintf(stderr, "usage: xmenu [-fiw] [-p position] [title]\n");
+       (void)fprintf(stderr, "usage: xmenu [-iw] [-p position] [title]\n");
        exit(1);
 }
        exit(1);
 }