1 /* 2 * ActiveIMMApp Interface 3 * 4 * Copyright 2008 CodeWeavers, Aric Stewart 5 * 6 * This library is free software; you can redistribute it and/or 7 * modify it under the terms of the GNU Lesser General Public 8 * License as published by the Free Software Foundation; either 9 * version 2.1 of the License, or (at your option) any later version. 10 * 11 * This library is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14 * Lesser General Public License for more details. 15 * 16 * You should have received a copy of the GNU Lesser General Public 17 * License along with this library; if not, write to the Free Software 18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA 19 */ 20 21 #include <stdarg.h> 22 23 #define COBJMACROS 24 25 #include "windef.h" 26 #include "winbase.h" 27 #include "wingdi.h" 28 #include "winreg.h" 29 #include "winuser.h" 30 #include "winerror.h" 31 #include "objbase.h" 32 #include "dimm.h" 33 #include "imm.h" 34 35 #include "wine/debug.h" 36 37 WINE_DEFAULT_DEBUG_CHANNEL(msimtf); 38 39 typedef struct tagActiveIMMApp { 40 IActiveIMMApp IActiveIMMApp_iface; 41 IActiveIMMMessagePumpOwner IActiveIMMMessagePumpOwner_iface; 42 LONG refCount; 43 } ActiveIMMApp; 44 45 static inline ActiveIMMApp *impl_from_IActiveIMMApp(IActiveIMMApp *iface) 46 { 47 return CONTAINING_RECORD(iface, ActiveIMMApp, IActiveIMMApp_iface); 48 } 49 50 static void ActiveIMMApp_Destructor(ActiveIMMApp* This) 51 { 52 TRACE("\n"); 53 HeapFree(GetProcessHeap(),0,This); 54 } 55 56 static HRESULT WINAPI ActiveIMMApp_QueryInterface (IActiveIMMApp* iface, 57 REFIID iid, LPVOID *ppvOut) 58 { 59 ActiveIMMApp *This = impl_from_IActiveIMMApp(iface); 60 *ppvOut = NULL; 61 62 if (IsEqualIID(iid, &IID_IUnknown) || IsEqualIID(iid, &IID_IActiveIMMApp)) 63 { 64 *ppvOut = &This->IActiveIMMApp_iface; 65 } 66 else if (IsEqualIID(iid, &IID_IActiveIMMMessagePumpOwner)) 67 { 68 *ppvOut = &This->IActiveIMMMessagePumpOwner_iface; 69 } 70 71 if (*ppvOut) 72 { 73 IUnknown_AddRef(iface); 74 return S_OK; 75 } 76 77 WARN("unsupported interface: %s\n", debugstr_guid(iid)); 78 return E_NOINTERFACE; 79 } 80 81 static ULONG WINAPI ActiveIMMApp_AddRef(IActiveIMMApp* iface) 82 { 83 ActiveIMMApp *This = impl_from_IActiveIMMApp(iface); 84 return InterlockedIncrement(&This->refCount); 85 } 86 87 static ULONG WINAPI ActiveIMMApp_Release(IActiveIMMApp* iface) 88 { 89 ActiveIMMApp *This = impl_from_IActiveIMMApp(iface); 90 ULONG ret; 91 92 ret = InterlockedDecrement(&This->refCount); 93 if (ret == 0) 94 ActiveIMMApp_Destructor(This); 95 return ret; 96 } 97 98 static HRESULT WINAPI ActiveIMMApp_AssociateContext(IActiveIMMApp* iface, 99 HWND hWnd, HIMC hIME, HIMC *phPrev) 100 { 101 *phPrev = ImmAssociateContext(hWnd,hIME); 102 return S_OK; 103 } 104 105 static HRESULT WINAPI ActiveIMMApp_ConfigureIMEA(IActiveIMMApp* This, 106 HKL hKL, HWND hwnd, DWORD dwMode, REGISTERWORDA *pData) 107 { 108 BOOL rc; 109 110 rc = ImmConfigureIMEA(hKL, hwnd, dwMode, pData); 111 if (rc) 112 return E_FAIL; 113 else 114 return S_OK; 115 } 116 117 static HRESULT WINAPI ActiveIMMApp_ConfigureIMEW(IActiveIMMApp* This, 118 HKL hKL, HWND hWnd, DWORD dwMode, REGISTERWORDW *pData) 119 { 120 BOOL rc; 121 122 rc = ImmConfigureIMEW(hKL, hWnd, dwMode, pData); 123 if (rc) 124 return E_FAIL; 125 else 126 return S_OK; 127 } 128 129 static HRESULT WINAPI ActiveIMMApp_CreateContext(IActiveIMMApp* This, 130 HIMC *phIMC) 131 { 132 *phIMC = ImmCreateContext(); 133 if (*phIMC) 134 return S_OK; 135 else 136 return E_FAIL; 137 } 138 139 static HRESULT WINAPI ActiveIMMApp_DestroyContext(IActiveIMMApp* This, 140 HIMC hIME) 141 { 142 BOOL rc; 143 144 rc = ImmDestroyContext(hIME); 145 if (rc) 146 return S_OK; 147 else 148 return E_FAIL; 149 } 150 151 static HRESULT WINAPI ActiveIMMApp_EnumRegisterWordA(IActiveIMMApp* This, 152 HKL hKL, LPSTR szReading, DWORD dwStyle, LPSTR szRegister, 153 LPVOID pData, IEnumRegisterWordA **pEnum) 154 { 155 FIXME("Stub\n"); 156 return E_NOTIMPL; 157 } 158 159 static HRESULT WINAPI ActiveIMMApp_EnumRegisterWordW(IActiveIMMApp* This, 160 HKL hKL, LPWSTR szReading, DWORD dwStyle, LPWSTR szRegister, 161 LPVOID pData, IEnumRegisterWordW **pEnum) 162 { 163 FIXME("Stub\n"); 164 return E_NOTIMPL; 165 } 166 167 static HRESULT WINAPI ActiveIMMApp_EscapeA(IActiveIMMApp* This, 168 HKL hKL, HIMC hIMC, UINT uEscape, LPVOID pData, LRESULT *plResult) 169 { 170 *plResult = ImmEscapeA(hKL, hIMC, uEscape, pData); 171 return S_OK; 172 } 173 174 static HRESULT WINAPI ActiveIMMApp_EscapeW(IActiveIMMApp* This, 175 HKL hKL, HIMC hIMC, UINT uEscape, LPVOID pData, LRESULT *plResult) 176 { 177 *plResult = ImmEscapeW(hKL, hIMC, uEscape, pData); 178 return S_OK; 179 } 180 181 static HRESULT WINAPI ActiveIMMApp_GetCandidateListA(IActiveIMMApp* This, 182 HIMC hIMC, DWORD dwIndex, UINT uBufLen, CANDIDATELIST *pCandList, 183 UINT *puCopied) 184 { 185 *puCopied = ImmGetCandidateListA(hIMC, dwIndex, pCandList, uBufLen); 186 return S_OK; 187 } 188 189 static HRESULT WINAPI ActiveIMMApp_GetCandidateListW(IActiveIMMApp* This, 190 HIMC hIMC, DWORD dwIndex, UINT uBufLen, CANDIDATELIST *pCandList, 191 UINT *puCopied) 192 { 193 *puCopied = ImmGetCandidateListW(hIMC, dwIndex, pCandList, uBufLen); 194 return S_OK; 195 } 196 197 static HRESULT WINAPI ActiveIMMApp_GetCandidateListCountA(IActiveIMMApp* This, 198 HIMC hIMC, DWORD *pdwListSize, DWORD *pdwBufLen) 199 { 200 *pdwBufLen = ImmGetCandidateListCountA(hIMC, pdwListSize); 201 return S_OK; 202 } 203 204 static HRESULT WINAPI ActiveIMMApp_GetCandidateListCountW(IActiveIMMApp* This, 205 HIMC hIMC, DWORD *pdwListSize, DWORD *pdwBufLen) 206 { 207 *pdwBufLen = ImmGetCandidateListCountA(hIMC, pdwListSize); 208 return S_OK; 209 } 210 211 static HRESULT WINAPI ActiveIMMApp_GetCandidateWindow(IActiveIMMApp* This, 212 HIMC hIMC, DWORD dwIndex, CANDIDATEFORM *pCandidate) 213 { 214 BOOL rc; 215 rc = ImmGetCandidateWindow(hIMC,dwIndex,pCandidate); 216 if (rc) 217 return S_OK; 218 else 219 return E_FAIL; 220 } 221 222 static HRESULT WINAPI ActiveIMMApp_GetCompositionFontA(IActiveIMMApp* This, 223 HIMC hIMC, LOGFONTA *plf) 224 { 225 BOOL rc; 226 rc = ImmGetCompositionFontA(hIMC,plf); 227 if (rc) 228 return S_OK; 229 else 230 return E_FAIL; 231 } 232 233 static HRESULT WINAPI ActiveIMMApp_GetCompositionFontW(IActiveIMMApp* This, 234 HIMC hIMC, LOGFONTW *plf) 235 { 236 BOOL rc; 237 rc = ImmGetCompositionFontW(hIMC,plf); 238 if (rc) 239 return S_OK; 240 else 241 return E_FAIL; 242 } 243 244 static HRESULT WINAPI ActiveIMMApp_GetCompositionStringA(IActiveIMMApp* This, 245 HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LONG *plCopied, LPVOID pBuf) 246 { 247 *plCopied = ImmGetCompositionStringA(hIMC, dwIndex, pBuf, dwBufLen); 248 return S_OK; 249 } 250 251 static HRESULT WINAPI ActiveIMMApp_GetCompositionStringW(IActiveIMMApp* This, 252 HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LONG *plCopied, LPVOID pBuf) 253 { 254 *plCopied = ImmGetCompositionStringW(hIMC, dwIndex, pBuf, dwBufLen); 255 return S_OK; 256 } 257 258 static HRESULT WINAPI ActiveIMMApp_GetCompositionWindow(IActiveIMMApp* This, 259 HIMC hIMC, COMPOSITIONFORM *pCompForm) 260 { 261 BOOL rc; 262 263 rc = ImmGetCompositionWindow(hIMC,pCompForm); 264 265 if (rc) 266 return S_OK; 267 else 268 return E_FAIL; 269 } 270 271 static HRESULT WINAPI ActiveIMMApp_GetContext(IActiveIMMApp* This, 272 HWND hwnd, HIMC *phIMC) 273 { 274 *phIMC = ImmGetContext(hwnd); 275 return S_OK; 276 } 277 278 static HRESULT WINAPI ActiveIMMApp_GetConversionListA(IActiveIMMApp* This, 279 HKL hKL, HIMC hIMC, LPSTR pSrc, UINT uBufLen, UINT uFlag, 280 CANDIDATELIST *pDst, UINT *puCopied) 281 { 282 *puCopied = ImmGetConversionListA(hKL, hIMC, pSrc, pDst, uBufLen, uFlag); 283 return S_OK; 284 } 285 286 static HRESULT WINAPI ActiveIMMApp_GetConversionListW(IActiveIMMApp* This, 287 HKL hKL, HIMC hIMC, LPWSTR pSrc, UINT uBufLen, UINT uFlag, 288 CANDIDATELIST *pDst, UINT *puCopied) 289 { 290 *puCopied = ImmGetConversionListW(hKL, hIMC, pSrc, pDst, uBufLen, uFlag); 291 return S_OK; 292 } 293 294 static HRESULT WINAPI ActiveIMMApp_GetConversionStatus(IActiveIMMApp* This, 295 HIMC hIMC, DWORD *pfdwConversion, DWORD *pfdwSentence) 296 { 297 BOOL rc; 298 299 rc = ImmGetConversionStatus(hIMC, pfdwConversion, pfdwSentence); 300 301 if (rc) 302 return S_OK; 303 else 304 return E_FAIL; 305 } 306 307 static HRESULT WINAPI ActiveIMMApp_GetDefaultIMEWnd(IActiveIMMApp* This, 308 HWND hWnd, HWND *phDefWnd) 309 { 310 *phDefWnd = ImmGetDefaultIMEWnd(hWnd); 311 return S_OK; 312 } 313 314 static HRESULT WINAPI ActiveIMMApp_GetDescriptionA(IActiveIMMApp* This, 315 HKL hKL, UINT uBufLen, LPSTR szDescription, UINT *puCopied) 316 { 317 *puCopied = ImmGetDescriptionA(hKL, szDescription, uBufLen); 318 return S_OK; 319 } 320 321 static HRESULT WINAPI ActiveIMMApp_GetDescriptionW(IActiveIMMApp* This, 322 HKL hKL, UINT uBufLen, LPWSTR szDescription, UINT *puCopied) 323 { 324 *puCopied = ImmGetDescriptionW(hKL, szDescription, uBufLen); 325 return S_OK; 326 } 327 328 static HRESULT WINAPI ActiveIMMApp_GetGuideLineA(IActiveIMMApp* This, 329 HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LPSTR pBuf, 330 DWORD *pdwResult) 331 { 332 *pdwResult = ImmGetGuideLineA(hIMC, dwIndex, pBuf, dwBufLen); 333 return S_OK; 334 } 335 336 static HRESULT WINAPI ActiveIMMApp_GetGuideLineW(IActiveIMMApp* This, 337 HIMC hIMC, DWORD dwIndex, DWORD dwBufLen, LPWSTR pBuf, 338 DWORD *pdwResult) 339 { 340 *pdwResult = ImmGetGuideLineW(hIMC, dwIndex, pBuf, dwBufLen); 341 return S_OK; 342 } 343 344 static HRESULT WINAPI ActiveIMMApp_GetIMEFileNameA(IActiveIMMApp* This, 345 HKL hKL, UINT uBufLen, LPSTR szFileName, UINT *puCopied) 346 { 347 *puCopied = ImmGetIMEFileNameA(hKL, szFileName, uBufLen); 348 return S_OK; 349 } 350 351 static HRESULT WINAPI ActiveIMMApp_GetIMEFileNameW(IActiveIMMApp* This, 352 HKL hKL, UINT uBufLen, LPWSTR szFileName, UINT *puCopied) 353 { 354 *puCopied = ImmGetIMEFileNameW(hKL, szFileName, uBufLen); 355 return S_OK; 356 } 357 358 static HRESULT WINAPI ActiveIMMApp_GetOpenStatus(IActiveIMMApp* This, 359 HIMC hIMC) 360 { 361 return ImmGetOpenStatus(hIMC); 362 } 363 364 static HRESULT WINAPI ActiveIMMApp_GetProperty(IActiveIMMApp* This, 365 HKL hKL, DWORD fdwIndex, DWORD *pdwProperty) 366 { 367 *pdwProperty = ImmGetProperty(hKL, fdwIndex); 368 return S_OK; 369 } 370 371 static HRESULT WINAPI ActiveIMMApp_GetRegisterWordStyleA(IActiveIMMApp* This, 372 HKL hKL, UINT nItem, STYLEBUFA *pStyleBuf, UINT *puCopied) 373 { 374 *puCopied = ImmGetRegisterWordStyleA(hKL, nItem, pStyleBuf); 375 return S_OK; 376 } 377 378 static HRESULT WINAPI ActiveIMMApp_GetRegisterWordStyleW(IActiveIMMApp* This, 379 HKL hKL, UINT nItem, STYLEBUFW *pStyleBuf, UINT *puCopied) 380 { 381 *puCopied = ImmGetRegisterWordStyleW(hKL, nItem, pStyleBuf); 382 return S_OK; 383 } 384 385 static HRESULT WINAPI ActiveIMMApp_GetStatusWindowPos(IActiveIMMApp* This, 386 HIMC hIMC, POINT *pptPos) 387 { 388 BOOL rc; 389 rc = ImmGetStatusWindowPos(hIMC, pptPos); 390 391 if (rc) 392 return S_OK; 393 else 394 return E_FAIL; 395 } 396 397 static HRESULT WINAPI ActiveIMMApp_GetVirtualKey(IActiveIMMApp* This, 398 HWND hWnd, UINT *puVirtualKey) 399 { 400 *puVirtualKey = ImmGetVirtualKey(hWnd); 401 return S_OK; 402 } 403 404 static HRESULT WINAPI ActiveIMMApp_InstallIMEA(IActiveIMMApp* This, 405 LPSTR szIMEFileName, LPSTR szLayoutText, HKL *phKL) 406 { 407 *phKL = ImmInstallIMEA(szIMEFileName,szLayoutText); 408 return S_OK; 409 } 410 411 static HRESULT WINAPI ActiveIMMApp_InstallIMEW(IActiveIMMApp* This, 412 LPWSTR szIMEFileName, LPWSTR szLayoutText, HKL *phKL) 413 { 414 *phKL = ImmInstallIMEW(szIMEFileName,szLayoutText); 415 return S_OK; 416 } 417 418 static HRESULT WINAPI ActiveIMMApp_IsIME(IActiveIMMApp* This, 419 HKL hKL) 420 { 421 return ImmIsIME(hKL); 422 } 423 424 static HRESULT WINAPI ActiveIMMApp_IsUIMessageA(IActiveIMMApp* This, 425 HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam) 426 { 427 return ImmIsUIMessageA(hWndIME,msg,wParam,lParam); 428 } 429 430 static HRESULT WINAPI ActiveIMMApp_IsUIMessageW(IActiveIMMApp* This, 431 HWND hWndIME, UINT msg, WPARAM wParam, LPARAM lParam) 432 { 433 return ImmIsUIMessageW(hWndIME,msg,wParam,lParam); 434 } 435 436 static HRESULT WINAPI ActiveIMMApp_NotifyIME(IActiveIMMApp* This, 437 HIMC hIMC, DWORD dwAction, DWORD dwIndex, DWORD dwValue) 438 { 439 BOOL rc; 440 441 rc = ImmNotifyIME(hIMC,dwAction,dwIndex,dwValue); 442 443 if (rc) 444 return S_OK; 445 else 446 return E_FAIL; 447 } 448 449 static HRESULT WINAPI ActiveIMMApp_RegisterWordA(IActiveIMMApp* This, 450 HKL hKL, LPSTR szReading, DWORD dwStyle, LPSTR szRegister) 451 { 452 BOOL rc; 453 454 rc = ImmRegisterWordA(hKL,szReading,dwStyle,szRegister); 455 456 if (rc) 457 return S_OK; 458 else 459 return E_FAIL; 460 } 461 462 static HRESULT WINAPI ActiveIMMApp_RegisterWordW(IActiveIMMApp* This, 463 HKL hKL, LPWSTR szReading, DWORD dwStyle, LPWSTR szRegister) 464 { 465 BOOL rc; 466 467 rc = ImmRegisterWordW(hKL,szReading,dwStyle,szRegister); 468 469 if (rc) 470 return S_OK; 471 else 472 return E_FAIL; 473 } 474 475 static HRESULT WINAPI ActiveIMMApp_ReleaseContext(IActiveIMMApp* This, 476 HWND hWnd, HIMC hIMC) 477 { 478 BOOL rc; 479 480 rc = ImmReleaseContext(hWnd,hIMC); 481 482 if (rc) 483 return S_OK; 484 else 485 return E_FAIL; 486 } 487 488 static HRESULT WINAPI ActiveIMMApp_SetCandidateWindow(IActiveIMMApp* This, 489 HIMC hIMC, CANDIDATEFORM *pCandidate) 490 { 491 BOOL rc; 492 493 rc = ImmSetCandidateWindow(hIMC,pCandidate); 494 495 if (rc) 496 return S_OK; 497 else 498 return E_FAIL; 499 } 500 501 static HRESULT WINAPI ActiveIMMApp_SetCompositionFontA(IActiveIMMApp* This, 502 HIMC hIMC, LOGFONTA *plf) 503 { 504 BOOL rc; 505 506 rc = ImmSetCompositionFontA(hIMC,plf); 507 508 if (rc) 509 return S_OK; 510 else 511 return E_FAIL; 512 } 513 514 static HRESULT WINAPI ActiveIMMApp_SetCompositionFontW(IActiveIMMApp* This, 515 HIMC hIMC, LOGFONTW *plf) 516 { 517 BOOL rc; 518 519 rc = ImmSetCompositionFontW(hIMC,plf); 520 521 if (rc) 522 return S_OK; 523 else 524 return E_FAIL; 525 } 526 527 static HRESULT WINAPI ActiveIMMApp_SetCompositionStringA(IActiveIMMApp* This, 528 HIMC hIMC, DWORD dwIndex, LPVOID pComp, DWORD dwCompLen, 529 LPVOID pRead, DWORD dwReadLen) 530 { 531 BOOL rc; 532 533 rc = ImmSetCompositionStringA(hIMC,dwIndex,pComp,dwCompLen,pRead,dwReadLen); 534 535 if (rc) 536 return S_OK; 537 else 538 return E_FAIL; 539 } 540 541 static HRESULT WINAPI ActiveIMMApp_SetCompositionStringW(IActiveIMMApp* This, 542 HIMC hIMC, DWORD dwIndex, LPVOID pComp, DWORD dwCompLen, 543 LPVOID pRead, DWORD dwReadLen) 544 { 545 BOOL rc; 546 547 rc = ImmSetCompositionStringW(hIMC,dwIndex,pComp,dwCompLen,pRead,dwReadLen); 548 549 if (rc) 550 return S_OK; 551 else 552 return E_FAIL; 553 } 554 555 static HRESULT WINAPI ActiveIMMApp_SetCompositionWindow(IActiveIMMApp* This, 556 HIMC hIMC, COMPOSITIONFORM *pCompForm) 557 { 558 BOOL rc; 559 560 rc = ImmSetCompositionWindow(hIMC,pCompForm); 561 562 if (rc) 563 return S_OK; 564 else 565 return E_FAIL; 566 } 567 568 static HRESULT WINAPI ActiveIMMApp_SetConversionStatus(IActiveIMMApp* This, 569 HIMC hIMC, DWORD fdwConversion, DWORD fdwSentence) 570 { 571 BOOL rc; 572 573 rc = ImmSetConversionStatus(hIMC,fdwConversion,fdwSentence); 574 575 if (rc) 576 return S_OK; 577 else 578 return E_FAIL; 579 } 580 581 static HRESULT WINAPI ActiveIMMApp_SetOpenStatus(IActiveIMMApp* This, 582 HIMC hIMC, BOOL fOpen) 583 { 584 BOOL rc; 585 586 rc = ImmSetOpenStatus(hIMC,fOpen); 587 588 if (rc) 589 return S_OK; 590 else 591 return E_FAIL; 592 } 593 594 static HRESULT WINAPI ActiveIMMApp_SetStatusWindowPos(IActiveIMMApp* This, 595 HIMC hIMC, POINT *pptPos) 596 { 597 BOOL rc; 598 599 rc = ImmSetStatusWindowPos(hIMC,pptPos); 600 601 if (rc) 602 return S_OK; 603 else 604 return E_FAIL; 605 } 606 607 static HRESULT WINAPI ActiveIMMApp_SimulateHotKey(IActiveIMMApp* This, 608 HWND hwnd, DWORD dwHotKeyID) 609 { 610 BOOL rc; 611 612 rc = ImmSimulateHotKey(hwnd,dwHotKeyID); 613 614 if (rc) 615 return S_OK; 616 else 617 return E_FAIL; 618 } 619 620 static HRESULT WINAPI ActiveIMMApp_UnregisterWordA(IActiveIMMApp* This, 621 HKL hKL, LPSTR szReading, DWORD dwStyle, LPSTR szUnregister) 622 { 623 BOOL rc; 624 625 rc = ImmUnregisterWordA(hKL,szReading,dwStyle,szUnregister); 626 627 if (rc) 628 return S_OK; 629 else 630 return E_FAIL; 631 632 } 633 634 static HRESULT WINAPI ActiveIMMApp_UnregisterWordW(IActiveIMMApp* This, 635 HKL hKL, LPWSTR szReading, DWORD dwStyle, LPWSTR szUnregister) 636 { 637 BOOL rc; 638 639 rc = ImmUnregisterWordW(hKL,szReading,dwStyle,szUnregister); 640 641 if (rc) 642 return S_OK; 643 else 644 return E_FAIL; 645 } 646 647 static HRESULT WINAPI ActiveIMMApp_Activate(IActiveIMMApp* This, 648 BOOL fRestoreLayout) 649 { 650 FIXME("Stub\n"); 651 return S_OK; 652 } 653 654 static HRESULT WINAPI ActiveIMMApp_Deactivate(IActiveIMMApp* This) 655 { 656 FIXME("Stub\n"); 657 return S_OK; 658 } 659 660 static HRESULT WINAPI ActiveIMMApp_OnDefWindowProc(IActiveIMMApp* This, 661 HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *plResult) 662 { 663 #ifndef __REACTOS__ 664 FIXME("Stub (%p %x %lx %lx)\n",hWnd,Msg,wParam,lParam); 665 #endif 666 return E_FAIL; 667 } 668 669 static HRESULT WINAPI ActiveIMMApp_FilterClientWindows(IActiveIMMApp* This, 670 ATOM *aaClassList, UINT uSize) 671 { 672 FIXME("Stub\n"); 673 return S_OK; 674 } 675 676 static HRESULT WINAPI ActiveIMMApp_GetCodePageA(IActiveIMMApp* This, 677 HKL hKL, UINT *uCodePage) 678 { 679 FIXME("Stub\n"); 680 return E_NOTIMPL; 681 } 682 683 static HRESULT WINAPI ActiveIMMApp_GetLangId(IActiveIMMApp* This, 684 HKL hKL, LANGID *plid) 685 { 686 FIXME("Stub\n"); 687 return E_NOTIMPL; 688 } 689 690 static HRESULT WINAPI ActiveIMMApp_AssociateContextEx(IActiveIMMApp* This, 691 HWND hWnd, HIMC hIMC, DWORD dwFlags) 692 { 693 BOOL rc; 694 695 rc = ImmAssociateContextEx(hWnd,hIMC,dwFlags); 696 697 if (rc) 698 return S_OK; 699 else 700 return E_FAIL; 701 } 702 703 static HRESULT WINAPI ActiveIMMApp_DisableIME(IActiveIMMApp* This, 704 DWORD idThread) 705 { 706 BOOL rc; 707 708 rc = ImmDisableIME(idThread); 709 710 if (rc) 711 return S_OK; 712 else 713 return E_FAIL; 714 } 715 716 static HRESULT WINAPI ActiveIMMApp_GetImeMenuItemsA(IActiveIMMApp* This, 717 HIMC hIMC, DWORD dwFlags, DWORD dwType, 718 IMEMENUITEMINFOA *pImeParentMenu, IMEMENUITEMINFOA *pImeMenu, 719 DWORD dwSize, DWORD *pdwResult) 720 { 721 *pdwResult = ImmGetImeMenuItemsA(hIMC,dwFlags,dwType,pImeParentMenu,pImeMenu,dwSize); 722 return S_OK; 723 } 724 725 static HRESULT WINAPI ActiveIMMApp_GetImeMenuItemsW(IActiveIMMApp* This, 726 HIMC hIMC, DWORD dwFlags, DWORD dwType, 727 IMEMENUITEMINFOW *pImeParentMenu, IMEMENUITEMINFOW *pImeMenu, 728 DWORD dwSize, DWORD *pdwResult) 729 { 730 *pdwResult = ImmGetImeMenuItemsW(hIMC,dwFlags,dwType,pImeParentMenu,pImeMenu,dwSize); 731 return S_OK; 732 } 733 734 static HRESULT WINAPI ActiveIMMApp_EnumInputContext(IActiveIMMApp* This, 735 DWORD idThread, IEnumInputContext **ppEnum) 736 { 737 FIXME("Stub\n"); 738 return E_NOTIMPL; 739 } 740 741 static const IActiveIMMAppVtbl ActiveIMMAppVtbl = 742 { 743 ActiveIMMApp_QueryInterface, 744 ActiveIMMApp_AddRef, 745 ActiveIMMApp_Release, 746 747 ActiveIMMApp_AssociateContext, 748 ActiveIMMApp_ConfigureIMEA, 749 ActiveIMMApp_ConfigureIMEW, 750 ActiveIMMApp_CreateContext, 751 ActiveIMMApp_DestroyContext, 752 ActiveIMMApp_EnumRegisterWordA, 753 ActiveIMMApp_EnumRegisterWordW, 754 ActiveIMMApp_EscapeA, 755 ActiveIMMApp_EscapeW, 756 ActiveIMMApp_GetCandidateListA, 757 ActiveIMMApp_GetCandidateListW, 758 ActiveIMMApp_GetCandidateListCountA, 759 ActiveIMMApp_GetCandidateListCountW, 760 ActiveIMMApp_GetCandidateWindow, 761 ActiveIMMApp_GetCompositionFontA, 762 ActiveIMMApp_GetCompositionFontW, 763 ActiveIMMApp_GetCompositionStringA, 764 ActiveIMMApp_GetCompositionStringW, 765 ActiveIMMApp_GetCompositionWindow, 766 ActiveIMMApp_GetContext, 767 ActiveIMMApp_GetConversionListA, 768 ActiveIMMApp_GetConversionListW, 769 ActiveIMMApp_GetConversionStatus, 770 ActiveIMMApp_GetDefaultIMEWnd, 771 ActiveIMMApp_GetDescriptionA, 772 ActiveIMMApp_GetDescriptionW, 773 ActiveIMMApp_GetGuideLineA, 774 ActiveIMMApp_GetGuideLineW, 775 ActiveIMMApp_GetIMEFileNameA, 776 ActiveIMMApp_GetIMEFileNameW, 777 ActiveIMMApp_GetOpenStatus, 778 ActiveIMMApp_GetProperty, 779 ActiveIMMApp_GetRegisterWordStyleA, 780 ActiveIMMApp_GetRegisterWordStyleW, 781 ActiveIMMApp_GetStatusWindowPos, 782 ActiveIMMApp_GetVirtualKey, 783 ActiveIMMApp_InstallIMEA, 784 ActiveIMMApp_InstallIMEW, 785 ActiveIMMApp_IsIME, 786 ActiveIMMApp_IsUIMessageA, 787 ActiveIMMApp_IsUIMessageW, 788 ActiveIMMApp_NotifyIME, 789 ActiveIMMApp_RegisterWordA, 790 ActiveIMMApp_RegisterWordW, 791 ActiveIMMApp_ReleaseContext, 792 ActiveIMMApp_SetCandidateWindow, 793 ActiveIMMApp_SetCompositionFontA, 794 ActiveIMMApp_SetCompositionFontW, 795 ActiveIMMApp_SetCompositionStringA, 796 ActiveIMMApp_SetCompositionStringW, 797 ActiveIMMApp_SetCompositionWindow, 798 ActiveIMMApp_SetConversionStatus, 799 ActiveIMMApp_SetOpenStatus, 800 ActiveIMMApp_SetStatusWindowPos, 801 ActiveIMMApp_SimulateHotKey, 802 ActiveIMMApp_UnregisterWordA, 803 ActiveIMMApp_UnregisterWordW, 804 805 ActiveIMMApp_Activate, 806 ActiveIMMApp_Deactivate, 807 ActiveIMMApp_OnDefWindowProc, 808 ActiveIMMApp_FilterClientWindows, 809 ActiveIMMApp_GetCodePageA, 810 ActiveIMMApp_GetLangId, 811 ActiveIMMApp_AssociateContextEx, 812 ActiveIMMApp_DisableIME, 813 ActiveIMMApp_GetImeMenuItemsA, 814 ActiveIMMApp_GetImeMenuItemsW, 815 ActiveIMMApp_EnumInputContext 816 }; 817 818 static inline ActiveIMMApp *impl_from_IActiveIMMMessagePumpOwner(IActiveIMMMessagePumpOwner *iface) 819 { 820 return CONTAINING_RECORD(iface, ActiveIMMApp, IActiveIMMMessagePumpOwner_iface); 821 } 822 823 static HRESULT WINAPI ActiveIMMMessagePumpOwner_QueryInterface(IActiveIMMMessagePumpOwner* iface, 824 REFIID iid, LPVOID *ppvOut) 825 { 826 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 827 return IActiveIMMApp_QueryInterface(&This->IActiveIMMApp_iface, iid, ppvOut); 828 } 829 830 static ULONG WINAPI ActiveIMMMessagePumpOwner_AddRef(IActiveIMMMessagePumpOwner* iface) 831 { 832 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 833 return IActiveIMMApp_AddRef(&This->IActiveIMMApp_iface); 834 } 835 836 static ULONG WINAPI ActiveIMMMessagePumpOwner_Release(IActiveIMMMessagePumpOwner* iface) 837 { 838 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 839 return IActiveIMMApp_Release(&This->IActiveIMMApp_iface); 840 } 841 842 static HRESULT WINAPI ActiveIMMMessagePumpOwner_Start(IActiveIMMMessagePumpOwner* iface) 843 { 844 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 845 FIXME("(%p)->(): stub\n", This); 846 return E_NOTIMPL; 847 } 848 849 static HRESULT WINAPI ActiveIMMMessagePumpOwner_End(IActiveIMMMessagePumpOwner* iface) 850 { 851 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 852 FIXME("(%p)->(): stub\n", This); 853 return E_NOTIMPL; 854 } 855 856 static HRESULT WINAPI ActiveIMMMessagePumpOwner_OnTranslateMessage(IActiveIMMMessagePumpOwner* iface, 857 const MSG *msg) 858 { 859 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 860 FIXME("(%p)->(%p): stub\n", This, msg); 861 return E_NOTIMPL; 862 } 863 864 static HRESULT WINAPI ActiveIMMMessagePumpOwner_Pause(IActiveIMMMessagePumpOwner* iface, 865 DWORD *cookie) 866 { 867 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 868 FIXME("(%p)->(%p): stub\n", This, cookie); 869 return E_NOTIMPL; 870 } 871 872 static HRESULT WINAPI ActiveIMMMessagePumpOwner_Resume(IActiveIMMMessagePumpOwner* iface, 873 DWORD cookie) 874 { 875 ActiveIMMApp *This = impl_from_IActiveIMMMessagePumpOwner(iface); 876 FIXME("(%p)->(%u): stub\n", This, cookie); 877 return E_NOTIMPL; 878 } 879 880 static const IActiveIMMMessagePumpOwnerVtbl ActiveIMMMessagePumpOwnerVtbl = 881 { 882 ActiveIMMMessagePumpOwner_QueryInterface, 883 ActiveIMMMessagePumpOwner_AddRef, 884 ActiveIMMMessagePumpOwner_Release, 885 ActiveIMMMessagePumpOwner_Start, 886 ActiveIMMMessagePumpOwner_End, 887 ActiveIMMMessagePumpOwner_OnTranslateMessage, 888 ActiveIMMMessagePumpOwner_Pause, 889 ActiveIMMMessagePumpOwner_Resume, 890 }; 891 892 DECLSPEC_HIDDEN HRESULT ActiveIMMApp_Constructor(IUnknown *pUnkOuter, IUnknown **ppOut) 893 { 894 ActiveIMMApp *This; 895 if (pUnkOuter) 896 return CLASS_E_NOAGGREGATION; 897 898 This = HeapAlloc(GetProcessHeap(),HEAP_ZERO_MEMORY,sizeof(ActiveIMMApp)); 899 if (This == NULL) 900 return E_OUTOFMEMORY; 901 902 This->IActiveIMMApp_iface.lpVtbl = &ActiveIMMAppVtbl; 903 This->IActiveIMMMessagePumpOwner_iface.lpVtbl = &ActiveIMMMessagePumpOwnerVtbl; 904 This->refCount = 1; 905 906 TRACE("returning %p\n",This); 907 *ppOut = (IUnknown *)&This->IActiveIMMApp_iface; 908 return S_OK; 909 } 910