Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-fonts
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
Aleksandr Isakov
wine-fonts
Commits
1fbedd92
Commit
1fbedd92
authored
Sep 12, 2007
by
Rob Shearman
Committed by
Alexandre Julliard
Sep 12, 2007
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mshtml: Implement IDM_HYPERLINK.
parent
41a3b734
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
302 additions
and
0 deletions
+302
-0
En.rc
dlls/mshtml/En.rc
+14
-0
editor.c
dlls/mshtml/editor.c
+216
-0
nsiface.idl
dlls/mshtml/nsiface.idl
+66
-0
resource.h
dlls/mshtml/resource.h
+6
-0
No files found.
dlls/mshtml/En.rc
View file @
1fbedd92
...
...
@@ -39,3 +39,17 @@ FONT 8, "MS Shell Dlg"
DEFPUSHBUTTON "&Install", ID_DWL_INSTALL, 200, 60, 50, 15, WS_GROUP | WS_TABSTOP
PUSHBUTTON "&Cancel", IDCANCEL, 140, 60, 50, 15, WS_GROUP | WS_TABSTOP
}
IDD_HYPERLINK DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 250, 65
STYLE DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "Hyperlink"
FONT 8, "MS Shell Dlg"
{
GROUPBOX "Hyperlink Information", IDC_STATIC, 5, 5, 190, 55
LTEXT "&Type:", IDC_STATIC, 10, 22, 20, 10
COMBOBOX IDC_TYPE, 35, 20, 45, 100, WS_TABSTOP | WS_GROUP | WS_VSCROLL | CBS_DROPDOWNLIST | CBS_HASSTRINGS
LTEXT "&URL:", IDC_STATIC, 10, 42, 20, 10
EDITTEXT IDC_URL, 35, 40, 150, 14, ES_AUTOHSCROLL | WS_BORDER | WS_GROUP | WS_TABSTOP
PUSHBUTTON "OK", IDOK, 200, 10, 45, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
PUSHBUTTON "Cancel", IDCANCEL, 200, 28, 45, 14, WS_GROUP | WS_TABSTOP
}
dlls/mshtml/editor.c
View file @
1fbedd92
...
...
@@ -52,6 +52,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(mshtml);
#define NSCMD_FONTFACE "cmd_fontFace"
#define NSCMD_INDENT "cmd_indent"
#define NSCMD_INSERTHR "cmd_insertHR"
#define NSCMD_INSERTLINKNOUI "cmd_insertLinkNoUI"
#define NSCMD_ITALIC "cmd_italic"
#define NSCMD_LINENEXT "cmd_lineNext"
#define NSCMD_LINEPREVIOUS "cmd_linePrevious"
...
...
@@ -1120,7 +1121,221 @@ static HRESULT query_edit_status(HTMLDocument *This, OLECMD *cmd)
TRACE
(
"CGID_MSHTML: IDM_OUTDENT
\n
"
);
cmd
->
cmdf
=
query_ns_edit_status
(
This
,
NULL
);
break
;
case
IDM_HYPERLINK
:
TRACE
(
"CGID_MSHTML: IDM_HYPERLINK
\n
"
);
cmd
->
cmdf
=
query_ns_edit_status
(
This
,
NULL
);
break
;
}
return
S_OK
;
}
static
INT_PTR
CALLBACK
hyperlink_dlgproc
(
HWND
hwnd
,
UINT
msg
,
WPARAM
wparam
,
LPARAM
lparam
)
{
static
const
WCHAR
wszOther
[]
=
{
'('
,
'o'
,
't'
,
'h'
,
'e'
,
'r'
,
')'
,
0
};
switch
(
msg
)
{
case
WM_INITDIALOG
:
{
static
const
WCHAR
wszFile
[]
=
{
'f'
,
'i'
,
'l'
,
'e'
,
':'
,
0
};
static
const
WCHAR
wszFtp
[]
=
{
'f'
,
't'
,
'p'
,
':'
,
0
};
static
const
WCHAR
wszHttp
[]
=
{
'h'
,
't'
,
't'
,
'p'
,
':'
,
0
};
static
const
WCHAR
wszHttps
[]
=
{
'h'
,
't'
,
't'
,
'p'
,
's'
,
':'
,
0
};
static
const
WCHAR
wszMailto
[]
=
{
'm'
,
'a'
,
'i'
,
'l'
,
't'
,
'o'
,
':'
,
0
};
static
const
WCHAR
wszNews
[]
=
{
'n'
,
'e'
,
'w'
,
's'
,
':'
,
0
};
INT
def_idx
;
HWND
hwndCB
=
GetDlgItem
(
hwnd
,
IDC_TYPE
);
HWND
hwndURL
=
GetDlgItem
(
hwnd
,
IDC_URL
);
INT
len
;
SetWindowLongPtrW
(
hwnd
,
DWLP_USER
,
lparam
);
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszOther
);
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszFile
);
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszFtp
);
def_idx
=
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszHttp
);
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszHttps
);
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszMailto
);
SendMessageW
(
hwndCB
,
CB_INSERTSTRING
,
-
1
,
(
LPARAM
)
wszNews
);
SendMessageW
(
hwndCB
,
CB_SETCURSEL
,
def_idx
,
0
);
/* force the updating of the URL edit box */
SendMessageW
(
hwnd
,
WM_COMMAND
,
MAKEWPARAM
(
IDC_TYPE
,
CBN_SELCHANGE
),
(
LPARAM
)
hwndCB
);
SetFocus
(
hwndURL
);
len
=
SendMessageW
(
hwndURL
,
WM_GETTEXTLENGTH
,
0
,
0
);
SendMessageW
(
hwndURL
,
EM_SETSEL
,
0
,
len
);
return
FALSE
;
}
case
WM_COMMAND
:
switch
(
wparam
)
{
case
MAKEWPARAM
(
IDCANCEL
,
BN_CLICKED
):
EndDialog
(
hwnd
,
wparam
);
return
TRUE
;
case
MAKEWPARAM
(
IDOK
,
BN_CLICKED
):
{
BSTR
*
url
=
(
BSTR
*
)
GetWindowLongPtrW
(
hwnd
,
DWLP_USER
);
HWND
hwndURL
=
GetDlgItem
(
hwnd
,
IDC_URL
);
INT
len
=
GetWindowTextLengthW
(
hwndURL
);
*
url
=
SysAllocStringLen
(
NULL
,
len
+
1
);
GetWindowTextW
(
hwndURL
,
*
url
,
len
+
1
);
EndDialog
(
hwnd
,
wparam
);
return
TRUE
;
}
case
MAKEWPARAM
(
IDC_TYPE
,
CBN_SELCHANGE
):
{
HWND
hwndURL
=
GetDlgItem
(
hwnd
,
IDC_URL
);
INT
item
;
INT
len
;
LPWSTR
type
;
LPWSTR
url
;
LPWSTR
p
;
static
const
WCHAR
wszSlashSlash
[]
=
{
'/'
,
'/'
};
/* get string of currently selected hyperlink type */
item
=
SendMessageW
((
HWND
)
lparam
,
CB_GETCURSEL
,
0
,
0
);
len
=
SendMessageW
((
HWND
)
lparam
,
CB_GETLBTEXTLEN
,
item
,
0
);
type
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
len
+
1
)
*
sizeof
(
WCHAR
));
SendMessageW
((
HWND
)
lparam
,
CB_GETLBTEXT
,
item
,
(
LPARAM
)
type
);
if
(
!
strcmpW
(
type
,
wszOther
))
*
type
=
'\0'
;
/* get current URL */
len
=
GetWindowTextLengthW
(
hwndURL
);
url
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
len
+
strlenW
(
type
)
+
3
)
*
sizeof
(
WCHAR
));
GetWindowTextW
(
hwndURL
,
url
,
len
+
1
);
/* strip off old protocol */
p
=
strchrW
(
url
,
':'
);
if
(
p
&&
p
[
1
]
==
'/'
&&
p
[
2
]
==
'/'
)
p
+=
3
;
if
(
!
p
)
p
=
url
;
memmove
(
url
+
(
*
type
!=
'\0'
?
strlenW
(
type
)
+
2
:
0
),
p
,
(
len
+
1
-
(
p
-
url
))
*
sizeof
(
WCHAR
));
/* add new protocol */
if
(
*
type
!=
'\0'
)
{
memcpy
(
url
,
type
,
strlenW
(
type
)
*
sizeof
(
WCHAR
));
memcpy
(
url
+
strlenW
(
type
),
wszSlashSlash
,
sizeof
(
wszSlashSlash
));
}
SetWindowTextW
(
hwndURL
,
url
);
HeapFree
(
GetProcessHeap
(),
0
,
url
);
HeapFree
(
GetProcessHeap
(),
0
,
type
);
return
TRUE
;
}
}
return
FALSE
;
case
WM_CLOSE
:
EndDialog
(
hwnd
,
IDCANCEL
);
return
TRUE
;
default:
return
FALSE
;
}
}
static
HRESULT
exec_hyperlink
(
HTMLDocument
*
This
,
DWORD
cmdexecopt
,
VARIANT
*
in
,
VARIANT
*
out
)
{
BSTR
url
=
NULL
;
INT
ret
;
nsAString
ns_url
;
PRBool
insert_link_at_caret
;
nsISelection
*
nsselection
;
FIXME
(
"%p, 0x%x, %p, %p
\n
"
,
This
,
cmdexecopt
,
in
,
out
);
if
(
cmdexecopt
==
OLECMDEXECOPT_DONTPROMPTUSER
)
{
if
(
!
in
||
V_VT
(
in
)
!=
VT_BSTR
)
{
WARN
(
"invalid arg
\n
"
);
return
E_INVALIDARG
;
}
url
=
V_BSTR
(
in
);
}
else
{
ret
=
DialogBoxParamW
(
hInst
,
MAKEINTRESOURCEW
(
IDD_HYPERLINK
),
NULL
/* FIXME */
,
hyperlink_dlgproc
,
(
LPARAM
)
&
url
);
if
(
ret
!=
IDOK
)
return
OLECMDERR_E_CANCELED
;
}
nsselection
=
get_ns_selection
(
This
);
if
(
!
nsselection
)
return
E_FAIL
;
nsAString_Init
(
&
ns_url
,
url
);
nsISelection_GetIsCollapsed
(
nsselection
,
&
insert_link_at_caret
);
if
(
insert_link_at_caret
)
{
static
const
WCHAR
wszA
[]
=
{
'a'
,
0
};
static
const
WCHAR
wszHref
[]
=
{
'h'
,
'r'
,
'e'
,
'f'
,
0
};
nsIHTMLEditor
*
html_editor
;
nsIDOMDocument
*
nsdoc
;
nsIDOMNode
*
text_node
;
nsIDOMElement
*
anchor_elem
;
nsIDOMNode
*
unused_node
;
nsAString
a_str
;
nsAString
href_str
;
nsresult
nsres
;
nsres
=
nsIWebNavigation_GetDocument
(
This
->
nscontainer
->
navigation
,
&
nsdoc
);
if
(
NS_FAILED
(
nsres
))
return
E_FAIL
;
nsAString_Init
(
&
a_str
,
wszA
);
nsAString_Init
(
&
href_str
,
wszHref
);
/* 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
);
/* create an element with text of URL */
nsIDOMDocument_CreateTextNode
(
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
);
nsIEditor_QueryInterface
(
This
->
nscontainer
->
editor
,
&
IID_nsIHTMLEditor
,
(
void
**
)
&
html_editor
);
if
(
html_editor
)
{
/* add them to the document at the caret position */
nsres
=
nsIHTMLEditor_InsertElementAtSelection
(
html_editor
,
anchor_elem
,
FALSE
);
nsIHTMLEditor_Release
(
html_editor
);
}
nsISelection_SelectAllChildren
(
nsselection
,
(
nsIDOMNode
*
)
anchor_elem
);
nsIDOMElement_Release
(
anchor_elem
);
nsIDOMDocument_Release
(
nsdoc
);
}
else
{
nsICommandParams
*
nsparam
=
create_nscommand_params
();
nsICommandParams_SetStringValue
(
nsparam
,
NSSTATE_ATTRIBUTE
,
&
ns_url
);
do_ns_command
(
This
->
nscontainer
,
NSCMD_INSERTLINKNOUI
,
nsparam
);
nsICommandParams_Release
(
nsparam
);
}
nsAString_Finish
(
&
ns_url
);
nsISelection_Release
(
nsselection
);
if
(
cmdexecopt
!=
OLECMDEXECOPT_DONTPROMPTUSER
)
SysFreeString
(
url
);
return
S_OK
;
}
...
...
@@ -1151,6 +1366,7 @@ const cmdtable_t editmode_cmds[] = {
{
IDM_INDENT
,
query_edit_status
,
exec_indent
},
{
IDM_OUTDENT
,
query_edit_status
,
exec_outdent
},
{
IDM_COMPOSESETTINGS
,
NULL
,
exec_composesettings
},
{
IDM_HYPERLINK
,
query_edit_status
,
exec_hyperlink
},
{
0
,
NULL
,
NULL
}
};
...
...
dlls/mshtml/nsiface.idl
View file @
1fbedd92
...
...
@@ -1976,6 +1976,72 @@ interface nsIEditor : nsISupports
nsresult DebugUnitTests([out] PRInt32 *outNumTests, [out] PRInt32 *outNumTestsFailed);
}
[
object,
uuid(afc36593-5787-4420-93d9-b2c0ccbf0cad)
]
interface nsIHTMLEditor : nsISupports
{
nsresult AddDefaultProperty([in] nsIAtom *aProperty, [in] nsAString *aAttribute, [in] nsAString *aValue);
nsresult RemoveDefaultProperty([in] nsIAtom *aProperty, [in] nsAString *aAttribute, [in] nsAString *aValue);
nsresult RemoveAllDefaultProperties();
nsresult SetCSSInlineProperty([in] nsIAtom *aProperty, [in] nsAString *aAttribute, [in] nsAString *aValue);
nsresult SetInlineProperty([in] nsIAtom *aProperty, [in] nsAString *aAttribute, [in] nsAString *aValue);
nsresult GetInlineProperty([in] nsIAtom *aProperty, [in] nsAString *aAttribute, [in] nsAString *aValue, [out] PRBool *aFirst, [out] PRBool *aAny, [out] PRBool *aAll);
nsresult GetInlinePropertyWithAttrValue([in] nsIAtom *aProperty, [in] nsAString *aAttribute, [in] nsAString *aValue, [out] PRBool *aFirst, [out] PRBool *aAny, [out] PRBool *aAll, [out] nsAString *_retval);
nsresult RemoveAllInlineProperties();
nsresult RemoveInlineProperty([in] nsIAtom *aProperty, [in] nsAString *aAttribute);
nsresult IncreaseFontSize();
nsresult DecreaseFontSize();
nsresult CanDrag([in] nsIDOMEvent *aEvent, [out] PRBool *_retval);
nsresult DoDrag([in] nsIDOMEvent *aEvent);
nsresult InsertFromDrop([in] nsIDOMEvent *aEvent);
nsresult NodeIsBlock([in] nsIDOMNode *node, PRBool *_retval);
nsresult InsertHTML([in] nsAString *aInputString);
nsresult PasteNoFormatting([in] PRInt32 aSelectionType);
nsresult RebuildDocumentFromSource([in] nsAString *aSourceString);
nsresult InsertHTMLWithContext([in] nsAString *aInputString, [in] nsAString *aContextStr, [in] nsAString *aInfoStr, [in] nsAString *aFlavor, [in] nsIDOMDocument *aSourceDoc, [in] nsIDOMNode *aDestinationNode, [in] PRInt32 aDestinationOffset, [in] PRBool aDeleteSelection);
nsresult InsertElementAtSelection([in] nsIDOMElement *aElement, [in] PRBool aDeleteSelection);
nsresult SetDocumentTitle([in] nsAString *aTitle);
nsresult UpdateBaseURL();
nsresult SelectElement([in] nsIDOMElement *aElement);
nsresult SetCaretAfterElement([in] nsIDOMElement *aElement);
nsresult SetParagraphFormat([in] nsAString *aParagraphFormat);
nsresult GetParagraphState([out] PRBool *aMixed, [out] nsAString *_retval);
nsresult GetFontFaceState([out] PRBool *aMixed, [out] nsAString *_retval);
nsresult GetFontColorState([out] PRBool *aMixed, [out] nsAString *_retval);
nsresult GetBackgroundColorState([out] PRBool *aMixed, [out] nsAString *_retval);
nsresult GetHighlightColorState([out] PRBool *aMixed, [out] nsAString *_retval);
nsresult GetListState([out] PRBool *aMixed, [out] PRBool *aOL, [out] PRBool *aUL, [out] PRBool *aDL);
nsresult GetListItemState([out] PRBool *aMixed, [out] PRBool *aLI, [out] PRBool *aDT, [out] PRBool *aDD);
nsresult GetAlignment([out] PRBool *aMixed, [out] PRInt16 *aAlign);
nsresult GetIndentState([out] PRBool *aCanIndent, [out] PRBool *aCanOutdent);
nsresult MakeOrChangeList([in] nsAString *aListType, [in] PRBool entireList, [in] nsAString *aBulletType);
nsresult RemoveList([in] nsAString *aListType);
nsresult Indent([in] nsAString *aIndent);
nsresult Align([in] nsAString *aAlign);
nsresult GetElementOrParentByTagName([in] nsAString *aTagName, [in] nsIDOMNode *aNode, [out] nsIDOMElement **_retval);
nsresult GetSelectedElement([in] nsAString *aTagName, [out] nsIDOMElement **_retval);
nsresult GetHeadContentsAsHTML([out] nsAString *_retval);
nsresult ReplaceHeadContentsWithHTML([in] nsAString *aSourceToInsert);
nsresult CreateElementWithDefaults([in] nsAString *aTagName, [out] nsIDOMElement **_retval);
nsresult InsertLinkAroundSelection([in] nsIDOMElement *aAnchorElement);
nsresult SetBackgroundColor([in] nsAString *aColor);
nsresult SetBodyAttribute([in] nsAString *aAttr, [in] nsAString *aValue);
nsresult IgnoreSpuriousDragEvent([in] PRBool aIgnoreSpuriousDragEvent);
nsresult GetLinkedObjects([out] nsISupportsArray **_retval);
nsresult GetIsCSSEnabled([out] PRBool *_retval);
nsresult SetIsCSSEnabled([in] PRBool prb);
nsresult AddInsertionListener([in] nsIContentFilter *inFilter);
nsresult RemoveInsertionListener([in] nsIContentFilter *inFilter);
nsresult CreateAnonymousElement([in] nsAString *aTag, [in] nsIDOMNode *aParentNode, [in] nsAString *aAnonClass, [in] PRBool aIsCreatedHidden, [out] nsIDOMElement **_retval);
nsresult GetSelectionContainer([out] nsIDOMElement **_retval);
nsresult CheckSelectionStateForAnonymousButtons([in] nsISelection *aSelection);
nsresult IsAnonymousElement([in] nsIDOMElement *aElement, [out] PRBool *_retval);
nsresult GetReturnInParagraphCreatesNewParagraph([out] PRBool *_retval);
nsresult SetReturnInParagraphCreatesNewParagraph([in] PRBool prb);
}
/*
* NOTE:
* This is a private Wine interface that is implemented by our implementation
...
...
dlls/mshtml/resource.h
View file @
1fbedd92
...
...
@@ -49,3 +49,9 @@
#define IDM_DUMPLAYOUTRECTS 6017
#define _IDM_REFRESH 6042
#define IDD_HYPERLINK 8000
#define IDC_STATIC 9000
#define IDC_URL 9001
#define IDC_TYPE 9002
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