Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/83c38318530678b81fa837e8c330107c97f447e2
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/83c38318530678b81fa837e8c330107c97f447e2
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/83c38318530678b81fa837e8c330107c97f447e2

The branch, master has been updated
       via  83c38318530678b81fa837e8c330107c97f447e2 (commit)
       via  67af746324d830914c78e8ab216eb4e37a4163a3 (commit)
       via  6d1f480f011a2de630ebe99e68effc725f179ed1 (commit)
       via  5c7b5476f0739e5f62071800830b7600a64a3dd5 (commit)
      from  b330fd9f0ef3e923f47537690c3ef05fc55498cd (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=83c38318530678b81fa837e8c330107c97f447e2
commit 83c38318530678b81fa837e8c330107c97f447e2
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    set menu to window through a function

diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index b34b5e9..ca0fda1 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 0655db8..727b578 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 3cb0f3a..b86abcb 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 3490fe9..bffe978 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
 


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=67af746324d830914c78e8ab216eb4e37a4163a3
commit 67af746324d830914c78e8ab216eb4e37a4163a3
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Get menu structure directly from gui_window

diff --git a/frontends/amiga/clipboard.c b/frontends/amiga/clipboard.c
index a9d1f61..d0372c2 100644
--- a/frontends/amiga/clipboard.c
+++ b/frontends/amiga/clipboard.c
@@ -89,11 +89,11 @@ void gui_start_selection(struct gui_window *g)
        if(!ami_gui_get_window(g)) return;
        if(nsoption_bool(kiosk_mode) == true) return;
 
-       ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
-       ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_gui_window_2(g)->imenu, M_CLEAR, false);
+       ami_gui_menu_set_disabled(ami_gui_get_window(g), ami_gui_get_menu(g), 
M_COPY, false);
+       ami_gui_menu_set_disabled(ami_gui_get_window(g), ami_gui_get_menu(g), 
M_CLEAR, false);
 
        if (browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & 
BW_EDITOR_CAN_CUT)
-               ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_gui_window_2(g)->imenu, M_CUT, false);
+               ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_menu(g), M_CUT, false);
 }
 
 static char *ami_clipboard_cat_collection(struct CollectionItem *ci, LONG 
codeset, size_t *text_length)
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index 0c2944c..b34b5e9 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -356,6 +356,13 @@ struct Window *ami_gui_get_window(struct gui_window *gw)
        return gw->shared->win;
 }
 
+struct Menu *ami_gui_get_menu(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       assert(gw->shared != NULL);
+       return gw->shared->imenu;
+}
+
 STRPTR ami_locale_langs(int *codeset)
 {
        struct Locale *locale;
diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h
index e65c0fe..0655db8 100644
--- a/frontends/amiga/gui.h
+++ b/frontends/amiga/gui.h
@@ -311,5 +311,10 @@ void ami_gui_set_throbbing(struct gui_window *gw, bool 
throbbing);
  */
 struct Window *ami_gui_get_window(struct gui_window *gw);
 
+/**
+ * Get imenu from gui_window
+ */
+struct Menu *ami_gui_get_menu(struct gui_window *gw);
+
 #endif
 
diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c
index 1bb0ee8..3cb0f3a 100644
--- a/frontends/amiga/gui_menu.c
+++ b/frontends/amiga/gui_menu.c
@@ -717,10 +717,10 @@ void ami_gui_menu_update_disabled(struct gui_window *g, 
struct hlcache_handle *c
 
        if(content_get_type(c) <= CONTENT_CSS)
        {
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_SAVETXT, false);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->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(ami_gui_get_browser_window(g)) & 
BW_EDITOR_CAN_COPY) {
@@ -741,29 +741,29 @@ void ami_gui_menu_update_disabled(struct gui_window *g, 
struct hlcache_handle *c
                else
                        OffMenu(win,AMI_MENU_PASTE);
 #else
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_CUT, false);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_PASTE, false);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->imenu, M_SELALL, false);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_FIND, false);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->imenu, M_CUT, true);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_PASTE, true);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->imenu, M_SAVETXT, true);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->imenu, M_SELALL, true);
-               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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 +771,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, 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
-                       ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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, 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, true);
-                       ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->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);
                }
        }
 }


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=6d1f480f011a2de630ebe99e68effc725f179ed1
commit 6d1f480f011a2de630ebe99e68effc725f179ed1
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Get the shared window's window structure directly from the gui_window
    In a lot of places gui_window_2 was only being accessed for Window

diff --git a/frontends/amiga/clipboard.c b/frontends/amiga/clipboard.c
index 1bcdbe7..a9d1f61 100644
--- a/frontends/amiga/clipboard.c
+++ b/frontends/amiga/clipboard.c
@@ -86,14 +86,14 @@ void ami_clipboard_free(void)
 void gui_start_selection(struct gui_window *g)
 {
        if(!g) return;
-       if(!ami_gui_get_gui_window_2(g)->win) return;
+       if(!ami_gui_get_window(g)) return;
        if(nsoption_bool(kiosk_mode) == true) return;
 
-       ami_gui_menu_set_disabled(ami_gui_get_gui_window_2(g)->win, 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
-       ami_gui_menu_set_disabled(ami_gui_get_gui_window_2(g)->win, 
ami_gui_get_gui_window_2(g)->imenu, M_CLEAR, false);
+       ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
+       ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_gui_window_2(g)->imenu, M_CLEAR, false);
 
        if (browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & 
BW_EDITOR_CAN_CUT)
-               ami_gui_menu_set_disabled(ami_gui_get_gui_window_2(g)->win, 
ami_gui_get_gui_window_2(g)->imenu, M_CUT, false);
+               ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_gui_window_2(g)->imenu, M_CUT, false);
 }
 
 static char *ami_clipboard_cat_collection(struct CollectionItem *ci, LONG 
codeset, size_t *text_length)
diff --git a/frontends/amiga/download.c b/frontends/amiga/download.c
index 3fcb21a..ed7a166 100644
--- a/frontends/amiga/download.c
+++ b/frontends/amiga/download.c
@@ -141,7 +141,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
        else
        {
                if(AslRequestTags(savereq,
-                       ASLFR_Window, ami_gui_get_gui_window_2(gui)->win,
+                       ASLFR_Window, ami_gui_get_window(gui),
                        ASLFR_SleepWindow, TRUE,
                        ASLFR_TitleText, messages_get("NetSurf"),
                        ASLFR_Screen, scrn,
@@ -150,7 +150,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
                {
                        strlcpy(dw->fname, savereq->fr_Drawer, 1024);
                        AddPart((STRPTR)&dw->fname,savereq->fr_File,1024);
-                       if(!ami_download_check_overwrite(dw->fname, 
ami_gui_get_gui_window_2(gui)->win, total_size))
+                       if(!ami_download_check_overwrite(dw->fname, 
ami_gui_get_window(gui), total_size))
                        {
                                free(dw);
                                return NULL;
@@ -434,7 +434,7 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
        linkname = ASPrintf("Link_to_%s",FilePart(nsurl_access(url)));
 
        if(AslRequestTags(savereq,
-               ASLFR_Window, ami_gui_get_gui_window_2(g)->win,
+               ASLFR_Window, ami_gui_get_window(g),
                ASLFR_SleepWindow, TRUE,
                ASLFR_TitleText,messages_get("NetSurf"),
                ASLFR_Screen,scrn,
@@ -446,7 +446,7 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
 
                ami_set_pointer(ami_gui_get_gui_window_2(g), GUI_POINTER_WAIT, 
false);
 
-               if(ami_download_check_overwrite(fname, 
ami_gui_get_gui_window_2(g)->win, 0))
+               if(ami_download_check_overwrite(fname, ami_gui_get_window(g), 
0))
                {
                        BPTR fh;
 
diff --git a/frontends/amiga/drag.c b/frontends/amiga/drag.c
index 0555001..c022a9c 100644
--- a/frontends/amiga/drag.c
+++ b/frontends/amiga/drag.c
@@ -89,7 +89,7 @@ void gui_drag_save_object(struct gui_window *g, struct 
hlcache_handle *c,
                break;
        }
 
-       ami_drag_icon_show(ami_gui_get_gui_window_2(g)->win, filetype);
+       ami_drag_icon_show(ami_gui_get_window(g), filetype);
 
        drag_save_data = c;
        drag_save_gui = g;
@@ -98,7 +98,7 @@ void gui_drag_save_object(struct gui_window *g, struct 
hlcache_handle *c,
 
 void gui_drag_save_selection(struct gui_window *g, const char *selection)
 {
-       ami_drag_icon_show(ami_gui_get_gui_window_2(g)->win, "ascii");
+       ami_drag_icon_show(ami_gui_get_window(g), "ascii");
 
        ami_autoscroll = true;
        drag_save_data = g;
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index 09de9d4..0c2944c 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -349,6 +349,12 @@ void ami_gui_set_throbbing(struct gui_window *gw, bool 
throbbing)
        gw->throbbing = throbbing;
 }
 
+struct Window *ami_gui_get_window(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       assert(gw->shared != NULL);
+       return gw->shared->win;
+}
 
 STRPTR ami_locale_langs(int *codeset)
 {
diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h
index 39b0838..e65c0fe 100644
--- a/frontends/amiga/gui.h
+++ b/frontends/amiga/gui.h
@@ -306,5 +306,10 @@ bool ami_gui_get_throbbing(struct gui_window *gw);
  */
 void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing);
 
+/**
+ * Get window from gui_window
+ */
+struct Window *ami_gui_get_window(struct gui_window *gw);
+
 #endif
 
diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c
index fd8e1b8..1bb0ee8 100644
--- a/frontends/amiga/gui_menu.c
+++ b/frontends/amiga/gui_menu.c
@@ -711,7 +711,7 @@ void ami_gui_menu_update_checked(struct gui_window_2 *gwin)
 
 void ami_gui_menu_update_disabled(struct gui_window *g, struct hlcache_handle 
*c)
 {
-       struct Window *win = ami_gui_get_gui_window_2(g)->win;
+       struct Window *win = ami_gui_get_window(g);
 
        if(nsoption_bool(kiosk_mode) == true) return;
 
diff --git a/frontends/amiga/misc.c b/frontends/amiga/misc.c
index e1332a0..9bd8bfe 100755
--- a/frontends/amiga/misc.c
+++ b/frontends/amiga/misc.c
@@ -53,7 +53,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
                TDR_FormatString, message,
                TDR_GadgetString, messages_get("OK"),
                TDR_ImageType, type,
-               TDR_Window, cur_gw ? ami_gui_get_gui_window_2(cur_gw)->win : 
NULL,
+               TDR_Window, cur_gw ? ami_gui_get_window(cur_gw) : NULL,
                TAG_DONE);
 #else
        struct EasyStruct easyreq = {
@@ -64,7 +64,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
                messages_get("OK"),
        };
 
-       ret = EasyRequest(cur_gw ? ami_gui_get_gui_window_2(cur_gw)->win : 
NULL, &easyreq, NULL);
+       ret = EasyRequest(cur_gw ? ami_gui_get_window(cur_gw) : NULL, &easyreq, 
NULL);
 #endif
        return ret;
 }
diff --git a/frontends/amiga/search.c b/frontends/amiga/search.c
index fcb508e..b210fd4 100755
--- a/frontends/amiga/search.c
+++ b/frontends/amiga/search.c
@@ -278,7 +278,7 @@ static BOOL ami_search_event(void *w)
                                                
ami_gui_get_browser_window(fwin->gwin),
                                                NULL,
                                                flags, ami_search_string());
-                               
ActivateWindow(ami_gui_get_gui_window_2(fwin->gwin)->win);
+                               ActivateWindow(ami_gui_get_window(fwin->gwin));
                        break;
 
                        case GID_S_PREV:
@@ -289,7 +289,7 @@ static BOOL ami_search_event(void *w)
                                                
ami_gui_get_browser_window(fwin->gwin),
                                                NULL,
                                                flags, ami_search_string());
-                               
ActivateWindow(ami_gui_get_gui_window_2(fwin->gwin)->win);
+                               ActivateWindow(ami_gui_get_window(fwin->gwin));
                        break;
                }
                break;
diff --git a/frontends/amiga/selectmenu.c b/frontends/amiga/selectmenu.c
index 63763a4..06f43cc 100644
--- a/frontends/amiga/selectmenu.c
+++ b/frontends/amiga/selectmenu.c
@@ -168,7 +168,7 @@ void gui_create_form_select_menu(struct gui_window *g,
 
        ami_set_pointer(ami_gui_get_gui_window_2(g), GUI_POINTER_DEFAULT, 
false); // Clear the menu-style pointer
 
-       IDoMethod(selectmenuobj, PM_OPEN, ami_gui_get_gui_window_2(g)->win);
+       IDoMethod(selectmenuobj, PM_OPEN, ami_gui_get_window(g));
 
        /* PM_OPEN is blocking, so dispose menu immediately... */
        if(selectmenuobj) DisposeObject(selectmenuobj);
diff --git a/frontends/amiga/theme.c b/frontends/amiga/theme.c
index 92686fd..8e2f470 100644
--- a/frontends/amiga/theme.c
+++ b/frontends/amiga/theme.c
@@ -433,7 +433,7 @@ void gui_window_start_throbber(struct gui_window *g)
        {
                SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, 
TRUE, TAG_DONE);
                
RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS],
-                       ami_gui_get_gui_window_2(g)->win, NULL);
+                       ami_gui_get_window(g), NULL);
        }
 #endif
 
@@ -454,7 +454,7 @@ void gui_window_stop_throbber(struct gui_window *g)
        {
                SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, 
FALSE, TAG_DONE);
                
RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS],
-                       ami_gui_get_gui_window_2(g)->win, NULL);
+                       ami_gui_get_window(g), NULL);
        }
 #endif
 
@@ -465,7 +465,7 @@ void gui_window_stop_throbber(struct gui_window *g)
                }
 
                if(throbber != NULL) {
-                       BltBitMapRastPort(throbber, 0, 0, 
ami_gui_get_gui_window_2(g)->win->RPort,
+                       BltBitMapRastPort(throbber, 0, 0, 
ami_gui_get_window(g)->RPort,
                                bbox->Left, bbox->Top, 
                                ami_theme_throbber_get_width(), 
ami_theme_throbber_get_height(),
                                0x0C0);
@@ -508,14 +508,14 @@ static void ami_throbber_update(void *p)
                                                BLITA_Width, 
ami_theme_throbber_get_width(),
                                                BLITA_Height, 
ami_theme_throbber_get_height(),
                                                BLITA_Source, throbber,
-                                               BLITA_Dest, 
ami_gui_get_gui_window_2(g)->win->RPort,
+                                               BLITA_Dest, 
ami_gui_get_window(g)->RPort,
                                                BLITA_SrcType, BLITT_BITMAP,
                                                BLITA_DestType, BLITT_RASTPORT,
                                        //      BLITA_UseSrcAlpha, TRUE,
                                        TAG_DONE);
 #else
                        BltBitMapRastPort(throbber, 
ami_theme_throbber_get_width() * frame,
-                               0, ami_gui_get_gui_window_2(g)->win->RPort,
+                               0, ami_gui_get_window(g)->RPort,
                                bbox->Left, bbox->Top,
                                ami_theme_throbber_get_width(), 
ami_theme_throbber_get_height(),
                                0xC0);


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=5c7b5476f0739e5f62071800830b7600a64a3dd5
commit 5c7b5476f0739e5f62071800830b7600a64a3dd5
Author: Chris Young <[email protected]>
Commit: Chris Young <[email protected]>

    Make gui_window private to gui.c
    TODO: ratonalise these accessors

diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index 5be8a4f..b2e2ac8 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -226,7 +226,7 @@ static int ami_find_tab_bw(struct gui_window_2 *gwin, 
struct browser_window *bw)
                GetClickTabNodeAttrs(ctab,
                                                        TNA_UserData, &tgw,
                                                        TAG_DONE);
-               if(tgw->bw == bw) return tabs;
+               if(ami_gui_get_browser_window(tgw) == bw) return tabs;
        } while((ctab=ntab));
 
        return 0;
@@ -281,8 +281,8 @@ RXHOOKF(rx_open)
                dln->filename = strdup((char *)cmd->ac_ArgList[3]);
                dln->node.ln_Name = strdup((char *)cmd->ac_ArgList[0]);
                dln->node.ln_Type = NT_USER;
-               AddTail(&gw->dllist, (struct Node *)dln);
-               browser_window_navigate(gw->bw,
+               AddTail(ami_gui_get_download_list(gw), (struct Node *)dln);
+               browser_window_navigate(ami_gui_get_browser_window(gw),
                                url,
                                NULL,
                                BW_NAVIGATE_DOWNLOAD,
@@ -303,11 +303,11 @@ RXHOOKF(rx_open)
                                      BW_CREATE_TAB,
                                      url,
                                      NULL,
-                                     gw->bw,
+                                     ami_gui_get_browser_window(gw),
                                      NULL);
 
                        if(cmd->ac_ArgList[6]) {
-                               ami_gui_switch_to_new_tab(gw->shared);
+                               
ami_gui_switch_to_new_tab(ami_gui_get_gui_window_2(gw));
                        }
                }
        }
@@ -323,7 +323,7 @@ RXHOOKF(rx_open)
        {
                if(gw)
                {
-                       browser_window_navigate(gw->bw,
+                       browser_window_navigate(ami_gui_get_browser_window(gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -355,23 +355,23 @@ RXHOOKF(rx_save)
 
        if(!gw) return;
 
-       ami_set_pointer(gw->shared, GUI_POINTER_WAIT, false);
+       ami_set_pointer(ami_gui_get_gui_window_2(gw), GUI_POINTER_WAIT, false);
                                        
        if((fh = FOpen((char *)cmd->ac_ArgList[0], MODE_NEWFILE, 0)))
        {
                const uint8_t *source_data;
                size_t source_size;
-               struct hlcache_handle *h = browser_window_get_content(gw->bw);
+               struct hlcache_handle *h = 
browser_window_get_content(ami_gui_get_browser_window(gw));
                source_data = content_get_source_data(h, &source_size);
                if (source_data != NULL) {
                        FWrite(fh, source_data, 1, source_size);
                }
 
                FClose(fh);
-               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_access_url(gw->bw)));
+               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_access_url(ami_gui_get_browser_window(gw))));
        }
 
-       ami_reset_pointer(gw->shared);
+       ami_reset_pointer(ami_gui_get_gui_window_2(gw));
 }
 
 RXHOOKF(rx_quit)
@@ -395,9 +395,9 @@ RXHOOKF(rx_geturl)
        if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
 
-       if(gw && gw->bw)
+       if(gw && ami_gui_get_browser_window(gw))
        {
-               strcpy(result, nsurl_access(browser_window_access_url(gw->bw)));
+               strcpy(result, 
nsurl_access(browser_window_access_url(ami_gui_get_browser_window(gw))));
        }
        else
        {
@@ -418,10 +418,10 @@ RXHOOKF(rx_gettitle)
 
        if(gw)
        {
-               if(gw->shared->tabs > 1)
-                       strcpy(result, gw->tabtitle);
+               if(ami_gui_get_gui_window_2(gw)->tabs > 1)
+                       strcpy(result, ami_gui_get_tab_title(gw));
                else
-                       strcpy(result, gw->shared->wintitle);
+                       strcpy(result, ami_gui_get_gui_window_2(gw)->wintitle);
        }
        else
        {
@@ -522,7 +522,7 @@ RXHOOKF(rx_back)
        if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
 
-       if(gw) ami_gui_history(gw->shared, true);
+       if(gw) ami_gui_history(ami_gui_get_gui_window_2(gw), true);
 }
 
 RXHOOKF(rx_forward)
@@ -534,7 +534,7 @@ RXHOOKF(rx_forward)
        if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
 
-       if(gw) ami_gui_history(gw->shared, false);
+       if(gw) ami_gui_history(ami_gui_get_gui_window_2(gw), false);
 
 }
 
@@ -553,7 +553,7 @@ RXHOOKF(rx_home)
        if (nsurl_create(nsoption_charp(homepage_url), &url) != NSERROR_OK) {
                amiga_warn_user("NoMemory", 0);
        } else {
-               browser_window_navigate(gw->bw,
+               browser_window_navigate(ami_gui_get_browser_window(gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -577,11 +577,11 @@ RXHOOKF(rx_reload)
        {
                if(cmd->ac_ArgList[0]) /* FORCE */
                {
-                       browser_window_reload(gw->bw, true);
+                       browser_window_reload(ami_gui_get_browser_window(gw), 
true);
                }
                else
                {
-                       browser_window_reload(gw->bw, false);
+                       browser_window_reload(ami_gui_get_browser_window(gw), 
false);
                }
        }
 }
@@ -636,7 +636,7 @@ RXHOOKF(rx_active)
 
        if(cmd->ac_ArgList[0])
        {
-               tab = ami_find_tab_bw(gwin, gw->bw);
+               tab = ami_find_tab_bw(gwin, ami_gui_get_browser_window(gw));
        }
 
        if(cmd->ac_ArgList[0]) sprintf(result, "%d", tab);
@@ -654,11 +654,11 @@ RXHOOKF(rx_close)
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
        else if(cmd->ac_ArgList[0])
        {
-               ami_gui_close_window(gw->shared);
+               ami_gui_close_window(ami_gui_get_gui_window_2(gw));
                return;
        }
 
-       if(gw) browser_window_destroy(gw->bw);
+       if(gw) browser_window_destroy(ami_gui_get_browser_window(gw));
 }
 
 RXHOOKF(rx_hotlist)
diff --git a/frontends/amiga/clipboard.c b/frontends/amiga/clipboard.c
index 79dda39..1bcdbe7 100644
--- a/frontends/amiga/clipboard.c
+++ b/frontends/amiga/clipboard.c
@@ -86,14 +86,14 @@ void ami_clipboard_free(void)
 void gui_start_selection(struct gui_window *g)
 {
        if(!g) return;
-       if(!g->shared->win) return;
+       if(!ami_gui_get_gui_window_2(g)->win) return;
        if(nsoption_bool(kiosk_mode) == true) return;
 
-       ami_gui_menu_set_disabled(g->shared->win, g->shared->imenu, M_COPY, 
false);
-       ami_gui_menu_set_disabled(g->shared->win, g->shared->imenu, M_CLEAR, 
false);
+       ami_gui_menu_set_disabled(ami_gui_get_gui_window_2(g)->win, 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
+       ami_gui_menu_set_disabled(ami_gui_get_gui_window_2(g)->win, 
ami_gui_get_gui_window_2(g)->imenu, M_CLEAR, false);
 
-       if (browser_window_get_editor_flags(g->bw) & BW_EDITOR_CAN_CUT)
-               ami_gui_menu_set_disabled(g->shared->win, g->shared->imenu, 
M_CUT, false);
+       if (browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & 
BW_EDITOR_CAN_CUT)
+               ami_gui_menu_set_disabled(ami_gui_get_gui_window_2(g)->win, 
ami_gui_get_gui_window_2(g)->imenu, M_CUT, false);
 }
 
 static char *ami_clipboard_cat_collection(struct CollectionItem *ci, LONG 
codeset, size_t *text_length)
@@ -287,9 +287,9 @@ void ami_drag_selection(struct gui_window *g)
        {
                iffh = ami_clipboard_init_internal(1);
 
-               browser_window_key_press(g->bw, NS_KEY_COPY_SELECTION);
-               browser_window_mouse_click(gwin->gw->bw, BROWSER_MOUSE_PRESS_1, 
x, y);
-               browser_window_key_press(gwin->gw->bw, NS_KEY_PASTE);
+               browser_window_key_press(ami_gui_get_browser_window(g), 
NS_KEY_COPY_SELECTION);
+               
browser_window_mouse_click(ami_gui_get_browser_window(gwin->gw), 
BROWSER_MOUSE_PRESS_1, x, y);
+               browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_PASTE);
 
                ami_clipboard_free_internal(iffh);
                iffh = old_iffh;
@@ -301,7 +301,7 @@ void ami_drag_selection(struct gui_window *g)
 
                if(ami_gadget_hit(gwin->objects[GID_URL], x, y))
                {
-                       if((sel = browser_window_get_selection(g->bw)))
+                       if((sel = 
browser_window_get_selection(ami_gui_get_browser_window(g))))
                        {
                                utf8text = ami_utf8_easy(sel);
                                RefreshSetGadgetAttrs((struct Gadget 
*)gwin->objects[GID_URL],
@@ -312,7 +312,7 @@ void ami_drag_selection(struct gui_window *g)
                }
                else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y))
                {
-                       if((sel = browser_window_get_selection(g->bw)))
+                       if((sel = 
browser_window_get_selection(ami_gui_get_browser_window(g))))
                        {
                                utf8text = ami_utf8_easy(sel);
                                RefreshSetGadgetAttrs((struct Gadget 
*)gwin->objects[GID_SEARCHSTRING],
diff --git a/frontends/amiga/ctxmenu.c b/frontends/amiga/ctxmenu.c
index f81e159..f0a2a20 100644
--- a/frontends/amiga/ctxmenu.c
+++ b/frontends/amiga/ctxmenu.c
@@ -107,8 +107,8 @@ HOOKF(void, ami_ctxmenu_item_selcopy, APTR, window, struct 
IntuiMessage *)
 {
        struct gui_window_2 *gwin = (struct gui_window_2 *)hook->h_Data;
 
-       browser_window_key_press(gwin->gw->bw, NS_KEY_COPY_SELECTION);
-       browser_window_key_press(gwin->gw->bw, NS_KEY_CLEAR_SELECTION);
+       browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_COPY_SELECTION);
+       browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_CLEAR_SELECTION);
 }
 
 HOOKF(void, ami_ctxmenu_item_websearch, APTR, window, struct IntuiMessage *)
@@ -117,11 +117,11 @@ HOOKF(void, ami_ctxmenu_item_websearch, APTR, window, 
struct IntuiMessage *)
        nsurl *url;
 
        struct gui_window_2 *gwin = (struct gui_window_2 *)hook->h_Data;
-       char *sel = browser_window_get_selection(gwin->gw->bw);
+       char *sel = 
browser_window_get_selection(ami_gui_get_browser_window(gwin->gw));
 
        ret = search_web_omni(sel, SEARCH_WEB_OMNI_SEARCHONLY, &url);
        if (ret == NSERROR_OK) {
-                       browser_window_navigate(gwin->gw->bw,
+                       
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -146,8 +146,8 @@ HOOKF(void, ami_ctxmenu_item_urlopentab, APTR, window, 
struct IntuiMessage *)
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
        nserror error = browser_window_create(BW_CREATE_CLONE | 
BW_CREATE_HISTORY | BW_CREATE_TAB,
                                                                      url,
-                                                                     
browser_window_access_url(gwin->gw->bw),
-                                                                     
gwin->gw->bw,
+                                                                     
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
+                                                                     
ami_gui_get_browser_window(gwin->gw),
                                                                      &bw);
 
        if (error != NSERROR_OK)
@@ -163,8 +163,8 @@ HOOKF(void, ami_ctxmenu_item_urlopenwin, APTR, window, 
struct IntuiMessage *)
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
        nserror error = browser_window_create(BW_CREATE_CLONE | 
BW_CREATE_HISTORY,
                                                                      url,
-                                                                     
browser_window_access_url(gwin->gw->bw),
-                                                                     
gwin->gw->bw,
+                                                                     
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
+                                                                     
ami_gui_get_browser_window(gwin->gw),
                                                                      &bw);
 
        if (error != NSERROR_OK)
@@ -178,9 +178,9 @@ HOOKF(void, ami_ctxmenu_item_urldownload, APTR, window, 
struct IntuiMessage *)
 
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_navigate(gwin->gw->bw,
+       browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                url,
-               browser_window_access_url(gwin->gw->bw),
+               browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
                BW_NAVIGATE_DOWNLOAD,
                NULL,
                NULL,
@@ -198,9 +198,9 @@ HOOKF(void, ami_ctxmenu_item_objshow, APTR, window, struct 
IntuiMessage *)
        struct gui_window_2 *gwin;
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_navigate(gwin->gw->bw,
+       browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_access_url(gwin->gw->bw),
+                                                       
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
@@ -238,9 +238,9 @@ HOOKF(void, ami_ctxmenu_item_frameshow, APTR, window, 
struct IntuiMessage *)
        struct gui_window_2 *gwin;
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_navigate(gwin->gw->bw,
+       browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_access_url(gwin->gw->bw),
+                                                       
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
@@ -271,7 +271,8 @@ HOOKF(void, ami_ctxmenu_item_history, APTR, window, struct 
IntuiMessage *)
 
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_history_go(gwin->gw->bw, (struct history_entry 
*)hook->h_Data, false);           
+       browser_window_history_go(ami_gui_get_browser_window(gwin->gw),
+               (struct history_entry *)hook->h_Data, false);           
 }
 
 
@@ -300,7 +301,7 @@ static uint32 ami_ctxmenu_hook_func(struct Hook *hook, 
struct Window *window, st
        Object *root_menu;
        bool ctxmenu_has_content = false;
        struct gui_window_2 *gwin = hook->h_Data;
-       struct hlcache_handle *cc = browser_window_get_content(gwin->gw->bw);
+       struct hlcache_handle *cc = 
browser_window_get_content(ami_gui_get_browser_window(gwin->gw));
        struct browser_window_features ccdata;
        int mx = window->MouseX;
        int my = window->MouseY;
@@ -328,11 +329,11 @@ static uint32 ami_ctxmenu_hook_func(struct Hook *hook, 
struct Window *window, st
                return 0;
        }
 
-       browser_window_get_features(gwin->gw->bw, x, y, &ccdata);
+       browser_window_get_features(ami_gui_get_browser_window(gwin->gw), x, y, 
&ccdata);
 
-       if((browser_window_can_select(gwin->gw->bw)) &&
-               ((browser_window_get_editor_flags(gwin->gw->bw) & 
BW_EDITOR_CAN_COPY)) &&
-               (sel = browser_window_get_selection(gwin->gw->bw))) {
+       if((browser_window_can_select(ami_gui_get_browser_window(gwin->gw))) &&
+               
((browser_window_get_editor_flags(ami_gui_get_browser_window(gwin->gw)) & 
BW_EDITOR_CAN_COPY)) &&
+               (sel = 
browser_window_get_selection(ami_gui_get_browser_window(gwin->gw)))) {
 
                ami_ctxmenu_add_item(root_menu, AMI_CTX_ID_SELCOPY, gwin);
                ami_ctxmenu_add_item(root_menu, AMI_CTX_ID_WEBSEARCH, gwin);
@@ -567,9 +568,9 @@ struct Menu *ami_ctxmenu_history_create(int direction, 
struct gui_window_2 *gwin
                gwin->temp = 0;
 
                if(direction == AMI_CTXMENU_HISTORY_BACK) {
-                       browser_window_history_enumerate_back(gwin->gw->bw, 
ami_ctxmenu_history_back, gwin);
+                       
browser_window_history_enumerate_back(ami_gui_get_browser_window(gwin->gw), 
ami_ctxmenu_history_back, gwin);
                } else {
-                       browser_window_history_enumerate_forward(gwin->gw->bw, 
ami_ctxmenu_history_forward, gwin);
+                       
browser_window_history_enumerate_forward(ami_gui_get_browser_window(gwin->gw), 
ami_ctxmenu_history_forward, gwin);
                }
        }
 
diff --git a/frontends/amiga/download.c b/frontends/amiga/download.c
index 895d929..3fcb21a 100644
--- a/frontends/amiga/download.c
+++ b/frontends/amiga/download.c
@@ -132,8 +132,8 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
 
        dw = calloc(1, sizeof(struct gui_download_window));
 
-       if(gui && (!IsListEmpty(&gui->dllist)) && (dw->dln = (struct dlnode 
*)FindName(&gui->dllist,url)))
-       {
+       if(gui && (!IsListEmpty(ami_gui_get_download_list(gui)) &&
+               (dw->dln = (struct dlnode 
*)FindName(ami_gui_get_download_list(gui), url)))) {
                strcpy(dw->fname, dw->dln->filename);
                free(dw->dln->node.ln_Name);
                dw->dln->node.ln_Name = NULL;
@@ -141,7 +141,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
        else
        {
                if(AslRequestTags(savereq,
-                       ASLFR_Window, gui->shared->win,
+                       ASLFR_Window, ami_gui_get_gui_window_2(gui)->win,
                        ASLFR_SleepWindow, TRUE,
                        ASLFR_TitleText, messages_get("NetSurf"),
                        ASLFR_Screen, scrn,
@@ -150,7 +150,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
                {
                        strlcpy(dw->fname, savereq->fr_Drawer, 1024);
                        AddPart((STRPTR)&dw->fname,savereq->fr_File,1024);
-                       if(!ami_download_check_overwrite(dw->fname, 
gui->shared->win, total_size))
+                       if(!ami_download_check_overwrite(dw->fname, 
ami_gui_get_gui_window_2(gui)->win, total_size))
                        {
                                free(dw);
                                return NULL;
@@ -166,7 +166,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
        if(dl_filename) ami_utf8_free(dl_filename);
        dw->size = total_size;
        dw->downloaded = 0;
-       if(gui) dw->bw = gui->bw;
+       if(gui) dw->bw = ami_gui_get_browser_window(gui);
        dw->url = url;
 
        va[0] = (APTR)dw->downloaded;
@@ -434,7 +434,7 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
        linkname = ASPrintf("Link_to_%s",FilePart(nsurl_access(url)));
 
        if(AslRequestTags(savereq,
-               ASLFR_Window, g->shared->win,
+               ASLFR_Window, ami_gui_get_gui_window_2(g)->win,
                ASLFR_SleepWindow, TRUE,
                ASLFR_TitleText,messages_get("NetSurf"),
                ASLFR_Screen,scrn,
@@ -444,9 +444,9 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
                strlcpy(fname, savereq->fr_Drawer, 1024);
                AddPart(fname,savereq->fr_File,1024);
 
-               ami_set_pointer(g->shared, GUI_POINTER_WAIT, false);
+               ami_set_pointer(ami_gui_get_gui_window_2(g), GUI_POINTER_WAIT, 
false);
 
-               if(ami_download_check_overwrite(fname, g->shared->win, 0))
+               if(ami_download_check_overwrite(fname, 
ami_gui_get_gui_window_2(g)->win, 0))
                {
                        BPTR fh;
 
@@ -473,7 +473,7 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
                        }
                        FreeVec(linkname);
                }
-               ami_reset_pointer(g->shared);
+               ami_reset_pointer(ami_gui_get_gui_window_2(g));
        }
        return NSERROR_OK;
 }
diff --git a/frontends/amiga/drag.c b/frontends/amiga/drag.c
index 31ddc14..0555001 100644
--- a/frontends/amiga/drag.c
+++ b/frontends/amiga/drag.c
@@ -89,7 +89,7 @@ void gui_drag_save_object(struct gui_window *g, struct 
hlcache_handle *c,
                break;
        }
 
-       ami_drag_icon_show(g->shared->win, filetype);
+       ami_drag_icon_show(ami_gui_get_gui_window_2(g)->win, filetype);
 
        drag_save_data = c;
        drag_save_gui = g;
@@ -98,7 +98,7 @@ void gui_drag_save_object(struct gui_window *g, struct 
hlcache_handle *c,
 
 void gui_drag_save_selection(struct gui_window *g, const char *selection)
 {
-       ami_drag_icon_show(g->shared->win, "ascii");
+       ami_drag_icon_show(ami_gui_get_gui_window_2(g)->win, "ascii");
 
        ami_autoscroll = true;
        drag_save_data = g;
@@ -166,7 +166,7 @@ void ami_drag_save(struct Window *win)
                case GUI_SAVE_TEXT_SELECTION: // selection
                        AddPart(path,"netsurf_text_selection",1024);
                        struct gui_window *g = (struct gui_window *) 
drag_save_data;
-                       ami_file_save(AMINS_SAVE_SELECTION, path, win, NULL, 
NULL, g->bw);
+                       ami_file_save(AMINS_SAVE_SELECTION, path, win, NULL, 
NULL, ami_gui_get_browser_window(g));
                break;
 
                case GUI_SAVE_COMPLETE:
@@ -174,7 +174,7 @@ void ami_drag_save(struct Window *win)
                        struct hlcache_handle *c = drag_save_data;
 
                        AddPart(path, content_get_title(c), 1024);
-                       ami_file_save(AMINS_SAVE_COMPLETE, path, win, c, 
drag_save_gui->favicon, NULL);
+                       ami_file_save(AMINS_SAVE_COMPLETE, path, win, c, 
ami_gui_get_favicon(drag_save_gui), NULL);
                }
                break;
 
diff --git a/frontends/amiga/file.c b/frontends/amiga/file.c
index 845491c..40d7288 100644
--- a/frontends/amiga/file.c
+++ b/frontends/amiga/file.c
@@ -100,7 +100,7 @@ void ami_file_open(struct gui_window_2 *gwin)
                        if (netsurf_path_to_nsurl(temp, &url) != NSERROR_OK) {
                                amiga_warn_user("NoMemory", 0);
                        } else {
-                               browser_window_navigate(gwin->gw->bw,
+                               
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -267,7 +267,8 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
                strlcpy(fname, savereq->fr_Drawer, 1024);
                AddPart(fname, savereq->fr_File, 1024);
 
-               ami_file_save(type, fname, gwin->win, object, 
gwin->gw->favicon, gwin->gw->bw);
+               ami_file_save(type, fname, gwin->win, object,
+                       ami_gui_get_favicon(gwin->gw), 
ami_gui_get_browser_window(gwin->gw));
        }
 
        if(fname) free(fname);
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index eabf8bb..09de9d4 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -193,6 +193,29 @@
 
 extern struct gui_utf8_table *amiga_utf8_table;
 
+struct gui_window
+{
+       struct gui_window_2 *shared;
+       int tab;
+       struct Node *tab_node;
+       int c_x; /* Caret X posn */
+       int c_y; /* Caret Y posn */
+       int c_w; /* Caret width */
+       int c_h; /* Caret height */
+       int c_h_temp;
+       int scrollx;
+       int scrolly;
+       struct ami_history_local_window *hw;
+       struct List dllist;
+       struct hlcache_handle *favicon;
+       bool throbbing;
+       char *tabtitle;
+       APTR deferred_rects_pool;
+       struct MinList *deferred_rects;
+       struct browser_window *bw;
+       float scale;
+};
+
 struct ami_gui_tb_userdata {
        struct List *sblist;
        struct gui_window_2 *gw;
@@ -265,6 +288,66 @@ static void gui_window_place_caret(struct gui_window *g, 
int x, int y, int heigh
                nsoptions[NSOPTION_##OPTION].value.i = VALUE;   \
        nsoptions_default[NSOPTION_##OPTION].value.i = VALUE
 
+/* Function documented in gui.h */
+struct browser_window *ami_gui_get_browser_window(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->bw;
+}
+
+struct List *ami_gui_get_download_list(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return &gw->dllist;
+}
+
+struct gui_window_2 *ami_gui_get_gui_window_2(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->shared;
+}
+
+const char *ami_gui_get_tab_title(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return (const char *)gw->tabtitle;
+}
+
+struct Node *ami_gui_get_tab_node(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->tab_node;
+}
+
+struct hlcache_handle *ami_gui_get_favicon(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->favicon;
+}
+
+struct ami_history_local_window *ami_gui_get_history_window(struct gui_window 
*gw)
+{
+       assert(gw != NULL);
+       return gw->hw;
+}
+
+void ami_gui_set_history_window(struct gui_window *gw, struct 
ami_history_local_window *hw)
+{
+       assert(gw != NULL);
+       gw->hw = hw;
+}
+
+bool ami_gui_get_throbbing(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->throbbing;
+}
+
+void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing)
+{
+       assert(gw != NULL);
+       gw->throbbing = throbbing;
+}
 
 
 STRPTR ami_locale_langs(int *codeset)
@@ -2484,11 +2567,11 @@ static BOOL ami_gui_event(void *w)
                                                        break;
 
                                                        case RAWKEY_F9: // 
decrease scale
-                                                               
ami_gui_set_scale(gwin->gw, gwin->gw->scale - 0.1);
+                                                               
ami_gui_adjust_scale(gwin->gw, -0.1);
                                                        break;
 
                                                        case RAWKEY_F10: // 
increase scale
-                                                               
ami_gui_set_scale(gwin->gw, gwin->gw->scale + 0.1);
+                                                               
ami_gui_adjust_scale(gwin->gw, +0.1);
                                                        break;
                                                        
                                                        case RAWKEY_HELP: // 
help
@@ -3513,6 +3596,11 @@ void ami_gui_set_scale(struct gui_window *gw, float 
scale)
        browser_window_set_scale(gw->bw, scale, true);
 }
 
+void ami_gui_adjust_scale(struct gui_window *gw, float adjustment)
+{
+       ami_gui_set_scale(gw, gw->scale + adjustment);
+}
+
 void ami_gui_switch_to_new_tab(struct gui_window_2 *gwin)
 {
        if(nsoption_bool(new_tab_is_active) == true) return;
diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h
index 62390ce..39b0838 100644
--- a/frontends/amiga/gui.h
+++ b/frontends/amiga/gui.h
@@ -152,29 +152,6 @@ struct gui_window_2 {
        bool closed; /* Window has been closed (via menu) */
 };
 
-struct gui_window
-{
-       struct gui_window_2 *shared;
-       int tab;
-       struct Node *tab_node;
-       int c_x; /* Caret X posn */
-       int c_y; /* Caret Y posn */
-       int c_w; /* Caret width */
-       int c_h; /* Caret height */
-       int c_h_temp;
-       int scrollx;
-       int scrolly;
-       struct ami_history_local_window *hw;
-       struct List dllist;
-       struct hlcache_handle *favicon;
-       bool throbbing;
-       char *tabtitle;
-       APTR deferred_rects_pool;
-       struct MinList *deferred_rects;
-       struct browser_window *bw;
-       float scale;
-};
-
 extern struct MinList *window_list; /**\todo stop arexx.c poking about in here 
*/
 extern struct Screen *scrn;
 extern struct MsgPort *sport;
@@ -274,5 +251,60 @@ int ami_gui_get_quals(Object *win_obj);
 bool ami_gui_window_update_box_deferred_check(struct MinList *deferred_rects,
                                const struct rect *restrict new_rect, APTR 
mempool);
 
+/**
+ * Adjust scale by specified amount
+ */
+void ami_gui_adjust_scale(struct gui_window *gw, float adjustment);
+
+/**
+ * Get browser window from gui_window
+ */
+struct browser_window *ami_gui_get_browser_window(struct gui_window *gw);
+
+/**
+ * Get gui_window_2 from gui_window
+ */
+struct gui_window_2 *ami_gui_get_gui_window_2(struct gui_window *gw);
+
+/**
+ * Get download list from gui_window
+ */
+struct List *ami_gui_get_download_list(struct gui_window *gw);
+
+/**
+ * Get tab title from gui_window
+ */
+const char *ami_gui_get_tab_title(struct gui_window *gw);
+
+/**
+ * Get tab node from gui_window
+ */
+struct Node *ami_gui_get_tab_node(struct gui_window *gw);
+
+/**
+ * Get favicon from gui_window
+ */
+struct hlcache_handle *ami_gui_get_favicon(struct gui_window *gw);
+
+/**
+ * Get local history window from gui_window
+ */
+struct ami_history_local_window *ami_gui_get_history_window(struct gui_window 
*gw);
+
+/**
+ * Set local history window in gui_window
+ */
+void ami_gui_set_history_window(struct gui_window *gw, struct 
ami_history_local_window *hw);
+
+/**
+ * Get throbbing status from gui_window
+ */
+bool ami_gui_get_throbbing(struct gui_window *gw);
+
+/**
+ * Set throbbing status in gui_window
+ */
+void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing);
+
 #endif
 
diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c
index 6dbacf1..fd8e1b8 100644
--- a/frontends/amiga/gui_menu.c
+++ b/frontends/amiga/gui_menu.c
@@ -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_gui_get_browser_window(gwin->gw)));
 }
 
 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_gui_get_browser_window(gwin->gw));
 }
 
 HOOKF(void, ami_menu_item_project_closewin, 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_gui_get_browser_window(gwin->gw)));
        ami_reset_pointer(gwin);
 }
 
@@ -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_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw))) {
+               browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_COPY_SELECTION);
+               browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw)))))
 {
                /** @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_access_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_gui_get_browser_window(gwin->gw)));
+               ami_bitmap_set_title(bm, 
browser_window_get_title(ami_gui_get_browser_window(gwin->gw)));
                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_gui_get_browser_window(gwin->gw)),
 "svg") == true) {
+               
ami_easy_clipboard_svg(browser_window_get_content(ami_gui_get_browser_window(gwin->gw)));
        }
 #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_gui_get_browser_window(gwin->gw), 
NS_KEY_PASTE);
 }
 
 HOOKF(void, ami_menu_item_edit_selectall, APTR, window, struct IntuiMessage *)
@@ -285,7 +285,7 @@ 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);
+       browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_SELECT_ALL);
        gui_start_selection(gwin->gw);
 }
 
@@ -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_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw), 
NS_KEY_REDO);
 }
 
 HOOKF(void, ami_menu_item_browser_find, APTR, window, struct IntuiMessage *)
@@ -380,7 +380,7 @@ HOOKF(void, ami_menu_item_browser_scale_decrease, 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(gwin->gw, -0.1);
 }
 
 HOOKF(void, ami_menu_item_browser_scale_normal, APTR, window, struct 
IntuiMessage *)
@@ -396,7 +396,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(gwin->gw, +0.1);
 }
 
 HOOKF(void, ami_menu_item_browser_redraw, APTR, window, struct IntuiMessage *)
@@ -414,7 +414,7 @@ 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_gui_get_browser_window(gwin->gw);
 
        if (bw == NULL || browser_window_has_content(bw) == false)
                return;
@@ -436,7 +436,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_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -711,19 +711,19 @@ void ami_gui_menu_update_checked(struct gui_window_2 
*gwin)
 
 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_gui_window_2(g)->win;
 
        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_gui_window_2(g)->imenu, M_SAVETXT, false);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, 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 +731,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_gui_window_2(g)->imenu, M_CUT, false);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_COPY, false);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_PASTE, false);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, M_SELALL, false);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_FIND, false);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, M_CUT, true);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_PASTE, true);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, M_SAVETXT, true);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, M_SELALL, true);
+               ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_FIND, true);
 
 #ifdef WITH_NS_SVG
                if(content_get_bitmap(c) || (ami_mime_compare(c, "svg") == 
true))
@@ -771,13 +771,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_gui_window_2(g)->imenu, M_COPY, false);
+                       ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, 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_gui_window_2(g)->imenu, M_COPY, true);
+                       ami_gui_menu_set_disabled(win, 
ami_gui_get_gui_window_2(g)->imenu, M_SAVEIFF, true);
                }
        }
 }
diff --git a/frontends/amiga/gui_options.c b/frontends/amiga/gui_options.c
index fb214d0..7e302c3 100755
--- a/frontends/amiga/gui_options.c
+++ b/frontends/amiga/gui_options.c
@@ -2142,7 +2142,7 @@ static BOOL ami_gui_opts_event(void *w)
                                        case GID_OPTS_HOMEPAGE_CURRENT:
                                                if(cur_gw) 
RefreshSetGadgetAttrs((struct Gadget *)gow->objects[GID_OPTS_HOMEPAGE],
                                                        gow->win, NULL, 
STRINGA_TextVal,
-                                                       
nsurl_access(browser_window_access_url(cur_gw->bw)), TAG_DONE);
+                                                       
nsurl_access(browser_window_access_url(ami_gui_get_browser_window(cur_gw))), 
TAG_DONE);
                                        break;
 
                                        case GID_OPTS_HOMEPAGE_BLANK:
diff --git a/frontends/amiga/history.c b/frontends/amiga/history.c
index e724f3e..1b75ad4 100644
--- a/frontends/amiga/history.c
+++ b/frontends/amiga/history.c
@@ -203,7 +203,7 @@ ami_history_global_drag_end(struct ami_corewindow *ami_cw, 
int x, int y)
                DisplayBeep(scrn);
        } else if(url) {
                if((gwin = ami_window_at_pointer(AMINS_WINDOW))) {
-                       browser_window_navigate(gwin->gw->bw,
+                       
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
diff --git a/frontends/amiga/history_local.c b/frontends/amiga/history_local.c
index 3529ec7..95f422d 100644
--- a/frontends/amiga/history_local.c
+++ b/frontends/amiga/history_local.c
@@ -81,7 +81,7 @@ ami_history_local_destroy(struct ami_history_local_window 
*history_local_win)
 
        res = local_history_fini(history_local_win->session);
        if (res == NSERROR_OK) {
-               history_local_win->gw->hw = NULL;
+               ami_gui_set_history_window(history_local_win->gw, NULL);
                res = ami_corewindow_fini(&history_local_win->core); /* closes 
the window for us */
                history_local_window = NULL;
        }
@@ -253,8 +253,8 @@ nserror ami_history_local_present(struct gui_window *gw)
        if(history_local_window != NULL) {
                //windowtofront()
 
-               if (gw->hw != NULL) {
-                       res = local_history_set(gw->hw->session, gw->bw);
+               if (ami_gui_get_history_window(gw) != NULL) {
+                       res = 
local_history_set(ami_gui_get_history_window(gw)->session, 
ami_gui_get_browser_window(gw));
                        return res;
                }
 
@@ -295,7 +295,7 @@ nserror ami_history_local_present(struct gui_window *gw)
 
        res = local_history_init(ncwin->core.cb_table,
                                 (struct core_window *)ncwin,
-                                gw->bw,
+                                ami_gui_get_browser_window(gw),
                                 &ncwin->session);
        if (res != NSERROR_OK) {
                ami_utf8_free(ncwin->core.wintitle);
@@ -317,7 +317,7 @@ nserror ami_history_local_present(struct gui_window *gw)
 
        ncwin->gw = gw;
        history_local_window = ncwin;
-       gw->hw = ncwin;
+       ami_gui_set_history_window(gw, ncwin);
 
        return NSERROR_OK;
 }
diff --git a/frontends/amiga/hotlist.c b/frontends/amiga/hotlist.c
index c7efe91..7740d53 100644
--- a/frontends/amiga/hotlist.c
+++ b/frontends/amiga/hotlist.c
@@ -254,7 +254,7 @@ ami_hotlist_drag_end(struct ami_corewindow *ami_cw, int x, 
int y)
                DisplayBeep(scrn);
        } else if(url) {
                if((gwin = ami_window_at_pointer(AMINS_WINDOW))) {
-                       browser_window_navigate(gwin->gw->bw,
+                       
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
diff --git a/frontends/amiga/misc.c b/frontends/amiga/misc.c
index 822d640..e1332a0 100755
--- a/frontends/amiga/misc.c
+++ b/frontends/amiga/misc.c
@@ -53,7 +53,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
                TDR_FormatString, message,
                TDR_GadgetString, messages_get("OK"),
                TDR_ImageType, type,
-               TDR_Window, cur_gw ? cur_gw->shared->win : NULL,
+               TDR_Window, cur_gw ? ami_gui_get_gui_window_2(cur_gw)->win : 
NULL,
                TAG_DONE);
 #else
        struct EasyStruct easyreq = {
@@ -64,7 +64,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
                messages_get("OK"),
        };
 
-       ret = EasyRequest(cur_gw ? cur_gw->shared->win : NULL, &easyreq, NULL);
+       ret = EasyRequest(cur_gw ? ami_gui_get_gui_window_2(cur_gw)->win : 
NULL, &easyreq, NULL);
 #endif
        return ret;
 }
diff --git a/frontends/amiga/print.c b/frontends/amiga/print.c
index 4b48805..05f068b 100644
--- a/frontends/amiga/print.c
+++ b/frontends/amiga/print.c
@@ -407,7 +407,7 @@ static BOOL ami_print_event(void *w)
 
 void ami_print(struct hlcache_handle *c, int copies)
 {
-       float height;
+       double height;
        float scale = nsoption_int(print_scale) / 100.0;
 
        if(ami_print_info.msgport == NULL)
diff --git a/frontends/amiga/search.c b/frontends/amiga/search.c
index e633362..fcb508e 100755
--- a/frontends/amiga/search.c
+++ b/frontends/amiga/search.c
@@ -143,10 +143,10 @@ void ami_search_open(struct gui_window *gwin)
 
        if(fwin)
        {
-               browser_window_search_clear(fwin->gwin->bw);
-               fwin->gwin->shared->searchwin = NULL;
+               
browser_window_search_clear(ami_gui_get_browser_window(fwin->gwin));
+               ami_gui_get_gui_window_2(fwin->gwin)->searchwin = NULL;
                fwin->gwin = gwin;
-               gwin->shared->searchwin = fwin;
+               ami_gui_get_gui_window_2(fwin->gwin)->searchwin = fwin;
                WindowToFront(fwin->win);
                ActivateWindow(fwin->win);
                return;
@@ -220,7 +220,7 @@ void ami_search_open(struct gui_window *gwin)
        fwin->win = (struct Window *)RA_OpenWindow(fwin->objects[OID_S_MAIN]);
        fwin->gwin = gwin;
        ami_gui_win_list_add(fwin, AMINS_FINDWINDOW, &ami_search_table);
-       gwin->shared->searchwin = fwin;
+       ami_gui_get_gui_window_2(fwin->gwin)->searchwin = fwin;
        
        ActivateLayoutGadget((struct Gadget *)fwin->objects[GID_S_MAIN], 
fwin->win,
                        NULL, (ULONG)fwin->objects[GID_S_SEARCHSTRING]);
@@ -228,8 +228,8 @@ void ami_search_open(struct gui_window *gwin)
 
 void ami_search_close(void)
 {
-       browser_window_search_clear(fwin->gwin->bw);
-       fwin->gwin->shared->searchwin = NULL;
+       browser_window_search_clear(ami_gui_get_browser_window(fwin->gwin));
+       ami_gui_get_gui_window_2(fwin->gwin)->searchwin = NULL;
        DisposeObject(fwin->objects[OID_S_MAIN]);
 
        /* Free local charset version of messages */
@@ -256,7 +256,7 @@ static BOOL ami_search_event(void *w)
                switch(result & WMHI_GADGETMASK)
                {
                        case GID_S_SEARCHSTRING:
-                               browser_window_search_clear(fwin->gwin->bw);
+                               
browser_window_search_clear(ami_gui_get_browser_window(fwin->gwin));
                                                
                                RefreshSetGadgetAttrs((struct Gadget 
*)fwin->objects[GID_S_PREV],
                                        fwin->win, NULL,
@@ -275,10 +275,10 @@ static BOOL ami_search_event(void *w)
                                flags = SEARCH_FLAG_FORWARDS |
                                        ami_search_flags();
                                browser_window_search(
-                                               fwin->gwin->bw,
+                                               
ami_gui_get_browser_window(fwin->gwin),
                                                NULL,
                                                flags, ami_search_string());
-                               ActivateWindow(fwin->gwin->shared->win);
+                               
ActivateWindow(ami_gui_get_gui_window_2(fwin->gwin)->win);
                        break;
 
                        case GID_S_PREV:
@@ -286,10 +286,10 @@ static BOOL ami_search_event(void *w)
                                flags = ~SEARCH_FLAG_FORWARDS &
                                        ami_search_flags();
                                browser_window_search(
-                                               fwin->gwin->bw,
+                                               
ami_gui_get_browser_window(fwin->gwin),
                                                NULL,
                                                flags, ami_search_string());
-                               ActivateWindow(fwin->gwin->shared->win);
+                               
ActivateWindow(ami_gui_get_gui_window_2(fwin->gwin)->win);
                        break;
                }
                break;
diff --git a/frontends/amiga/selectmenu.c b/frontends/amiga/selectmenu.c
index 8a86141..63763a4 100644
--- a/frontends/amiga/selectmenu.c
+++ b/frontends/amiga/selectmenu.c
@@ -74,7 +74,7 @@ HOOKF(uint32, ami_popup_hook, Object *, item, APTR)
        struct gui_window *gwin = hook->h_Data;
 
        if(GetAttr(PMIA_ID, item, &itemid)) {
-               form_select_process_selection(gwin->shared->control, itemid);
+               
form_select_process_selection(ami_gui_get_gui_window_2(gwin)->control, itemid);
        }
 
        return itemid;
@@ -111,7 +111,7 @@ void gui_create_form_select_menu(struct gui_window *g,
        selectmenuhook.h_SubEntry = NULL;
        selectmenuhook.h_Data = g;
 
-       g->shared->control = control;
+       ami_gui_get_gui_window_2(g)->control = control;
 
        selectmenuobj = PMMENU(form_control_get_name(control)),
                         PMA_MenuHandler, &selectmenuhook, End;
@@ -166,9 +166,9 @@ void gui_create_form_select_menu(struct gui_window *g,
                ~0);
        }
 
-       ami_set_pointer(g->shared, GUI_POINTER_DEFAULT, false); // Clear the 
menu-style pointer
+       ami_set_pointer(ami_gui_get_gui_window_2(g), GUI_POINTER_DEFAULT, 
false); // Clear the menu-style pointer
 
-       IDoMethod(selectmenuobj, PM_OPEN, g->shared->win);
+       IDoMethod(selectmenuobj, PM_OPEN, ami_gui_get_gui_window_2(g)->win);
 
        /* PM_OPEN is blocking, so dispose menu immediately... */
        if(selectmenuobj) DisposeObject(selectmenuobj);
diff --git a/frontends/amiga/theme.c b/frontends/amiga/theme.c
index 63982c8..92686fd 100644
--- a/frontends/amiga/theme.c
+++ b/frontends/amiga/theme.c
@@ -215,7 +215,7 @@ void ami_get_theme_filename(char *filename, const char 
*themestring, bool protoc
 
 void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
 {
-       ami_set_pointer(g->shared, shape, true);
+       ami_set_pointer(ami_gui_get_gui_window_2(g), shape, true);
 }
 
 void ami_set_pointer(struct gui_window_2 *gwin, gui_pointer_shape shape, bool 
update)
@@ -429,16 +429,16 @@ void gui_window_start_throbber(struct gui_window *g)
        if(nsoption_bool(kiosk_mode)) return;
 
 #ifdef __amigaos4__
-       if(g->tab_node && (g->shared->tabs > 1))
+       if(ami_gui_get_tab_node(g) && (ami_gui_get_gui_window_2(g)->tabs > 1))
        {
-               SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, TRUE, TAG_DONE);
-               RefreshGadgets((APTR)g->shared->objects[GID_TABS],
-                       g->shared->win, NULL);
+               SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, 
TRUE, TAG_DONE);
+               
RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS],
+                       ami_gui_get_gui_window_2(g)->win, NULL);
        }
 #endif
 
-       g->throbbing = true;
-       if(g->shared->throbber_frame == 0) g->shared->throbber_frame = 1;
+       ami_gui_set_throbbing(g, true);
+       if(ami_gui_get_gui_window_2(g)->throbber_frame == 0) 
ami_gui_get_gui_window_2(g)->throbber_frame = 1;
        ami_throbber_redraw_schedule(throbber_update_interval, g);
 }
 
@@ -450,22 +450,22 @@ void gui_window_stop_throbber(struct gui_window *g)
        if(nsoption_bool(kiosk_mode)) return;
 
 #ifdef __amigaos4__
-       if(g->tab_node && (g->shared->tabs > 1))
+       if(ami_gui_get_tab_node(g) && (ami_gui_get_gui_window_2(g)->tabs > 1))
        {
-               SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, FALSE, TAG_DONE);
-               RefreshGadgets((APTR)g->shared->objects[GID_TABS],
-                       g->shared->win, NULL);
+               SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, 
FALSE, TAG_DONE);
+               
RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS],
+                       ami_gui_get_gui_window_2(g)->win, NULL);
        }
 #endif
 
-       if(g == g->shared->gw) {
-               if(ami_gui_get_space_box(g->shared->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
+       if(g == ami_gui_get_gui_window_2(g)->gw) {
+               
if(ami_gui_get_space_box(ami_gui_get_gui_window_2(g)->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
                        amiga_warn_user("NoMemory", "");
                        return;
                }
 
                if(throbber != NULL) {
-                       BltBitMapRastPort(throbber, 0, 0, g->shared->win->RPort,
+                       BltBitMapRastPort(throbber, 0, 0, 
ami_gui_get_gui_window_2(g)->win->RPort,
                                bbox->Left, bbox->Top, 
                                ami_theme_throbber_get_width(), 
ami_theme_throbber_get_height(),
                                0x0C0);
@@ -473,7 +473,7 @@ void gui_window_stop_throbber(struct gui_window *g)
                ami_gui_free_space_box(bbox);
        }
 
-       g->throbbing = false;
+       ami_gui_set_throbbing(g, false);
        ami_throbber_redraw_schedule(-1, g);
 }
 
@@ -484,17 +484,17 @@ static void ami_throbber_update(void *p)
        int frame = 0;
 
        if(!g) return;
-       if(!g->shared->objects[GID_THROBBER]) return;
+       if(!ami_gui_get_gui_window_2(g)->objects[GID_THROBBER]) return;
 
-       if(g->throbbing == true) {
-               frame = g->shared->throbber_frame;
-               g->shared->throbber_frame++;
-               if(g->shared->throbber_frame > (throbber_frames-1))
-                       g->shared->throbber_frame=1;
+       if(ami_gui_get_throbbing(g) == true) {
+               frame = ami_gui_get_gui_window_2(g)->throbber_frame;
+               ami_gui_get_gui_window_2(g)->throbber_frame++;
+               if(ami_gui_get_gui_window_2(g)->throbber_frame > 
(throbber_frames-1))
+                       ami_gui_get_gui_window_2(g)->throbber_frame=1;
        }
 
-       if(g->shared->gw == g) {
-               if(ami_gui_get_space_box(g->shared->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
+       if(ami_gui_get_gui_window_2(g)->gw == g) {
+               
if(ami_gui_get_space_box(ami_gui_get_gui_window_2(g)->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
                        amiga_warn_user("NoMemory", "");
                        return;
                }
@@ -508,14 +508,14 @@ static void ami_throbber_update(void *p)
                                                BLITA_Width, 
ami_theme_throbber_get_width(),
                                                BLITA_Height, 
ami_theme_throbber_get_height(),
                                                BLITA_Source, throbber,
-                                               BLITA_Dest, 
g->shared->win->RPort,
+                                               BLITA_Dest, 
ami_gui_get_gui_window_2(g)->win->RPort,
                                                BLITA_SrcType, BLITT_BITMAP,
                                                BLITA_DestType, BLITT_RASTPORT,
                                        //      BLITA_UseSrcAlpha, TRUE,
                                        TAG_DONE);
 #else
                        BltBitMapRastPort(throbber, 
ami_theme_throbber_get_width() * frame,
-                               0, g->shared->win->RPort,
+                               0, ami_gui_get_gui_window_2(g)->win->RPort,
                                bbox->Left, bbox->Top,
                                ami_theme_throbber_get_width(), 
ami_theme_throbber_get_height(),
                                0xC0);


-----------------------------------------------------------------------

Summary of changes:
 frontends/amiga/arexx.c         |   46 +++++++--------
 frontends/amiga/clipboard.c     |   20 +++----
 frontends/amiga/ctxmenu.c       |   45 ++++++++-------
 frontends/amiga/download.c      |   18 +++---
 frontends/amiga/drag.c          |    8 +--
 frontends/amiga/file.c          |    5 +-
 frontends/amiga/gui.c           |  114 ++++++++++++++++++++++++++++++++++++-
 frontends/amiga/gui.h           |   93 ++++++++++++++++++++++--------
 frontends/amiga/gui_menu.c      |  120 +++++++++++++++++++++------------------
 frontends/amiga/gui_menu.h      |    5 ++
 frontends/amiga/gui_options.c   |    2 +-
 frontends/amiga/history.c       |    2 +-
 frontends/amiga/history_local.c |   10 ++--
 frontends/amiga/hotlist.c       |    2 +-
 frontends/amiga/misc.c          |    4 +-
 frontends/amiga/print.c         |    2 +-
 frontends/amiga/search.c        |   22 +++----
 frontends/amiga/selectmenu.c    |    8 +--
 frontends/amiga/theme.c         |   50 ++++++++--------
 19 files changed, 376 insertions(+), 200 deletions(-)

diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index 5be8a4f..b2e2ac8 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -226,7 +226,7 @@ static int ami_find_tab_bw(struct gui_window_2 *gwin, 
struct browser_window *bw)
                GetClickTabNodeAttrs(ctab,
                                                        TNA_UserData, &tgw,
                                                        TAG_DONE);
-               if(tgw->bw == bw) return tabs;
+               if(ami_gui_get_browser_window(tgw) == bw) return tabs;
        } while((ctab=ntab));
 
        return 0;
@@ -281,8 +281,8 @@ RXHOOKF(rx_open)
                dln->filename = strdup((char *)cmd->ac_ArgList[3]);
                dln->node.ln_Name = strdup((char *)cmd->ac_ArgList[0]);
                dln->node.ln_Type = NT_USER;
-               AddTail(&gw->dllist, (struct Node *)dln);
-               browser_window_navigate(gw->bw,
+               AddTail(ami_gui_get_download_list(gw), (struct Node *)dln);
+               browser_window_navigate(ami_gui_get_browser_window(gw),
                                url,
                                NULL,
                                BW_NAVIGATE_DOWNLOAD,
@@ -303,11 +303,11 @@ RXHOOKF(rx_open)
                                      BW_CREATE_TAB,
                                      url,
                                      NULL,
-                                     gw->bw,
+                                     ami_gui_get_browser_window(gw),
                                      NULL);
 
                        if(cmd->ac_ArgList[6]) {
-                               ami_gui_switch_to_new_tab(gw->shared);
+                               
ami_gui_switch_to_new_tab(ami_gui_get_gui_window_2(gw));
                        }
                }
        }
@@ -323,7 +323,7 @@ RXHOOKF(rx_open)
        {
                if(gw)
                {
-                       browser_window_navigate(gw->bw,
+                       browser_window_navigate(ami_gui_get_browser_window(gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -355,23 +355,23 @@ RXHOOKF(rx_save)
 
        if(!gw) return;
 
-       ami_set_pointer(gw->shared, GUI_POINTER_WAIT, false);
+       ami_set_pointer(ami_gui_get_gui_window_2(gw), GUI_POINTER_WAIT, false);
                                        
        if((fh = FOpen((char *)cmd->ac_ArgList[0], MODE_NEWFILE, 0)))
        {
                const uint8_t *source_data;
                size_t source_size;
-               struct hlcache_handle *h = browser_window_get_content(gw->bw);
+               struct hlcache_handle *h = 
browser_window_get_content(ami_gui_get_browser_window(gw));
                source_data = content_get_source_data(h, &source_size);
                if (source_data != NULL) {
                        FWrite(fh, source_data, 1, source_size);
                }
 
                FClose(fh);
-               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_access_url(gw->bw)));
+               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_access_url(ami_gui_get_browser_window(gw))));
        }
 
-       ami_reset_pointer(gw->shared);
+       ami_reset_pointer(ami_gui_get_gui_window_2(gw));
 }
 
 RXHOOKF(rx_quit)
@@ -395,9 +395,9 @@ RXHOOKF(rx_geturl)
        if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
 
-       if(gw && gw->bw)
+       if(gw && ami_gui_get_browser_window(gw))
        {
-               strcpy(result, nsurl_access(browser_window_access_url(gw->bw)));
+               strcpy(result, 
nsurl_access(browser_window_access_url(ami_gui_get_browser_window(gw))));
        }
        else
        {
@@ -418,10 +418,10 @@ RXHOOKF(rx_gettitle)
 
        if(gw)
        {
-               if(gw->shared->tabs > 1)
-                       strcpy(result, gw->tabtitle);
+               if(ami_gui_get_gui_window_2(gw)->tabs > 1)
+                       strcpy(result, ami_gui_get_tab_title(gw));
                else
-                       strcpy(result, gw->shared->wintitle);
+                       strcpy(result, ami_gui_get_gui_window_2(gw)->wintitle);
        }
        else
        {
@@ -522,7 +522,7 @@ RXHOOKF(rx_back)
        if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
 
-       if(gw) ami_gui_history(gw->shared, true);
+       if(gw) ami_gui_history(ami_gui_get_gui_window_2(gw), true);
 }
 
 RXHOOKF(rx_forward)
@@ -534,7 +534,7 @@ RXHOOKF(rx_forward)
        if((cmd->ac_ArgList[0]) && (cmd->ac_ArgList[1]))
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
 
-       if(gw) ami_gui_history(gw->shared, false);
+       if(gw) ami_gui_history(ami_gui_get_gui_window_2(gw), false);
 
 }
 
@@ -553,7 +553,7 @@ RXHOOKF(rx_home)
        if (nsurl_create(nsoption_charp(homepage_url), &url) != NSERROR_OK) {
                amiga_warn_user("NoMemory", 0);
        } else {
-               browser_window_navigate(gw->bw,
+               browser_window_navigate(ami_gui_get_browser_window(gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -577,11 +577,11 @@ RXHOOKF(rx_reload)
        {
                if(cmd->ac_ArgList[0]) /* FORCE */
                {
-                       browser_window_reload(gw->bw, true);
+                       browser_window_reload(ami_gui_get_browser_window(gw), 
true);
                }
                else
                {
-                       browser_window_reload(gw->bw, false);
+                       browser_window_reload(ami_gui_get_browser_window(gw), 
false);
                }
        }
 }
@@ -636,7 +636,7 @@ RXHOOKF(rx_active)
 
        if(cmd->ac_ArgList[0])
        {
-               tab = ami_find_tab_bw(gwin, gw->bw);
+               tab = ami_find_tab_bw(gwin, ami_gui_get_browser_window(gw));
        }
 
        if(cmd->ac_ArgList[0]) sprintf(result, "%d", tab);
@@ -654,11 +654,11 @@ RXHOOKF(rx_close)
                gw = ami_find_tab(*(ULONG *)cmd->ac_ArgList[0], *(ULONG 
*)cmd->ac_ArgList[1]);
        else if(cmd->ac_ArgList[0])
        {
-               ami_gui_close_window(gw->shared);
+               ami_gui_close_window(ami_gui_get_gui_window_2(gw));
                return;
        }
 
-       if(gw) browser_window_destroy(gw->bw);
+       if(gw) browser_window_destroy(ami_gui_get_browser_window(gw));
 }
 
 RXHOOKF(rx_hotlist)
diff --git a/frontends/amiga/clipboard.c b/frontends/amiga/clipboard.c
index 79dda39..d0372c2 100644
--- a/frontends/amiga/clipboard.c
+++ b/frontends/amiga/clipboard.c
@@ -86,14 +86,14 @@ void ami_clipboard_free(void)
 void gui_start_selection(struct gui_window *g)
 {
        if(!g) return;
-       if(!g->shared->win) return;
+       if(!ami_gui_get_window(g)) return;
        if(nsoption_bool(kiosk_mode) == true) return;
 
-       ami_gui_menu_set_disabled(g->shared->win, g->shared->imenu, M_COPY, 
false);
-       ami_gui_menu_set_disabled(g->shared->win, g->shared->imenu, M_CLEAR, 
false);
+       ami_gui_menu_set_disabled(ami_gui_get_window(g), ami_gui_get_menu(g), 
M_COPY, false);
+       ami_gui_menu_set_disabled(ami_gui_get_window(g), ami_gui_get_menu(g), 
M_CLEAR, false);
 
-       if (browser_window_get_editor_flags(g->bw) & BW_EDITOR_CAN_CUT)
-               ami_gui_menu_set_disabled(g->shared->win, g->shared->imenu, 
M_CUT, false);
+       if (browser_window_get_editor_flags(ami_gui_get_browser_window(g)) & 
BW_EDITOR_CAN_CUT)
+               ami_gui_menu_set_disabled(ami_gui_get_window(g), 
ami_gui_get_menu(g), M_CUT, false);
 }
 
 static char *ami_clipboard_cat_collection(struct CollectionItem *ci, LONG 
codeset, size_t *text_length)
@@ -287,9 +287,9 @@ void ami_drag_selection(struct gui_window *g)
        {
                iffh = ami_clipboard_init_internal(1);
 
-               browser_window_key_press(g->bw, NS_KEY_COPY_SELECTION);
-               browser_window_mouse_click(gwin->gw->bw, BROWSER_MOUSE_PRESS_1, 
x, y);
-               browser_window_key_press(gwin->gw->bw, NS_KEY_PASTE);
+               browser_window_key_press(ami_gui_get_browser_window(g), 
NS_KEY_COPY_SELECTION);
+               
browser_window_mouse_click(ami_gui_get_browser_window(gwin->gw), 
BROWSER_MOUSE_PRESS_1, x, y);
+               browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_PASTE);
 
                ami_clipboard_free_internal(iffh);
                iffh = old_iffh;
@@ -301,7 +301,7 @@ void ami_drag_selection(struct gui_window *g)
 
                if(ami_gadget_hit(gwin->objects[GID_URL], x, y))
                {
-                       if((sel = browser_window_get_selection(g->bw)))
+                       if((sel = 
browser_window_get_selection(ami_gui_get_browser_window(g))))
                        {
                                utf8text = ami_utf8_easy(sel);
                                RefreshSetGadgetAttrs((struct Gadget 
*)gwin->objects[GID_URL],
@@ -312,7 +312,7 @@ void ami_drag_selection(struct gui_window *g)
                }
                else if(ami_gadget_hit(gwin->objects[GID_SEARCHSTRING], x, y))
                {
-                       if((sel = browser_window_get_selection(g->bw)))
+                       if((sel = 
browser_window_get_selection(ami_gui_get_browser_window(g))))
                        {
                                utf8text = ami_utf8_easy(sel);
                                RefreshSetGadgetAttrs((struct Gadget 
*)gwin->objects[GID_SEARCHSTRING],
diff --git a/frontends/amiga/ctxmenu.c b/frontends/amiga/ctxmenu.c
index f81e159..f0a2a20 100644
--- a/frontends/amiga/ctxmenu.c
+++ b/frontends/amiga/ctxmenu.c
@@ -107,8 +107,8 @@ HOOKF(void, ami_ctxmenu_item_selcopy, APTR, window, struct 
IntuiMessage *)
 {
        struct gui_window_2 *gwin = (struct gui_window_2 *)hook->h_Data;
 
-       browser_window_key_press(gwin->gw->bw, NS_KEY_COPY_SELECTION);
-       browser_window_key_press(gwin->gw->bw, NS_KEY_CLEAR_SELECTION);
+       browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_COPY_SELECTION);
+       browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_CLEAR_SELECTION);
 }
 
 HOOKF(void, ami_ctxmenu_item_websearch, APTR, window, struct IntuiMessage *)
@@ -117,11 +117,11 @@ HOOKF(void, ami_ctxmenu_item_websearch, APTR, window, 
struct IntuiMessage *)
        nsurl *url;
 
        struct gui_window_2 *gwin = (struct gui_window_2 *)hook->h_Data;
-       char *sel = browser_window_get_selection(gwin->gw->bw);
+       char *sel = 
browser_window_get_selection(ami_gui_get_browser_window(gwin->gw));
 
        ret = search_web_omni(sel, SEARCH_WEB_OMNI_SEARCHONLY, &url);
        if (ret == NSERROR_OK) {
-                       browser_window_navigate(gwin->gw->bw,
+                       
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -146,8 +146,8 @@ HOOKF(void, ami_ctxmenu_item_urlopentab, APTR, window, 
struct IntuiMessage *)
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
        nserror error = browser_window_create(BW_CREATE_CLONE | 
BW_CREATE_HISTORY | BW_CREATE_TAB,
                                                                      url,
-                                                                     
browser_window_access_url(gwin->gw->bw),
-                                                                     
gwin->gw->bw,
+                                                                     
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
+                                                                     
ami_gui_get_browser_window(gwin->gw),
                                                                      &bw);
 
        if (error != NSERROR_OK)
@@ -163,8 +163,8 @@ HOOKF(void, ami_ctxmenu_item_urlopenwin, APTR, window, 
struct IntuiMessage *)
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
        nserror error = browser_window_create(BW_CREATE_CLONE | 
BW_CREATE_HISTORY,
                                                                      url,
-                                                                     
browser_window_access_url(gwin->gw->bw),
-                                                                     
gwin->gw->bw,
+                                                                     
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
+                                                                     
ami_gui_get_browser_window(gwin->gw),
                                                                      &bw);
 
        if (error != NSERROR_OK)
@@ -178,9 +178,9 @@ HOOKF(void, ami_ctxmenu_item_urldownload, APTR, window, 
struct IntuiMessage *)
 
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_navigate(gwin->gw->bw,
+       browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                url,
-               browser_window_access_url(gwin->gw->bw),
+               browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
                BW_NAVIGATE_DOWNLOAD,
                NULL,
                NULL,
@@ -198,9 +198,9 @@ HOOKF(void, ami_ctxmenu_item_objshow, APTR, window, struct 
IntuiMessage *)
        struct gui_window_2 *gwin;
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_navigate(gwin->gw->bw,
+       browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_access_url(gwin->gw->bw),
+                                                       
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
@@ -238,9 +238,9 @@ HOOKF(void, ami_ctxmenu_item_frameshow, APTR, window, 
struct IntuiMessage *)
        struct gui_window_2 *gwin;
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_navigate(gwin->gw->bw,
+       browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_access_url(gwin->gw->bw),
+                                                       
browser_window_access_url(ami_gui_get_browser_window(gwin->gw)),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
@@ -271,7 +271,8 @@ HOOKF(void, ami_ctxmenu_item_history, APTR, window, struct 
IntuiMessage *)
 
        GetAttr(WINDOW_UserData, (Object *)window, (ULONG *)&gwin);
 
-       browser_window_history_go(gwin->gw->bw, (struct history_entry 
*)hook->h_Data, false);           
+       browser_window_history_go(ami_gui_get_browser_window(gwin->gw),
+               (struct history_entry *)hook->h_Data, false);           
 }
 
 
@@ -300,7 +301,7 @@ static uint32 ami_ctxmenu_hook_func(struct Hook *hook, 
struct Window *window, st
        Object *root_menu;
        bool ctxmenu_has_content = false;
        struct gui_window_2 *gwin = hook->h_Data;
-       struct hlcache_handle *cc = browser_window_get_content(gwin->gw->bw);
+       struct hlcache_handle *cc = 
browser_window_get_content(ami_gui_get_browser_window(gwin->gw));
        struct browser_window_features ccdata;
        int mx = window->MouseX;
        int my = window->MouseY;
@@ -328,11 +329,11 @@ static uint32 ami_ctxmenu_hook_func(struct Hook *hook, 
struct Window *window, st
                return 0;
        }
 
-       browser_window_get_features(gwin->gw->bw, x, y, &ccdata);
+       browser_window_get_features(ami_gui_get_browser_window(gwin->gw), x, y, 
&ccdata);
 
-       if((browser_window_can_select(gwin->gw->bw)) &&
-               ((browser_window_get_editor_flags(gwin->gw->bw) & 
BW_EDITOR_CAN_COPY)) &&
-               (sel = browser_window_get_selection(gwin->gw->bw))) {
+       if((browser_window_can_select(ami_gui_get_browser_window(gwin->gw))) &&
+               
((browser_window_get_editor_flags(ami_gui_get_browser_window(gwin->gw)) & 
BW_EDITOR_CAN_COPY)) &&
+               (sel = 
browser_window_get_selection(ami_gui_get_browser_window(gwin->gw)))) {
 
                ami_ctxmenu_add_item(root_menu, AMI_CTX_ID_SELCOPY, gwin);
                ami_ctxmenu_add_item(root_menu, AMI_CTX_ID_WEBSEARCH, gwin);
@@ -567,9 +568,9 @@ struct Menu *ami_ctxmenu_history_create(int direction, 
struct gui_window_2 *gwin
                gwin->temp = 0;
 
                if(direction == AMI_CTXMENU_HISTORY_BACK) {
-                       browser_window_history_enumerate_back(gwin->gw->bw, 
ami_ctxmenu_history_back, gwin);
+                       
browser_window_history_enumerate_back(ami_gui_get_browser_window(gwin->gw), 
ami_ctxmenu_history_back, gwin);
                } else {
-                       browser_window_history_enumerate_forward(gwin->gw->bw, 
ami_ctxmenu_history_forward, gwin);
+                       
browser_window_history_enumerate_forward(ami_gui_get_browser_window(gwin->gw), 
ami_ctxmenu_history_forward, gwin);
                }
        }
 
diff --git a/frontends/amiga/download.c b/frontends/amiga/download.c
index 895d929..ed7a166 100644
--- a/frontends/amiga/download.c
+++ b/frontends/amiga/download.c
@@ -132,8 +132,8 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
 
        dw = calloc(1, sizeof(struct gui_download_window));
 
-       if(gui && (!IsListEmpty(&gui->dllist)) && (dw->dln = (struct dlnode 
*)FindName(&gui->dllist,url)))
-       {
+       if(gui && (!IsListEmpty(ami_gui_get_download_list(gui)) &&
+               (dw->dln = (struct dlnode 
*)FindName(ami_gui_get_download_list(gui), url)))) {
                strcpy(dw->fname, dw->dln->filename);
                free(dw->dln->node.ln_Name);
                dw->dln->node.ln_Name = NULL;
@@ -141,7 +141,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
        else
        {
                if(AslRequestTags(savereq,
-                       ASLFR_Window, gui->shared->win,
+                       ASLFR_Window, ami_gui_get_window(gui),
                        ASLFR_SleepWindow, TRUE,
                        ASLFR_TitleText, messages_get("NetSurf"),
                        ASLFR_Screen, scrn,
@@ -150,7 +150,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
                {
                        strlcpy(dw->fname, savereq->fr_Drawer, 1024);
                        AddPart((STRPTR)&dw->fname,savereq->fr_File,1024);
-                       if(!ami_download_check_overwrite(dw->fname, 
gui->shared->win, total_size))
+                       if(!ami_download_check_overwrite(dw->fname, 
ami_gui_get_window(gui), total_size))
                        {
                                free(dw);
                                return NULL;
@@ -166,7 +166,7 @@ static struct gui_download_window 
*gui_download_window_create(download_context *
        if(dl_filename) ami_utf8_free(dl_filename);
        dw->size = total_size;
        dw->downloaded = 0;
-       if(gui) dw->bw = gui->bw;
+       if(gui) dw->bw = ami_gui_get_browser_window(gui);
        dw->url = url;
 
        va[0] = (APTR)dw->downloaded;
@@ -434,7 +434,7 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
        linkname = ASPrintf("Link_to_%s",FilePart(nsurl_access(url)));
 
        if(AslRequestTags(savereq,
-               ASLFR_Window, g->shared->win,
+               ASLFR_Window, ami_gui_get_window(g),
                ASLFR_SleepWindow, TRUE,
                ASLFR_TitleText,messages_get("NetSurf"),
                ASLFR_Screen,scrn,
@@ -444,9 +444,9 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
                strlcpy(fname, savereq->fr_Drawer, 1024);
                AddPart(fname,savereq->fr_File,1024);
 
-               ami_set_pointer(g->shared, GUI_POINTER_WAIT, false);
+               ami_set_pointer(ami_gui_get_gui_window_2(g), GUI_POINTER_WAIT, 
false);
 
-               if(ami_download_check_overwrite(fname, g->shared->win, 0))
+               if(ami_download_check_overwrite(fname, ami_gui_get_window(g), 
0))
                {
                        BPTR fh;
 
@@ -473,7 +473,7 @@ gui_window_save_link(struct gui_window *g, nsurl *url, 
const char *title)
                        }
                        FreeVec(linkname);
                }
-               ami_reset_pointer(g->shared);
+               ami_reset_pointer(ami_gui_get_gui_window_2(g));
        }
        return NSERROR_OK;
 }
diff --git a/frontends/amiga/drag.c b/frontends/amiga/drag.c
index 31ddc14..c022a9c 100644
--- a/frontends/amiga/drag.c
+++ b/frontends/amiga/drag.c
@@ -89,7 +89,7 @@ void gui_drag_save_object(struct gui_window *g, struct 
hlcache_handle *c,
                break;
        }
 
-       ami_drag_icon_show(g->shared->win, filetype);
+       ami_drag_icon_show(ami_gui_get_window(g), filetype);
 
        drag_save_data = c;
        drag_save_gui = g;
@@ -98,7 +98,7 @@ void gui_drag_save_object(struct gui_window *g, struct 
hlcache_handle *c,
 
 void gui_drag_save_selection(struct gui_window *g, const char *selection)
 {
-       ami_drag_icon_show(g->shared->win, "ascii");
+       ami_drag_icon_show(ami_gui_get_window(g), "ascii");
 
        ami_autoscroll = true;
        drag_save_data = g;
@@ -166,7 +166,7 @@ void ami_drag_save(struct Window *win)
                case GUI_SAVE_TEXT_SELECTION: // selection
                        AddPart(path,"netsurf_text_selection",1024);
                        struct gui_window *g = (struct gui_window *) 
drag_save_data;
-                       ami_file_save(AMINS_SAVE_SELECTION, path, win, NULL, 
NULL, g->bw);
+                       ami_file_save(AMINS_SAVE_SELECTION, path, win, NULL, 
NULL, ami_gui_get_browser_window(g));
                break;
 
                case GUI_SAVE_COMPLETE:
@@ -174,7 +174,7 @@ void ami_drag_save(struct Window *win)
                        struct hlcache_handle *c = drag_save_data;
 
                        AddPart(path, content_get_title(c), 1024);
-                       ami_file_save(AMINS_SAVE_COMPLETE, path, win, c, 
drag_save_gui->favicon, NULL);
+                       ami_file_save(AMINS_SAVE_COMPLETE, path, win, c, 
ami_gui_get_favicon(drag_save_gui), NULL);
                }
                break;
 
diff --git a/frontends/amiga/file.c b/frontends/amiga/file.c
index 845491c..40d7288 100644
--- a/frontends/amiga/file.c
+++ b/frontends/amiga/file.c
@@ -100,7 +100,7 @@ void ami_file_open(struct gui_window_2 *gwin)
                        if (netsurf_path_to_nsurl(temp, &url) != NSERROR_OK) {
                                amiga_warn_user("NoMemory", 0);
                        } else {
-                               browser_window_navigate(gwin->gw->bw,
+                               
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -267,7 +267,8 @@ void ami_file_save_req(int type, struct gui_window_2 *gwin,
                strlcpy(fname, savereq->fr_Drawer, 1024);
                AddPart(fname, savereq->fr_File, 1024);
 
-               ami_file_save(type, fname, gwin->win, object, 
gwin->gw->favicon, gwin->gw->bw);
+               ami_file_save(type, fname, gwin->win, object,
+                       ami_gui_get_favicon(gwin->gw), 
ami_gui_get_browser_window(gwin->gw));
        }
 
        if(fname) free(fname);
diff --git a/frontends/amiga/gui.c b/frontends/amiga/gui.c
index eabf8bb..ca0fda1 100644
--- a/frontends/amiga/gui.c
+++ b/frontends/amiga/gui.c
@@ -193,6 +193,29 @@
 
 extern struct gui_utf8_table *amiga_utf8_table;
 
+struct gui_window
+{
+       struct gui_window_2 *shared;
+       int tab;
+       struct Node *tab_node;
+       int c_x; /* Caret X posn */
+       int c_y; /* Caret Y posn */
+       int c_w; /* Caret width */
+       int c_h; /* Caret height */
+       int c_h_temp;
+       int scrollx;
+       int scrolly;
+       struct ami_history_local_window *hw;
+       struct List dllist;
+       struct hlcache_handle *favicon;
+       bool throbbing;
+       char *tabtitle;
+       APTR deferred_rects_pool;
+       struct MinList *deferred_rects;
+       struct browser_window *bw;
+       float scale;
+};
+
 struct ami_gui_tb_userdata {
        struct List *sblist;
        struct gui_window_2 *gw;
@@ -265,7 +288,89 @@ static void gui_window_place_caret(struct gui_window *g, 
int x, int y, int heigh
                nsoptions[NSOPTION_##OPTION].value.i = VALUE;   \
        nsoptions_default[NSOPTION_##OPTION].value.i = VALUE
 
+/* Function documented in gui.h */
+struct browser_window *ami_gui_get_browser_window(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->bw;
+}
+
+struct List *ami_gui_get_download_list(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return &gw->dllist;
+}
+
+struct gui_window_2 *ami_gui_get_gui_window_2(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->shared;
+}
+
+const char *ami_gui_get_tab_title(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return (const char *)gw->tabtitle;
+}
+
+struct Node *ami_gui_get_tab_node(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->tab_node;
+}
+
+struct hlcache_handle *ami_gui_get_favicon(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->favicon;
+}
+
+struct ami_history_local_window *ami_gui_get_history_window(struct gui_window 
*gw)
+{
+       assert(gw != NULL);
+       return gw->hw;
+}
+
+void ami_gui_set_history_window(struct gui_window *gw, struct 
ami_history_local_window *hw)
+{
+       assert(gw != NULL);
+       gw->hw = hw;
+}
+
+bool ami_gui_get_throbbing(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       return gw->throbbing;
+}
+
+void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing)
+{
+       assert(gw != NULL);
+       gw->throbbing = throbbing;
+}
 
+struct Window *ami_gui_get_window(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       assert(gw->shared != NULL);
+       return gw->shared->win;
+}
+
+struct Menu *ami_gui_get_menu(struct gui_window *gw)
+{
+       assert(gw != NULL);
+       assert(gw->shared != NULL);
+       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)
 {
@@ -2484,11 +2589,11 @@ static BOOL ami_gui_event(void *w)
                                                        break;
 
                                                        case RAWKEY_F9: // 
decrease scale
-                                                               
ami_gui_set_scale(gwin->gw, gwin->gw->scale - 0.1);
+                                                               
ami_gui_adjust_scale(gwin->gw, -0.1);
                                                        break;
 
                                                        case RAWKEY_F10: // 
increase scale
-                                                               
ami_gui_set_scale(gwin->gw, gwin->gw->scale + 0.1);
+                                                               
ami_gui_adjust_scale(gwin->gw, +0.1);
                                                        break;
                                                        
                                                        case RAWKEY_HELP: // 
help
@@ -3513,6 +3618,11 @@ void ami_gui_set_scale(struct gui_window *gw, float 
scale)
        browser_window_set_scale(gw->bw, scale, true);
 }
 
+void ami_gui_adjust_scale(struct gui_window *gw, float adjustment)
+{
+       ami_gui_set_scale(gw, gw->scale + adjustment);
+}
+
 void ami_gui_switch_to_new_tab(struct gui_window_2 *gwin)
 {
        if(nsoption_bool(new_tab_is_active) == true) return;
diff --git a/frontends/amiga/gui.h b/frontends/amiga/gui.h
index 62390ce..727b578 100644
--- a/frontends/amiga/gui.h
+++ b/frontends/amiga/gui.h
@@ -152,29 +152,6 @@ struct gui_window_2 {
        bool closed; /* Window has been closed (via menu) */
 };
 
-struct gui_window
-{
-       struct gui_window_2 *shared;
-       int tab;
-       struct Node *tab_node;
-       int c_x; /* Caret X posn */
-       int c_y; /* Caret Y posn */
-       int c_w; /* Caret width */
-       int c_h; /* Caret height */
-       int c_h_temp;
-       int scrollx;
-       int scrolly;
-       struct ami_history_local_window *hw;
-       struct List dllist;
-       struct hlcache_handle *favicon;
-       bool throbbing;
-       char *tabtitle;
-       APTR deferred_rects_pool;
-       struct MinList *deferred_rects;
-       struct browser_window *bw;
-       float scale;
-};
-
 extern struct MinList *window_list; /**\todo stop arexx.c poking about in here 
*/
 extern struct Screen *scrn;
 extern struct MsgPort *sport;
@@ -274,5 +251,75 @@ int ami_gui_get_quals(Object *win_obj);
 bool ami_gui_window_update_box_deferred_check(struct MinList *deferred_rects,
                                const struct rect *restrict new_rect, APTR 
mempool);
 
+/**
+ * Adjust scale by specified amount
+ */
+void ami_gui_adjust_scale(struct gui_window *gw, float adjustment);
+
+/**
+ * Get browser window from gui_window
+ */
+struct browser_window *ami_gui_get_browser_window(struct gui_window *gw);
+
+/**
+ * Get gui_window_2 from gui_window
+ */
+struct gui_window_2 *ami_gui_get_gui_window_2(struct gui_window *gw);
+
+/**
+ * Get download list from gui_window
+ */
+struct List *ami_gui_get_download_list(struct gui_window *gw);
+
+/**
+ * Get tab title from gui_window
+ */
+const char *ami_gui_get_tab_title(struct gui_window *gw);
+
+/**
+ * Get tab node from gui_window
+ */
+struct Node *ami_gui_get_tab_node(struct gui_window *gw);
+
+/**
+ * Get favicon from gui_window
+ */
+struct hlcache_handle *ami_gui_get_favicon(struct gui_window *gw);
+
+/**
+ * Get local history window from gui_window
+ */
+struct ami_history_local_window *ami_gui_get_history_window(struct gui_window 
*gw);
+
+/**
+ * Set local history window in gui_window
+ */
+void ami_gui_set_history_window(struct gui_window *gw, struct 
ami_history_local_window *hw);
+
+/**
+ * Get throbbing status from gui_window
+ */
+bool ami_gui_get_throbbing(struct gui_window *gw);
+
+/**
+ * Set throbbing status in gui_window
+ */
+void ami_gui_set_throbbing(struct gui_window *gw, bool throbbing);
+
+/**
+ * Get window from gui_window
+ */
+struct Window *ami_gui_get_window(struct gui_window *gw);
+
+/**
+ * Get imenu from gui_window
+ */
+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 6dbacf1..b86abcb 100644
--- a/frontends/amiga/gui_menu.c
+++ b/frontends/amiga/gui_menu.c
@@ -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_gui_get_browser_window(gwin->gw)));
 }
 
 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_gui_get_browser_window(gwin->gw));
 }
 
 HOOKF(void, ami_menu_item_project_closewin, 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_gui_get_browser_window(gwin->gw)));
        ami_reset_pointer(gwin);
 }
 
@@ -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_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw))) {
+               browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_COPY_SELECTION);
+               browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw)))))
 {
                /** @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_access_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_gui_get_browser_window(gwin->gw)));
+               ami_bitmap_set_title(bm, 
browser_window_get_title(ami_gui_get_browser_window(gwin->gw)));
                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_gui_get_browser_window(gwin->gw)),
 "svg") == true) {
+               
ami_easy_clipboard_svg(browser_window_get_content(ami_gui_get_browser_window(gwin->gw)));
        }
 #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_gui_get_browser_window(gwin->gw), 
NS_KEY_PASTE);
 }
 
 HOOKF(void, ami_menu_item_edit_selectall, APTR, window, struct IntuiMessage *)
@@ -285,7 +285,7 @@ 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);
+       browser_window_key_press(ami_gui_get_browser_window(gwin->gw), 
NS_KEY_SELECT_ALL);
        gui_start_selection(gwin->gw);
 }
 
@@ -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_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw), 
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_gui_get_browser_window(gwin->gw), 
NS_KEY_REDO);
 }
 
 HOOKF(void, ami_menu_item_browser_find, APTR, window, struct IntuiMessage *)
@@ -380,7 +380,7 @@ HOOKF(void, ami_menu_item_browser_scale_decrease, 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(gwin->gw, -0.1);
 }
 
 HOOKF(void, ami_menu_item_browser_scale_normal, APTR, window, struct 
IntuiMessage *)
@@ -396,7 +396,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(gwin->gw, +0.1);
 }
 
 HOOKF(void, ami_menu_item_browser_redraw, APTR, window, struct IntuiMessage *)
@@ -414,7 +414,7 @@ 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_gui_get_browser_window(gwin->gw);
 
        if (bw == NULL || browser_window_has_content(bw) == false)
                return;
@@ -436,7 +436,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_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
@@ -711,19 +711,19 @@ void ami_gui_menu_update_checked(struct gui_window_2 
*gwin)
 
 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 +731,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 +771,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);
                }
        }
 }
@@ -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 3490fe9..bffe978 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
 
diff --git a/frontends/amiga/gui_options.c b/frontends/amiga/gui_options.c
index fb214d0..7e302c3 100755
--- a/frontends/amiga/gui_options.c
+++ b/frontends/amiga/gui_options.c
@@ -2142,7 +2142,7 @@ static BOOL ami_gui_opts_event(void *w)
                                        case GID_OPTS_HOMEPAGE_CURRENT:
                                                if(cur_gw) 
RefreshSetGadgetAttrs((struct Gadget *)gow->objects[GID_OPTS_HOMEPAGE],
                                                        gow->win, NULL, 
STRINGA_TextVal,
-                                                       
nsurl_access(browser_window_access_url(cur_gw->bw)), TAG_DONE);
+                                                       
nsurl_access(browser_window_access_url(ami_gui_get_browser_window(cur_gw))), 
TAG_DONE);
                                        break;
 
                                        case GID_OPTS_HOMEPAGE_BLANK:
diff --git a/frontends/amiga/history.c b/frontends/amiga/history.c
index e724f3e..1b75ad4 100644
--- a/frontends/amiga/history.c
+++ b/frontends/amiga/history.c
@@ -203,7 +203,7 @@ ami_history_global_drag_end(struct ami_corewindow *ami_cw, 
int x, int y)
                DisplayBeep(scrn);
        } else if(url) {
                if((gwin = ami_window_at_pointer(AMINS_WINDOW))) {
-                       browser_window_navigate(gwin->gw->bw,
+                       
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
diff --git a/frontends/amiga/history_local.c b/frontends/amiga/history_local.c
index 3529ec7..95f422d 100644
--- a/frontends/amiga/history_local.c
+++ b/frontends/amiga/history_local.c
@@ -81,7 +81,7 @@ ami_history_local_destroy(struct ami_history_local_window 
*history_local_win)
 
        res = local_history_fini(history_local_win->session);
        if (res == NSERROR_OK) {
-               history_local_win->gw->hw = NULL;
+               ami_gui_set_history_window(history_local_win->gw, NULL);
                res = ami_corewindow_fini(&history_local_win->core); /* closes 
the window for us */
                history_local_window = NULL;
        }
@@ -253,8 +253,8 @@ nserror ami_history_local_present(struct gui_window *gw)
        if(history_local_window != NULL) {
                //windowtofront()
 
-               if (gw->hw != NULL) {
-                       res = local_history_set(gw->hw->session, gw->bw);
+               if (ami_gui_get_history_window(gw) != NULL) {
+                       res = 
local_history_set(ami_gui_get_history_window(gw)->session, 
ami_gui_get_browser_window(gw));
                        return res;
                }
 
@@ -295,7 +295,7 @@ nserror ami_history_local_present(struct gui_window *gw)
 
        res = local_history_init(ncwin->core.cb_table,
                                 (struct core_window *)ncwin,
-                                gw->bw,
+                                ami_gui_get_browser_window(gw),
                                 &ncwin->session);
        if (res != NSERROR_OK) {
                ami_utf8_free(ncwin->core.wintitle);
@@ -317,7 +317,7 @@ nserror ami_history_local_present(struct gui_window *gw)
 
        ncwin->gw = gw;
        history_local_window = ncwin;
-       gw->hw = ncwin;
+       ami_gui_set_history_window(gw, ncwin);
 
        return NSERROR_OK;
 }
diff --git a/frontends/amiga/hotlist.c b/frontends/amiga/hotlist.c
index c7efe91..7740d53 100644
--- a/frontends/amiga/hotlist.c
+++ b/frontends/amiga/hotlist.c
@@ -254,7 +254,7 @@ ami_hotlist_drag_end(struct ami_corewindow *ami_cw, int x, 
int y)
                DisplayBeep(scrn);
        } else if(url) {
                if((gwin = ami_window_at_pointer(AMINS_WINDOW))) {
-                       browser_window_navigate(gwin->gw->bw,
+                       
browser_window_navigate(ami_gui_get_browser_window(gwin->gw),
                                        url,
                                        NULL,
                                        BW_NAVIGATE_HISTORY,
diff --git a/frontends/amiga/misc.c b/frontends/amiga/misc.c
index 822d640..9bd8bfe 100755
--- a/frontends/amiga/misc.c
+++ b/frontends/amiga/misc.c
@@ -53,7 +53,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
                TDR_FormatString, message,
                TDR_GadgetString, messages_get("OK"),
                TDR_ImageType, type,
-               TDR_Window, cur_gw ? cur_gw->shared->win : NULL,
+               TDR_Window, cur_gw ? ami_gui_get_window(cur_gw) : NULL,
                TAG_DONE);
 #else
        struct EasyStruct easyreq = {
@@ -64,7 +64,7 @@ static LONG ami_misc_req(const char *message, uint32 type)
                messages_get("OK"),
        };
 
-       ret = EasyRequest(cur_gw ? cur_gw->shared->win : NULL, &easyreq, NULL);
+       ret = EasyRequest(cur_gw ? ami_gui_get_window(cur_gw) : NULL, &easyreq, 
NULL);
 #endif
        return ret;
 }
diff --git a/frontends/amiga/print.c b/frontends/amiga/print.c
index 4b48805..05f068b 100644
--- a/frontends/amiga/print.c
+++ b/frontends/amiga/print.c
@@ -407,7 +407,7 @@ static BOOL ami_print_event(void *w)
 
 void ami_print(struct hlcache_handle *c, int copies)
 {
-       float height;
+       double height;
        float scale = nsoption_int(print_scale) / 100.0;
 
        if(ami_print_info.msgport == NULL)
diff --git a/frontends/amiga/search.c b/frontends/amiga/search.c
index e633362..b210fd4 100755
--- a/frontends/amiga/search.c
+++ b/frontends/amiga/search.c
@@ -143,10 +143,10 @@ void ami_search_open(struct gui_window *gwin)
 
        if(fwin)
        {
-               browser_window_search_clear(fwin->gwin->bw);
-               fwin->gwin->shared->searchwin = NULL;
+               
browser_window_search_clear(ami_gui_get_browser_window(fwin->gwin));
+               ami_gui_get_gui_window_2(fwin->gwin)->searchwin = NULL;
                fwin->gwin = gwin;
-               gwin->shared->searchwin = fwin;
+               ami_gui_get_gui_window_2(fwin->gwin)->searchwin = fwin;
                WindowToFront(fwin->win);
                ActivateWindow(fwin->win);
                return;
@@ -220,7 +220,7 @@ void ami_search_open(struct gui_window *gwin)
        fwin->win = (struct Window *)RA_OpenWindow(fwin->objects[OID_S_MAIN]);
        fwin->gwin = gwin;
        ami_gui_win_list_add(fwin, AMINS_FINDWINDOW, &ami_search_table);
-       gwin->shared->searchwin = fwin;
+       ami_gui_get_gui_window_2(fwin->gwin)->searchwin = fwin;
        
        ActivateLayoutGadget((struct Gadget *)fwin->objects[GID_S_MAIN], 
fwin->win,
                        NULL, (ULONG)fwin->objects[GID_S_SEARCHSTRING]);
@@ -228,8 +228,8 @@ void ami_search_open(struct gui_window *gwin)
 
 void ami_search_close(void)
 {
-       browser_window_search_clear(fwin->gwin->bw);
-       fwin->gwin->shared->searchwin = NULL;
+       browser_window_search_clear(ami_gui_get_browser_window(fwin->gwin));
+       ami_gui_get_gui_window_2(fwin->gwin)->searchwin = NULL;
        DisposeObject(fwin->objects[OID_S_MAIN]);
 
        /* Free local charset version of messages */
@@ -256,7 +256,7 @@ static BOOL ami_search_event(void *w)
                switch(result & WMHI_GADGETMASK)
                {
                        case GID_S_SEARCHSTRING:
-                               browser_window_search_clear(fwin->gwin->bw);
+                               
browser_window_search_clear(ami_gui_get_browser_window(fwin->gwin));
                                                
                                RefreshSetGadgetAttrs((struct Gadget 
*)fwin->objects[GID_S_PREV],
                                        fwin->win, NULL,
@@ -275,10 +275,10 @@ static BOOL ami_search_event(void *w)
                                flags = SEARCH_FLAG_FORWARDS |
                                        ami_search_flags();
                                browser_window_search(
-                                               fwin->gwin->bw,
+                                               
ami_gui_get_browser_window(fwin->gwin),
                                                NULL,
                                                flags, ami_search_string());
-                               ActivateWindow(fwin->gwin->shared->win);
+                               ActivateWindow(ami_gui_get_window(fwin->gwin));
                        break;
 
                        case GID_S_PREV:
@@ -286,10 +286,10 @@ static BOOL ami_search_event(void *w)
                                flags = ~SEARCH_FLAG_FORWARDS &
                                        ami_search_flags();
                                browser_window_search(
-                                               fwin->gwin->bw,
+                                               
ami_gui_get_browser_window(fwin->gwin),
                                                NULL,
                                                flags, ami_search_string());
-                               ActivateWindow(fwin->gwin->shared->win);
+                               ActivateWindow(ami_gui_get_window(fwin->gwin));
                        break;
                }
                break;
diff --git a/frontends/amiga/selectmenu.c b/frontends/amiga/selectmenu.c
index 8a86141..06f43cc 100644
--- a/frontends/amiga/selectmenu.c
+++ b/frontends/amiga/selectmenu.c
@@ -74,7 +74,7 @@ HOOKF(uint32, ami_popup_hook, Object *, item, APTR)
        struct gui_window *gwin = hook->h_Data;
 
        if(GetAttr(PMIA_ID, item, &itemid)) {
-               form_select_process_selection(gwin->shared->control, itemid);
+               
form_select_process_selection(ami_gui_get_gui_window_2(gwin)->control, itemid);
        }
 
        return itemid;
@@ -111,7 +111,7 @@ void gui_create_form_select_menu(struct gui_window *g,
        selectmenuhook.h_SubEntry = NULL;
        selectmenuhook.h_Data = g;
 
-       g->shared->control = control;
+       ami_gui_get_gui_window_2(g)->control = control;
 
        selectmenuobj = PMMENU(form_control_get_name(control)),
                         PMA_MenuHandler, &selectmenuhook, End;
@@ -166,9 +166,9 @@ void gui_create_form_select_menu(struct gui_window *g,
                ~0);
        }
 
-       ami_set_pointer(g->shared, GUI_POINTER_DEFAULT, false); // Clear the 
menu-style pointer
+       ami_set_pointer(ami_gui_get_gui_window_2(g), GUI_POINTER_DEFAULT, 
false); // Clear the menu-style pointer
 
-       IDoMethod(selectmenuobj, PM_OPEN, g->shared->win);
+       IDoMethod(selectmenuobj, PM_OPEN, ami_gui_get_window(g));
 
        /* PM_OPEN is blocking, so dispose menu immediately... */
        if(selectmenuobj) DisposeObject(selectmenuobj);
diff --git a/frontends/amiga/theme.c b/frontends/amiga/theme.c
index 63982c8..8e2f470 100644
--- a/frontends/amiga/theme.c
+++ b/frontends/amiga/theme.c
@@ -215,7 +215,7 @@ void ami_get_theme_filename(char *filename, const char 
*themestring, bool protoc
 
 void gui_window_set_pointer(struct gui_window *g, gui_pointer_shape shape)
 {
-       ami_set_pointer(g->shared, shape, true);
+       ami_set_pointer(ami_gui_get_gui_window_2(g), shape, true);
 }
 
 void ami_set_pointer(struct gui_window_2 *gwin, gui_pointer_shape shape, bool 
update)
@@ -429,16 +429,16 @@ void gui_window_start_throbber(struct gui_window *g)
        if(nsoption_bool(kiosk_mode)) return;
 
 #ifdef __amigaos4__
-       if(g->tab_node && (g->shared->tabs > 1))
+       if(ami_gui_get_tab_node(g) && (ami_gui_get_gui_window_2(g)->tabs > 1))
        {
-               SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, TRUE, TAG_DONE);
-               RefreshGadgets((APTR)g->shared->objects[GID_TABS],
-                       g->shared->win, NULL);
+               SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, 
TRUE, TAG_DONE);
+               
RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS],
+                       ami_gui_get_window(g), NULL);
        }
 #endif
 
-       g->throbbing = true;
-       if(g->shared->throbber_frame == 0) g->shared->throbber_frame = 1;
+       ami_gui_set_throbbing(g, true);
+       if(ami_gui_get_gui_window_2(g)->throbber_frame == 0) 
ami_gui_get_gui_window_2(g)->throbber_frame = 1;
        ami_throbber_redraw_schedule(throbber_update_interval, g);
 }
 
@@ -450,22 +450,22 @@ void gui_window_stop_throbber(struct gui_window *g)
        if(nsoption_bool(kiosk_mode)) return;
 
 #ifdef __amigaos4__
-       if(g->tab_node && (g->shared->tabs > 1))
+       if(ami_gui_get_tab_node(g) && (ami_gui_get_gui_window_2(g)->tabs > 1))
        {
-               SetClickTabNodeAttrs(g->tab_node, TNA_Flagged, FALSE, TAG_DONE);
-               RefreshGadgets((APTR)g->shared->objects[GID_TABS],
-                       g->shared->win, NULL);
+               SetClickTabNodeAttrs(ami_gui_get_tab_node(g), TNA_Flagged, 
FALSE, TAG_DONE);
+               
RefreshGadgets((APTR)ami_gui_get_gui_window_2(g)->objects[GID_TABS],
+                       ami_gui_get_window(g), NULL);
        }
 #endif
 
-       if(g == g->shared->gw) {
-               if(ami_gui_get_space_box(g->shared->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
+       if(g == ami_gui_get_gui_window_2(g)->gw) {
+               
if(ami_gui_get_space_box(ami_gui_get_gui_window_2(g)->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
                        amiga_warn_user("NoMemory", "");
                        return;
                }
 
                if(throbber != NULL) {
-                       BltBitMapRastPort(throbber, 0, 0, g->shared->win->RPort,
+                       BltBitMapRastPort(throbber, 0, 0, 
ami_gui_get_window(g)->RPort,
                                bbox->Left, bbox->Top, 
                                ami_theme_throbber_get_width(), 
ami_theme_throbber_get_height(),
                                0x0C0);
@@ -473,7 +473,7 @@ void gui_window_stop_throbber(struct gui_window *g)
                ami_gui_free_space_box(bbox);
        }
 
-       g->throbbing = false;
+       ami_gui_set_throbbing(g, false);
        ami_throbber_redraw_schedule(-1, g);
 }
 
@@ -484,17 +484,17 @@ static void ami_throbber_update(void *p)
        int frame = 0;
 
        if(!g) return;
-       if(!g->shared->objects[GID_THROBBER]) return;
+       if(!ami_gui_get_gui_window_2(g)->objects[GID_THROBBER]) return;
 
-       if(g->throbbing == true) {
-               frame = g->shared->throbber_frame;
-               g->shared->throbber_frame++;
-               if(g->shared->throbber_frame > (throbber_frames-1))
-                       g->shared->throbber_frame=1;
+       if(ami_gui_get_throbbing(g) == true) {
+               frame = ami_gui_get_gui_window_2(g)->throbber_frame;
+               ami_gui_get_gui_window_2(g)->throbber_frame++;
+               if(ami_gui_get_gui_window_2(g)->throbber_frame > 
(throbber_frames-1))
+                       ami_gui_get_gui_window_2(g)->throbber_frame=1;
        }
 
-       if(g->shared->gw == g) {
-               if(ami_gui_get_space_box(g->shared->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
+       if(ami_gui_get_gui_window_2(g)->gw == g) {
+               
if(ami_gui_get_space_box(ami_gui_get_gui_window_2(g)->objects[GID_THROBBER], 
&bbox) != NSERROR_OK) {
                        amiga_warn_user("NoMemory", "");
                        return;
                }
@@ -508,14 +508,14 @@ static void ami_throbber_update(void *p)
                                                BLITA_Width, 
ami_theme_throbber_get_width(),
                                                BLITA_Height, 
ami_theme_throbber_get_height(),
                                                BLITA_Source, throbber,
-                                               BLITA_Dest, 
g->shared->win->RPort,
+                                               BLITA_Dest, 
ami_gui_get_window(g)->RPort,
                                                BLITA_SrcType, BLITT_BITMAP,
                                                BLITA_DestType, BLITT_RASTPORT,
                                        //      BLITA_UseSrcAlpha, TRUE,
                                        TAG_DONE);
 #else
                        BltBitMapRastPort(throbber, 
ami_theme_throbber_get_width() * frame,
-                               0, g->shared->win->RPort,
+                               0, ami_gui_get_window(g)->RPort,
                                bbox->Left, bbox->Top,
                                ami_theme_throbber_get_width(), 
ami_theme_throbber_get_height(),
                                0xC0);


-- 
NetSurf Browser

_______________________________________________
netsurf-commits mailing list
[email protected]
http://listmaster.pepperfish.net/cgi-bin/mailman/listinfo/netsurf-commits-netsurf-browser.org

Reply via email to