mirror of
https://github.com/reactos/wine.git
synced 2025-05-13 10:56:08 +00:00
ieframe: Fixed index of stored history when loading from history.
This commit is contained in:
parent
15937c99eb
commit
00226935c7
@ -195,6 +195,12 @@ void set_doc_state(DocHost *This, READYSTATE doc_state)
|
||||
|
||||
static void update_ready_state(DocHost *This, READYSTATE ready_state)
|
||||
{
|
||||
if(ready_state > READYSTATE_LOADING && This->travellog.loading_pos != -1) {
|
||||
WARN("histupdate not notified\n");
|
||||
This->travellog.position = This->travellog.loading_pos;
|
||||
This->travellog.loading_pos = -1;
|
||||
}
|
||||
|
||||
if(ready_state > READYSTATE_LOADING && This->doc_state <= READYSTATE_LOADING && !This->browser_service /* FIXME */)
|
||||
notif_complete(This, DISPID_NAVIGATECOMPLETE2);
|
||||
|
||||
@ -331,33 +337,43 @@ static void update_travellog(DocHost *This)
|
||||
{
|
||||
travellog_entry_t *new_entry;
|
||||
|
||||
if(!This->travellog.log) {
|
||||
This->travellog.log = heap_alloc(4 * sizeof(*This->travellog.log));
|
||||
if(!This->travellog.log)
|
||||
return;
|
||||
if(This->travellog.loading_pos == -1) {
|
||||
/* Clear forward history. */
|
||||
if(!This->travellog.log) {
|
||||
This->travellog.log = heap_alloc(4 * sizeof(*This->travellog.log));
|
||||
if(!This->travellog.log)
|
||||
return;
|
||||
|
||||
This->travellog.size = 4;
|
||||
}else if(This->travellog.size < This->travellog.position+1) {
|
||||
travellog_entry_t *new_travellog;
|
||||
This->travellog.size = 4;
|
||||
}else if(This->travellog.size < This->travellog.position+1) {
|
||||
travellog_entry_t *new_travellog;
|
||||
|
||||
new_travellog = heap_realloc(This->travellog.log, This->travellog.size*2*sizeof(*This->travellog.log));
|
||||
if(!new_travellog)
|
||||
return;
|
||||
new_travellog = heap_realloc(This->travellog.log, This->travellog.size*2*sizeof(*This->travellog.log));
|
||||
if(!new_travellog)
|
||||
return;
|
||||
|
||||
This->travellog.log = new_travellog;
|
||||
This->travellog.size *= 2;
|
||||
This->travellog.log = new_travellog;
|
||||
This->travellog.size *= 2;
|
||||
}
|
||||
|
||||
while(This->travellog.length > This->travellog.position)
|
||||
heap_free(This->travellog.log[--This->travellog.length].url);
|
||||
}
|
||||
|
||||
while(This->travellog.length > This->travellog.position)
|
||||
heap_free(This->travellog.log[--This->travellog.length].url);
|
||||
|
||||
new_entry = This->travellog.log + This->travellog.position;
|
||||
|
||||
new_entry->url = heap_strdupW(This->url);
|
||||
if(!new_entry->url)
|
||||
return;
|
||||
|
||||
This->travellog.position++;
|
||||
if(This->travellog.loading_pos == -1) {
|
||||
This->travellog.position++;
|
||||
}else {
|
||||
This->travellog.position = This->travellog.loading_pos;
|
||||
This->travellog.loading_pos = -1;
|
||||
}
|
||||
if(This->travellog.position > This->travellog.length)
|
||||
This->travellog.length = This->travellog.position;
|
||||
}
|
||||
|
||||
void create_doc_view_hwnd(DocHost *This)
|
||||
@ -975,6 +991,8 @@ void DocHost_Init(DocHost *This, IWebBrowser2 *wb, const IDocHostContainerVtbl*
|
||||
This->ready_state = READYSTATE_UNINITIALIZED;
|
||||
list_init(&This->task_queue);
|
||||
|
||||
This->travellog.loading_pos = -1;
|
||||
|
||||
DocHost_ClientSite_Init(This);
|
||||
DocHost_Frame_Init(This);
|
||||
|
||||
|
@ -158,6 +158,7 @@ struct DocHost {
|
||||
unsigned size;
|
||||
unsigned length;
|
||||
unsigned position;
|
||||
int loading_pos;
|
||||
} travellog;
|
||||
|
||||
ConnectionPointContainer cps;
|
||||
|
@ -1068,7 +1068,8 @@ HRESULT go_back(DocHost *This)
|
||||
return E_FAIL;
|
||||
}
|
||||
|
||||
url = This->travellog.log[--This->travellog.position].url;
|
||||
This->travellog.loading_pos = This->travellog.position-1;
|
||||
url = This->travellog.log[This->travellog.loading_pos].url;
|
||||
|
||||
if(This->doc_navigate) {
|
||||
hres = async_doc_navigate(This, url, NULL, NULL, 0, FALSE);
|
||||
|
@ -726,6 +726,7 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
|
||||
DWORD dwFlags)
|
||||
{
|
||||
ShellBrowser *This = impl_from_IDocObjectService(iface);
|
||||
DocHost *doc_host = This->doc_host;
|
||||
IHTMLPrivateWindow *priv_window;
|
||||
VARIANTARG params[2];
|
||||
DISPPARAMS dp = {params, NULL, 2, 0};
|
||||
@ -735,6 +736,12 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
|
||||
|
||||
TRACE("%p %p %x\n", This, pHTMLWindow2, dwFlags);
|
||||
|
||||
if(doc_host->travellog.loading_pos != -1) {
|
||||
WARN("histupdate not notified\n");
|
||||
doc_host->travellog.position = doc_host->travellog.loading_pos;
|
||||
doc_host->travellog.loading_pos = -1;
|
||||
}
|
||||
|
||||
hres = IHTMLWindow2_QueryInterface(pHTMLWindow2, &IID_IHTMLPrivateWindow, (void**)&priv_window);
|
||||
if(FAILED(hres))
|
||||
return hres;
|
||||
@ -751,7 +758,7 @@ static HRESULT WINAPI DocObjectService_FireNavigateComplete2(
|
||||
V_VARIANTREF(params) = &url_var;
|
||||
|
||||
V_VT(params+1) = VT_DISPATCH;
|
||||
V_DISPATCH(params+1) = (IDispatch*)This->doc_host->wb;
|
||||
V_DISPATCH(params+1) = (IDispatch*)doc_host->wb;
|
||||
|
||||
V_VT(&url_var) = VT_BSTR;
|
||||
V_BSTR(&url_var) = url;
|
||||
|
Loading…
x
Reference in New Issue
Block a user