Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
7c7b7f0a
Commit
7c7b7f0a
authored
Oct 08, 2008
by
Jacek Caban
Committed by
Alexandre Julliard
Oct 09, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Use stored nsdoc in exec_hyperlink.
parent
23937c47
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
49 additions
and
56 deletions
+49
-56
editor.c
dlls/mshtml/editor.c
+49
-56
No files found.
dlls/mshtml/editor.c
View file @
7c7b7f0a
...
...
@@ -1146,13 +1146,18 @@ static INT_PTR CALLBACK hyperlink_dlgproc(HWND hwnd, UINT msg, WPARAM wparam, LP
static
HRESULT
exec_hyperlink
(
HTMLDocument
*
This
,
DWORD
cmdexecopt
,
VARIANT
*
in
,
VARIANT
*
out
)
{
nsAString
a_str
,
href_str
,
ns_url
;
nsIHTMLEditor
*
html_editor
;
nsIDOMElement
*
anchor_elem
;
PRBool
insert_link_at_caret
;
nsISelection
*
nsselection
;
BSTR
url
=
NULL
;
INT
ret
;
nsISelection
*
nsselection
;
nsIDOMDocument
*
nsdoc
;
nsresult
nsres
;
HRESULT
hres
=
E_FAIL
;
static
const
WCHAR
wszA
[]
=
{
'a'
,
0
};
static
const
WCHAR
wszHref
[]
=
{
'h'
,
'r'
,
'e'
,
'f'
,
0
};
TRACE
(
"%p, 0x%x, %p, %p
\n
"
,
This
,
cmdexecopt
,
in
,
out
);
if
(
cmdexecopt
==
OLECMDEXECOPT_DONTPROMPTUSER
)
...
...
@@ -1171,76 +1176,64 @@ static HRESULT exec_hyperlink(HTMLDocument *This, DWORD cmdexecopt, VARIANT *in,
return
OLECMDERR_E_CANCELED
;
}
if
(
This
->
nsdoc
)
{
WARN
(
"NULL nsdoc
\n
"
);
return
E_UNEXPECTED
;
}
nsselection
=
get_ns_selection
(
This
);
if
(
!
nsselection
)
return
E_FAIL
;
nsres
=
nsIWebNavigation_GetDocument
(
This
->
nscontainer
->
navigation
,
&
nsdoc
);
if
(
NS_SUCCEEDED
(
nsres
))
{
static
const
WCHAR
wszA
[]
=
{
'a'
,
0
};
static
const
WCHAR
wszHref
[]
=
{
'h'
,
'r'
,
'e'
,
'f'
,
0
};
nsIHTMLEditor
*
html_editor
;
nsIDOMNode
*
text_node
;
nsIDOMElement
*
anchor_elem
;
nsIDOMNode
*
unused_node
;
nsAString
a_str
;
nsAString
href_str
;
nsAString
ns_url
;
PRBool
insert_link_at_caret
;
nsAString_Init
(
&
a_str
,
wszA
);
nsAString_Init
(
&
href_str
,
wszHref
);
nsAString_Init
(
&
ns_url
,
url
);
/* create an element for the link */
nsIDOMDocument_CreateElement
(
nsdoc
,
&
a_str
,
&
anchor_elem
);
nsIDOMElement_SetAttribute
(
anchor_elem
,
&
href_str
,
&
ns_url
);
nsAString_Finish
(
&
href_str
);
nsAString_Finish
(
&
a_str
);
nsISelection_GetIsCollapsed
(
nsselection
,
&
insert_link_at_caret
);
/* create an element with text of URL */
if
(
insert_link_at_caret
)
{
nsIDOMDocument_CreateTextNode
(
nsdoc
,
&
ns_url
,
(
nsIDOMText
**
)
&
text_node
);
nsAString_Init
(
&
a_str
,
wszA
);
nsAString_Init
(
&
href_str
,
wszHref
);
nsAString_Init
(
&
ns_url
,
url
);
/* wrap the <a> tags around the text element */
nsIDOMElement_AppendChild
(
anchor_elem
,
text_node
,
&
unused_node
);
nsIDOMNode_Release
(
text_node
);
nsIDOMNode_Release
(
unused_node
);
}
/* create an element for the link */
nsIDOMDocument_CreateElement
(
This
->
nsdoc
,
&
a_str
,
&
anchor_elem
);
nsIDOMElement_SetAttribute
(
anchor_elem
,
&
href_str
,
&
ns_url
);
nsAString_Finish
(
&
ns_url
);
nsAString_Finish
(
&
href_str
);
nsAString_Finish
(
&
a_str
);
nsIEditor_QueryInterface
(
This
->
nscontainer
->
editor
,
&
IID_nsIHTMLEditor
,
(
void
**
)
&
html_editor
);
if
(
html_editor
)
{
if
(
insert_link_at_caret
)
{
/* add them to the document at the caret position */
nsres
=
nsIHTMLEditor_InsertElementAtSelection
(
html_editor
,
anchor_elem
,
FALSE
);
nsISelection_SelectAllChildren
(
nsselection
,
(
nsIDOMNode
*
)
anchor_elem
);
}
else
/* add them around the selection using the magic provided to us by nsIHTMLEditor */
nsres
=
nsIHTMLEditor_InsertLinkAroundSelection
(
html_editor
,
anchor_elem
);
nsIHTMLEditor_Release
(
html_editor
);
}
nsISelection_GetIsCollapsed
(
nsselection
,
&
insert_link_at_caret
);
/* create an element with text of URL */
if
(
insert_link_at_caret
)
{
nsIDOMNode
*
text_node
,
*
unused_node
;
nsIDOMDocument_CreateTextNode
(
This
->
nsdoc
,
&
ns_url
,
(
nsIDOMText
**
)
&
text_node
);
/* wrap the <a> tags around the text element */
nsIDOMElement_AppendChild
(
anchor_elem
,
text_node
,
&
unused_node
);
nsIDOMNode_Release
(
text_node
);
nsIDOMNode_Release
(
unused_node
);
}
nsAString_Finish
(
&
ns_url
);
nsIEditor_QueryInterface
(
This
->
nscontainer
->
editor
,
&
IID_nsIHTMLEditor
,
(
void
**
)
&
html_editor
);
if
(
html_editor
)
{
nsresult
nsres
;
nsIDOMElement_Release
(
anchor_elem
);
nsIDOMDocument_Release
(
nsdoc
);
if
(
insert_link_at_caret
)
{
/* add them to the document at the caret position */
nsres
=
nsIHTMLEditor_InsertElementAtSelection
(
html_editor
,
anchor_elem
,
FALSE
);
nsISelection_SelectAllChildren
(
nsselection
,
(
nsIDOMNode
*
)
anchor_elem
);
}
else
/* add them around the selection using the magic provided to us by nsIHTMLEditor */
nsres
=
nsIHTMLEditor_InsertLinkAroundSelection
(
html_editor
,
anchor_elem
);
nsIHTMLEditor_Release
(
html_editor
);
hres
=
NS_SUCCEEDED
(
nsres
)
?
S_OK
:
E_FAIL
;
}
nsISelection_Release
(
nsselection
);
nsIDOMElement_Release
(
anchor_elem
);
if
(
cmdexecopt
!=
OLECMDEXECOPT_DONTPROMPTUSER
)
SysFreeString
(
url
);
TRACE
(
"-- 0x%08x
\n
"
,
ns
res
);
TRACE
(
"-- 0x%08x
\n
"
,
h
res
);
return
hres
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment