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
c32fa348
Commit
c32fa348
authored
Aug 03, 2010
by
David Hedberg
Committed by
Alexandre Julliard
Aug 03, 2010
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
explorerframe: Add IOleWindow implementation.
parent
0ea424e7
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
151 additions
and
1 deletion
+151
-1
nstc.c
dlls/explorerframe/nstc.c
+62
-0
nstc.c
dlls/explorerframe/tests/nstc.c
+89
-1
No files found.
dlls/explorerframe/nstc.c
View file @
c32fa348
...
...
@@ -36,6 +36,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(nstc);
typedef
struct
{
const
INameSpaceTreeControl2Vtbl
*
lpVtbl
;
const
IOleWindowVtbl
*
lpowVtbl
;
LONG
ref
;
HWND
hwnd_main
;
...
...
@@ -207,6 +208,10 @@ static HRESULT WINAPI NSTC2_fnQueryInterface(INameSpaceTreeControl2* iface,
{
*
ppvObject
=
This
;
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IOleWindow
))
{
*
ppvObject
=
&
This
->
lpowVtbl
;
}
if
(
*
ppvObject
)
{
...
...
@@ -531,6 +536,62 @@ static const INameSpaceTreeControl2Vtbl vt_INameSpaceTreeControl2 = {
NSTC2_fnGetControlStyle2
};
/**************************************************************************
* IOleWindow Implementation
*/
static
inline
NSTC2Impl
*
impl_from_IOleWindow
(
IOleWindow
*
iface
)
{
return
(
NSTC2Impl
*
)((
char
*
)
iface
-
FIELD_OFFSET
(
NSTC2Impl
,
lpowVtbl
));
}
static
HRESULT
WINAPI
IOW_fnQueryInterface
(
IOleWindow
*
iface
,
REFIID
riid
,
void
**
ppvObject
)
{
NSTC2Impl
*
This
=
impl_from_IOleWindow
(
iface
);
TRACE
(
"%p
\n
"
,
This
);
return
NSTC2_fnQueryInterface
((
INameSpaceTreeControl2
*
)
This
,
riid
,
ppvObject
);
}
static
ULONG
WINAPI
IOW_fnAddRef
(
IOleWindow
*
iface
)
{
NSTC2Impl
*
This
=
impl_from_IOleWindow
(
iface
);
TRACE
(
"%p
\n
"
,
This
);
return
NSTC2_fnAddRef
((
INameSpaceTreeControl2
*
)
This
);
}
static
ULONG
WINAPI
IOW_fnRelease
(
IOleWindow
*
iface
)
{
NSTC2Impl
*
This
=
impl_from_IOleWindow
(
iface
);
TRACE
(
"%p
\n
"
,
This
);
return
NSTC2_fnRelease
((
INameSpaceTreeControl2
*
)
This
);
}
static
HRESULT
WINAPI
IOW_fnGetWindow
(
IOleWindow
*
iface
,
HWND
*
phwnd
)
{
NSTC2Impl
*
This
=
impl_from_IOleWindow
(
iface
);
TRACE
(
"%p (%p)
\n
"
,
This
,
phwnd
);
*
phwnd
=
This
->
hwnd_main
;
return
S_OK
;
}
static
HRESULT
WINAPI
IOW_fnContextSensitiveHelp
(
IOleWindow
*
iface
,
BOOL
fEnterMode
)
{
NSTC2Impl
*
This
=
impl_from_IOleWindow
(
iface
);
TRACE
(
"%p (%d)
\n
"
,
This
,
fEnterMode
);
/* Not implemented */
return
E_NOTIMPL
;
}
static
const
IOleWindowVtbl
vt_IOleWindow
=
{
IOW_fnQueryInterface
,
IOW_fnAddRef
,
IOW_fnRelease
,
IOW_fnGetWindow
,
IOW_fnContextSensitiveHelp
};
HRESULT
NamespaceTreeControl_Constructor
(
IUnknown
*
pUnkOuter
,
REFIID
riid
,
void
**
ppv
)
{
NSTC2Impl
*
nstc
;
...
...
@@ -548,6 +609,7 @@ HRESULT NamespaceTreeControl_Constructor(IUnknown *pUnkOuter, REFIID riid, void
nstc
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sizeof
(
NSTC2Impl
));
nstc
->
ref
=
1
;
nstc
->
lpVtbl
=
&
vt_INameSpaceTreeControl2
;
nstc
->
lpowVtbl
=
&
vt_IOleWindow
;
ret
=
INameSpaceTreeControl_QueryInterface
((
INameSpaceTreeControl
*
)
nstc
,
riid
,
ppv
);
INameSpaceTreeControl_Release
((
INameSpaceTreeControl
*
)
nstc
);
...
...
dlls/explorerframe/tests/nstc.c
View file @
c32fa348
...
...
@@ -34,7 +34,9 @@ static HWND hwnd;
static
BOOL
test_initialization
(
void
)
{
INameSpaceTreeControl
*
pnstc
;
IOleWindow
*
pow
;
IUnknown
*
punk
;
HWND
hwnd_host1
;
LONG
lres
;
HRESULT
hr
;
RECT
rc
;
...
...
@@ -60,8 +62,89 @@ static BOOL test_initialization(void)
hr
=
INameSpaceTreeControl_Initialize
(
pnstc
,
(
HWND
)
0xDEADBEEF
,
&
rc
,
0
);
ok
(
hr
==
HRESULT_FROM_WIN32
(
ERROR_INVALID_WINDOW_HANDLE
),
"Got (0x%08x)
\n
"
,
hr
);
hr
=
INameSpaceTreeControl_QueryInterface
(
pnstc
,
&
IID_IOleWindow
,
(
void
**
)
&
pow
);
ok
(
hr
==
S_OK
,
"Got (0x%08x)
\n
"
,
hr
);
if
(
SUCCEEDED
(
hr
))
{
hr
=
IOleWindow_GetWindow
(
pow
,
&
hwnd_host1
);
ok
(
hr
==
S_OK
,
"Got (0x%08x)
\n
"
,
hr
);
ok
(
hwnd_host1
==
NULL
,
"hwnd is not null.
\n
"
);
hr
=
IOleWindow_ContextSensitiveHelp
(
pow
,
TRUE
);
ok
(
hr
==
E_NOTIMPL
,
"Got (0x%08x)
\n
"
,
hr
);
hr
=
IOleWindow_ContextSensitiveHelp
(
pow
,
FALSE
);
ok
(
hr
==
E_NOTIMPL
,
"Got (0x%08x)
\n
"
,
hr
);
IOleWindow_Release
(
pow
);
}
hr
=
INameSpaceTreeControl_Initialize
(
pnstc
,
hwnd
,
NULL
,
0
);
ok
(
hr
==
S_OK
,
"Got (0x%08x)
\n
"
,
hr
);
hr
=
INameSpaceTreeControl_QueryInterface
(
pnstc
,
&
IID_IOleWindow
,
(
void
**
)
&
pow
);
ok
(
hr
==
S_OK
,
"Got 0x%08x
\n
"
,
hr
);
if
(
SUCCEEDED
(
hr
))
{
static
const
CHAR
namespacetree
[]
=
"NamespaceTreeControl"
;
char
buf
[
1024
];
LONG
style
,
expected_style
;
HWND
hwnd_tv
;
hr
=
IOleWindow_GetWindow
(
pow
,
&
hwnd_host1
);
ok
(
hr
==
S_OK
,
"Got (0x%08x)
\n
"
,
hr
);
ok
(
hwnd_host1
!=
NULL
,
"hwnd_host1 is null.
\n
"
);
buf
[
0
]
=
'\0'
;
GetClassNameA
(
hwnd_host1
,
buf
,
1024
);
ok
(
!
lstrcmpA
(
namespacetree
,
buf
),
"Class name was %s
\n
"
,
buf
);
expected_style
=
WS_CHILD
|
WS_VISIBLE
|
WS_CLIPSIBLINGS
|
WS_CLIPCHILDREN
;
style
=
GetWindowLongPtrW
(
hwnd_host1
,
GWL_STYLE
);
ok
(
style
==
expected_style
,
"Got style %08x
\n
"
,
style
);
expected_style
=
0
;
style
=
GetWindowLongPtrW
(
hwnd_host1
,
GWL_EXSTYLE
);
ok
(
style
==
expected_style
,
"Got style %08x
\n
"
,
style
);
expected_style
=
0
;
style
=
SendMessageW
(
hwnd_host1
,
TVM_GETEXTENDEDSTYLE
,
0
,
0
);
ok
(
style
==
expected_style
,
"Got 0x%08x
\n
"
,
style
);
hwnd_tv
=
FindWindowExW
(
hwnd_host1
,
NULL
,
WC_TREEVIEWW
,
NULL
);
ok
(
hwnd_tv
!=
NULL
,
"Failed to get treeview hwnd.
\n
"
);
if
(
hwnd_tv
)
{
expected_style
=
WS_CHILD
|
WS_VISIBLE
|
WS_CLIPSIBLINGS
|
WS_CLIPCHILDREN
|
WS_TABSTOP
|
TVS_NOHSCROLL
|
TVS_NONEVENHEIGHT
|
TVS_INFOTIP
|
TVS_TRACKSELECT
|
TVS_EDITLABELS
;
style
=
GetWindowLongPtrW
(
hwnd_tv
,
GWL_STYLE
);
ok
(
style
==
expected_style
,
"Got style %08x
\n
"
,
style
);
expected_style
=
0
;
style
=
GetWindowLongPtrW
(
hwnd_tv
,
GWL_EXSTYLE
);
ok
(
style
==
expected_style
,
"Got style %08x
\n
"
,
style
);
expected_style
=
TVS_EX_NOSINGLECOLLAPSE
|
TVS_EX_DOUBLEBUFFER
|
TVS_EX_RICHTOOLTIP
|
TVS_EX_DRAWIMAGEASYNC
;
style
=
SendMessageW
(
hwnd_tv
,
TVM_GETEXTENDEDSTYLE
,
0
,
0
);
todo_wine
ok
(
style
==
expected_style
,
"Got 0x%08x
\n
"
,
style
);
}
IOleWindow_Release
(
pow
);
}
if
(
0
)
{
/* The control can be initialized again without crashing, but
* the reference counting will break. */
hr
=
INameSpaceTreeControl_Initialize
(
pnstc
,
hwnd
,
&
rc
,
0
);
ok
(
hr
==
S_OK
,
"Got (0x%08x)
\n
"
,
hr
);
hr
=
INameSpaceTreeControl_QueryInterface
(
pnstc
,
&
IID_IOleWindow
,
(
void
**
)
&
pow
);
if
(
SUCCEEDED
(
hr
))
{
HWND
hwnd_host2
;
hr
=
IOleWindow_GetWindow
(
pow
,
&
hwnd_host2
);
ok
(
hr
==
S_OK
,
"Got (0x%08x)
\n
"
,
hr
);
ok
(
hwnd_host1
!=
hwnd_host2
,
"Same hwnd.
\n
"
);
IOleWindow_Release
(
pow
);
}
}
/* Some "random" interfaces */
hr
=
INameSpaceTreeControl_QueryInterface
(
pnstc
,
&
IID_IOleInPlaceObject
,
(
void
**
)
&
punk
);
...
...
@@ -87,8 +170,13 @@ static BOOL test_initialization(void)
/* On windows, the reference count won't go to zero until the
* window is destroyed. */
INameSpaceTreeControl_AddRef
(
pnstc
);
lres
=
INameSpaceTreeControl_Release
(
pnstc
);
ok
(
lres
>
1
,
"Reference count was (%d).
\n
"
,
lres
);
DestroyWindow
(
hwnd_host1
);
lres
=
INameSpaceTreeControl_Release
(
pnstc
);
ok
(
lres
,
"lres was %d
\n
"
,
lres
);
ok
(
!
lres
,
"lres was %d
\n
"
,
lres
);
return
TRUE
;
}
...
...
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