diff options
Diffstat (limited to 'frontends/amiga/gui_menu.c')
-rw-r--r-- | frontends/amiga/gui_menu.c | 201 |
1 files changed, 123 insertions, 78 deletions
diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c index 756f5e66c..dc1450fce 100644 --- a/frontends/amiga/gui_menu.c +++ b/frontends/amiga/gui_menu.c @@ -1,5 +1,5 @@ /* - * Copyright 2017 Chris Young <chris@unsatisfactorysoftware.co.uk> + * Copyright 2017-2024 Chris Young <chris@unsatisfactorysoftware.co.uk> * * This file is part of NetSurf, http://www.netsurf-browser.org/ * @@ -141,7 +141,7 @@ HOOKF(void, ami_menu_item_project_save, APTR, window, struct IntuiMessage *) GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - ami_file_save_req(type, gwin, browser_window_get_content(gwin->gw->bw)); + ami_file_save_req(type, gwin, browser_window_get_content(ami_gui2_get_browser_window(gwin))); } HOOKF(void, ami_menu_item_project_closetab, APTR, window, struct IntuiMessage *) @@ -149,7 +149,7 @@ HOOKF(void, ami_menu_item_project_closetab, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_destroy(gwin->gw->bw); + browser_window_destroy(ami_gui2_get_browser_window(gwin)); } HOOKF(void, ami_menu_item_project_closewin, APTR, window, struct IntuiMessage *) @@ -157,7 +157,7 @@ HOOKF(void, ami_menu_item_project_closewin, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - gwin->closed = true; + ami_gui2_set_closed(gwin, true); } HOOKF(void, ami_menu_item_project_print, APTR, window, struct IntuiMessage *) @@ -166,7 +166,7 @@ HOOKF(void, ami_menu_item_project_print, APTR, window, struct IntuiMessage *) GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); ami_set_pointer(gwin, GUI_POINTER_WAIT, false); - ami_print_ui(browser_window_get_content(gwin->gw->bw)); + ami_print_ui(browser_window_get_content(ami_gui2_get_browser_window(gwin))); ami_reset_pointer(gwin); } @@ -191,7 +191,7 @@ HOOKF(void, ami_menu_item_project_about, APTR, window, struct IntuiMessage *) #ifdef __amigaos4__ sel = TimedDosRequesterTags(TDR_ImageType,TDRIMAGE_INFO, TDR_TitleString, messages_get("NetSurf"), - TDR_Window, gwin->win, + TDR_Window, ami_gui2_get_window(gwin), TDR_GadgetString, temp2, TDR_FormatString,"NetSurf %s\nBuild date %s\n\nhttp://www.netsurf-browser.org", TDR_Arg1,netsurf_version, @@ -206,7 +206,7 @@ HOOKF(void, ami_menu_item_project_about, APTR, window, struct IntuiMessage *) temp2, }; - sel = EasyRequest(gwin->win, &about_req, NULL, netsurf_version, verdate); + sel = EasyRequest(ami_gui2_get_window(gwin), &about_req, NULL, netsurf_version, verdate); #endif free(temp2); @@ -243,7 +243,7 @@ HOOKF(void, ami_menu_item_edit_cut, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_key_press(gwin->gw->bw, NS_KEY_CUT_SELECTION); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_CUT_SELECTION); } HOOKF(void, ami_menu_item_edit_copy, APTR, window, struct IntuiMessage *) @@ -252,22 +252,22 @@ HOOKF(void, ami_menu_item_edit_copy, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - if(browser_window_can_select(gwin->gw->bw)) { - browser_window_key_press(gwin->gw->bw, NS_KEY_COPY_SELECTION); - browser_window_key_press(gwin->gw->bw, NS_KEY_CLEAR_SELECTION); + if(browser_window_can_select(ami_gui2_get_browser_window(gwin))) { + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_COPY_SELECTION); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_CLEAR_SELECTION); } - else if((bm = content_get_bitmap(browser_window_get_content(gwin->gw->bw)))) { + else if((bm = content_get_bitmap(browser_window_get_content(ami_gui2_get_browser_window(gwin))))) { /** @todo It should be checked that the lifetime of * the objects containing the values returned (and the * constness cast away) is safe. */ - ami_bitmap_set_url(bm, browser_window_get_url(gwin->gw->bw)); - ami_bitmap_set_title(bm, browser_window_get_title(gwin->gw->bw)); + ami_bitmap_set_url(bm, browser_window_access_url(ami_gui2_get_browser_window(gwin))); + ami_bitmap_set_title(bm, browser_window_get_title(ami_gui2_get_browser_window(gwin))); ami_easy_clipboard_bitmap(bm); } #ifdef WITH_NS_SVG - else if(ami_mime_compare(browser_window_get_content(gwin->gw->bw), "svg") == true) { - ami_easy_clipboard_svg(browser_window_get_content(gwin->gw->bw)); + else if(ami_mime_compare(browser_window_get_content(ami_gui2_get_browser_window(gwin)), "svg") == true) { + ami_easy_clipboard_svg(browser_window_get_content(ami_gui2_get_browser_window(gwin))); } #endif } @@ -277,7 +277,7 @@ HOOKF(void, ami_menu_item_edit_paste, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_key_press(gwin->gw->bw, NS_KEY_PASTE); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_PASTE); } HOOKF(void, ami_menu_item_edit_selectall, APTR, window, struct IntuiMessage *) @@ -285,8 +285,8 @@ HOOKF(void, ami_menu_item_edit_selectall, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_key_press(gwin->gw->bw, NS_KEY_SELECT_ALL); - gui_start_selection(gwin->gw); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_SELECT_ALL); + gui_start_selection(ami_gui2_get_gui_window(gwin)); } HOOKF(void, ami_menu_item_edit_clearsel, APTR, window, struct IntuiMessage *) @@ -294,7 +294,7 @@ HOOKF(void, ami_menu_item_edit_clearsel, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_key_press(gwin->gw->bw, NS_KEY_CLEAR_SELECTION); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_CLEAR_SELECTION); } HOOKF(void, ami_menu_item_edit_undo, APTR, window, struct IntuiMessage *) @@ -302,7 +302,7 @@ HOOKF(void, ami_menu_item_edit_undo, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_key_press(gwin->gw->bw, NS_KEY_UNDO); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_UNDO); } HOOKF(void, ami_menu_item_edit_redo, APTR, window, struct IntuiMessage *) @@ -310,7 +310,7 @@ HOOKF(void, ami_menu_item_edit_redo, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - browser_window_key_press(gwin->gw->bw, NS_KEY_REDO); + browser_window_key_press(ami_gui2_get_browser_window(gwin), NS_KEY_REDO); } HOOKF(void, ami_menu_item_browser_find, APTR, window, struct IntuiMessage *) @@ -318,7 +318,7 @@ HOOKF(void, ami_menu_item_browser_find, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - ami_search_open(gwin->gw); + ami_search_open(ami_gui2_get_gui_window(gwin)); } HOOKF(void, ami_menu_item_browser_localhistory, APTR, window, struct IntuiMessage *) @@ -326,7 +326,7 @@ HOOKF(void, ami_menu_item_browser_localhistory, APTR, window, struct IntuiMessag struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - ami_history_local_present(gwin->gw); + ami_history_local_present(ami_gui2_get_gui_window(gwin)); } HOOKF(void, ami_menu_item_browser_globalhistory, APTR, window, struct IntuiMessage *) @@ -336,7 +336,7 @@ HOOKF(void, ami_menu_item_browser_globalhistory, APTR, window, struct IntuiMessa HOOKF(void, ami_menu_item_browser_cookies, APTR, window, struct IntuiMessage *) { - ami_cookies_present(); + ami_cookies_present(NULL); } HOOKF(void, ami_menu_item_browser_foreimg, APTR, window, struct IntuiMessage *) @@ -375,12 +375,24 @@ HOOKF(void, ami_menu_item_browser_enablejs, APTR, window, struct IntuiMessage *) ami_gui_menu_set_check_toggled(); } +HOOKF(void, ami_menu_item_browser_enablecss, APTR, window, struct IntuiMessage *) +{ + struct Menu *menustrip; + bool checked = false; + + GetAttr(WINDOW_MenuStrip, (Object *)window, (ULONG *)&menustrip); + checked = ami_menu_get_selected(menustrip, msg); + + nsoption_set_bool(author_level_css, checked); + ami_gui_menu_set_check_toggled(); +} + HOOKF(void, ami_menu_item_browser_scale_decrease, APTR, window, struct IntuiMessage *) { struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - ami_gui_set_scale(gwin->gw, gwin->gw->scale - 0.1); + ami_gui_adjust_scale(ami_gui2_get_gui_window(gwin), -0.1); } HOOKF(void, ami_menu_item_browser_scale_normal, APTR, window, struct IntuiMessage *) @@ -388,7 +400,7 @@ HOOKF(void, ami_menu_item_browser_scale_normal, APTR, window, struct IntuiMessag struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - ami_gui_set_scale(gwin->gw, 1.0); + ami_gui_set_scale(ami_gui2_get_gui_window(gwin), 1.0); } HOOKF(void, ami_menu_item_browser_scale_increase, APTR, window, struct IntuiMessage *) @@ -396,7 +408,7 @@ HOOKF(void, ami_menu_item_browser_scale_increase, APTR, window, struct IntuiMess struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - ami_gui_set_scale(gwin->gw, gwin->gw->scale + 0.1); + ami_gui_adjust_scale(ami_gui2_get_gui_window(gwin), +0.1); } HOOKF(void, ami_menu_item_browser_redraw, APTR, window, struct IntuiMessage *) @@ -405,7 +417,7 @@ HOOKF(void, ami_menu_item_browser_redraw, APTR, window, struct IntuiMessage *) GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); ami_schedule_redraw(gwin, true); - gwin->new_content = true; + ami_gui2_set_new_content(gwin, true); } HOOKF(void, ami_menu_item_hotlist_add, APTR, window, struct IntuiMessage *) @@ -414,12 +426,12 @@ HOOKF(void, ami_menu_item_hotlist_add, APTR, window, struct IntuiMessage *) struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - bw = gwin->gw->bw; + bw = ami_gui2_get_browser_window(gwin); if (bw == NULL || browser_window_has_content(bw) == false) return; - hotlist_add_url(browser_window_get_url(bw)); + hotlist_add_url(browser_window_access_url(bw)); ami_gui_update_hotlist_button(gwin); } @@ -436,7 +448,7 @@ HOOKF(void, ami_menu_item_hotlist_entries, APTR, window, struct IntuiMessage *) if(url == NULL) return; - browser_window_navigate(gwin->gw->bw, + browser_window_navigate(ami_gui2_get_browser_window(gwin), url, NULL, BW_NAVIGATE_HISTORY, @@ -455,10 +467,10 @@ HOOKF(void, ami_menu_item_settings_snapshot, APTR, window, struct IntuiMessage * struct gui_window_2 *gwin; GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); - nsoption_set_int(window_x, gwin->win->LeftEdge); - nsoption_set_int(window_y, gwin->win->TopEdge); - nsoption_set_int(window_width, gwin->win->Width); - nsoption_set_int(window_height, gwin->win->Height); + nsoption_set_int(window_x, ami_gui2_get_window(gwin)->LeftEdge); + nsoption_set_int(window_y, ami_gui2_get_window(gwin)->TopEdge); + nsoption_set_int(window_width, ami_gui2_get_window(gwin)->Width); + nsoption_set_int(window_height, ami_gui2_get_window(gwin)->Height); } HOOKF(void, ami_menu_item_settings_save, APTR, window, struct IntuiMessage *) @@ -473,10 +485,10 @@ HOOKF(void, ami_menu_item_arexx_execute, APTR, window, struct IntuiMessage *) GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin); if(AslRequestTags(filereq, - ASLFR_Window, gwin->win, + ASLFR_Window, ami_gui2_get_window(gwin), ASLFR_SleepWindow, TRUE, ASLFR_TitleText, messages_get("NetSurf"), - ASLFR_Screen, scrn, + ASLFR_Screen, ami_gui_get_screen(), ASLFR_DoSaveMode, FALSE, ASLFR_InitialDrawer, nsoption_charp(arexx_dir), ASLFR_InitialPattern, "#?.nsrx", @@ -582,6 +594,10 @@ ULONG ami_gui_menu_number(int item) case M_JS: menu_num = FULLMENUNUM(2,9,0); break; + + case M_CSS: + menu_num = FULLMENUNUM(2,10,0); + break; default: NSLOG(netsurf, INFO, @@ -681,7 +697,7 @@ void ami_gui_menu_update_checked(struct gui_window_2 *gwin) struct Menu *menustrip; - GetAttr(WINDOW_MenuStrip, gwin->objects[OID_MAIN], (ULONG *)&menustrip); + GetAttr(WINDOW_MenuStrip, ami_gui2_get_object(gwin, AMI_WIN_MAIN), (ULONG *)&menustrip); if(!menustrip) return; if(nsoption_bool(enable_javascript) == true) { if((ItemAddress(menustrip, ami_gui_menu_number(M_JS))->Flags & CHECKED) == 0) @@ -690,6 +706,13 @@ void ami_gui_menu_update_checked(struct gui_window_2 *gwin) if(ItemAddress(menustrip, ami_gui_menu_number(M_JS))->Flags & CHECKED) ItemAddress(menustrip, ami_gui_menu_number(M_JS))->Flags ^= CHECKED; } + if(nsoption_bool(author_level_css) == true) { + if((ItemAddress(menustrip, ami_gui_menu_number(M_CSS))->Flags & CHECKED) == 0) + ItemAddress(menustrip, ami_gui_menu_number(M_CSS))->Flags ^= CHECKED; + } else { + if(ItemAddress(menustrip, ami_gui_menu_number(M_CSS))->Flags & CHECKED) + ItemAddress(menustrip, ami_gui_menu_number(M_CSS))->Flags ^= CHECKED; + } if(nsoption_bool(foreground_images) == true) { if((ItemAddress(menustrip, ami_gui_menu_number(M_IMGFORE))->Flags & CHECKED) == 0) ItemAddress(menustrip, ami_gui_menu_number(M_IMGFORE))->Flags ^= CHECKED; @@ -706,24 +729,24 @@ void ami_gui_menu_update_checked(struct gui_window_2 *gwin) ItemAddress(menustrip, ami_gui_menu_number(M_IMGBACK))->Flags ^= CHECKED; } - ResetMenuStrip(gwin->win, menustrip); + ResetMenuStrip(ami_gui2_get_window(gwin), menustrip); } void ami_gui_menu_update_disabled(struct gui_window *g, struct hlcache_handle *c) { - struct Window *win = g->shared->win; + struct Window *win = ami_gui_get_window(g); if(nsoption_bool(kiosk_mode) == true) return; if(content_get_type(c) <= CONTENT_CSS) { - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVETXT, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVECOMP, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVETXT, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVECOMP, false); #ifdef WITH_PDF_EXPORT - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVEPDF, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVEPDF, false); #endif #if 0 - if(browser_window_get_editor_flags(g->bw) & BW_EDITOR_CAN_COPY) { + if(browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & BW_EDITOR_CAN_COPY) { OnMenu(win,AMI_MENU_COPY); OnMenu(win,AMI_MENU_CLEAR); } else { @@ -731,39 +754,39 @@ void ami_gui_menu_update_disabled(struct gui_window *g, struct hlcache_handle *c OffMenu(win,AMI_MENU_CLEAR); } - if(browser_window_get_editor_flags(g->bw) & BW_EDITOR_CAN_CUT) + if(browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & BW_EDITOR_CAN_CUT) OnMenu(win,AMI_MENU_CUT); else OffMenu(win,AMI_MENU_CUT); - if(browser_window_get_editor_flags(g->bw) & BW_EDITOR_CAN_PASTE) + if(browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & BW_EDITOR_CAN_PASTE) OnMenu(win,AMI_MENU_PASTE); else OffMenu(win,AMI_MENU_PASTE); #else - ami_gui_menu_set_disabled(win, g->shared->imenu, M_CUT, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_COPY, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_PASTE, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_CLEAR, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_CUT, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_COPY, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_PASTE, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_CLEAR, false); #endif - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SELALL, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_FIND, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVEIFF, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SELALL, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_FIND, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVEIFF, true); } else { - ami_gui_menu_set_disabled(win, g->shared->imenu, M_CUT, true); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_PASTE, true); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_CLEAR, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_CUT, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_PASTE, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_CLEAR, true); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVETXT, true); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVECOMP, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVETXT, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVECOMP, true); #ifdef WITH_PDF_EXPORT - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVEPDF, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVEPDF, true); #endif - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SELALL, true); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_FIND, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SELALL, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_FIND, true); #ifdef WITH_NS_SVG if(content_get_bitmap(c) || (ami_mime_compare(c, "svg") == true)) @@ -771,13 +794,13 @@ void ami_gui_menu_update_disabled(struct gui_window *g, struct hlcache_handle *c if(content_get_bitmap(c)) #endif { - ami_gui_menu_set_disabled(win, g->shared->imenu, M_COPY, false); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVEIFF, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_COPY, false); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVEIFF, false); } else { - ami_gui_menu_set_disabled(win, g->shared->imenu, M_COPY, true); - ami_gui_menu_set_disabled(win, g->shared->imenu, M_SAVEIFF, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_COPY, true); + ami_gui_menu_set_disabled(win, ami_gui_get_menu(g), M_SAVEIFF, true); } } } @@ -919,6 +942,10 @@ static void ami_init_menulabs(struct ami_menu_data **md) if(nsoption_bool(enable_javascript) == true) js_flags |= CHECKED; + UWORD css_flags = CHECKIT | MENUTOGGLE; + if(nsoption_bool(author_level_css) == true) + css_flags |= CHECKED; + UWORD imgfore_flags = CHECKIT | MENUTOGGLE; if(nsoption_bool(foreground_images) == true) imgfore_flags |= CHECKED; @@ -1007,6 +1034,8 @@ static void ami_init_menulabs(struct ami_menu_data **md) ami_menu_item_browser_backimg, NULL, imgback_flags); ami_menu_alloc_item(md, M_JS, NM_ITEM, "EnableJS", NULL, NULL, ami_menu_item_browser_enablejs, NULL, js_flags); + ami_menu_alloc_item(md, M_CSS, NM_ITEM, "EnableCSS", NULL, NULL, + ami_menu_item_browser_enablecss, NULL, css_flags); ami_menu_alloc_item(md, M_BAR_B4, NM_ITEM, NM_BARLABEL, NULL, NULL, NULL, NULL, 0); ami_menu_alloc_item(md, M_REDRAW, NM_ITEM, "Redraw", NULL, "TBImages:list_wand", ami_menu_item_browser_redraw, NULL, 0); @@ -1035,26 +1064,32 @@ 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 { - 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); + struct Menu *temp_menu; + struct ami_menu_data **md = ami_gui2_get_menu_data(gwin); + + ami_init_menulabs(md); + ami_menu_scan(md); + ami_menu_arexx_scan(md); + temp_menu = ami_menu_layout(md, 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,13 +1124,24 @@ static void ami_free_menulabs(struct ami_menu_data **md) } } +void ami_gui_menu_freemenus(struct Menu *menu, struct ami_menu_data **md) +{ + if(menu != NULL) { + FreeMenus(menu); + } + + if(md != NULL) { + ami_free_menulabs(md); + } +} + void ami_gui_menu_free(struct gui_window_2 *gwin) { if(LIB_IS_AT_LEAST((struct Library *)IntuitionBase, 54, 6)) { #ifdef __amigaos4__ gui_menu_count--; - SetAttrs(gwin->objects[OID_MAIN], WINDOW_MenuStrip, NULL, TAG_DONE); + SetAttrs(ami_gui2_get_object(gwin, AMI_WIN_MAIN), WINDOW_MenuStrip, NULL, TAG_DONE); if(gui_menu_count == 0) { ami_free_menulabs(gui_menu_data); @@ -1105,8 +1151,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); } } |