aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/bw.c25
-rw-r--r--src/bw.h12
-rw-r--r--src/html.cc2
-rw-r--r--src/nav.c29
-rw-r--r--src/uicmd.cc2
5 files changed, 47 insertions, 23 deletions
diff --git a/src/bw.c b/src/bw.c
index 7f4785bb..1dfc5a08 100644
--- a/src/bw.c
+++ b/src/bw.c
@@ -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;
+}
+
diff --git a/src/bw.h b/src/bw.h
index 4b915b5c..590af4fb 100644
--- a/src/bw.h
+++ b/src/bw.h
@@ -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
diff --git a/src/nav.c b/src/nav.c
index 31f9e92d..8dbb5044 100644
--- a/src/nav.c
+++ b/src/nav.c
@@ -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);
}