st

fork of suckless's simple terminal
Index Commits 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