diff -Naur pwm-1.0/frame.c pwm-1.0-p5/frame.c --- pwm-1.0/frame.c Mon Jan 13 12:16:05 2003 +++ pwm-1.0-p5/frame.c Tue Jan 14 09:36:28 2003 @@ -66,6 +66,8 @@ WFrame *frame; int w, h; Window frame_win, bar_win; + int b=(flags&WFRAME_NO_BORDER ? 0 : CF_BORDER_WIDTH); + int t=(flags&WFRAME_NO_BAR ? 0 : GRDATA->bar_height); frame=ALLOC(WFrame); @@ -83,8 +85,7 @@ frame->frame_id=(id==0 ? new_frame_id() : use_frame_id(id)); frame->frame_iw=iw; frame->frame_ih=ih; - frame->frame_ix=frame->frame_iy=(flags&WFRAME_NO_BORDER ? 0 : - CF_BORDER_WIDTH); + frame->frame_ix=frame->frame_iy=b; frame->min_w=CF_WIN_MIN_WIDTH; frame->min_h=CF_WIN_MIN_HEIGHT; frame->max_w=-1; @@ -98,7 +99,12 @@ frame->w=w; frame->h=h; frame->bar_w=frame->tab_w=frame->w; - frame->bar_h=(flags&WFRAME_NO_BAR ? 0 : GRDATA->bar_height); + frame->bar_h=t; + + if(h>SCREEN->height) + frame->y=0-b-t; + if(w>SCREEN->width) + frame->x=0-b; #ifdef CF_WANT_TRANSPARENT_TERMS frame_win=XCreateWindow(wglobal.dpy, SCREEN->root, @@ -535,13 +541,28 @@ static void do_set_frame_size(WFrame *frame, int iw, int ih) { + int x = frame->x, y = frame->y; + int b=(frame->flags&WFRAME_NO_BORDER ? 0 : CF_BORDER_WIDTH); + int t=(frame->flags&WFRAME_NO_BAR ? 0 : GRDATA->bar_height); + frame->frame_iw=iw; frame->frame_ih=ih; + + if(ih>=SCREEN->height) + y=0-b-t; + else if(frame->y+ih+t+2*b>SCREEN->height) + y=SCREEN->height-ih-b*2-t; + if(iw>=SCREEN->width) + x=0-b; + else if(frame->x+iw+2*b>SCREEN->width) + x=SCREEN->width-iw-b*2; clientwin_to_frame_size(iw, ih, frame->flags, &(frame->w), &(frame->h)); XResizeWindow(wglobal.dpy, frame->frame_win, FRAME_W(frame), FRAME_H(frame)); + if ( (x!=frame->x) || (y!=frame->y) ) + set_frame_pos(frame, x, y); frame_recalc_bar(frame); } @@ -900,7 +921,7 @@ if(frame==NULL){ frame=create_add_frame_simple(0, 0, - cwin->client_w, cwin->client_h); + cwin->client_w, cwin->client_h); if(frame==NULL) return; newframe=TRUE;