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
43ecfe03
Commit
43ecfe03
authored
Jun 26, 2012
by
Erich Hoover
Committed by
Alexandre Julliard
Jun 28, 2012
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hhctrl.ocx: Use document title for subtopics in the index.
parent
5874d6f1
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
63 additions
and
5 deletions
+63
-5
chm.c
dlls/hhctrl.ocx/chm.c
+57
-4
help.c
dlls/hhctrl.ocx/help.c
+2
-0
hhctrl.h
dlls/hhctrl.ocx/hhctrl.h
+1
-0
stream.h
dlls/hhctrl.ocx/stream.h
+3
-1
No files found.
dlls/hhctrl.ocx/chm.c
View file @
43ecfe03
...
...
@@ -20,6 +20,7 @@
*/
#include "hhctrl.h"
#include "stream.h"
#include "winreg.h"
#include "shlwapi.h"
...
...
@@ -27,10 +28,6 @@
WINE_DEFAULT_DEBUG_CHANNEL
(
htmlhelp
);
#define BLOCK_BITS 12
#define BLOCK_SIZE (1 << BLOCK_BITS)
#define BLOCK_MASK (BLOCK_SIZE-1)
/* Reads a string from the #STRINGS section in the CHM file */
static
LPCSTR
GetChmString
(
CHMInfo
*
chm
,
DWORD
offset
)
{
...
...
@@ -413,6 +410,62 @@ IStream *GetChmStream(CHMInfo *info, LPCWSTR parent_chm, ChmPath *chm_file)
return
stream
;
}
/*
* Retrieve a CHM document and parse the data from the <title> element to get the document's title.
*/
WCHAR
*
GetDocumentTitle
(
CHMInfo
*
info
,
LPCWSTR
document
)
{
strbuf_t
node
,
node_name
,
content
;
WCHAR
*
document_title
=
NULL
;
IStream
*
str
=
NULL
;
IStorage
*
storage
;
stream_t
stream
;
HRESULT
hres
;
TRACE
(
"%s
\n
"
,
debugstr_w
(
document
));
storage
=
info
->
pStorage
;
if
(
!
storage
)
{
WARN
(
"Could not open storage to obtain the title for a document.
\n
"
);
return
NULL
;
}
IStorage_AddRef
(
storage
);
hres
=
IStorage_OpenStream
(
storage
,
document
,
NULL
,
STGM_READ
,
0
,
&
str
);
IStorage_Release
(
storage
);
if
(
FAILED
(
hres
))
WARN
(
"Could not open stream: %08x
\n
"
,
hres
);
stream_init
(
&
stream
,
str
);
strbuf_init
(
&
node
);
strbuf_init
(
&
content
);
strbuf_init
(
&
node_name
);
while
(
next_node
(
&
stream
,
&
node
))
{
get_node_name
(
&
node
,
&
node_name
);
TRACE
(
"%s
\n
"
,
node
.
buf
);
if
(
!
strcasecmp
(
node_name
.
buf
,
"title"
))
{
if
(
next_content
(
&
stream
,
&
content
)
&&
content
.
len
>
1
)
{
document_title
=
strdupnAtoW
(
&
content
.
buf
[
1
],
content
.
len
-
1
);
FIXME
(
"magic: %s
\n
"
,
debugstr_w
(
document_title
));
break
;
}
}
strbuf_zero
(
&
node
);
}
strbuf_free
(
&
node
);
strbuf_free
(
&
content
);
strbuf_free
(
&
node_name
);
IStream_Release
(
str
);
return
document_title
;
}
/* Opens the CHM file for reading */
CHMInfo
*
OpenCHM
(
LPCWSTR
szFile
)
{
...
...
dlls/hhctrl.ocx/help.c
View file @
43ecfe03
...
...
@@ -634,6 +634,8 @@ static LRESULT OnTopicChange(HHInfo *info, void *user_data)
IndexSubItem
*
item
=
&
iiter
->
items
[
i
];
WCHAR
*
name
=
iiter
->
keyword
;
if
(
!
item
->
name
)
item
->
name
=
GetDocumentTitle
(
info
->
pCHMInfo
,
item
->
local
);
if
(
item
->
name
)
name
=
item
->
name
;
memset
(
&
lvi
,
0
,
sizeof
(
lvi
));
...
...
dlls/hhctrl.ocx/hhctrl.h
View file @
43ecfe03
...
...
@@ -189,6 +189,7 @@ CHMInfo *CloseCHM(CHMInfo *pCHMInfo) DECLSPEC_HIDDEN;
void
SetChmPath
(
ChmPath
*
,
LPCWSTR
,
LPCWSTR
)
DECLSPEC_HIDDEN
;
IStream
*
GetChmStream
(
CHMInfo
*
,
LPCWSTR
,
ChmPath
*
)
DECLSPEC_HIDDEN
;
LPWSTR
FindContextAlias
(
CHMInfo
*
,
DWORD
)
DECLSPEC_HIDDEN
;
WCHAR
*
GetDocumentTitle
(
CHMInfo
*
,
LPCWSTR
)
DECLSPEC_HIDDEN
;
HHInfo
*
CreateHelpViewer
(
LPCWSTR
)
DECLSPEC_HIDDEN
;
void
ReleaseHelpViewer
(
HHInfo
*
)
DECLSPEC_HIDDEN
;
...
...
dlls/hhctrl.ocx/stream.h
View file @
43ecfe03
...
...
@@ -19,7 +19,9 @@
#ifndef HHCTRL_STREAM_H
#define HHCTRL_STREAM_H
#define BLOCK_SIZE 0x1000
#define BLOCK_BITS 12
#define BLOCK_SIZE (1 << BLOCK_BITS)
#define BLOCK_MASK (BLOCK_SIZE-1)
typedef
struct
{
char
*
buf
;
...
...
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