diff options
-rw-r--r-- | src/bw.c | 25 | ||||
-rw-r--r-- | src/bw.h | 12 | ||||
-rw-r--r-- | src/html.cc | 2 | ||||
-rw-r--r-- | src/nav.c | 29 | ||||
-rw-r--r-- | src/uicmd.cc | 2 |
5 files changed, 47 insertions, 23 deletions
@@ -55,7 +55,6 @@ BrowserWindow *a_Bw_new() bw->nav_stack_ptr = -1; /* Init expect */ - bw->nav_expecting = FALSE; bw->nav_expect_url = NULL; bw->redirect_level = 0; @@ -313,3 +312,27 @@ BrowserWindow *a_Bw_get(int i) return NULL; } +/* expect API ------------------------------------------------------------- */ + +void a_Bw_expect(BrowserWindow *bw, const DilloUrl *url) +{ + a_Url_free(bw->nav_expect_url); + bw->nav_expect_url = a_Url_dup(url); +} + +void a_Bw_cancel_expect(BrowserWindow *bw) +{ + a_Url_free(bw->nav_expect_url); + bw->nav_expect_url = NULL; +} + +bool_t a_Bw_expecting(BrowserWindow *bw) +{ + return (bw->nav_expect_url != NULL); +} + +const DilloUrl *a_Bw_expected_url(BrowserWindow *bw) +{ + return bw->nav_expect_url; +} + @@ -46,12 +46,9 @@ struct _BrowserWindow /* 'nav_stack_ptr' refers to what's being displayed */ int nav_stack_ptr; /* [0 based; -1 = empty] */ /* When the user clicks a link, the URL isn't pushed directly to history; - * nav_expect_url holds it until the first answer-bytes are got. Only then - * it is sent to history and referenced at the top of nav_stack */ + * nav_expect_url holds it until a dw is assigned to it. Only then an entry + * is made in history and referenced at the top of nav_stack */ DilloUrl *nav_expect_url; - /* 'nav_expecting' is true while dillo waits for non-cached URL data, - * until a dw is assigned to it. */ - bool_t nav_expecting; /* Counter for the number of hops on a redirection. Used to stop * redirection loops (accounts for WEB_RootUrl only) */ @@ -88,6 +85,11 @@ void *a_Bw_get_url_doc(BrowserWindow *bw, const DilloUrl *Url); void a_Bw_remove_doc(BrowserWindow *bw, void *vdoc); void a_Bw_add_url(BrowserWindow *bw, const DilloUrl *Url); void a_Bw_cleanup(BrowserWindow *bw); +/* expect API */ +void a_Bw_expect(BrowserWindow *bw, const DilloUrl *Url); +void a_Bw_cancel_expect(BrowserWindow *bw); +bool_t a_Bw_expecting(BrowserWindow *bw); +const DilloUrl *a_Bw_expected_url(BrowserWindow *bw); typedef void (*BwCallback_t)(BrowserWindow *bw, const void *data); diff --git a/src/html.cc b/src/html.cc index 985666af..4cbcef1b 100644 --- a/src/html.cc +++ b/src/html.cc @@ -647,7 +647,7 @@ bool_t DilloHtml::unloadedImages() */ void DilloHtml::loadImages (const DilloUrl *pattern) { - dReturn_if_fail (bw->nav_expecting == FALSE); + dReturn_if (a_Bw_expecting(bw)); /* If the user asked for a specific URL, the user (NULL) is the requester, * but if the user just asked for all URLs, use the page URL as the @@ -248,10 +248,8 @@ static void Nav_open_url(BrowserWindow *bw, const DilloUrl *url, */ void a_Nav_cancel_expect(BrowserWindow *bw) { - if (bw->nav_expecting) { - a_Url_free(bw->nav_expect_url); - bw->nav_expect_url = NULL; - bw->nav_expecting = FALSE; + if (a_Bw_expecting(bw)) { + a_Bw_cancel_expect(bw); a_UIcmd_set_buttons_sens(bw); } if (bw->meta_refresh_status > 0) @@ -263,7 +261,7 @@ void a_Nav_cancel_expect(BrowserWindow *bw) */ void a_Nav_cancel_expect_if_eq(BrowserWindow *bw, const DilloUrl *url) { - if (bw->nav_expecting && a_Url_cmp(url, bw->nav_expect_url) == 0) + if (a_Url_cmp(url, a_Bw_expected_url(bw)) == 0) a_Nav_cancel_expect(bw); } @@ -281,8 +279,8 @@ void a_Nav_expect_done(BrowserWindow *bw) dReturn_if_fail(bw != NULL); - if (bw->nav_expecting) { - url = bw->nav_expect_url; + if (a_Bw_expecting(bw)) { + url = a_Url_dup(a_Bw_expected_url(bw)); reload = (URL_FLAGS(url) & URL_ReloadPage); repush = (URL_FLAGS(url) & URL_ReloadFromCache); e2equery = (URL_FLAGS(url) & URL_E2EQuery); @@ -293,6 +291,7 @@ void a_Nav_expect_done(BrowserWindow *bw) m = URL_E2EQuery|URL_ReloadPage|URL_ReloadFromCache|URL_IgnoreScroll; a_Url_set_flags(url, URL_FLAGS(url) & ~m); url_idx = a_History_add_url(url); + a_Url_free(url); if (repush) { MSG("a_Nav_expect_done: repush!\n"); @@ -345,16 +344,17 @@ void a_Nav_expect_done(BrowserWindow *bw) void a_Nav_push(BrowserWindow *bw, const DilloUrl *url, const DilloUrl *requester) { + const DilloUrl *e_url; dReturn_if_fail (bw != NULL); - if (bw->nav_expecting && !a_Url_cmp(bw->nav_expect_url, url) && - !strcmp(URL_FRAGMENT(bw->nav_expect_url),URL_FRAGMENT(url))) { + e_url = a_Bw_expected_url(bw); + if (e_url && !a_Url_cmp(e_url, url) && + !strcmp(URL_FRAGMENT(e_url),URL_FRAGMENT(url))) { /* we're already expecting that url (most probably a double-click) */ return; } a_Nav_cancel_expect(bw); - bw->nav_expect_url = a_Url_dup(url); - bw->nav_expecting = TRUE; + a_Bw_expect(bw, url); Nav_open_url(bw, url, requester, 0); } @@ -370,8 +370,7 @@ static void Nav_repush(BrowserWindow *bw) url = a_Url_dup(a_History_get_url(NAV_TOP_UIDX(bw))); /* Let's make reload be from Cache */ a_Url_set_flags(url, URL_FLAGS(url) | URL_ReloadFromCache); - bw->nav_expect_url = a_Url_dup(url); - bw->nav_expecting = TRUE; + a_Bw_expect(bw, url); Nav_open_url(bw, url, NULL, 0); a_Url_free(url); } @@ -501,9 +500,9 @@ static void Nav_reload_callback(void *data) a_Url_set_flags(r_url, URL_FLAGS(r_url) | URL_E2EQuery); /* This is an explicit reload, so clear the SpamSafe flag */ a_Url_set_flags(r_url, URL_FLAGS(r_url) & ~URL_SpamSafe); - bw->nav_expect_url = r_url; - bw->nav_expecting = TRUE; + a_Bw_expect(bw, r_url); Nav_open_url(bw, r_url, NULL, 0); + a_Url_free(r_url); } } } diff --git a/src/uicmd.cc b/src/uicmd.cc index 32b5e8bb..6b2c0e13 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -1223,7 +1223,7 @@ void a_UIcmd_set_buttons_sens(BrowserWindow *bw) BW2UI(bw)->button_set_sens(UI_BACK, sens); // Forward sens = (a_Nav_stack_ptr(bw) < a_Nav_stack_size(bw) - 1 && - !bw->nav_expecting); + !a_Bw_expecting(bw)); BW2UI(bw)->button_set_sens(UI_FORW, sens); } |