diff options
Diffstat (limited to 'src/layout.c')
-rw-r--r-- | src/layout.c | 57 |
1 files changed, 48 insertions, 9 deletions
diff --git a/src/layout.c b/src/layout.c index 6100b5d..584abbd 100644 --- a/src/layout.c +++ b/src/layout.c @@ -64,7 +64,7 @@ CreateLayout(title, startat) char *title; int startat; { - struct layout *lay; + struct layout *lay, **pl; int i; if (startat >= MAXLAY || startat < 0) @@ -86,8 +86,12 @@ int startat; lay->lay_autosave = 1; lay->lay_number = i; laytab[i] = lay; - lay->lay_next = layouts; - layouts = lay; + lay->lay_next = 0; + + pl = &layouts; + while (*pl) + pl = &(*pl)->lay_next; + *pl = lay; return lay; } @@ -164,6 +168,8 @@ struct canvas *cv; FreeCanvas(D_canvas.c_slperp); D_cvlist = 0; D_forecv = lay->lay_forecv; + if (!D_forecv) + MakeDefaultCanvas(); DupLayoutCv(&lay->lay_canvas, &D_canvas, 0); D_canvas.c_ye = D_height - 1 - ((D_canvas.c_slperp && D_canvas.c_slperp->c_slnext) || captionalways) - (D_has_hstatus == HSTATUS_LASTLINE); ResizeCanvas(&D_canvas); @@ -185,12 +191,20 @@ int startat; lay = CreateLayout(title, startat); if (!lay) return; - LoadLayout(0, &D_canvas); - fcv = D_forecv; - DupLayoutCv(&D_canvas, &lay->lay_canvas, 1); - lay->lay_forecv = D_forecv; - D_forecv = fcv; - D_layout = lay; + + if (display) + { + LoadLayout(0, &D_canvas); + fcv = D_forecv; + DupLayoutCv(&D_canvas, &lay->lay_canvas, 1); + lay->lay_forecv = D_forecv; + D_forecv = fcv; + D_layout = lay; + } + else + { + layout_attach = lay; + } lay->lay_autosave = 1; } @@ -365,3 +379,28 @@ char *filename; return 1; } +void RenameLayout(layout, name) +struct layout *layout; +const char *name; +{ + free(layout->lay_title); + layout->lay_title = SaveStr(name); +} + +int RenumberLayout(layout, number) +struct layout *layout; +int number; +{ + int old; + struct layout *lay; + old = layout->lay_number; + if (number < 0 || number >= MAXLAY) + return 0; + lay = laytab[number]; + laytab[number] = layout; + layout->lay_number = number; + laytab[old] = lay; + if (lay) + lay->lay_number = old; + return 1; +} |