diff -u ../ion-3ds-20050820.old/ioncore/frame.c ioncore/frame.c --- ../ion-3ds-20050820.old/ioncore/frame.c 2005-08-20 12:33:49.000000000 +0100 +++ ioncore/frame.c 2005-08-23 20:52:01.000000000 +0100 @@ -54,6 +54,42 @@ /*{{{ Destroy/create frame */ +/*floating label code*/ +void +setup_floating_label(WFrame *frame) +{ + WRectangle geom; + char *buf, *text; + WFitParams fp2; + uint len; + if(frame->tagOut!=0 || !(frame->flags&FRAME_TAB_HIDE)){ + /*don't do setup if we already have label or we're showing tabbar*/ + return; + } + if(frame!=0 && frame->mplex.l1_current!=0 && frame->mplex.l1_current->reg!=0){ + + text=frame->mplex.l1_current->reg->ni.name; + }else{ + return; + } + len=grbrush_get_text_width(frame->bar_brush,text,strlen(text)); + mplex_managed_geom((WMPlex*)frame, &geom); + fp2.g.y=geom.y; + fp2.g.h=frame->bar_h; + /*add some extra padding around label for aesthetics*/ + fp2.g.w=minof(geom.w,len+8); + fp2.g.x=geom.x+geom.w-fp2.g.w; + frame->tagOut=create_infowin((WWindow*)frame, &fp2,scopy("tab-frame")); + if(frame->tagOut==0){ + return; + } + infowin_set_attr2(frame->tagOut,"active","unselected"); + buf=INFOWIN_BUFFER(frame->tagOut); + strncpy(buf,text,INFOWIN_BUFFER_LEN-1); + buf[INFOWIN_BUFFER_LEN-1]='\0'; + window_map((WWindow*)frame->tagOut); + region_raise((WRegion*)frame->tagOut); +} bool frame_init(WFrame *frame, WWindow *parent, const WFitParams *fp, const char *style) @@ -96,7 +132,8 @@ frame->flags|=FRAME_SHADED; ((WRegion*)frame)->flags|=REGION_PLEASE_WARP; - + /*floating label code*/ + frame->tagOut=0; return TRUE; } @@ -109,6 +146,11 @@ void frame_deinit(WFrame *frame) { + /*floating label code*/ + if(frame->tagOut!=0){ + infowin_deinit(frame->tagOut); + frame->tagOut=0; + } frame_free_titles(frame); frame_release_brushes(frame); stringstore_free(frame->style); @@ -422,12 +464,20 @@ void frame_inactivated(WFrame *frame) { window_draw((WWindow*)frame, FALSE); + /*floating label code*/ + setup_floating_label(frame); } void frame_activated(WFrame *frame) { window_draw((WWindow*)frame, FALSE); + /*floating label code*/ + if(frame->tagOut!=0){ + region_unmap((WRegion*)frame->tagOut); + infowin_deinit(frame->tagOut); + frame->tagOut=0; + } } diff -u ../ion-3ds-20050820.old/ioncore/frame.h ioncore/frame.h --- ../ion-3ds-20050820.old/ioncore/frame.h 2005-08-20 12:33:49.000000000 +0100 +++ ioncore/frame.h 2005-09-20 16:15:43.000000000 +0100 @@ -45,6 +45,8 @@ int tab_dragged_idx; + /*floating label code*/ + WInfoWin *tagOut; StringId style; GrBrush *brush; GrBrush *bar_brush; Only in ioncore: ioncore.a