Removing dbe and introducing umlauts to titles. - st - Personal fork of st
 (HTM) git clone git://git.drkhsh.at/st.git
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit e40d8da194cb02b400b09d2c8642f701c5c16821
 (DIR) parent efaf1c2a94ed9193c04c3a67f374d31f988b0e9a
 (HTM) Author: Christoph Lohmann <20h@r-36.net>
       Date:   Sat, 23 Feb 2013 21:44:06 +0100
       
       Removing dbe and introducing umlauts to titles.
       
       Thanks Alexander Sedov <alex0player@gmail.com> for the title patch!
       
       Diffstat:
         M st.c                                |      92 +++++++++++++------------------
       
       1 file changed, 39 insertions(+), 53 deletions(-)
       ---
 (DIR) diff --git a/st.c b/st.c
       @@ -25,7 +25,6 @@
        #include <X11/Xutil.h>
        #include <X11/cursorfont.h>
        #include <X11/keysym.h>
       -#include <X11/extensions/Xdbe.h>
        #include <X11/Xft/Xft.h>
        #include <fontconfig/fontconfig.h>
        
       @@ -351,6 +350,7 @@ static void xloadcols(void);
        static int xsetcolorname(int, const char *);
        static int xloadfont(Font *, FcPattern *);
        static void xloadfonts(char *, int);
       +static void xsettitle(char *);
        static void xresettitle(void);
        static void xseturgency(int);
        static void xsetsel(char*);
       @@ -423,8 +423,6 @@ static char *opt_embed = NULL;
        static char *opt_class = NULL;
        static char *opt_font = NULL;
        
       -bool usedbe = False;
       -
        static char *usedfont = NULL;
        static int usedfontsize = 0;
        
       @@ -1862,7 +1860,6 @@ void
        strhandle(void) {
                char *p = NULL;
                int i, j, narg;
       -        XTextProperty prop;
        
                strparse();
                narg = strescseq.narg;
       @@ -1873,12 +1870,8 @@ strhandle(void) {
                        case 0:
                        case 1:
                        case 2:
       -                        if(narg > 1) {
       -                                p += 2;
       -                                Xutf8TextListToTextProperty(xw.dpy, &p, 1,
       -                                                XUTF8StringStyle, &prop);
       -                                XSetWMName(xw.dpy, xw.win, &prop);
       -                        }
       +                        if(narg > 1)
       +                                xsettitle(strescseq.args[1]);
                                break;
                        case 4: /* color set */
                                if(narg < 3)
       @@ -1890,7 +1883,11 @@ strhandle(void) {
                                if (!xsetcolorname(j, p)) {
                                        fprintf(stderr, "erresc: invalid color %s\n", p);
                                } else {
       -                                redraw(0); /* TODO if defaultbg color is changed, borders are dirty */
       +                                /*
       +                                 * TODO if defaultbg color is changed, borders
       +                                 * are dirty
       +                                 */
       +                                redraw(0);
                                }
                                break;
                        default:
       @@ -1900,10 +1897,7 @@ strhandle(void) {
                        }
                        break;
                case 'k': /* old title set compatibility */
       -                p += 1;
       -                Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
       -                                &prop);
       -                XSetWMName(xw.dpy, xw.win, &prop);
       +                xsettitle(strescseq.args[0]);
                        break;
                case 'P': /* DSC -- Device Control String */
                case '_': /* APC -- Application Program Command */
       @@ -2338,13 +2332,11 @@ xresize(int col, int row) {
                xw.tw = MAX(1, col * xw.cw);
                xw.th = MAX(1, row * xw.ch);
        
       -        if(!usedbe) {
       -                XFreePixmap(xw.dpy, xw.buf);
       -                xw.buf = XCreatePixmap(xw.dpy, xw.win, xw.w, xw.h,
       -                                DefaultDepth(xw.dpy, xw.scr));
       -                XSetForeground(xw.dpy, dc.gc, dc.col[IS_SET(MODE_REVERSE) ? defaultfg : defaultbg].pixel);
       -                XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, xw.w, xw.h);
       -        }
       +        XFreePixmap(xw.dpy, xw.buf);
       +        xw.buf = XCreatePixmap(xw.dpy, xw.win, xw.w, xw.h,
       +                        DefaultDepth(xw.dpy, xw.scr));
       +        XSetForeground(xw.dpy, dc.gc, dc.col[IS_SET(MODE_REVERSE) ? defaultfg : defaultbg].pixel);
       +        XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, xw.w, xw.h);
        
                XftDrawChange(xw.draw, xw.buf);
        }
       @@ -2606,7 +2598,7 @@ xinit(void) {
                XGCValues gcvalues;
                Cursor cursor;
                Window parent;
       -        int sw, sh, major, minor;
       +        int sw, sh;
        
                if(!(xw.dpy = XOpenDisplay(NULL)))
                        die("Can't open display\n");
       @@ -2661,26 +2653,14 @@ xinit(void) {
                                | CWColormap,
                                &attrs);
        
       -        /* double buffering */
       -        /*
       -        if(XdbeQueryExtension(xw.dpy, &major, &minor)) {
       -                xw.buf = XdbeAllocateBackBufferName(xw.dpy, xw.win,
       -                                XdbeBackground);
       -                usedbe = True;
       -        } else {
       -        */
       -                memset(&gcvalues, 0, sizeof(gcvalues));
       -                gcvalues.graphics_exposures = False;
       -                dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
       -                                &gcvalues);
       -                xw.buf = XCreatePixmap(xw.dpy, xw.win, xw.w, xw.h,
       -                                DefaultDepth(xw.dpy, xw.scr));
       -                XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
       -                XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, xw.w, xw.h);
       -                //xw.buf = xw.win;
       -        /*
       -        }
       -        */
       +        memset(&gcvalues, 0, sizeof(gcvalues));
       +        gcvalues.graphics_exposures = False;
       +        dc.gc = XCreateGC(xw.dpy, parent, GCGraphicsExposures,
       +                        &gcvalues);
       +        xw.buf = XCreatePixmap(xw.dpy, xw.win, xw.w, xw.h,
       +                        DefaultDepth(xw.dpy, xw.scr));
       +        XSetForeground(xw.dpy, dc.gc, dc.col[defaultbg].pixel);
       +        XFillRectangle(xw.dpy, xw.buf, dc.gc, 0, 0, xw.w, xw.h);
        
                /* Xft rendering context */
                xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap);
       @@ -2971,9 +2951,19 @@ xdrawcursor(void) {
                }
        }
        
       +
       +void
       +xsettitle(char *p) {
       +        XTextProperty prop;
       +
       +        Xutf8TextListToTextProperty(xw.dpy, &p, 1, XUTF8StringStyle,
       +                        &prop);
       +        XSetWMName(xw.dpy, xw.win, &prop);
       +}
       +
        void
        xresettitle(void) {
       -        XStoreName(xw.dpy, xw.win, opt_title ? opt_title : "st");
       +        xsettitle(opt_title ? opt_title : "st");
        }
        
        void
       @@ -2991,16 +2981,12 @@ redraw(int timeout) {
        
        void
        draw(void) {
       -        XdbeSwapInfo swpinfo[1] = {{xw.win, XdbeCopied}};
       -
                drawregion(0, 0, term.col, term.row);
       -        if(usedbe) {
       -                XdbeSwapBuffers(xw.dpy, swpinfo, 1);
       -        } else {
       -                XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, xw.w,
       -                                xw.h, 0, 0);
       -                XSetForeground(xw.dpy, dc.gc, dc.col[IS_SET(MODE_REVERSE) ? defaultfg : defaultbg].pixel);
       -        }
       +        XCopyArea(xw.dpy, xw.buf, xw.win, dc.gc, 0, 0, xw.w,
       +                        xw.h, 0, 0);
       +        XSetForeground(xw.dpy, dc.gc,
       +                        dc.col[IS_SET(MODE_REVERSE)?
       +                                defaultfg : defaultbg].pixel);
        }
        
        void