this patch allows you to enable/disable the drawing of the frame tabs
by using the toggle_tab function. Its state is also saved in the
workspaces configuration file and reloaded on startup.

the only (known) drawback of this patch is, that it will ignore your old
workspace configuration files (~./ion-devel/workspaces-*) and replace it
with its version (with an added flag).

andreas
--
- Debian? - "This is our project and we can do whatever we want with it."
                                Michael Stone <mstone#debian.org>
Only in ion-devel-tog/man: ion.1x
diff -ur ion-devel-20030131/src/confws.c ion-devel-tog/src/confws.c
--- ion-devel-20030131/src/confws.c     2003-01-31 19:16:33.000000000 +0100
+++ ion-devel-tog/src/confws.c  2003-02-21 11:05:48.000000000 +0100
@@ -200,9 +200,13 @@
        
        if(frame==NULL)
                return FALSE;
-       
-       if(n>=3)
-               set_region_name((WRegion*)frame, TOK_STRING_VAL(&(toks[2])));
+
+       if(TOK_LONG_VAL(&(toks[2]))!=0)
+               frame->flags |= FRAME_TAB_HIDE;
+       else
+               frame->flags &= !FRAME_TAB_HIDE;
+       if(n>=4)
+               set_region_name((WRegion*)frame, TOK_STRING_VAL(&(toks[3])));
        
        if(current_split==NULL)
                current_ws->splitree=(WObj*)frame;
@@ -282,7 +286,7 @@
        
        if(WOBJ_IS(obj, WFrame)){
                indent(file, lvl);
-               fprintf(file, "frame %d", ((WFrame*)obj)->target_id);
+               fprintf(file, "frame %d, %d", 
+((WFrame*)obj)->target_id,((WFrame*)obj)->flags&FRAME_TAB_HIDE);
                name=region_name((WRegion*)obj);
                /* TODO: escape reserved characters */
                if(name!=NULL)
@@ -347,7 +351,7 @@
 static ConfOpt split_opts[]={
        {"vsplit", "ll",  opt_workspace_vsplit, split_opts},
        {"hsplit", "ll",  opt_workspace_hsplit, split_opts},
-       {"frame", "l?s",  opt_workspace_frame, NULL},
+       {"frame", "ll?s",  opt_workspace_frame, NULL},
        
        {"#end", NULL, opt_split_end, NULL},
        /*{"#cancel", NULL, opt_split_cancel, NULL},*/
@@ -358,7 +362,7 @@
 static ConfOpt workspace_opts[]={
        {"vsplit", "ll",  opt_workspace_vsplit, split_opts},
        {"hsplit", "ll",  opt_workspace_hsplit, split_opts},
-       {"frame", "l?s",  opt_workspace_frame, NULL},
+       {"frame", "ll?s",  opt_workspace_frame, NULL},
        
        {"#end", NULL, opt_workspace_end, NULL},
        /*{"#cancel", NULL, opt_workspace_cancel, NULL},*/
diff -ur ion-devel-20030131/src/frame.c ion-devel-tog/src/frame.c
--- ion-devel-20030131/src/frame.c      2003-01-31 19:16:33.000000000 +0100
+++ ion-devel-tog/src/frame.c   2003-02-21 11:03:31.000000000 +0100
@@ -89,17 +89,21 @@
 #define BAR_X(FRAME, GRDATA) ((GRDATA)->bar_off.x)
 #define BAR_Y(FRAME, GRDATA) ((GRDATA)->bar_off.y)
 #define BAR_W(FRAME, GRDATA) (REGION_GEOM(FRAME).w+(GRDATA)->bar_off.w)
-#define BAR_H(FRAME, GRDATA) ((GRDATA)->bar_h)
+#define BAR_H(FRAME, GRDATA) ((DRAW_TAB(FRAME))?((GRDATA)->bar_h):0)
 
 #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 FRAME_TO_CLIENT_H(H, GRDATA, FRAME) \
+                                               
+((DRAW_TAB(FRAME))?((H)+(GRDATA)->client_off.h): \
+                                               
+((H)+(GRDATA)->client_off.h+(GRDATA)->bar_h+1))
 #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_TO_FRAME_H(H, GRDATA,FRAME) \
+                                               
+((DRAW_TAB(FRAME))?((H)-(GRDATA)->client_off.h):(H))
 
 #define CLIENT_X(FRAME, GRDATA) ((GRDATA)->client_off.x)
-#define CLIENT_Y(FRAME, GRDATA) ((GRDATA)->client_off.y)
+#define CLIENT_Y(FRAME, GRDATA) ((DRAW_TAB(FRAME))?((GRDATA)->client_off.y): \
+                                                                                      
+            ((GRDATA)->bar_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 CLIENT_H(FRAME, GRDATA) FRAME_TO_CLIENT_H(FRAME_H(FRAME), GRDATA, FRAME)
 
 
 static WRegion *firstreg_ni(const WFrame *frame)
@@ -330,8 +334,9 @@
         XSetForeground(wglobal.dpy, XGC, grdata->frame_bgcolor);
         XFillRectangle(wglobal.dpy, WIN, XGC, C_X, C_Y, C_W, C_H);
         */
-       
-       draw_frame_bar(frame, !complete || !grdata->bar_inside_frame);
+
+       if(DRAW_TAB(frame))     
+               draw_frame_bar(frame, !complete || !grdata->bar_inside_frame);
 }
 
 
@@ -342,6 +347,9 @@
        WScreen *scr=SCREEN_OF(frame);
        WGRData *grdata=&(scr->grdata);
        WRectangle bg;
+
+       if(frame->flags&FRAME_TAB_HIDE)
+               return;
        
        frame_bar_geom(frame, &bg);
        
@@ -846,6 +854,16 @@
        return frame->current_sub;
 }
 
+void frame_toggle_tab(WFrame *frame)
+{
+       if(DRAW_TAB(frame))
+               frame->flags|=FRAME_TAB_HIDE;
+       else
+               frame->flags&=!FRAME_TAB_HIDE;
+       XClearWindow(wglobal.dpy, FRAME_WIN(frame));
+       frame_fit_subs(frame);
+       draw_frame(frame,TRUE);
+}
 
 /*}}}*/
 
diff -ur ion-devel-20030131/src/frame.h ion-devel-tog/src/frame.h
--- ion-devel-20030131/src/frame.h      2003-01-31 19:16:33.000000000 +0100
+++ ion-devel-tog/src/frame.h   2003-02-21 11:00:11.000000000 +0100
@@ -28,7 +28,10 @@
 #define FRAME_NO_SAVED_WH -1
 
 #define FRAME_TAB_DRAGGED 0x0001
+#define FRAME_TAB_HIDE    0x0002
 
+#define DRAW_TAB(FRAME) (!((FRAME)->flags&FRAME_TAB_HIDE))
+       
 DECLOBJ(WFrame){
        WWindow win;
        int flags;
@@ -62,6 +65,8 @@
 extern void frame_switch_next(WFrame *frame);
 extern void frame_switch_prev(WFrame *frame);
 
+extern void frame_toggle_tab(WFrame *frame);
+
 extern void frame_attach_sub(WFrame *frame, WRegion *sub, int flags);
 /*extern void frame_detach_sub(WFrame *frame, WRegion *sub);*/
 extern void frame_move_subs(WFrame *dest, WFrame *src);
diff -ur ion-devel-20030131/src/funtabs.c ion-devel-tog/src/funtabs.c
--- ion-devel-20030131/src/funtabs.c    2003-01-31 19:16:33.000000000 +0100
+++ ion-devel-tog/src/funtabs.c 2003-02-21 10:47:43.000000000 +0100
@@ -137,6 +137,7 @@
        FN(l,   generic, WRegion,       "set_height",           set_height),
        FN(d,   generic, WRegion,       "set_widthq",           set_widthq),
        FN(d,   generic, WRegion,       "set_heightq",          set_heightq),
+       FN_VOID(generic, WRegion,       "toggle_tab",           frame_toggle_tab),
 
        /* mouse move/resize and tab drag */
        FN_VOID(generic, WFrame,        "p_resize",             p_resize_setup),

Reply via email to