@ -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 ) ;
X SetWindowBackgroundPixmap ( win - > env . dpy , win - > xwin, win - > pm ) ;
XClearWindow ( win - > env . dpy , win - > xwin ) ;
X CopyArea ( 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 )