Module: wine Branch: master Commit: a5354174437aca0fc4c11da8d411bd7e710c44c6 URL: http://source.winehq.org/git/wine.git/?a=commit;h=a5354174437aca0fc4c11da8d4...
Author: Jacek Caban jacek@codeweavers.com Date: Mon Sep 3 12:52:15 2012 +0200
mshtml: Open targeted anchors in existing frames if available.
---
dlls/mshtml/htmlanchor.c | 13 +++++++++++-- dlls/mshtml/htmlwindow.c | 7 +++++-- dlls/mshtml/mshtml_private.h | 1 + 3 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/dlls/mshtml/htmlanchor.c b/dlls/mshtml/htmlanchor.c index 4575d14..d9b9417 100644 --- a/dlls/mshtml/htmlanchor.c +++ b/dlls/mshtml/htmlanchor.c @@ -96,9 +96,18 @@ static HRESULT navigate_anchor(HTMLAnchorElement *This) nsAString_Finish(&target_str); return S_OK; }else { - hres = navigate_anchor_window(This, target); + HTMLOuterWindow *top_window; + + get_top_window(This->element.node.doc->basedoc.window, &top_window); + + hres = get_frame_by_name(top_window, target, TRUE, &window); + if(FAILED(hres) || !window) { + hres = navigate_anchor_window(This, target); + nsAString_Finish(&target_str); + return hres; + } + nsAString_Finish(&target_str); - return hres; } } } diff --git a/dlls/mshtml/htmlwindow.c b/dlls/mshtml/htmlwindow.c index a95425a..1a12acc 100644 --- a/dlls/mshtml/htmlwindow.c +++ b/dlls/mshtml/htmlwindow.c @@ -356,7 +356,7 @@ static HRESULT get_frame_by_index(HTMLOuterWindow *This, PRUint32 index, HTMLOut return S_OK; }
-static HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, HTMLOuterWindow **ret) +HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, BOOL deep, HTMLOuterWindow **ret) { nsIDOMWindowCollection *nsframes; HTMLOuterWindow *window = NULL; @@ -399,6 +399,9 @@ static HRESULT get_frame_by_name(HTMLOuterWindow *This, const WCHAR *name, HTMLO window = window_iter;
SysFreeString(id); + + if(!window && deep) + get_frame_by_name(window_iter, name, TRUE, &window); }
nsIDOMWindowCollection_Release(nsframes); @@ -435,7 +438,7 @@ static HRESULT WINAPI HTMLWindow2_item(IHTMLWindow2 *iface, VARIANT *pvarIndex, case VT_BSTR: { BSTR str = V_BSTR(pvarIndex); TRACE("Getting name %s\n", wine_dbgstr_w(str)); - hres = get_frame_by_name(This->outer_window, str, &window); + hres = get_frame_by_name(This->outer_window, str, FALSE, &window); break; } default: diff --git a/dlls/mshtml/mshtml_private.h b/dlls/mshtml/mshtml_private.h index 39b491e..2fecc12 100644 --- a/dlls/mshtml/mshtml_private.h +++ b/dlls/mshtml/mshtml_private.h @@ -906,6 +906,7 @@ void set_script_mode(HTMLOuterWindow*,SCRIPTMODE) DECLSPEC_HIDDEN; BOOL find_global_prop(HTMLInnerWindow*,BSTR,DWORD,ScriptHost**,DISPID*) DECLSPEC_HIDDEN; IDispatch *get_script_disp(ScriptHost*) DECLSPEC_HIDDEN; HRESULT search_window_props(HTMLInnerWindow*,BSTR,DWORD,DISPID*) DECLSPEC_HIDDEN; +HRESULT get_frame_by_name(HTMLOuterWindow*,const WCHAR*,BOOL,HTMLOuterWindow**) DECLSPEC_HIDDEN;
HRESULT wrap_iface(IUnknown*,IUnknown*,IUnknown**) DECLSPEC_HIDDEN;