# This patch was originally sent to the ION mailing list by: # Christian Mauduit diff -r -u doc.orig/functions.txt doc/functions.txt --- doc.orig/functions.txt Fri Feb 8 22:23:17 2002 +++ doc/functions.txt Fri Mar 8 23:57:46 2002 @@ -59,6 +59,13 @@ enabled +Border control +-------------- + +disable_border Disables the border and the bar +enable_border Enables the border and the bar + + Close and destroy ----------------- diff -r -u src.orig/draw.c src/draw.c --- src.orig/draw.c Fri Feb 8 22:23:17 2002 +++ src/draw.c Fri Mar 8 23:53:34 2002 @@ -136,6 +136,13 @@ DrawInfo _dinfo, *dinfo=&_dinfo; WGRData *grdata=GRDATA_OF(frame); + if(complete) + XClearWindow(wglobal.dpy, FRAME_WIN(frame)); + + /* if the border is not active, we draw nothing here */ + if (frame->flags & WFRAME_NO_BORDER) + return; + dinfo->win=FRAME_WIN(frame); dinfo->grdata=grdata; dinfo->gc=grdata->gc; @@ -143,15 +150,12 @@ dinfo->geom.w+=FRAME_W(frame); dinfo->geom.h+=FRAME_H(frame); dinfo->border=&(grdata->frame_border); - + if(IS_ACTIVE_FRAME(frame)) dinfo->colors=&(grdata->act_frame_colors); else dinfo->colors=&(grdata->frame_colors); - if(complete) - XClearWindow(wglobal.dpy, FRAME_WIN(frame)); - /*#if 1*/ draw_box(dinfo, FALSE); /*#else @@ -191,6 +195,10 @@ WGRData *grdata=&(scr->grdata); WRectangle bg; + /* if the border is not active, we draw nothing here */ + if (frame->flags & WFRAME_NO_BORDER) + return; + frame_bar_geom(frame, &bg); dinfo->win=FRAME_WIN(frame); diff -r -u src.orig/frame.c src/frame.c --- src.orig/frame.c Fri Feb 8 22:23:17 2002 +++ src/frame.c Fri Mar 8 23:53:37 2002 @@ -41,15 +41,28 @@ #define BAR_W(FRAME, GRDATA) ((FRAME)->win.geom.w+(GRDATA)->bar_off.w) #define BAR_H(FRAME, GRDATA) ((GRDATA)->bar_h) -#define FRAME_TO_CLIENT_W(W, GRDATA) ((W)+(GRDATA)->client_off.w) -#define FRAME_TO_CLIENT_H(H, GRDATA) ((H)+(GRDATA)->client_off.h) -#define CLIENT_TO_FRAME_W(W, GRDATA) ((W)-(GRDATA)->client_off.w) -#define CLIENT_TO_FRAME_H(H, GRDATA) ((H)-(GRDATA)->client_off.h) - -#define CLIENT_X(FRAME, GRDATA) ((GRDATA)->client_off.x) -#define CLIENT_Y(FRAME, GRDATA) ((GRDATA)->client_off.y) -#define CLIENT_W(FRAME, GRDATA) FRAME_TO_CLIENT_W(FRAME_W(FRAME), GRDATA) -#define CLIENT_H(FRAME, GRDATA) FRAME_TO_CLIENT_H(FRAME_H(FRAME), GRDATA) +#define FRAME_TO_CLIENT_W(W, FRAME, GRDATA) \ + (((FRAME)->flags & WFRAME_NO_BORDER) ? \ + (W) : (W)+(GRDATA)->client_off.w) +#define FRAME_TO_CLIENT_H(H, FRAME, GRDATA) \ + (((FRAME)->flags & WFRAME_NO_BORDER) ? \ + (H) : (H)+(GRDATA)->client_off.h) +#define CLIENT_TO_FRAME_W(W, FRAME, GRDATA) \ + (((FRAME)->flags & WFRAME_NO_BORDER) ? \ + (W) : (W)-(GRDATA)->client_off.w) +#define CLIENT_TO_FRAME_H(H, FRAME, GRDATA) \ + (((FRAME)->flags & WFRAME_NO_BORDER) ? \ + (H) : (H)-(GRDATA)->client_off.h) + +#define CLIENT_X(FRAME, GRDATA) \ + ((FRAME)->flags & WFRAME_NO_BORDER ? \ + 0 : (GRDATA)->client_off.x) +#define CLIENT_Y(FRAME, GRDATA) \ + ((FRAME)->flags & WFRAME_NO_BORDER ? \ + 0 : (GRDATA)->client_off.y) + +#define CLIENT_W(FRAME, GRDATA) FRAME_TO_CLIENT_W(FRAME_W(FRAME), FRAME, GRDATA) +#define CLIENT_H(FRAME, GRDATA) FRAME_TO_CLIENT_H(FRAME_H(FRAME), FRAME, GRDATA) WThingFuntab frame_funtab={deinit_frame, frame_remove_child}; @@ -658,6 +671,22 @@ geom->y=CLIENT_Y(frame, grdata); geom->w=CLIENT_W(frame, grdata); geom->h=CLIENT_H(frame, grdata); +} + +void enable_border(WFrame *frame) +{ + frame->flags = frame->flags & (~WFRAME_NO_BORDER); + + frame_fit_clients(frame); + draw_frame(frame,TRUE); +} + +void disable_border(WFrame *frame) +{ + frame->flags = frame->flags | WFRAME_NO_BORDER; + + frame_fit_clients(frame); + draw_frame(frame,TRUE); } diff -r -u src.orig/frame.h src/frame.h --- src.orig/frame.h Fri Feb 8 22:23:17 2002 +++ src/frame.h Fri Mar 8 23:05:54 2002 @@ -23,6 +23,7 @@ #define WFRAME_SHADE 0x0004 #define WFRAME_NO_BAR 0x0008 #define WFRAME_MAX_BOTH (WFRAME_MAX_VERT|WFRAME_MAX_HORIZ) +#define WFRAME_NO_BORDER 0x0010 #define FRAME_SHORTCUT_W 23 @@ -96,5 +97,8 @@ extern void split_top(WWorkspace *ws, char *str); extern WFrame *find_frame_of(Window win); + +extern void enable_border(WFrame *frame); +extern void disable_border(WFrame *frame); #endif /* INCLUDED_FRAME_H */ diff -r -u src.orig/function.c src/function.c --- src.orig/function.c Fri Feb 8 22:23:17 2002 +++ src/function.c Fri Mar 8 23:05:54 2002 @@ -90,6 +90,9 @@ FN(d, generic, WFrame, "set_widthq", set_widthq), FN(d, generic, WFrame, "set_heightq", set_heightq), + FN_VOID(generic, WFrame, "enable_border", enable_border), + FN_VOID(generic, WFrame, "disable_border", disable_border), + FN(s, generic, WWorkspace,"split_top", split_top), /* client */