|
@@ -25,7 +25,6 @@
|
|
#include <X11/Xutil.h>
|
|
#include <X11/Xutil.h>
|
|
#include <X11/cursorfont.h>
|
|
#include <X11/cursorfont.h>
|
|
#include <X11/keysym.h>
|
|
#include <X11/keysym.h>
|
|
-#include <X11/extensions/Xdbe.h>
|
|
|
|
#include <X11/Xft/Xft.h>
|
|
#include <X11/Xft/Xft.h>
|
|
#include <fontconfig/fontconfig.h>
|
|
#include <fontconfig/fontconfig.h>
|
|
|
|
|
|
@@ -351,6 +350,7 @@ static void xloadcols(void);
|
|
static int xsetcolorname(int, const char *);
|
|
static int xsetcolorname(int, const char *);
|
|
static int xloadfont(Font *, FcPattern *);
|
|
static int xloadfont(Font *, FcPattern *);
|
|
static void xloadfonts(char *, int);
|
|
static void xloadfonts(char *, int);
|
|
|
|
+static void xsettitle(char *);
|
|
static void xresettitle(void);
|
|
static void xresettitle(void);
|
|
static void xseturgency(int);
|
|
static void xseturgency(int);
|
|
static void xsetsel(char*);
|
|
static void xsetsel(char*);
|
|
@@ -423,8 +423,6 @@ static char *opt_embed = NULL;
|
|
static char *opt_class = NULL;
|
|
static char *opt_class = NULL;
|
|
static char *opt_font = NULL;
|
|
static char *opt_font = NULL;
|
|
|
|
|
|
-bool usedbe = False;
|
|
|
|
-
|
|
|
|
static char *usedfont = NULL;
|
|
static char *usedfont = NULL;
|
|
static int usedfontsize = 0;
|
|
static int usedfontsize = 0;
|
|
|
|
|
|
@@ -1862,7 +1860,6 @@ void
|
|
strhandle(void) {
|
|
strhandle(void) {
|
|
char *p = NULL;
|
|
char *p = NULL;
|
|
int i, j, narg;
|
|
int i, j, narg;
|
|
- XTextProperty prop;
|
|
|
|
|
|
|
|
strparse();
|
|
strparse();
|
|
narg = strescseq.narg;
|
|
narg = strescseq.narg;
|
|
@@ -1873,12 +1870,8 @@ strhandle(void) {
|
|
case 0:
|
|
case 0:
|
|
case 1:
|
|
case 1:
|
|
case 2:
|
|
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;
|
|
break;
|
|
case 4: /* color set */
|
|
case 4: /* color set */
|
|
if(narg < 3)
|
|
if(narg < 3)
|
|
@@ -1890,7 +1883,11 @@ strhandle(void) {
|
|
if (!xsetcolorname(j, p)) {
|
|
if (!xsetcolorname(j, p)) {
|
|
fprintf(stderr, "erresc: invalid color %s\n", p);
|
|
fprintf(stderr, "erresc: invalid color %s\n", p);
|
|
} else {
|
|
} else {
|
|
- redraw(0); /* TODO if defaultbg color is changed, borders are dirty */
|
|
|
|
|
|
+ /*
|
|
|
|
+ * TODO if defaultbg color is changed, borders
|
|
|
|
+ * are dirty
|
|
|
|
+ */
|
|
|
|
+ redraw(0);
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
@@ -1900,10 +1897,7 @@ strhandle(void) {
|
|
}
|
|
}
|
|
break;
|
|
break;
|
|
case 'k': /* old title set compatibility */
|
|
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;
|
|
break;
|
|
case 'P': /* DSC -- Device Control String */
|
|
case 'P': /* DSC -- Device Control String */
|
|
case '_': /* APC -- Application Program Command */
|
|
case '_': /* APC -- Application Program Command */
|
|
@@ -2338,13 +2332,11 @@ xresize(int col, int row) {
|
|
xw.tw = MAX(1, col * xw.cw);
|
|
xw.tw = MAX(1, col * xw.cw);
|
|
xw.th = MAX(1, row * xw.ch);
|
|
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);
|
|
XftDrawChange(xw.draw, xw.buf);
|
|
}
|
|
}
|
|
@@ -2606,7 +2598,7 @@ xinit(void) {
|
|
XGCValues gcvalues;
|
|
XGCValues gcvalues;
|
|
Cursor cursor;
|
|
Cursor cursor;
|
|
Window parent;
|
|
Window parent;
|
|
- int sw, sh, major, minor;
|
|
|
|
|
|
+ int sw, sh;
|
|
|
|
|
|
if(!(xw.dpy = XOpenDisplay(NULL)))
|
|
if(!(xw.dpy = XOpenDisplay(NULL)))
|
|
die("Can't open display\n");
|
|
die("Can't open display\n");
|
|
@@ -2661,26 +2653,14 @@ xinit(void) {
|
|
| CWColormap,
|
|
| CWColormap,
|
|
&attrs);
|
|
&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 */
|
|
/* Xft rendering context */
|
|
xw.draw = XftDrawCreate(xw.dpy, xw.buf, xw.vis, xw.cmap);
|
|
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
|
|
void
|
|
xresettitle(void) {
|
|
xresettitle(void) {
|
|
- XStoreName(xw.dpy, xw.win, opt_title ? opt_title : "st");
|
|
|
|
|
|
+ xsettitle(opt_title ? opt_title : "st");
|
|
}
|
|
}
|
|
|
|
|
|
void
|
|
void
|
|
@@ -2991,16 +2981,12 @@ redraw(int timeout) {
|
|
|
|
|
|
void
|
|
void
|
|
draw(void) {
|
|
draw(void) {
|
|
- XdbeSwapInfo swpinfo[1] = {{xw.win, XdbeCopied}};
|
|
|
|
-
|
|
|
|
drawregion(0, 0, term.col, term.row);
|
|
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
|
|
void
|