fix: restore linux mingw client build and gm smoke

This commit is contained in:
Claude
2026-04-17 21:53:59 +02:00
parent 2fe362e0a9
commit dfe0baabce
48 changed files with 432 additions and 103 deletions

View File

@@ -1,5 +1,11 @@
file(GLOB_RECURSE FILE_SOURCES "*.h" "*.c" "*.cpp")
foreach(_source IN LISTS FILE_SOURCES)
if(IS_SYMLINK "${_source}")
list(REMOVE_ITEM FILE_SOURCES "${_source}")
endif()
endforeach()
add_library(EterLib STATIC ${FILE_SOURCES})
target_link_libraries(EterLib

View File

@@ -5,6 +5,7 @@
#include "msctf.h"
#include <oleauto.h>
#include <algorithm>
#include <cstdint>
#include <utf8.h>
#define COUNTOF(a) ( sizeof( a ) / sizeof( ( a )[0] ) )
@@ -66,6 +67,12 @@ enum { IMEUI_STATE_OFF, IMEUI_STATE_ON, IMEUI_STATE_ENGLISH };
#define LCID_INVARIANT MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)
#if defined(__MINGW32__) && !defined(__ITfReadingInformationUIElement_INTERFACE_DEFINED__)
#define M2_HAS_TSF_UIELEMENT_EXT 0
#else
#define M2_HAS_TSF_UIELEMENT_EXT 1
#endif
wchar_t s_aszIndicator[5][3] =
{
L"En",
@@ -179,8 +186,10 @@ protected:
LONG _cRef;
};
#if M2_HAS_TSF_UIELEMENT_EXT
static void MakeReadingInformationString(ITfReadingInformationUIElement* preading);
static void MakeCandidateStrings(ITfCandidateListUIElement* pcandidate);
#endif
static ITfUIElement* GetUIElement(DWORD dwUIElementId);
static BOOL GetCompartments( ITfCompartmentMgr** ppcm, ITfCompartment** ppTfOpenMode, ITfCompartment** ppTfConvMode );
static BOOL SetupCompartmentSinks( BOOL bResetOnly = FALSE, ITfCompartment* pTfOpenMode = NULL, ITfCompartment* ppTfConvMode = NULL );
@@ -1475,7 +1484,7 @@ DWORD CIME::GetImeId( UINT uIndex )
return ms_adwId[uIndex];
hklPrev = hkl;
DWORD dwLang = ((DWORD)hkl & 0xffff);
DWORD dwLang = (static_cast<DWORD>(reinterpret_cast<ULONG_PTR>(hkl)) & 0xffff);
if ( ms_bUILessMode && GETLANG() == LANG_CHT ) {
// In case of Vista, artifitial value is returned so that it's not considered as older IME.
@@ -1734,7 +1743,7 @@ void CIME::CheckToggleState()
/* Check Toggle State */
bool bIme = ImmIsIME( ms_hklCurrent ) != 0
&& ( ( 0xF0000000 & (DWORD)ms_hklCurrent ) == 0xE0000000 ); // Hack to detect IME correctly. When IME is running as TIP, ImmIsIME() returns true for CHT US keyboard.
&& ((0xF0000000u & static_cast<DWORD>(reinterpret_cast<ULONG_PTR>(ms_hklCurrent))) == 0xE0000000u); // Hack to detect IME correctly. When IME is running as TIP, ImmIsIME() returns true for CHT US keyboard.
ms_bChineseIME = ( GETPRIMLANG() == LANG_CHINESE ) && bIme;
HIMC himc;
@@ -1897,6 +1906,7 @@ STDAPI CTsfUiLessMode::CUIElementSink::BeginUIElement(DWORD dwUIElementId, BOOL
if (!pElement)
return E_INVALIDARG;
#if M2_HAS_TSF_UIELEMENT_EXT
ITfReadingInformationUIElement *preading = NULL;
ITfCandidateListUIElement *pcandidate = NULL;
*pbShow = FALSE;
@@ -1922,6 +1932,9 @@ STDAPI CTsfUiLessMode::CUIElementSink::BeginUIElement(DWORD dwUIElementId, BOOL
CIME::ms_pEvent->OnOpenCandidateList();
pcandidate->Release();
}
#else
*pbShow = FALSE;
#endif
pElement->Release();
return S_OK;
@@ -1933,6 +1946,7 @@ STDAPI CTsfUiLessMode::CUIElementSink::UpdateUIElement(DWORD dwUIElementId)
if (!pElement)
return E_INVALIDARG;
#if M2_HAS_TSF_UIELEMENT_EXT
ITfReadingInformationUIElement *preading = NULL;
ITfCandidateListUIElement *pcandidate = NULL;
@@ -1956,6 +1970,7 @@ STDAPI CTsfUiLessMode::CUIElementSink::UpdateUIElement(DWORD dwUIElementId)
CIME::ms_pEvent->OnOpenCandidateList();
pcandidate->Release();
}
#endif
pElement->Release();
return S_OK;
@@ -1973,6 +1988,7 @@ STDAPI CTsfUiLessMode::CUIElementSink::EndUIElement(DWORD dwUIElementId)
//OutputDebugStringW(bstrDesc);
//OutputDebugStringW(L"\n");
#if M2_HAS_TSF_UIELEMENT_EXT
ITfReadingInformationUIElement *preading = NULL;
if (SUCCEEDED(pElement->QueryInterface(__uuidof(ITfReadingInformationUIElement), (void **)&preading)))
{
@@ -1988,6 +2004,7 @@ STDAPI CTsfUiLessMode::CUIElementSink::EndUIElement(DWORD dwUIElementId)
CIME::CloseCandidateList();
pcandidate->Release();
}
#endif
pElement->Release();
return S_OK;
@@ -1995,6 +2012,11 @@ STDAPI CTsfUiLessMode::CUIElementSink::EndUIElement(DWORD dwUIElementId)
void CTsfUiLessMode::UpdateImeState(BOOL bResetCompartmentEventSink)
{
#if defined(__MINGW32__)
(void)bResetCompartmentEventSink;
CIME::ms_dwImeState = CIME::ms_bChineseIME ? IMEUI_STATE_ENGLISH : IMEUI_STATE_OFF;
return;
#else
ITfCompartmentMgr* pcm;
ITfCompartment* pTfOpenMode = NULL;
ITfCompartment* pTfConvMode = NULL;
@@ -2026,6 +2048,7 @@ void CTsfUiLessMode::UpdateImeState(BOOL bResetCompartmentEventSink)
pTfConvMode->Release();
pcm->Release();
}
#endif
}
STDAPI CTsfUiLessMode::CUIElementSink::OnActivated(DWORD dwProfileType, LANGID langid, REFCLSID clsid, REFGUID catid,
@@ -2053,6 +2076,7 @@ STDAPI CTsfUiLessMode::CUIElementSink::OnChange(REFGUID rguid)
return S_OK;
}
#if M2_HAS_TSF_UIELEMENT_EXT
void CTsfUiLessMode::MakeReadingInformationString(ITfReadingInformationUIElement* preading)
{
UINT cchMax;
@@ -2164,6 +2188,7 @@ void CTsfUiLessMode::MakeCandidateStrings(ITfCandidateListUIElement* pcandidate)
free(IndexList);
}
}
#endif
ITfUIElement* CTsfUiLessMode::GetUIElement(DWORD dwUIElementId)
{