# st

Unnamed repository; edit this file 'description' to name the repository.

| Log | Files | Refs | README | LICENSE

    commit e40d8da194cb02b400b09d2c8642f701c5c16821
    parent efaf1c2a94ed9193c04c3a67f374d31f988b0e9a
    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:
    Mst.c | 92++++++++++++++++++++++++++++++++++---------------------------------------------

    1 file changed, 39 insertions(+), 53 deletions(-)
    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