| 797 | #endif |
| 798 | |
| 799 | struct NewWindow * |
| 800 | DupNewWindow(struct NewWindow *win) |
| 801 | { |
| 802 | struct NewWindow *nwin; |
| 803 | struct Gadget *ngd, *gd, *pgd = NULL; |
| 804 | struct PropInfo *pip; |
| 805 | struct StringInfo *sip; |
| 806 | |
| 807 | /* Copy the (Ext)NewWindow structure */ |
| 808 | |
| 809 | nwin = (struct NewWindow *) alloc(sizeof(struct NewWindow)); |
| 810 | *nwin = *win; |
| 811 | |
| 812 | /* Now do the gadget list */ |
| 813 | |
| 814 | nwin->FirstGadget = NULL; |
| 815 | for (gd = win->FirstGadget; gd; gd = gd->NextGadget) { |
| 816 | ngd = (struct Gadget *) alloc(sizeof(struct Gadget)); |
| 817 | *ngd = *gd; |
| 818 | if (gd->GadgetType == STRGADGET) { |
| 819 | sip = (struct StringInfo *) alloc(sizeof(struct StringInfo)); |
| 820 | *sip = *((struct StringInfo *) gd->SpecialInfo); |
| 821 | sip->Buffer = (UBYTE *) alloc(sip->MaxChars); |
| 822 | *sip->Buffer = 0; |
| 823 | ngd->SpecialInfo = (APTR) sip; |
| 824 | } else if (gd->GadgetType == PROPGADGET) { |
| 825 | pip = (struct PropInfo *) alloc(sizeof(struct PropInfo)); |
| 826 | *pip = *((struct PropInfo *) gd->SpecialInfo); |
| 827 | ngd->SpecialInfo = (APTR) pip; |
| 828 | } |
| 829 | if (pgd) |
| 830 | pgd->NextGadget = ngd; |
| 831 | else |
| 832 | nwin->FirstGadget = ngd; |
| 833 | pgd = ngd; |
| 834 | ngd->NextGadget = NULL; |
| 835 | ngd->UserData = (APTR) 0x45f35c3d; // magic cookie for FreeNewWindow() |
| 836 | } |
| 837 | return (nwin); |
| 838 | } |
| 839 | |
| 840 | void |
| 841 | FreeNewWindow(struct NewWindow *win) |