all repos — st @ ab7037cb33b4be4d16e3197d907066ed5b8ab16b

st (suckless terminal) config

don't draw if the window is not visible.
Aurélien Aptel aurelien.aptel@gmail.com
commit

ab7037cb33b4be4d16e3197d907066ed5b8ab16b

parent

f693476365c9383ac83420319dd69372c55f9f50

1 files changed, 25 insertions(+), 4 deletions(-)

jump to
M st.cst.c

@@ -115,6 +115,7 @@ int bufh; /* pixmap height */

int ch; /* char height */ int cw; /* char width */ int hasfocus; + int vis; /* is visible */ } XWindow; typedef struct {

@@ -187,6 +188,8 @@ static void xloadcols(void);

static void xseturgency(int); static void expose(XEvent *); +static void visibility(XEvent *); +static void unmap(XEvent *); static char* kmap(KeySym); static void kpress(XEvent *); static void resize(XEvent *);

@@ -198,8 +201,10 @@

static void (*handler[LASTEvent])(XEvent *) = { [KeyPress] = kpress, - [Expose] = expose, [ConfigureNotify] = resize, + [VisibilityNotify] = visibility, + [UnmapNotify] = unmap, + [Expose] = expose, [FocusIn] = focus, [FocusOut] = focus, [MotionNotify] = bmotion,

@@ -1211,9 +1216,9 @@

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.event_mask = FocusChangeMask | KeyPressMask + | ExposureMask | VisibilityChangeMask | StructureNotifyMask + | PointerMotionMask | ButtonPressMask | ButtonReleaseMask; attrs.colormap = xw.cmap; xw.win = XCreateWindow(xw.dis, XRootWindow(xw.dis, xw.scr), 0, 0,

@@ -1321,6 +1326,9 @@ int i, x, y, ox;

Glyph base, new; char buf[DRAW_BUF_SIZ]; + if(!xw.vis) + return; + xclear(0, 0, term.col-1, term.row-1); for(y = 0; y < term.row; y++) { base = term.line[y][0];

@@ -1355,6 +1363,19 @@

void expose(XEvent *ev) { draw(SCREEN_REDRAW); +} + +void +visibility(XEvent *ev) { + XVisibilityEvent *e = &ev->xvisibility; + /* XXX if this goes from 0 to 1, need a full redraw for next Expose, + * not just a buf copy */ + xw.vis = e->state != VisibilityFullyObscured; +} + +void +unmap(XEvent *ev) { + xw.vis = 0; } void