summaryrefslogtreecommitdiff
path: root/frontends/amiga
diff options
context:
space:
mode:
Diffstat (limited to 'frontends/amiga')
-rw-r--r--frontends/amiga/gui.c9
-rw-r--r--frontends/amiga/gui.h5
-rw-r--r--frontends/amiga/gui_menu.c26
-rw-r--r--frontends/amiga/gui_menu.h5
4 files changed, 38 insertions, 7 deletions
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