Gitweb links:

...log 
http://git.netsurf-browser.org/netsurf.git/shortlog/57a6328b141f1f46099ee3c9379b43205c8771d0
...commit 
http://git.netsurf-browser.org/netsurf.git/commit/57a6328b141f1f46099ee3c9379b43205c8771d0
...tree 
http://git.netsurf-browser.org/netsurf.git/tree/57a6328b141f1f46099ee3c9379b43205c8771d0

The branch, master has been updated
       via  57a6328b141f1f46099ee3c9379b43205c8771d0 (commit)
       via  eeb7be1cbf8069cc1304dac4136e7c2090d49e89 (commit)
       via  09b015bf11be087bdc50e740c2f8ce6a6ff5853e (commit)
      from  aa95a75332e274d102e6e9946d4c16ba27f7b532 (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=57a6328b141f1f46099ee3c9379b43205c8771d0
commit 57a6328b141f1f46099ee3c9379b43205c8771d0
Author: Michael Drake <[email protected]>
Commit: Michael Drake <[email protected]>

    RISC OS: Make URL drag include the fragment.

diff --git a/frontends/riscos/window.c b/frontends/riscos/window.c
index 120a408..e41f609 100644
--- a/frontends/riscos/window.c
+++ b/frontends/riscos/window.c
@@ -830,6 +830,8 @@ ro_gui_window_toolbar_click(void *data,
                case TOOLBAR_URL_DRAG_URL:
                {
                        gui_save_type save_type;
+                       nserror err;
+                       nsurl *url;
 
                        if (!browser_window_has_content(g->bw))
                                break;
@@ -839,9 +841,17 @@ ro_gui_window_toolbar_click(void *data,
                        else
                                save_type = GUI_SAVE_LINK_TEXT;
 
-                       ro_gui_drag_save_link(save_type,
-                                       browser_window_access_url(g->bw),
+                       err = browser_window_get_url(g->bw, true, &url);
+                       if (err != NSERROR_OK) {
+                               /* Fall back to access (won't get fragment). */
+                               url = nsurl_ref(
+                                       browser_window_access_url(g->bw));
+                       }
+
+                       ro_gui_drag_save_link(save_type, url,
                                        browser_window_get_title(g->bw), g);
+
+                       nsurl_unref(url);
                }
                        break;
 


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=eeb7be1cbf8069cc1304dac4136e7c2090d49e89
commit eeb7be1cbf8069cc1304dac4136e7c2090d49e89
Author: Michael Drake <[email protected]>
Commit: Michael Drake <[email protected]>

    Browser: Add function to get bw URL with any fragment.
    
    This returns a ref to the URL.

diff --git a/desktop/browser.c b/desktop/browser.c
index 84f6681..1c8aa95 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -2267,6 +2267,36 @@ nsurl* browser_window_access_url(struct browser_window 
*bw)
        return corestring_nsurl_about_blank;
 }
 
+/* Exported interface, documented in include/netsurf/browser_window.h */
+nserror browser_window_get_url(
+               struct browser_window *bw,
+               bool fragment,
+               nsurl** url_out)
+{
+       nserror err;
+       nsurl *url;
+
+       assert(bw != NULL);
+
+       if (!fragment || bw->frag_id == NULL || bw->loading_content != NULL) {
+               /* If there's a loading content, then the bw->frag_id will have
+                * been trampled, possibly with a new frag_id, but we will
+                * still be returning the current URL, so in this edge case
+                * we just drop any fragment. */
+               url = nsurl_ref(browser_window_access_url(bw));
+
+       } else {
+               err = nsurl_refragment(browser_window_access_url(bw),
+                               bw->frag_id, &url);
+               if (err != NSERROR_OK) {
+                       return err;
+               }
+       }
+
+       *url_out = url;
+       return NSERROR_OK;
+}
+
 /* Exported interface, documented in browser.h */
 const char* browser_window_get_title(struct browser_window *bw)
 {
diff --git a/include/netsurf/browser_window.h b/include/netsurf/browser_window.h
index c3ff799..439b078 100644
--- a/include/netsurf/browser_window.h
+++ b/include/netsurf/browser_window.h
@@ -210,6 +210,19 @@ nserror browser_window_navigate_up(struct browser_window 
*bw, bool new_window);
 struct nsurl* browser_window_access_url(struct browser_window *bw);
 
 /**
+ * Access a browser window's URL.
+ *
+ * \param[in]  bw        browser window
+ * \param[in]  fragment  Whether to include any URL fragment.
+ * \param[out] url_out   Returns a ref to the URL on success.
+ * \return NSERROR_OK, or appropriate error otherwise.
+ */
+nserror browser_window_get_url(
+               struct browser_window *bw,
+               bool fragment,
+               struct nsurl** url_out);
+
+/**
  * Get the title of a browser_window.
  *
  * \param bw The browser window.


commitdiff 
http://git.netsurf-browser.org/netsurf.git/commit/?id=09b015bf11be087bdc50e740c2f8ce6a6ff5853e
commit 09b015bf11be087bdc50e740c2f8ce6a6ff5853e
Author: Michael Drake <[email protected]>
Commit: Michael Drake <[email protected]>

    Browser: Rename function to access bw URL.

diff --git a/content/handlers/javascript/duktape/Window.bnd 
b/content/handlers/javascript/duktape/Window.bnd
index f647fd1..98ba39d 100644
--- a/content/handlers/javascript/duktape/Window.bnd
+++ b/content/handlers/javascript/duktape/Window.bnd
@@ -28,7 +28,7 @@ init Window(struct browser_window *win, struct html_content 
*htmlc)
        NSLOG(netsurf, INFO, "win=%p htmlc=%p", priv->win, priv->htmlc);
 
        NSLOG(netsurf, INFO,
-             "URL is %s", nsurl_access(browser_window_get_url(priv->win)));
+             "URL is %s", nsurl_access(browser_window_access_url(priv->win)));
 %}
 
 prototype Window()
diff --git a/desktop/browser.c b/desktop/browser.c
index 5890162..84f6681 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -2225,7 +2225,7 @@ nserror browser_window_navigate_up(struct browser_window 
*bw, bool new_window)
        if (bw == NULL)
                return NSERROR_BAD_PARAMETER;
 
-       current = browser_window_get_url(bw);
+       current = browser_window_access_url(bw);
 
        err = nsurl_parent(current, &parent);
        if (err != NSERROR_OK) {
@@ -2251,8 +2251,8 @@ nserror browser_window_navigate_up(struct browser_window 
*bw, bool new_window)
 }
 
 
-/* Exported interface, documented in browser.h */
-nsurl* browser_window_get_url(struct browser_window *bw)
+/* Exported interface, documented in include/netsurf/browser_window.h */
+nsurl* browser_window_access_url(struct browser_window *bw)
 {
        assert(bw != NULL);
 
diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index 9484ee9..acb0348 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -366,7 +366,7 @@ RXHOOKF(rx_save)
                        FWrite(fh, source_data, 1, source_size);
 
                FClose(fh);
-               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_get_url(gw->bw)));
+               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_access_url(gw->bw)));
        }
 
        ami_reset_pointer(gw->shared);
@@ -395,7 +395,7 @@ RXHOOKF(rx_geturl)
 
        if(gw && gw->bw)
        {
-               strcpy(result, nsurl_access(browser_window_get_url(gw->bw)));
+               strcpy(result, nsurl_access(browser_window_access_url(gw->bw)));
        }
        else
        {
diff --git a/frontends/amiga/ctxmenu.c b/frontends/amiga/ctxmenu.c
index 717096f..a6755e6 100644
--- a/frontends/amiga/ctxmenu.c
+++ b/frontends/amiga/ctxmenu.c
@@ -146,7 +146,7 @@ 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_get_url(gwin->gw->bw),
+                                                                     
browser_window_access_url(gwin->gw->bw),
                                                                      
gwin->gw->bw,
                                                                      &bw);
 
@@ -163,7 +163,7 @@ 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_get_url(gwin->gw->bw),
+                                                                     
browser_window_access_url(gwin->gw->bw),
                                                                      
gwin->gw->bw,
                                                                      &bw);
 
@@ -180,7 +180,7 @@ HOOKF(void, ami_ctxmenu_item_urldownload, APTR, window, 
struct IntuiMessage *)
 
        browser_window_navigate(gwin->gw->bw,
                url,
-               browser_window_get_url(gwin->gw->bw),
+               browser_window_access_url(gwin->gw->bw),
                BW_NAVIGATE_DOWNLOAD,
                NULL,
                NULL,
@@ -200,7 +200,7 @@ HOOKF(void, ami_ctxmenu_item_objshow, APTR, window, struct 
IntuiMessage *)
 
        browser_window_navigate(gwin->gw->bw,
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_get_url(gwin->gw->bw),
+                                                       
browser_window_access_url(gwin->gw->bw),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
@@ -240,7 +240,7 @@ HOOKF(void, ami_ctxmenu_item_frameshow, APTR, window, 
struct IntuiMessage *)
 
        browser_window_navigate(gwin->gw->bw,
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_get_url(gwin->gw->bw),
+                                                       
browser_window_access_url(gwin->gw->bw),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c
index 756f5e6..6dbacf1 100644
--- a/frontends/amiga/gui_menu.c
+++ b/frontends/amiga/gui_menu.c
@@ -261,7 +261,7 @@ HOOKF(void, ami_menu_item_edit_copy, APTR, window, struct 
IntuiMessage *)
                 * the objects containing the values returned (and the
                 * constness cast away) is safe.
                 */
-               ami_bitmap_set_url(bm, browser_window_get_url(gwin->gw->bw));
+               ami_bitmap_set_url(bm, browser_window_access_url(gwin->gw->bw));
                ami_bitmap_set_title(bm, 
browser_window_get_title(gwin->gw->bw));
                ami_easy_clipboard_bitmap(bm);
        }
@@ -419,7 +419,7 @@ HOOKF(void, ami_menu_item_hotlist_add, APTR, window, struct 
IntuiMessage *)
        if (bw == NULL || browser_window_has_content(bw) == false)
                return;
 
-       hotlist_add_url(browser_window_get_url(bw));
+       hotlist_add_url(browser_window_access_url(bw));
        ami_gui_update_hotlist_button(gwin);
 }
 
diff --git a/frontends/amiga/gui_options.c b/frontends/amiga/gui_options.c
index cc3a915..fb214d0 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_get_url(cur_gw->bw)), TAG_DONE);
+                                                       
nsurl_access(browser_window_access_url(cur_gw->bw)), TAG_DONE);
                                        break;
 
                                        case GID_OPTS_HOMEPAGE_BLANK:
diff --git a/frontends/atari/ctxmenu.c b/frontends/atari/ctxmenu.c
index ef4f01a..eb6cc16 100644
--- a/frontends/atari/ctxmenu.c
+++ b/frontends/atari/ctxmenu.c
@@ -216,7 +216,7 @@ void context_popup(struct gui_window * gw, short x, short y)
                                        browser_window_navigate(
                                                gw->browser->bw,
                                                
hlcache_handle_get_url(ctx->ccdata.object),
-                                               
browser_window_get_url(gw->browser->bw),
+                                               
browser_window_access_url(gw->browser->bw),
                                                BW_NAVIGATE_DOWNLOAD,
                                                NULL,
                                                NULL,
@@ -232,7 +232,7 @@ void context_popup(struct gui_window * gw, short x, short y)
                                error = browser_window_navigate(
                                        gw->browser->bw,
                                        ctx->ccdata.link,
-                                       browser_window_get_url(gw->browser->bw),
+                                       
browser_window_access_url(gw->browser->bw),
                                        BW_NAVIGATE_DOWNLOAD,
                                        NULL,
                                        NULL,
@@ -269,7 +269,7 @@ void context_popup(struct gui_window * gw, short x, short y)
                                error = browser_window_create(
                                        BW_CREATE_HISTORY | BW_CREATE_CLONE,
                                        ctx->ccdata.link,
-                                       browser_window_get_url(gw->browser->bw),
+                                       
browser_window_access_url(gw->browser->bw),
                                        gw->browser->bw,
                                        NULL);
                                if (error != NSERROR_OK) {
diff --git a/frontends/atari/deskmenu.c b/frontends/atari/deskmenu.c
index ded68ca..34d7be0 100644
--- a/frontends/atari/deskmenu.c
+++ b/frontends/atari/deskmenu.c
@@ -510,7 +510,7 @@ static void __CDECL menu_add_bookmark(short item, short 
title, void *data)
        if (input_window) {
                if( browser_window_has_content(input_window->browser->bw) ){
                        atari_hotlist_add_page(
-                               
nsurl_access(browser_window_get_url(input_window->browser->bw)),
+                               
nsurl_access(browser_window_access_url(input_window->browser->bw)),
                                NULL
                                );
                }
diff --git a/frontends/gtk/preferences.c b/frontends/gtk/preferences.c
index 65f41ed..dac4a55 100644
--- a/frontends/gtk/preferences.c
+++ b/frontends/gtk/preferences.c
@@ -826,7 +826,7 @@ ENTRY_SIGNALS(entryHomePageURL, homepage_url)
 G_MODULE_EXPORT void
 nsgtk_preferences_setCurrentPage_clicked(GtkButton *button, struct ppref *priv)
 {
-       const gchar *url = nsurl_access(browser_window_get_url(priv->bw));
+       const gchar *url = nsurl_access(browser_window_access_url(priv->bw));
 
        if (priv->entryHomePageURL != NULL) {
                gtk_entry_set_text(GTK_ENTRY(priv->entryHomePageURL), url);
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 6f81e91..bedad91 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -780,7 +780,7 @@ MULTIHANDLER(savepage)
        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
 
-       res = nsurl_nice(browser_window_get_url(
+       res = nsurl_nice(browser_window_access_url(
                        nsgtk_get_browser_window(g->top_level)), &path, false);
        if (res != NSERROR_OK) {
                path = strdup(messages_get("SaveText"));
@@ -842,7 +842,7 @@ MULTIHANDLER(pdf)
 
        NSLOG(netsurf, INFO, "Print preview (generating PDF)  started.");
 
-       res = nsurl_nice(browser_window_get_url(bw), &url_name, true);
+       res = nsurl_nice(browser_window_access_url(bw), &url_name, true);
        if (res != NSERROR_OK) {
                nsgtk_warning(messages_get_errorcode(res), 0);
                return TRUE;
@@ -915,7 +915,7 @@ MULTIHANDLER(plaintext)
        char *filename;
        nserror res;
 
-       res = nsurl_nice(browser_window_get_url(
+       res = nsurl_nice(browser_window_access_url(
                        nsgtk_get_browser_window(g->top_level)),
                        &filename, false);
        if (res != NSERROR_OK) {
@@ -1616,7 +1616,7 @@ MULTIHANDLER(addbookmarks)
 
        if (bw == NULL || !browser_window_has_content(bw))
                return TRUE;
-       hotlist_add_url(browser_window_get_url(bw));
+       hotlist_add_url(browser_window_access_url(bw));
        return TRUE;
 }
 
diff --git a/frontends/gtk/viewsource.c b/frontends/gtk/viewsource.c
index acf8101..87ff697 100644
--- a/frontends/gtk/viewsource.c
+++ b/frontends/gtk/viewsource.c
@@ -52,7 +52,7 @@ nserror nsgtk_viewsource(GtkWindow *parent, struct 
browser_window *bw)
 
        source_data = content_get_source_data(hlcontent, &source_size);
 
-       ret = nsurl_nice(browser_window_get_url(bw), &filename, false);
+       ret = nsurl_nice(browser_window_access_url(bw), &filename, false);
        if (ret != NSERROR_OK) {
                filename = strdup(messages_get("SaveSource"));
                if (filename == NULL) {
@@ -60,12 +60,12 @@ nserror nsgtk_viewsource(GtkWindow *parent, struct 
browser_window *bw)
                }
        }
 
-       title = malloc(strlen(nsurl_access(browser_window_get_url(bw))) + 
SLEN("Source of  - NetSurf") + 1);
+       title = malloc(strlen(nsurl_access(browser_window_access_url(bw))) + 
SLEN("Source of  - NetSurf") + 1);
        if (title == NULL) {
                free(filename);
                return NSERROR_NOMEM;
        }
-       sprintf(title, "Source of %s - NetSurf", 
nsurl_access(browser_window_get_url(bw)));
+       sprintf(title, "Source of %s - NetSurf", 
nsurl_access(browser_window_access_url(bw)));
 
        ret = utf8_from_enc(source_data,
                            content_get_encoding(hlcontent, 
CONTENT_ENCODING_NORMAL),
diff --git a/frontends/riscos/window.c b/frontends/riscos/window.c
index 986e5c5..120a408 100644
--- a/frontends/riscos/window.c
+++ b/frontends/riscos/window.c
@@ -583,7 +583,7 @@ static void ro_gui_window_action_add_bookmark(struct 
gui_window *g)
                        browser_window_has_content(g->bw) == false)
                return;
 
-       url = browser_window_get_url(g->bw);
+       url = browser_window_access_url(g->bw);
 
        ro_gui_hotlist_add_page(url);
        ro_toolbar_update_hotlist(g->toolbar);
@@ -603,7 +603,7 @@ static void ro_gui_window_action_remove_bookmark(struct 
gui_window *g)
                        browser_window_has_content(g->bw) == false)
                return;
 
-       url = browser_window_get_url(g->bw);
+       url = browser_window_access_url(g->bw);
 
        ro_gui_hotlist_remove_page(url);
 }
@@ -840,7 +840,7 @@ ro_gui_window_toolbar_click(void *data,
                                save_type = GUI_SAVE_LINK_TEXT;
 
                        ro_gui_drag_save_link(save_type,
-                                       browser_window_get_url(g->bw),
+                                       browser_window_access_url(g->bw),
                                        browser_window_get_title(g->bw), g);
                }
                        break;
@@ -1009,7 +1009,7 @@ static void ro_gui_window_action_new_window(struct 
gui_window *g)
                return;
 
        error = browser_window_create(BW_CREATE_CLONE,
-                       browser_window_get_url(g->bw),
+                       browser_window_access_url(g->bw),
                        NULL, g->bw, NULL);
 
        if (error != NSERROR_OK) {
@@ -1552,7 +1552,7 @@ static void ro_gui_window_close(wimp_w w)
        if (pointer.buttons & wimp_CLICK_ADJUST) {
                destroy = !ro_gui_shift_pressed();
 
-               url = browser_window_get_url(g->bw);
+               url = browser_window_access_url(g->bw);
                if (url != NULL) {
                        netsurf_nsurl_to_path(url, &filename);
                }
@@ -2671,7 +2671,7 @@ ro_gui_window_menu_select(wimp_w w,
                        error = browser_window_navigate(
                                bw,
                                current_menu_url,
-                               browser_window_get_url(bw),
+                               browser_window_access_url(bw),
                                BW_NAVIGATE_DOWNLOAD,
                                NULL,
                                NULL,
@@ -2684,7 +2684,7 @@ ro_gui_window_menu_select(wimp_w w,
                        error = browser_window_create(
                                BW_CREATE_HISTORY | BW_CREATE_CLONE,
                                current_menu_url,
-                               browser_window_get_url(bw),
+                               browser_window_access_url(bw),
                                bw,
                                NULL);
                }
diff --git a/include/netsurf/browser_window.h b/include/netsurf/browser_window.h
index 6c44e16..c3ff799 100644
--- a/include/netsurf/browser_window.h
+++ b/include/netsurf/browser_window.h
@@ -200,14 +200,14 @@ bool browser_window_up_available(struct browser_window 
*bw);
 nserror browser_window_navigate_up(struct browser_window *bw, bool new_window);
 
 /**
- * Get a browser window's URL.
+ * Access a browser window's URL.  This URL is always without any fragment.
  *
  * \param bw browser window
  * \return pointer to nsurl. Doesn't create a ref for caller.
  *
  * \note guaranteed to return a valid nsurl ptr, never returns NULL.
  */
-struct nsurl* browser_window_get_url(struct browser_window *bw);
+struct nsurl* browser_window_access_url(struct browser_window *bw);
 
 /**
  * Get the title of a browser_window.


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

Summary of changes:
 content/handlers/javascript/duktape/Window.bnd |    2 +-
 desktop/browser.c                              |   36 ++++++++++++++++++++++--
 frontends/amiga/arexx.c                        |    4 +--
 frontends/amiga/ctxmenu.c                      |   10 +++----
 frontends/amiga/gui_menu.c                     |    4 +--
 frontends/amiga/gui_options.c                  |    2 +-
 frontends/atari/ctxmenu.c                      |    6 ++--
 frontends/atari/deskmenu.c                     |    2 +-
 frontends/gtk/preferences.c                    |    2 +-
 frontends/gtk/scaffolding.c                    |    8 +++---
 frontends/gtk/viewsource.c                     |    6 ++--
 frontends/riscos/window.c                      |   26 +++++++++++------
 include/netsurf/browser_window.h               |   17 +++++++++--
 13 files changed, 89 insertions(+), 36 deletions(-)

diff --git a/content/handlers/javascript/duktape/Window.bnd 
b/content/handlers/javascript/duktape/Window.bnd
index f647fd1..98ba39d 100644
--- a/content/handlers/javascript/duktape/Window.bnd
+++ b/content/handlers/javascript/duktape/Window.bnd
@@ -28,7 +28,7 @@ init Window(struct browser_window *win, struct html_content 
*htmlc)
        NSLOG(netsurf, INFO, "win=%p htmlc=%p", priv->win, priv->htmlc);
 
        NSLOG(netsurf, INFO,
-             "URL is %s", nsurl_access(browser_window_get_url(priv->win)));
+             "URL is %s", nsurl_access(browser_window_access_url(priv->win)));
 %}
 
 prototype Window()
diff --git a/desktop/browser.c b/desktop/browser.c
index 5890162..1c8aa95 100644
--- a/desktop/browser.c
+++ b/desktop/browser.c
@@ -2225,7 +2225,7 @@ nserror browser_window_navigate_up(struct browser_window 
*bw, bool new_window)
        if (bw == NULL)
                return NSERROR_BAD_PARAMETER;
 
-       current = browser_window_get_url(bw);
+       current = browser_window_access_url(bw);
 
        err = nsurl_parent(current, &parent);
        if (err != NSERROR_OK) {
@@ -2251,8 +2251,8 @@ nserror browser_window_navigate_up(struct browser_window 
*bw, bool new_window)
 }
 
 
-/* Exported interface, documented in browser.h */
-nsurl* browser_window_get_url(struct browser_window *bw)
+/* Exported interface, documented in include/netsurf/browser_window.h */
+nsurl* browser_window_access_url(struct browser_window *bw)
 {
        assert(bw != NULL);
 
@@ -2267,6 +2267,36 @@ nsurl* browser_window_get_url(struct browser_window *bw)
        return corestring_nsurl_about_blank;
 }
 
+/* Exported interface, documented in include/netsurf/browser_window.h */
+nserror browser_window_get_url(
+               struct browser_window *bw,
+               bool fragment,
+               nsurl** url_out)
+{
+       nserror err;
+       nsurl *url;
+
+       assert(bw != NULL);
+
+       if (!fragment || bw->frag_id == NULL || bw->loading_content != NULL) {
+               /* If there's a loading content, then the bw->frag_id will have
+                * been trampled, possibly with a new frag_id, but we will
+                * still be returning the current URL, so in this edge case
+                * we just drop any fragment. */
+               url = nsurl_ref(browser_window_access_url(bw));
+
+       } else {
+               err = nsurl_refragment(browser_window_access_url(bw),
+                               bw->frag_id, &url);
+               if (err != NSERROR_OK) {
+                       return err;
+               }
+       }
+
+       *url_out = url;
+       return NSERROR_OK;
+}
+
 /* Exported interface, documented in browser.h */
 const char* browser_window_get_title(struct browser_window *bw)
 {
diff --git a/frontends/amiga/arexx.c b/frontends/amiga/arexx.c
index 9484ee9..acb0348 100644
--- a/frontends/amiga/arexx.c
+++ b/frontends/amiga/arexx.c
@@ -366,7 +366,7 @@ RXHOOKF(rx_save)
                        FWrite(fh, source_data, 1, source_size);
 
                FClose(fh);
-               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_get_url(gw->bw)));
+               SetComment((char *)cmd->ac_ArgList[0], 
nsurl_access(browser_window_access_url(gw->bw)));
        }
 
        ami_reset_pointer(gw->shared);
@@ -395,7 +395,7 @@ RXHOOKF(rx_geturl)
 
        if(gw && gw->bw)
        {
-               strcpy(result, nsurl_access(browser_window_get_url(gw->bw)));
+               strcpy(result, nsurl_access(browser_window_access_url(gw->bw)));
        }
        else
        {
diff --git a/frontends/amiga/ctxmenu.c b/frontends/amiga/ctxmenu.c
index 717096f..a6755e6 100644
--- a/frontends/amiga/ctxmenu.c
+++ b/frontends/amiga/ctxmenu.c
@@ -146,7 +146,7 @@ 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_get_url(gwin->gw->bw),
+                                                                     
browser_window_access_url(gwin->gw->bw),
                                                                      
gwin->gw->bw,
                                                                      &bw);
 
@@ -163,7 +163,7 @@ 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_get_url(gwin->gw->bw),
+                                                                     
browser_window_access_url(gwin->gw->bw),
                                                                      
gwin->gw->bw,
                                                                      &bw);
 
@@ -180,7 +180,7 @@ HOOKF(void, ami_ctxmenu_item_urldownload, APTR, window, 
struct IntuiMessage *)
 
        browser_window_navigate(gwin->gw->bw,
                url,
-               browser_window_get_url(gwin->gw->bw),
+               browser_window_access_url(gwin->gw->bw),
                BW_NAVIGATE_DOWNLOAD,
                NULL,
                NULL,
@@ -200,7 +200,7 @@ HOOKF(void, ami_ctxmenu_item_objshow, APTR, window, struct 
IntuiMessage *)
 
        browser_window_navigate(gwin->gw->bw,
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_get_url(gwin->gw->bw),
+                                                       
browser_window_access_url(gwin->gw->bw),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
@@ -240,7 +240,7 @@ HOOKF(void, ami_ctxmenu_item_frameshow, APTR, window, 
struct IntuiMessage *)
 
        browser_window_navigate(gwin->gw->bw,
                                                        
hlcache_handle_get_url(hook->h_Data),
-                                                       
browser_window_get_url(gwin->gw->bw),
+                                                       
browser_window_access_url(gwin->gw->bw),
                                                        BW_NAVIGATE_HISTORY,
                                                        NULL,
                                                        NULL,
diff --git a/frontends/amiga/gui_menu.c b/frontends/amiga/gui_menu.c
index 756f5e6..6dbacf1 100644
--- a/frontends/amiga/gui_menu.c
+++ b/frontends/amiga/gui_menu.c
@@ -261,7 +261,7 @@ HOOKF(void, ami_menu_item_edit_copy, APTR, window, struct 
IntuiMessage *)
                 * the objects containing the values returned (and the
                 * constness cast away) is safe.
                 */
-               ami_bitmap_set_url(bm, browser_window_get_url(gwin->gw->bw));
+               ami_bitmap_set_url(bm, browser_window_access_url(gwin->gw->bw));
                ami_bitmap_set_title(bm, 
browser_window_get_title(gwin->gw->bw));
                ami_easy_clipboard_bitmap(bm);
        }
@@ -419,7 +419,7 @@ HOOKF(void, ami_menu_item_hotlist_add, APTR, window, struct 
IntuiMessage *)
        if (bw == NULL || browser_window_has_content(bw) == false)
                return;
 
-       hotlist_add_url(browser_window_get_url(bw));
+       hotlist_add_url(browser_window_access_url(bw));
        ami_gui_update_hotlist_button(gwin);
 }
 
diff --git a/frontends/amiga/gui_options.c b/frontends/amiga/gui_options.c
index cc3a915..fb214d0 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_get_url(cur_gw->bw)), TAG_DONE);
+                                                       
nsurl_access(browser_window_access_url(cur_gw->bw)), TAG_DONE);
                                        break;
 
                                        case GID_OPTS_HOMEPAGE_BLANK:
diff --git a/frontends/atari/ctxmenu.c b/frontends/atari/ctxmenu.c
index ef4f01a..eb6cc16 100644
--- a/frontends/atari/ctxmenu.c
+++ b/frontends/atari/ctxmenu.c
@@ -216,7 +216,7 @@ void context_popup(struct gui_window * gw, short x, short y)
                                        browser_window_navigate(
                                                gw->browser->bw,
                                                
hlcache_handle_get_url(ctx->ccdata.object),
-                                               
browser_window_get_url(gw->browser->bw),
+                                               
browser_window_access_url(gw->browser->bw),
                                                BW_NAVIGATE_DOWNLOAD,
                                                NULL,
                                                NULL,
@@ -232,7 +232,7 @@ void context_popup(struct gui_window * gw, short x, short y)
                                error = browser_window_navigate(
                                        gw->browser->bw,
                                        ctx->ccdata.link,
-                                       browser_window_get_url(gw->browser->bw),
+                                       
browser_window_access_url(gw->browser->bw),
                                        BW_NAVIGATE_DOWNLOAD,
                                        NULL,
                                        NULL,
@@ -269,7 +269,7 @@ void context_popup(struct gui_window * gw, short x, short y)
                                error = browser_window_create(
                                        BW_CREATE_HISTORY | BW_CREATE_CLONE,
                                        ctx->ccdata.link,
-                                       browser_window_get_url(gw->browser->bw),
+                                       
browser_window_access_url(gw->browser->bw),
                                        gw->browser->bw,
                                        NULL);
                                if (error != NSERROR_OK) {
diff --git a/frontends/atari/deskmenu.c b/frontends/atari/deskmenu.c
index ded68ca..34d7be0 100644
--- a/frontends/atari/deskmenu.c
+++ b/frontends/atari/deskmenu.c
@@ -510,7 +510,7 @@ static void __CDECL menu_add_bookmark(short item, short 
title, void *data)
        if (input_window) {
                if( browser_window_has_content(input_window->browser->bw) ){
                        atari_hotlist_add_page(
-                               
nsurl_access(browser_window_get_url(input_window->browser->bw)),
+                               
nsurl_access(browser_window_access_url(input_window->browser->bw)),
                                NULL
                                );
                }
diff --git a/frontends/gtk/preferences.c b/frontends/gtk/preferences.c
index 65f41ed..dac4a55 100644
--- a/frontends/gtk/preferences.c
+++ b/frontends/gtk/preferences.c
@@ -826,7 +826,7 @@ ENTRY_SIGNALS(entryHomePageURL, homepage_url)
 G_MODULE_EXPORT void
 nsgtk_preferences_setCurrentPage_clicked(GtkButton *button, struct ppref *priv)
 {
-       const gchar *url = nsurl_access(browser_window_get_url(priv->bw));
+       const gchar *url = nsurl_access(browser_window_access_url(priv->bw));
 
        if (priv->entryHomePageURL != NULL) {
                gtk_entry_set_text(GTK_ENTRY(priv->entryHomePageURL), url);
diff --git a/frontends/gtk/scaffolding.c b/frontends/gtk/scaffolding.c
index 6f81e91..bedad91 100644
--- a/frontends/gtk/scaffolding.c
+++ b/frontends/gtk/scaffolding.c
@@ -780,7 +780,7 @@ MULTIHANDLER(savepage)
        gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(fc), filter);
        gtk_file_chooser_set_filter(GTK_FILE_CHOOSER(fc), filter);
 
-       res = nsurl_nice(browser_window_get_url(
+       res = nsurl_nice(browser_window_access_url(
                        nsgtk_get_browser_window(g->top_level)), &path, false);
        if (res != NSERROR_OK) {
                path = strdup(messages_get("SaveText"));
@@ -842,7 +842,7 @@ MULTIHANDLER(pdf)
 
        NSLOG(netsurf, INFO, "Print preview (generating PDF)  started.");
 
-       res = nsurl_nice(browser_window_get_url(bw), &url_name, true);
+       res = nsurl_nice(browser_window_access_url(bw), &url_name, true);
        if (res != NSERROR_OK) {
                nsgtk_warning(messages_get_errorcode(res), 0);
                return TRUE;
@@ -915,7 +915,7 @@ MULTIHANDLER(plaintext)
        char *filename;
        nserror res;
 
-       res = nsurl_nice(browser_window_get_url(
+       res = nsurl_nice(browser_window_access_url(
                        nsgtk_get_browser_window(g->top_level)),
                        &filename, false);
        if (res != NSERROR_OK) {
@@ -1616,7 +1616,7 @@ MULTIHANDLER(addbookmarks)
 
        if (bw == NULL || !browser_window_has_content(bw))
                return TRUE;
-       hotlist_add_url(browser_window_get_url(bw));
+       hotlist_add_url(browser_window_access_url(bw));
        return TRUE;
 }
 
diff --git a/frontends/gtk/viewsource.c b/frontends/gtk/viewsource.c
index acf8101..87ff697 100644
--- a/frontends/gtk/viewsource.c
+++ b/frontends/gtk/viewsource.c
@@ -52,7 +52,7 @@ nserror nsgtk_viewsource(GtkWindow *parent, struct 
browser_window *bw)
 
        source_data = content_get_source_data(hlcontent, &source_size);
 
-       ret = nsurl_nice(browser_window_get_url(bw), &filename, false);
+       ret = nsurl_nice(browser_window_access_url(bw), &filename, false);
        if (ret != NSERROR_OK) {
                filename = strdup(messages_get("SaveSource"));
                if (filename == NULL) {
@@ -60,12 +60,12 @@ nserror nsgtk_viewsource(GtkWindow *parent, struct 
browser_window *bw)
                }
        }
 
-       title = malloc(strlen(nsurl_access(browser_window_get_url(bw))) + 
SLEN("Source of  - NetSurf") + 1);
+       title = malloc(strlen(nsurl_access(browser_window_access_url(bw))) + 
SLEN("Source of  - NetSurf") + 1);
        if (title == NULL) {
                free(filename);
                return NSERROR_NOMEM;
        }
-       sprintf(title, "Source of %s - NetSurf", 
nsurl_access(browser_window_get_url(bw)));
+       sprintf(title, "Source of %s - NetSurf", 
nsurl_access(browser_window_access_url(bw)));
 
        ret = utf8_from_enc(source_data,
                            content_get_encoding(hlcontent, 
CONTENT_ENCODING_NORMAL),
diff --git a/frontends/riscos/window.c b/frontends/riscos/window.c
index 986e5c5..e41f609 100644
--- a/frontends/riscos/window.c
+++ b/frontends/riscos/window.c
@@ -583,7 +583,7 @@ static void ro_gui_window_action_add_bookmark(struct 
gui_window *g)
                        browser_window_has_content(g->bw) == false)
                return;
 
-       url = browser_window_get_url(g->bw);
+       url = browser_window_access_url(g->bw);
 
        ro_gui_hotlist_add_page(url);
        ro_toolbar_update_hotlist(g->toolbar);
@@ -603,7 +603,7 @@ static void ro_gui_window_action_remove_bookmark(struct 
gui_window *g)
                        browser_window_has_content(g->bw) == false)
                return;
 
-       url = browser_window_get_url(g->bw);
+       url = browser_window_access_url(g->bw);
 
        ro_gui_hotlist_remove_page(url);
 }
@@ -830,6 +830,8 @@ ro_gui_window_toolbar_click(void *data,
                case TOOLBAR_URL_DRAG_URL:
                {
                        gui_save_type save_type;
+                       nserror err;
+                       nsurl *url;
 
                        if (!browser_window_has_content(g->bw))
                                break;
@@ -839,9 +841,17 @@ ro_gui_window_toolbar_click(void *data,
                        else
                                save_type = GUI_SAVE_LINK_TEXT;
 
-                       ro_gui_drag_save_link(save_type,
-                                       browser_window_get_url(g->bw),
+                       err = browser_window_get_url(g->bw, true, &url);
+                       if (err != NSERROR_OK) {
+                               /* Fall back to access (won't get fragment). */
+                               url = nsurl_ref(
+                                       browser_window_access_url(g->bw));
+                       }
+
+                       ro_gui_drag_save_link(save_type, url,
                                        browser_window_get_title(g->bw), g);
+
+                       nsurl_unref(url);
                }
                        break;
 
@@ -1009,7 +1019,7 @@ static void ro_gui_window_action_new_window(struct 
gui_window *g)
                return;
 
        error = browser_window_create(BW_CREATE_CLONE,
-                       browser_window_get_url(g->bw),
+                       browser_window_access_url(g->bw),
                        NULL, g->bw, NULL);
 
        if (error != NSERROR_OK) {
@@ -1552,7 +1562,7 @@ static void ro_gui_window_close(wimp_w w)
        if (pointer.buttons & wimp_CLICK_ADJUST) {
                destroy = !ro_gui_shift_pressed();
 
-               url = browser_window_get_url(g->bw);
+               url = browser_window_access_url(g->bw);
                if (url != NULL) {
                        netsurf_nsurl_to_path(url, &filename);
                }
@@ -2671,7 +2681,7 @@ ro_gui_window_menu_select(wimp_w w,
                        error = browser_window_navigate(
                                bw,
                                current_menu_url,
-                               browser_window_get_url(bw),
+                               browser_window_access_url(bw),
                                BW_NAVIGATE_DOWNLOAD,
                                NULL,
                                NULL,
@@ -2684,7 +2694,7 @@ ro_gui_window_menu_select(wimp_w w,
                        error = browser_window_create(
                                BW_CREATE_HISTORY | BW_CREATE_CLONE,
                                current_menu_url,
-                               browser_window_get_url(bw),
+                               browser_window_access_url(bw),
                                bw,
                                NULL);
                }
diff --git a/include/netsurf/browser_window.h b/include/netsurf/browser_window.h
index 6c44e16..439b078 100644
--- a/include/netsurf/browser_window.h
+++ b/include/netsurf/browser_window.h
@@ -200,14 +200,27 @@ bool browser_window_up_available(struct browser_window 
*bw);
 nserror browser_window_navigate_up(struct browser_window *bw, bool new_window);
 
 /**
- * Get a browser window's URL.
+ * Access a browser window's URL.  This URL is always without any fragment.
  *
  * \param bw browser window
  * \return pointer to nsurl. Doesn't create a ref for caller.
  *
  * \note guaranteed to return a valid nsurl ptr, never returns NULL.
  */
-struct nsurl* browser_window_get_url(struct browser_window *bw);
+struct nsurl* browser_window_access_url(struct browser_window *bw);
+
+/**
+ * Access a browser window's URL.
+ *
+ * \param[in]  bw        browser window
+ * \param[in]  fragment  Whether to include any URL fragment.
+ * \param[out] url_out   Returns a ref to the URL on success.
+ * \return NSERROR_OK, or appropriate error otherwise.
+ */
+nserror browser_window_get_url(
+               struct browser_window *bw,
+               bool fragment,
+               struct nsurl** url_out);
 
 /**
  * Get the title of a browser_window.


-- 
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