@@ -188,8 +188,9 @@ void win_open(win_t *win) {
if (win->xwin == None)
die("could not create window");
XSelectInput(e->dpy, win->xwin, StructureNotifyMask | KeyPressMask |
ButtonPressMask | ButtonReleaseMask | PointerMotionMask);
XSelectInput(e->dpy, win->xwin,
ExposureMask | ButtonReleaseMask | ButtonPressMask |
KeyPressMask | PointerMotionMask | StructureNotifyMask);
carrow = XCreateFontCursor(e->dpy, XC_left_ptr);
chand = XCreateFontCursor(e->dpy, XC_fleur);
@@ -246,10 +247,15 @@ void win_close(win_t *win) {
bool win_configure(win_t *win, XConfigureEvent *c) {
bool changed;
if (win == NULL)
if (win == NULL || c == NULL )
return false;
changed = win->w != c->width || win->h + win->barh != c->height;
if ((changed = win->w != c->width || win->h + win->barh != c->height)) {
if (win->pm != None) {
XFreePixmap(win->env.dpy, win->pm);
win->pm = None;
}
}
win->x = c->x;
win->y = c->y;
@@ -260,6 +266,15 @@ bool win_configure(win_t *win, XConfigureEvent *c) {
return changed;
}
void win_expose(win_t *win, XExposeEvent *e) {
if (win == NULL || win->xwin == None || e == NULL)
return;
if (win->pm != None)
XCopyArea(win->env.dpy, win->pm, win->xwin, gc,
e->x, e->y, e->width, e->height, e->x, e->y);
}
bool win_moveresize(win_t *win, int x, int y, unsigned int w, unsigned int h) {
if (win == NULL || win->xwin == None)
return false;
@@ -323,19 +338,20 @@ void win_toggle_bar(win_t *win) {
}
void win_clear(win_t *win) {
int h;
win_env_t *e;
if (win == NULL || win->xwin == None)
return;
h = win->h + win->barh;
e = &win->env;
if (win->pm != None)
XFreePixmap(e->dpy, win->pm);
win->pm = XCreatePixmap(e->dpy, win->xwin, e->scrw, e->scrh, e->depth);
if (win->pm == None)
win->pm = XCreatePixmap(e->dpy, win->xwin, win->w, h, e->depth);
XSetForeground(e->dpy, gc, win->fullscreen ? win->fscol : win->bgcol);
XFillRectangle(e->dpy, win->pm, gc, 0, 0, e->scrw, e->scr h);
XFillRectangle(e->dpy, win->pm, gc, 0, 0, win->w, h);
}
void win_draw_bar(win_t *win) {
@@ -397,12 +413,13 @@ void win_draw(win_t *win) {
if (win->barh > 0)
win_draw_bar(win);
XSetWindowBackgroundPixmap(win->env.dpy, win->xwin, win->pm);
XClearWindow(win->env.dpy, win->xwin );
XCopyArea(win->env.dpy, win->pm, win->xwin, gc,
0, 0, win->w, win->h + win->barh, 0, 0 );
}
void win_draw_rect(win_t *win, Pixmap pm, int x, int y, int w, int h,
bool fill, int lw, unsigned long col) {
bool fill, int lw, unsigned long col)
{
XGCValues gcval;
if (win == NULL || pm == None)