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
97e5728d
Commit
97e5728d
authored
Jul 19, 2008
by
Jacek Caban
Committed by
Alexandre Julliard
Jul 21, 2008
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
hhctrl.ocx: Fixed ref count handling in IOleClientSiteImpl.
parent
9f5748e6
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
67 additions
and
27 deletions
+67
-27
webbrowser.c
dlls/hhctrl.ocx/webbrowser.c
+67
-27
No files found.
dlls/hhctrl.ocx/webbrowser.c
View file @
97e5728d
...
...
@@ -20,6 +20,10 @@
#include "hhctrl.h"
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL
(
htmlhelp
);
#define ICOM_THIS_MULTI(impl,field,iface) impl* const This=(impl*)((char*)(iface) - offsetof(impl,field))
typedef
struct
IOleClientSiteImpl
...
...
@@ -37,45 +41,62 @@ typedef struct IOleClientSiteImpl
HWND
hwndWindow
;
}
IOleClientSiteImpl
;
#define CLIENTSITE(x) ((IOleClientSite*) &(x)->lpVtbl)
#define DOCHOSTUI(x) ((IDocHostUIHandler*) &(x)->lpvtblDocHostUIHandler)
#define INPLACESITE(x) ((IOleInPlaceSite*) &(x)->lpvtblOleInPlaceSite)
#define INPLACEFRAME(x) ((IOleInPlaceFrame*) &(x)->lpvtblOleInPlaceFrame)
static
HRESULT
STDMETHODCALLTYPE
Site_QueryInterface
(
IOleClientSite
*
iface
,
REFIID
riid
,
void
**
ppvObj
)
{
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpVtbl
,
iface
);
*
ppvObj
=
NULL
;
if
(
IsEqualIID
(
riid
,
&
IID_IUnknown
)
||
IsEqualIID
(
riid
,
&
IID_IOleClientSite
))
{
*
ppvObj
=
This
;
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IOleInPlaceSite
))
{
if
(
IsEqualIID
(
riid
,
&
IID_IUnknown
))
{
TRACE
(
"(%p)->(IID_IUnknown %p)
\n
"
,
This
,
ppvObj
);
*
ppvObj
=
CLIENTSITE
(
This
);
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IOleClientSite
))
{
TRACE
(
"(%p)->(IID_IOleClientSite %p)
\n
"
,
This
,
ppvObj
);
*
ppvObj
=
CLIENTSITE
(
This
);
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IOleInPlaceSite
))
{
TRACE
(
"(%p)->(IID_IOleInPlaceSite %p)
\n
"
,
This
,
ppvObj
);
*
ppvObj
=
&
(
This
->
lpvtblOleInPlaceSite
);
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IDocHostUIHandler
))
{
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IOleInPlaceFrame
))
{
TRACE
(
"(%p)->(IID_IOleInPlaceFrame %p)
\n
"
,
This
,
ppvObj
);
*
ppvObj
=
&
(
This
->
lpvtblOleInPlaceSite
);
}
else
if
(
IsEqualIID
(
riid
,
&
IID_IDocHostUIHandler
))
{
TRACE
(
"(%p)->(IID_IDocHostUIHandler %p)
\n
"
,
This
,
ppvObj
);
*
ppvObj
=
&
(
This
->
lpvtblDocHostUIHandler
);
}
else
}
else
{
TRACE
(
"(%p)->(%s %p)
\n
"
,
This
,
debugstr_guid
(
riid
),
ppvObj
);
return
E_NOINTERFACE
;
}
IUnknown_AddRef
((
IUnknown
*
)
*
ppvObj
);
return
S_OK
;
}
static
ULONG
STDMETHODCALLTYPE
Site_AddRef
(
IOleClientSite
*
iface
)
{
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpVtbl
,
iface
);
return
InterlockedIncrement
(
&
This
->
ref
);
LONG
ref
=
InterlockedIncrement
(
&
This
->
ref
);
TRACE
(
"(%p) ref=%d
\n
"
,
This
,
ref
);
return
ref
;
}
static
ULONG
STDMETHODCALLTYPE
Site_Release
(
IOleClientSite
*
iface
)
{
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpVtbl
,
iface
);
LONG
refCount
=
InterlockedDecrement
(
&
This
->
ref
);
LONG
ref
=
InterlockedDecrement
(
&
This
->
ref
);
TRACE
(
"(%p) ref=%d
\n
"
,
This
,
ref
);
if
(
refCount
)
return
refCount
;
if
(
!
ref
)
heap_free
(
This
)
;
heap_free
(
This
);
return
0
;
return
ref
;
}
static
HRESULT
STDMETHODCALLTYPE
Site_SaveObject
(
IOleClientSite
*
iface
)
...
...
@@ -126,17 +147,22 @@ static const IOleClientSiteVtbl MyIOleClientSiteTable =
static
HRESULT
STDMETHODCALLTYPE
UI_QueryInterface
(
IDocHostUIHandler
*
iface
,
REFIID
riid
,
LPVOID
*
ppvObj
)
{
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblDocHostUIHandler
,
iface
);
return
Site_QueryInterface
((
IOleClientSite
*
)
This
,
riid
,
ppvObj
);
return
IOleClientSite_QueryInterface
(
CLIENTSITE
(
This
),
riid
,
ppvObj
);
}
static
ULONG
STDMETHODCALLTYPE
UI_AddRef
(
IDocHostUIHandler
*
iface
)
{
return
1
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblDocHostUIHandler
,
iface
);
return
IOleClientSite_AddRef
(
CLIENTSITE
(
This
));
}
static
ULONG
STDMETHODCALLTYPE
UI_Release
(
IDocHostUIHandler
*
iface
)
{
return
2
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblDocHostUIHandler
,
iface
);
return
IOleClientSite_Release
(
CLIENTSITE
(
This
));
}
static
HRESULT
STDMETHODCALLTYPE
UI_ShowContextMenu
(
IDocHostUIHandler
*
iface
,
DWORD
dwID
,
POINT
*
ppt
,
IUnknown
*
pcmdtReserved
,
IDispatch
*
pdispReserved
)
...
...
@@ -246,17 +272,22 @@ static const IDocHostUIHandlerVtbl MyIDocHostUIHandlerTable =
static
HRESULT
STDMETHODCALLTYPE
InPlace_QueryInterface
(
IOleInPlaceSite
*
iface
,
REFIID
riid
,
LPVOID
*
ppvObj
)
{
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceSite
,
iface
);
return
Site_QueryInterface
((
IOleClientSite
*
)
This
,
riid
,
ppvObj
);
return
IOleClientSite_QueryInterface
(
CLIENTSITE
(
This
),
riid
,
ppvObj
);
}
static
ULONG
STDMETHODCALLTYPE
InPlace_AddRef
(
IOleInPlaceSite
*
iface
)
{
return
1
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceSite
,
iface
);
return
IOleClientSite_AddRef
(
CLIENTSITE
(
This
));
}
static
ULONG
STDMETHODCALLTYPE
InPlace_Release
(
IOleInPlaceSite
*
iface
)
{
return
2
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceSite
,
iface
);
return
IOleClientSite_Release
(
CLIENTSITE
(
This
));
}
static
HRESULT
STDMETHODCALLTYPE
InPlace_GetWindow
(
IOleInPlaceSite
*
iface
,
HWND
*
lphwnd
)
...
...
@@ -290,7 +321,10 @@ static HRESULT STDMETHODCALLTYPE InPlace_OnUIActivate(IOleInPlaceSite *iface)
static
HRESULT
STDMETHODCALLTYPE
InPlace_GetWindowContext
(
IOleInPlaceSite
*
iface
,
LPOLEINPLACEFRAME
*
lplpFrame
,
LPOLEINPLACEUIWINDOW
*
lplpDoc
,
LPRECT
lprcPosRect
,
LPRECT
lprcClipRect
,
LPOLEINPLACEFRAMEINFO
lpFrameInfo
)
{
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceSite
,
iface
);
*
lplpFrame
=
(
LPOLEINPLACEFRAME
)
&
This
->
lpvtblOleInPlaceFrame
;
*
lplpFrame
=
INPLACEFRAME
(
This
);
IOleInPlaceFrame_AddRef
(
INPLACEFRAME
(
This
));
*
lplpDoc
=
NULL
;
lpFrameInfo
->
fMDIApp
=
FALSE
;
...
...
@@ -358,17 +392,23 @@ static const IOleInPlaceSiteVtbl MyIOleInPlaceSiteTable =
static
HRESULT
STDMETHODCALLTYPE
Frame_QueryInterface
(
IOleInPlaceFrame
*
iface
,
REFIID
riid
,
LPVOID
*
ppvObj
)
{
return
E_NOTIMPL
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceFrame
,
iface
);
return
IOleClientSite_QueryInterface
(
CLIENTSITE
(
This
),
riid
,
ppvObj
);
}
static
ULONG
STDMETHODCALLTYPE
Frame_AddRef
(
IOleInPlaceFrame
*
iface
)
{
return
1
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceFrame
,
iface
);
return
IOleClientSite_AddRef
(
CLIENTSITE
(
This
));
}
static
ULONG
STDMETHODCALLTYPE
Frame_Release
(
IOleInPlaceFrame
*
iface
)
{
return
2
;
ICOM_THIS_MULTI
(
IOleClientSiteImpl
,
lpvtblOleInPlaceFrame
,
iface
);
return
IOleClientSite_Release
(
CLIENTSITE
(
This
));
}
static
HRESULT
STDMETHODCALLTYPE
Frame_GetWindow
(
IOleInPlaceFrame
*
iface
,
HWND
*
lphwnd
)
...
...
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