From 83c38318530678b81fa837e8c330107c97f447e2 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Tue, 7 May 2019 22:22:12 +0100 Subject: set menu to window through a function --- frontends/amiga/gui.c | 9 +++++++++ frontends/amiga/gui.h | 5 +++++ frontends/amiga/gui_menu.c | 26 +++++++++++++++++++------- frontends/amiga/gui_menu.h | 5 +++++ 4 files changed, 38 insertions(+), 7 deletions(-) (limited to 'frontends/amiga') diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c index b34b5e9be..ca0fda167 100644 --- a/frontends/amiga/gui.c +++ b/frontends/amiga/gui.c @@ -363,6 +363,15 @@ struct Menu *ami_gui_get_menu(struct gui_window *gw) return gw->shared->imenu; } +void ami_gui2_set_menu(struct gui_window_2 *gwin, struct Menu *menu) +{ + if(menu != NULL) { + gwin->imenu = menu; + } else { + ami_gui_menu_freemenus(gwin->imenu); + } +} + STRPTR ami_locale_langs(int *codeset) { struct Locale *locale; diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h index 0655db8d0..727b578f2 100644 --- a/frontends/amiga/gui.h +++ b/frontends/amiga/gui.h @@ -316,5 +316,10 @@ struct Window *ami_gui_get_window(struct gui_window *gw); */ struct Menu *ami_gui_get_menu(struct gui_window *gw); +/** + * Set imenu to gui_window_2. A value of NULL will free the menu. + */ +void ami_gui2_set_menu(struct gui_window_2 *gwin, struct Menu *menu); + #endif diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c index 3cb0f3a04..b86abcb55 100644 --- a/frontends/amiga/gui_menu.c +++ b/frontends/amiga/gui_menu.c @@ -1035,26 +1035,31 @@ struct Menu *ami_gui_menu_create(struct gui_window_2 *gwin) if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) { #ifdef __amigaos4__ if(gui_menu != NULL) { - gwin->imenu = gui_menu; + ami_gui2_set_menu(gwin, gui_menu); gui_menu_count++; - return gwin->imenu; + return gui_menu; } ami_init_menulabs(gui_menu_data); ami_menu_scan(gui_menu_data); ami_menu_arexx_scan(gui_menu_data); - gwin->imenu = ami_menu_layout(gui_menu_data, AMI_MENU_AREXX_MAX); + gui_menu = ami_menu_layout(gui_menu_data, AMI_MENU_AREXX_MAX); - gui_menu = gwin->imenu; + ami_gui2_set_menu(gwin, gui_menu); gui_menu_count++; + return gui_menu; #endif } else { + struct Menu *temp_menu; + ami_init_menulabs(gwin->menu_data); ami_menu_scan(gwin->menu_data); ami_menu_arexx_scan(gwin->menu_data); - gwin->imenu = ami_menu_layout(gwin->menu_data, AMI_MENU_AREXX_MAX); + temp_menu = ami_menu_layout(gwin->menu_data, AMI_MENU_AREXX_MAX); + ami_gui2_set_menu(gwin, temp_menu); + return temp_menu; } - return gwin->imenu; + return NULL; // shouldn't get this far } static void ami_free_menulabs(struct ami_menu_data **md) @@ -1089,6 +1094,13 @@ static void ami_free_menulabs(struct ami_menu_data **md) } } +void ami_gui_menu_freemenus(struct Menu *menu) +{ + if(menu != NULL) { + FreeMenus(menu); + } +} + void ami_gui_menu_free(struct gui_window_2 *gwin) { if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) { @@ -1106,7 +1118,7 @@ void ami_gui_menu_free(struct gui_window_2 *gwin) #endif } else { ami_free_menulabs(gwin->menu_data); - FreeMenus(gwin->imenu); + ami_gui2_set_menu(gwin, NULL); } } diff --git a/frontends/amiga/gui_menu.h b/frontends/amiga/gui_menu.h index 3490fe9c1..bffe9789c 100644 --- a/frontends/amiga/gui_menu.h +++ b/frontends/amiga/gui_menu.h @@ -154,5 +154,10 @@ void ami_gui_menu_refresh_hotlist(void); * \return true if NetSurf has been quit */ bool ami_gui_menu_quit_selected(void); + +/** + * Frees a menu. Only used on OS3 and old OS4. + */ +void ami_gui_menu_freemenus(struct Menu *menu); #endif -- cgit v1.2.3