diff --git a/src/session/session.c b/src/session/session.c index 4492781c..7f97317a 100644 --- a/src/session/session.c +++ b/src/session/session.c @@ -848,15 +848,16 @@ static void setup_session(struct session *ses, struct uri *uri, struct session *base) { if (base && have_location(base)) { - struct location *loc = mem_calloc(1, sizeof(*loc)); + ses_load(ses, get_uri_reference(cur_loc(base)->vs.uri), + NULL, NULL, CACHE_MODE_ALWAYS, TASK_FORWARD); + if (ses->doc_view && ses->doc_view->vs + && base->doc_view && base->doc_view->vs) { + struct view_state *vs = ses->doc_view->vs; - if (loc) { - copy_location(loc, cur_loc(base)); - loc->download.data = ses; - loc->download.callback = (download_callback_T *) doc_loading_callback; - add_to_history(&ses->history, loc); - load_uri(loc->vs.uri, NULL, &loc->download, PRI_MAIN, - CACHE_MODE_ALWAYS, -1); + destroy_vs(vs, 1); + copy_vs(vs, base->doc_view->vs); + + ses->doc_view->vs = vs; } } diff --git a/src/session/task.c b/src/session/task.c index f360035b..5bb96f24 100644 --- a/src/session/task.c +++ b/src/session/task.c @@ -68,7 +68,7 @@ struct task { struct session_task session_task; }; -static void +void ses_load(struct session *ses, struct uri *uri, unsigned char *target_frame, struct location *target_location, enum cache_mode cache_mode, enum task_type task_type) diff --git a/src/session/task.h b/src/session/task.h index 08caff60..1b335bac 100644 --- a/src/session/task.h +++ b/src/session/task.h @@ -19,6 +19,10 @@ struct link_def { void abort_preloading(struct session *, int); +void ses_load(struct session *ses, struct uri *uri, unsigned char *target_frame, + struct location *target_location, enum cache_mode cache_mode, + enum task_type task_type); + void ses_goto(struct session *, struct uri *, unsigned char *, struct location *, enum cache_mode, enum task_type, int); struct view_state *ses_forward(struct session *, int);