From dec04ef411b2ae2fa1eed07e447e0a1090191cee Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 12 Jul 2019 09:50:00 +1000
Subject: [PATCH] msctf: Added ITfActiveLanguageProfileNotifySink support in
 ITfSource.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=44502
---
 dlls/msctf/msctf_internal.h |  1 +
 dlls/msctf/threadmgr.c      | 13 +++++++++++--
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/dlls/msctf/msctf_internal.h b/dlls/msctf/msctf_internal.h
index 9d37548361..35843eecf9 100644
--- a/dlls/msctf/msctf_internal.h
+++ b/dlls/msctf/msctf_internal.h
@@ -32,6 +32,7 @@
 #define COOKIE_MAGIC_DMSINK 0x0070
 #define COOKIE_MAGIC_THREADFOCUSSINK 0x0080
 #define COOKIE_MAGIC_KEYTRACESINK 0x0090
+#define COOKIE_MAGIC_ACTIVELANGSINK 0x0100
 
 extern DWORD tlsIndex DECLSPEC_HIDDEN;
 extern TfClientId processId DECLSPEC_HIDDEN;
diff --git a/dlls/msctf/threadmgr.c b/dlls/msctf/threadmgr.c
index a9fcb5cd15..fac11e7a35 100644
--- a/dlls/msctf/threadmgr.c
+++ b/dlls/msctf/threadmgr.c
@@ -617,6 +617,13 @@ static HRESULT WINAPI ThreadMgrSource_AdviseSink(ITfSource *iface,
         return advise_sink(&This->ThreadFocusSink, &IID_ITfThreadFocusSink, COOKIE_MAGIC_THREADFOCUSSINK, punk, pdwCookie);
     }
 
+    if (IsEqualIID(riid, &IID_ITfActiveLanguageProfileNotifySink))
+    {
+        WARN("semi-stub for ITfActiveLanguageProfileNotifySink: sink won't be used.\n");
+        return advise_sink(&This->ActiveLanguageProfileNotifySink, &IID_ITfActiveLanguageProfileNotifySink,
+                            COOKIE_MAGIC_ACTIVELANGSINK, punk, pdwCookie);
+    }
+
     if (IsEqualIID(riid, &IID_ITfKeyTraceEventSink))
     {
         WARN("semi-stub for ITfKeyTraceEventSink: sink won't be used.\n");
@@ -636,8 +643,10 @@ static HRESULT WINAPI ThreadMgrSource_UnadviseSink(ITfSource *iface, DWORD pdwCo
     TRACE("(%p) %x\n",This,pdwCookie);
 
     magic = get_Cookie_magic(pdwCookie);
-    if (magic != COOKIE_MAGIC_TMSINK && magic != COOKIE_MAGIC_THREADFOCUSSINK
-        && magic != COOKIE_MAGIC_KEYTRACESINK)
+    if (magic != COOKIE_MAGIC_TMSINK &&
+        magic != COOKIE_MAGIC_THREADFOCUSSINK &&
+        magic != COOKIE_MAGIC_ACTIVELANGSINK &&
+        magic != COOKIE_MAGIC_KEYTRACESINK)
         return E_INVALIDARG;
 
     return unadvise_sink(pdwCookie);
-- 
2.17.1