]> git.armaanb.net Git - st.git/blobdiff - x.c
Simplify cursor color handling
[st.git] / x.c
diff --git a/x.c b/x.c
index 12bc86b81cb03c663381965eddb664b3015884e6..ffd005fae1523bca102905cc13d86cf8f380dd92 100644 (file)
--- a/x.c
+++ b/x.c
@@ -618,6 +618,9 @@ selrequest(XEvent *e)
 void
 setsel(char *str, Time t)
 {
+       if (!str)
+               return;
+
        free(xsel.primary);
        xsel.primary = str;
 
@@ -669,6 +672,8 @@ cresize(int width, int height)
 
        col = (win.w - 2 * borderpx) / win.cw;
        row = (win.h - 2 * borderpx) / win.ch;
+       col = MAX(1, col);
+       row = MAX(1, row);
 
        tresize(col, row);
        xresize(col, row);
@@ -678,8 +683,8 @@ cresize(int width, int height)
 void
 xresize(int col, int row)
 {
-       win.tw = MAX(1, col * win.cw);
-       win.th = MAX(1, row * win.ch);
+       win.tw = col * win.cw;
+       win.th = row * win.ch;
 
        XFreePixmap(xw.dpy, xw.buf);
        xw.buf = XCreatePixmap(xw.dpy, xw.win, win.w, win.h,
@@ -739,9 +744,9 @@ xloadcols(void)
        for (i = 0; i < dc.collen; i++)
                if (!xloadcolor(i, NULL, &dc.col[i])) {
                        if (colorname[i])
-                               die("Could not allocate color '%s'\n", colorname[i]);
+                               die("could not allocate color '%s'\n", colorname[i]);
                        else
-                               die("Could not allocate color %d\n", i);
+                               die("could not allocate color %d\n", i);
                }
        loaded = 1;
 }
@@ -785,15 +790,17 @@ xhints(void)
 
        sizeh = XAllocSizeHints();
 
-       sizeh->flags = PSize | PResizeInc | PBaseSize;
+       sizeh->flags = PSize | PResizeInc | PBaseSize | PMinSize;
        sizeh->height = win.h;
        sizeh->width = win.w;
        sizeh->height_inc = win.ch;
        sizeh->width_inc = win.cw;
        sizeh->base_height = 2 * borderpx;
        sizeh->base_width = 2 * borderpx;
+       sizeh->min_height = win.ch + 2 * borderpx;
+       sizeh->min_width = win.cw + 2 * borderpx;
        if (xw.isfixed) {
-               sizeh->flags |= PMaxSize | PMinSize;
+               sizeh->flags |= PMaxSize;
                sizeh->min_width = sizeh->max_width = win.w;
                sizeh->min_height = sizeh->max_height = win.h;
        }
@@ -866,7 +873,7 @@ xloadfont(Font *f, FcPattern *pattern)
                if ((XftPatternGetInteger(f->match->pattern, "slant", 0,
                    &haveattr) != XftResultMatch) || haveattr < wantattr) {
                        f->badslant = 1;
-                       fputs("st: font slant does not match\n", stderr);
+                       fputs("font slant does not match\n", stderr);
                }
        }
 
@@ -875,7 +882,7 @@ xloadfont(Font *f, FcPattern *pattern)
                if ((XftPatternGetInteger(f->match->pattern, "weight", 0,
                    &haveattr) != XftResultMatch) || haveattr != wantattr) {
                        f->badweight = 1;
-                       fputs("st: font weight does not match\n", stderr);
+                       fputs("font weight does not match\n", stderr);
                }
        }
 
@@ -903,14 +910,13 @@ xloadfonts(char *fontstr, double fontsize)
        FcPattern *pattern;
        double fontval;
 
-       if (fontstr[0] == '-') {
+       if (fontstr[0] == '-')
                pattern = XftXlfdParse(fontstr, False, False);
-       } else {
+       else
                pattern = FcNameParse((FcChar8 *)fontstr);
-       }
 
        if (!pattern)
-               die("st: can't open font %s\n", fontstr);
+               die("can't open font %s\n", fontstr);
 
        if (fontsize > 1) {
                FcPatternDel(pattern, FC_PIXEL_SIZE);
@@ -936,7 +942,7 @@ xloadfonts(char *fontstr, double fontsize)
        }
 
        if (xloadfont(&dc.font, pattern))
-               die("st: can't open font %s\n", fontstr);
+               die("can't open font %s\n", fontstr);
 
        if (usedfontsize < 0) {
                FcPatternGetDouble(dc.font.match->pattern,
@@ -953,17 +959,17 @@ xloadfonts(char *fontstr, double fontsize)
        FcPatternDel(pattern, FC_SLANT);
        FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ITALIC);
        if (xloadfont(&dc.ifont, pattern))
-               die("st: can't open font %s\n", fontstr);
+               die("can't open font %s\n", fontstr);
 
        FcPatternDel(pattern, FC_WEIGHT);
        FcPatternAddInteger(pattern, FC_WEIGHT, FC_WEIGHT_BOLD);
        if (xloadfont(&dc.ibfont, pattern))
-               die("st: can't open font %s\n", fontstr);
+               die("can't open font %s\n", fontstr);
 
        FcPatternDel(pattern, FC_SLANT);
        FcPatternAddInteger(pattern, FC_SLANT, FC_SLANT_ROMAN);
        if (xloadfont(&dc.bfont, pattern))
-               die("st: can't open font %s\n", fontstr);
+               die("can't open font %s\n", fontstr);
 
        FcPatternDestroy(pattern);
 }
@@ -1000,13 +1006,13 @@ xinit(int cols, int rows)
        XColor xmousefg, xmousebg;
 
        if (!(xw.dpy = XOpenDisplay(NULL)))
-               die("Can't open display\n");
+               die("can't open display\n");
        xw.scr = XDefaultScreen(xw.dpy);
        xw.vis = XDefaultVisual(xw.dpy, xw.scr);
 
        /* font */
        if (!FcInit())
-               die("Could not init fontconfig.\n");
+               die("could not init fontconfig.\n");
 
        usedfont = (opt_font == NULL)? font : opt_font;
        xloadfonts(usedfont, 0);
@@ -1412,25 +1418,19 @@ xdrawcursor(int cx, int cy, Glyph g, int ox, int oy, Glyph og)
         */
        g.mode &= ATTR_BOLD|ATTR_ITALIC|ATTR_UNDERLINE|ATTR_STRUCK|ATTR_WIDE;
 
-       if (IS_SET(MODE_REVERSE)) {
-               g.mode |= ATTR_REVERSE;
-               g.bg = defaultfg;
-               if (selected(cx, cy)) {
-                       drawcol = dc.col[defaultcs];
-                       g.fg = defaultrcs;
-               } else {
-                       drawcol = dc.col[defaultrcs];
-                       g.fg = defaultcs;
-               }
+       if (selected(cx, cy)) {
+               g.bg = defaultrcs;
+               g.fg = defaultfg;
        } else {
-               if (selected(cx, cy)) {
-                       g.fg = defaultfg;
-                       g.bg = defaultrcs;
-               } else {
-                       g.fg = defaultbg;
-                       g.bg = defaultcs;
-               }
-               drawcol = dc.col[g.bg];
+               g.bg = defaultcs;
+               g.fg = defaultbg;
+       }
+       drawcol = dc.col[g.bg];
+
+       if (IS_SET(MODE_REVERSE)) {
+               drawcol.color.red = ~drawcol.color.red;
+               drawcol.color.green = ~drawcol.color.green;
+               drawcol.color.blue = ~drawcol.color.blue;
        }
 
        /* draw the new one */
@@ -1922,7 +1922,7 @@ main(int argc, char *argv[])
                opt_embed = EARGF(usage());
                break;
        case 'v':
-               die("%s " VERSION " (c) 2010-2016 st engineers\n", argv0);
+               die("%s " VERSION "\n", argv0);
                break;
        default:
                usage();