Nikolay Sivov : combase: Move CoRegisterMessageFilter().
Alexandre Julliard
julliard at winehq.org
Wed Aug 19 15:46:02 CDT 2020
Module: wine
Branch: master
Commit: 00f9dff02df4f27866908f28213a79b2c259d727
URL: https://source.winehq.org/git/wine.git/?a=commit;h=00f9dff02df4f27866908f28213a79b2c259d727
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Wed Aug 19 11:29:13 2020 +0300
combase: Move CoRegisterMessageFilter().
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Huw Davies <huw at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/combase/combase.c | 37 +++++++++++++++++++++++++++++
dlls/combase/combase.spec | 2 +-
dlls/ole32/compobj.c | 59 -----------------------------------------------
dlls/ole32/ole32.spec | 2 +-
4 files changed, 39 insertions(+), 61 deletions(-)
diff --git a/dlls/combase/combase.c b/dlls/combase/combase.c
index 88dc7aa7b1..96c6a9bb81 100644
--- a/dlls/combase/combase.c
+++ b/dlls/combase/combase.c
@@ -1684,3 +1684,40 @@ HRESULT WINAPI CoWaitForMultipleHandles(DWORD flags, DWORD timeout, ULONG handle
return hr;
}
+
+/******************************************************************************
+ * CoRegisterMessageFilter (combase.@)
+ */
+HRESULT WINAPI CoRegisterMessageFilter(IMessageFilter *filter, IMessageFilter **ret_filter)
+{
+ IMessageFilter *old_filter;
+ struct apartment *apt;
+
+ TRACE("%p, %p\n", filter, ret_filter);
+
+ apt = com_get_current_apt();
+
+ /* Can't set a message filter in a multi-threaded apartment */
+ if (!apt || apt->multi_threaded)
+ {
+ WARN("Can't set message filter in MTA or uninitialized apt\n");
+ return CO_E_NOT_SUPPORTED;
+ }
+
+ if (filter)
+ IMessageFilter_AddRef(filter);
+
+ EnterCriticalSection(&apt->cs);
+
+ old_filter = apt->filter;
+ apt->filter = filter;
+
+ LeaveCriticalSection(&apt->cs);
+
+ if (ret_filter)
+ *ret_filter = old_filter;
+ else if (old_filter)
+ IMessageFilter_Release(old_filter);
+
+ return S_OK;
+}
diff --git a/dlls/combase/combase.spec b/dlls/combase/combase.spec
index 7fd1e964cd..bb7eaf69f9 100644
--- a/dlls/combase/combase.spec
+++ b/dlls/combase/combase.spec
@@ -142,7 +142,7 @@
@ stdcall CoRegisterClassObject(ptr ptr long long ptr) ole32.CoRegisterClassObject
@ stdcall CoRegisterInitializeSpy(ptr ptr)
@ stdcall CoRegisterMallocSpy(ptr)
-@ stdcall CoRegisterMessageFilter(ptr ptr) ole32.CoRegisterMessageFilter
+@ stdcall CoRegisterMessageFilter(ptr ptr)
@ stdcall CoRegisterPSClsid(ptr ptr) ole32.CoRegisterPSClsid
@ stdcall CoRegisterSurrogate(ptr) ole32.CoRegisterSurrogate
@ stdcall CoRegisterSurrogateEx(ptr ptr) ole32.CoRegisterSurrogateEx
diff --git a/dlls/ole32/compobj.c b/dlls/ole32/compobj.c
index 574a7b3305..f02cdb8b53 100644
--- a/dlls/ole32/compobj.c
+++ b/dlls/ole32/compobj.c
@@ -3146,65 +3146,6 @@ HRESULT WINAPI CoGetCurrentLogicalThreadId(GUID *id)
return S_OK;
}
-/******************************************************************************
- * CoRegisterMessageFilter [OLE32.@]
- *
- * Registers a message filter.
- *
- * PARAMS
- * lpMessageFilter [I] Pointer to interface.
- * lplpMessageFilter [O] Indirect pointer to prior instance if non-NULL.
- *
- * RETURNS
- * Success: S_OK.
- * Failure: HRESULT code.
- *
- * NOTES
- * Both lpMessageFilter and lplpMessageFilter are optional. Passing in a NULL
- * lpMessageFilter removes the message filter.
- *
- * If lplpMessageFilter is not NULL the previous message filter will be
- * returned in the memory pointer to this parameter and the caller is
- * responsible for releasing the object.
- *
- * The current thread be in an apartment otherwise the function will crash.
- */
-HRESULT WINAPI CoRegisterMessageFilter(
- LPMESSAGEFILTER lpMessageFilter,
- LPMESSAGEFILTER *lplpMessageFilter)
-{
- struct apartment *apt;
- IMessageFilter *lpOldMessageFilter;
-
- TRACE("(%p, %p)\n", lpMessageFilter, lplpMessageFilter);
-
- apt = COM_CurrentApt();
-
- /* can't set a message filter in a multi-threaded apartment */
- if (!apt || apt->multi_threaded)
- {
- WARN("can't set message filter in MTA or uninitialized apt\n");
- return CO_E_NOT_SUPPORTED;
- }
-
- if (lpMessageFilter)
- IMessageFilter_AddRef(lpMessageFilter);
-
- EnterCriticalSection(&apt->cs);
-
- lpOldMessageFilter = apt->filter;
- apt->filter = lpMessageFilter;
-
- LeaveCriticalSection(&apt->cs);
-
- if (lplpMessageFilter)
- *lplpMessageFilter = lpOldMessageFilter;
- else if (lpOldMessageFilter)
- IMessageFilter_Release(lpOldMessageFilter);
-
- return S_OK;
-}
-
/***********************************************************************
* CoIsOle1Class [OLE32.@]
*
diff --git a/dlls/ole32/ole32.spec b/dlls/ole32/ole32.spec
index afb0e10407..ed5a958ce3 100644
--- a/dlls/ole32/ole32.spec
+++ b/dlls/ole32/ole32.spec
@@ -68,7 +68,7 @@
@ stdcall CoRegisterClassObject(ptr ptr long long ptr)
@ stdcall CoRegisterInitializeSpy(ptr ptr) combase.CoRegisterInitializeSpy
@ stdcall CoRegisterMallocSpy(ptr) combase.CoRegisterMallocSpy
-@ stdcall CoRegisterMessageFilter(ptr ptr)
+@ stdcall CoRegisterMessageFilter(ptr ptr) combase.CoRegisterMessageFilter
@ stdcall CoRegisterPSClsid(ptr ptr)
@ stdcall CoRegisterSurrogate(ptr)
@ stdcall CoRegisterSurrogateEx(ptr ptr)
More information about the wine-cvs
mailing list