# st

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

| Log | Files | Refs | README | LICENSE

    commit 8c3757986a41ff8fa95b175be40f67d67d7e27b1
    parent 273d4ba938dc6bf7edb2b1154ea36c19bfcd22d1
    Author: Aurélien Aptel <aurelien.aptel@gmail.com>
    Date:   Sat, 11 Sep 2010 15:59:54 +0200

    use XCreateWindow(), set gravity bit.

    Diffstat:
    Mst.c | 42+++++++++++++++++++++++++-----------------

    1 file changed, 25 insertions(+), 17 deletions(-)
    diff --git a/st.c b/st.c
    @@ -104,6 +104,7 @@ typedef struct {
     /* Purely graphic info */
     typedef struct {
     	Display* dis;
    +	Colormap cmap;
     	Window win;
     	Pixmap buf;
     	int scr;
    @@ -1121,11 +1122,10 @@ void
     xloadcols(void) {
     	int i, r, g, b;
     	XColor color;
    -	Colormap cmap = DefaultColormap(xw.dis, xw.scr);
     	unsigned long white = WhitePixel(xw.dis, xw.scr);

     	for(i = 0; i < 16; i++) {
    -		if (!XAllocNamedColor(xw.dis, cmap, colorname[i], &color, &color)) {
    +		if (!XAllocNamedColor(xw.dis, xw.cmap, colorname[i], &color, &color)) {
     			dc.col[i] = white;
     			fprintf(stderr, "Could not allocate color '%s'\n", colorname[i]);
     		} else
    @@ -1139,7 +1139,7 @@ xloadcols(void) {
     				color.red = r == 0 ? 0 : 0x3737 + 0x2828 * r;
     				color.green = g == 0 ? 0 : 0x3737 + 0x2828 * g;
     				color.blue = b == 0 ? 0 : 0x3737 + 0x2828 * b;
    -				if (!XAllocColor(xw.dis, cmap, &color)) {
    +				if (!XAllocColor(xw.dis, xw.cmap, &color)) {
     					dc.col[i] = white;
     					fprintf(stderr, "Could not allocate color %d\n", i);
     				} else
    @@ -1149,7 +1149,7 @@ xloadcols(void) {

     	for(r = 0; r < 24; r++, i++) {
     		color.red = color.green = color.blue = 0x0808 + 0x0a0a * r;
    -		if (!XAllocColor(xw.dis, cmap, &color)) {
    +		if (!XAllocColor(xw.dis, xw.cmap, &color)) {
     			dc.col[i] = white;
     			fprintf(stderr, "Could not allocate color %d\n", i);
     		} else
    @@ -1184,6 +1184,8 @@ xhints(void)

     void
     xinit(void) {
    +	XSetWindowAttributes attrs;
    +
     	if(!(xw.dis = XOpenDisplay(NULL)))
     		die("Can't open display\n");
     	xw.scr = XDefaultScreen(xw.dis);
    @@ -1197,25 +1199,32 @@ xinit(void) {
     	xw.ch = dc.font->ascent + dc.font->descent;

     	/* colors */
    +	xw.cmap = XDefaultColormap(xw.dis, xw.scr);
     	xloadcols();

    -	/* windows */
    -	xw.bufh = term.row * xw.ch;
    -	xw.bufw = term.col * xw.cw;
    +	/* window - default size */
    +	xw.bufh = 24 * xw.ch;
    +	xw.bufw = 80 * xw.cw;
     	xw.h = xw.bufh + 2*BORDER;
     	xw.w = xw.bufw + 2*BORDER;
    -	xw.win = XCreateSimpleWindow(xw.dis, XRootWindow(xw.dis, xw.scr), 0, 0,
    -			xw.w, xw.h, 0,
    -			dc.col[DefaultBG],
    -			dc.col[DefaultBG]);
    +
    +	attrs.background_pixel = dc.col[DefaultBG];
    +	attrs.border_pixel = dc.col[DefaultBG];
    +	attrs.bit_gravity = NorthWestGravity;
    +	attrs.event_mask = ExposureMask | KeyPressMask
    +		| StructureNotifyMask | FocusChangeMask | PointerMotionMask
    +		| ButtonPressMask | ButtonReleaseMask;
    +	attrs.colormap = xw.cmap;
    +
    +	xw.win = XCreateWindow(xw.dis, XRootWindow(xw.dis, xw.scr), 0, 0,
    +			xw.w, xw.h, 0, XDefaultDepth(xw.dis, xw.scr), InputOutput,
    +			XDefaultVisual(xw.dis, xw.scr),
    +			CWBackPixel | CWBorderPixel | CWBitGravity | CWEventMask
    +			| CWColormap,
    +			&attrs);
     	xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr));
     	/* gc */
     	dc.gc = XCreateGC(xw.dis, xw.win, 0, NULL);
    -
    -	/* event mask */
    -	XSelectInput(xw.dis, xw.win, ExposureMask | KeyPressMask
    -		| StructureNotifyMask | FocusChangeMask | PointerMotionMask
    -		| ButtonPressMask | ButtonReleaseMask);

     	XMapWindow(xw.dis, xw.win);
     	xhints();
    @@ -1432,7 +1441,6 @@ resize(XEvent *e) {
     	xw.bufw = MAX(1, xw.bufw);
     	XFreePixmap(xw.dis, xw.buf);
     	xw.buf = XCreatePixmap(xw.dis, xw.win, xw.bufw, xw.bufh, XDefaultDepth(xw.dis, xw.scr));
    -	draw(SCREEN_REDRAW);
     }

     void