annotate src/video/win32/SDL_win32keyboard.c @ 4893:b2e434e0553b

Fixed all MinGW problems (except libraries not added to build yet). Added SDL_msctf.h for MinGW. Added a few casts to fix warnings on MinGW.
author Daniel Wyatt <Daniel.Wyatt@gmail.com>
date Sun, 19 Sep 2010 16:19:22 -0400
parents 518d1679d2d0
children ac19d74e2a47
rev   line source
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
3697
f7b03b6838cb Fixed bug #926
Sam Lantinga <slouken@libsdl.org>
parents: 2859
diff changeset
3 Copyright (C) 1997-2010 Sam Lantinga
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Lesser General Public License for more details.
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21 */
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 #include "SDL_config.h"
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 #include "SDL_win32video.h"
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26 #include "../../events/SDL_keyboard_c.h"
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
27 #include "../../events/scancodes_win32.h"
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
29 #include <imm.h>
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
30 #include <oleauto.h>
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
31
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
32 static void IME_Init(SDL_VideoData *videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
33 static void IME_Enable(SDL_VideoData *videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
34 static void IME_Disable(SDL_VideoData *videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
35 static void IME_Quit(SDL_VideoData *videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
36
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
37 #ifndef MAPVK_VK_TO_VSC
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
38 #define MAPVK_VK_TO_VSC 0
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
39 #endif
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
40 #ifndef MAPVK_VSC_TO_VK
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
41 #define MAPVK_VSC_TO_VK 1
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
42 #endif
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
43 #ifndef MAPVK_VK_TO_CHAR
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
44 #define MAPVK_VK_TO_CHAR 2
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
45 #endif
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
46
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
47 /* Alphabetic scancodes for PC keyboards */
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
48 BYTE alpha_scancodes[26] = {
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
49 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38, 50, 49, 24,
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
50 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
51 };
2735
204be4fc2726 Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents: 2726
diff changeset
52
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
53 BYTE keypad_scancodes[10] = {
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
54 82, 79, 80, 81, 75, 76, 77, 71, 72, 73
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
55 };
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
56
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57 void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 WIN_InitKeyboard(_THIS)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59 {
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60 SDL_VideoData *data = (SDL_VideoData *) _this->driverdata;
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
61 int i;
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
62
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
63 /* Make sure the alpha scancodes are correct. T isn't usually remapped */
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
64 if (MapVirtualKey('T', MAPVK_VK_TO_VSC) != alpha_scancodes['T' - 'A']) {
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
65 #if 0
2726
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
66 printf
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
67 ("Fixing alpha scancode map, assuming US QWERTY layout!\nPlease send the following 26 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
68 #endif
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
69 for (i = 0; i < SDL_arraysize(alpha_scancodes); ++i) {
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
70 alpha_scancodes[i] = MapVirtualKey('A' + i, MAPVK_VK_TO_VSC);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
71 #if 0
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
72 printf("%d = %d\n", i, alpha_scancodes[i]);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
73 #endif
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
74 }
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
75 }
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
76 if (MapVirtualKey(VK_NUMPAD0, MAPVK_VK_TO_VSC) != keypad_scancodes[0]) {
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
77 #if 0
2726
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
78 printf
f23ebf1ddac4 Dynamically load wintab32.dll
Sam Lantinga <slouken@libsdl.org>
parents: 2724
diff changeset
79 ("Fixing keypad scancode map!\nPlease send the following 10 lines of output to the SDL mailing list <sdl@libsdl.org>, including a description of your keyboard hardware.\n");
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
80 #endif
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
81 for (i = 0; i < SDL_arraysize(keypad_scancodes); ++i) {
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
82 keypad_scancodes[i] =
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
83 MapVirtualKey(VK_NUMPAD0 + i, MAPVK_VK_TO_VSC);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
84 #if 0
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
85 printf("%d = %d\n", i, keypad_scancodes[i]);
2724
0e2b65f32298 Added Wacom API headers.
Sam Lantinga <slouken@libsdl.org>
parents: 2324
diff changeset
86 #endif
2317
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
87 }
f537a293b3da Windows also remaps the numeric keypad... grrr
Sam Lantinga <slouken@libsdl.org>
parents: 2311
diff changeset
88 }
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
90 data->key_layout = win32_scancode_table;
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
91
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
92 data->ime_com_initialized = SDL_FALSE;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
93 data->ime_threadmgr = 0;
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
94 data->ime_initialized = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
95 data->ime_enabled = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
96 data->ime_available = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
97 data->ime_hwnd_main = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
98 data->ime_hwnd_current = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
99 data->ime_himc = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
100 data->ime_composition[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
101 data->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
102 data->ime_cursor = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
103 data->ime_hkl = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
104 data->ime_himm32 = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
105 data->GetReadingString = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
106 data->ShowReadingWindow = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
107 data->ImmLockIMC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
108 data->ImmUnlockIMC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
109 data->ImmLockIMCC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
110 data->ImmUnlockIMCC = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
111 data->ime_uiless = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
112 data->ime_threadmgrex = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
113 data->ime_uielemsinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
114 data->ime_alpnsinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
115 data->ime_openmodesinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
116 data->ime_convmodesinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
117 data->ime_uielemsink = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
118 data->ime_ippasink = 0;
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
119
4465
3e69e077cb95 Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
120 WIN_UpdateKeymap();
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
121
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
122 SDL_SetScancodeName(SDL_SCANCODE_APPLICATION, "Menu");
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
123 SDL_SetScancodeName(SDL_SCANCODE_LGUI, "Left Windows");
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
124 SDL_SetScancodeName(SDL_SCANCODE_RGUI, "Right Windows");
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
125 }
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
126
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
127 void
4465
3e69e077cb95 Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
128 WIN_UpdateKeymap()
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
129 {
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
130 int i;
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
131 SDL_scancode scancode;
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
132 SDLKey keymap[SDL_NUM_SCANCODES];
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
133
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
134 SDL_GetDefaultKeymap(keymap);
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
135
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
136 for (i = 0; i < SDL_arraysize(win32_scancode_table); i++) {
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
137
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
138 /* Make sure this scancode is a valid character scancode */
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
139 scancode = win32_scancode_table[i];
4561
e4b2b7207f79 Fixed remapping the Delete key and detecting the keypad Delete key.
Sam Lantinga <slouken@libsdl.org>
parents: 4465
diff changeset
140 if (scancode == SDL_SCANCODE_UNKNOWN || keymap[scancode] >= 127) {
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
141 continue;
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
142 }
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
143
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
144 /* Alphabetic keys are handled specially, since Windows remaps them */
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
145 if (i >= 'A' && i <= 'Z') {
2324
3202e4826c57 more valgrind errors fixed. Plus I ran make indent which changed a few files.
Bob Pendleton <bob@pendleton.com>
parents: 2317
diff changeset
146 BYTE vsc = alpha_scancodes[i - 'A'];
2311
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
147 keymap[scancode] = MapVirtualKey(vsc, MAPVK_VSC_TO_VK) + 0x20;
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
148 } else {
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
149 keymap[scancode] = (MapVirtualKey(i, MAPVK_VK_TO_CHAR) & 0x7FFF);
54e21acfec5a Friggin' Windows remaps alphabetic keys based on keyboard layout.
Sam Lantinga <slouken@libsdl.org>
parents: 2308
diff changeset
150 }
2308
514f7c1651fc Untested Win32 keyboard scancode code.
Sam Lantinga <slouken@libsdl.org>
parents: 1895
diff changeset
151 }
4465
3e69e077cb95 Removed multi-mouse / multi-keyboard support in anticipation of a real multi-mouse and multi-touch API.
Sam Lantinga <slouken@libsdl.org>
parents: 3697
diff changeset
152 SDL_SetKeymap(0, keymap, SDL_NUM_SCANCODES);
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155 void
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
156 WIN_QuitKeyboard(_THIS)
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
157 {
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
158 IME_Quit((SDL_VideoData *)_this->driverdata);
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
159 }
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
161 void
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
162 WIN_StartTextInput(_THIS)
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
163 {
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
164 SDL_Window *window = SDL_GetKeyboardFocus();
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
165 if (window) {
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
166 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
167 SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
168 IME_Init(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
169 IME_Enable(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
170 }
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
171 }
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
172
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
173 void
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
174 WIN_StopTextInput(_THIS)
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
175 {
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
176 SDL_Window *window = SDL_GetKeyboardFocus();
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
177 if (window) {
4753
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
178 HWND hwnd = ((SDL_WindowData *) window->driverdata)->hwnd;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
179 SDL_VideoData *videodata = (SDL_VideoData *)_this->driverdata;
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
180 IME_Init(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
181 IME_Disable(videodata, hwnd);
11b0a6a3eb4d Changed Start/StopTextInput back to not take any parameters.
dewyatt
parents: 4752
diff changeset
182 }
4747
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
183 }
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
184
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
185 void
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
186 WIN_SetTextInputRect(_THIS, SDL_Rect *rect)
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
187 {
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
188
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
189 }
5284a3b3217a Added empty text input functions for win32.
dewyatt
parents: 4465
diff changeset
190
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
191 #ifdef __GNUC__
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
192 #undef DEFINE_GUID
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
193 #define DEFINE_GUID(n,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) const GUID n GUID_SECT = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
194 DEFINE_GUID(IID_ITfInputProcessorProfileActivationSink, 0x71C6E74E,0x0F28,0x11D8,0xA8,0x2A,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
195 DEFINE_GUID(IID_ITfUIElementSink, 0xEA1EA136,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
196 DEFINE_GUID(GUID_TFCAT_TIP_KEYBOARD, 0x34745C63,0xB2F0,0x4784,0x8B,0x67,0x5E,0x12,0xC8,0x70,0x1A,0x31);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
197 DEFINE_GUID(IID_ITfSource, 0x4EA48A35,0x60AE,0x446F,0x8F,0xD6,0xE6,0xA8,0xD8,0x24,0x59,0xF7);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
198 DEFINE_GUID(IID_ITfUIElementMgr, 0xEA1EA135,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
199 DEFINE_GUID(IID_ITfReadingInformationUIElement, 0xEA1EA139,0x19DF,0x11D7,0xA6,0xD2,0x00,0x06,0x5B,0x84,0x43,0x5C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
200 DEFINE_GUID(IID_ITfThreadMgr, 0xAA80E801,0x2021,0x11D2,0x93,0xE0,0x00,0x60,0xB0,0x67,0xB8,0x6E);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
201 DEFINE_GUID(CLSID_TF_ThreadMgr, 0x529A9E6B,0x6587,0x4F23,0xAB,0x9E,0x9C,0x7D,0x68,0x3E,0x3C,0x50);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
202 DEFINE_GUID(IID_ITfThreadMgrEx, 0x3E90ADE3,0x7594,0x4CB0,0xBB,0x58,0x69,0x62,0x8F,0x5F,0x45,0x8C);
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
203 #endif
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
204
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
205 #define LANG_CHT MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_TRADITIONAL)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
206 #define LANG_CHS MAKELANGID(LANG_CHINESE, SUBLANG_CHINESE_SIMPLIFIED)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
207
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
208 #define MAKEIMEVERSION(major,minor) ((DWORD) (((BYTE)(major) << 24) | ((BYTE)(minor) << 16) ))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
209 #define IMEID_VER(id) ((id) & 0xffff0000)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
210 #define IMEID_LANG(id) ((id) & 0x0000ffff)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
211
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
212 #define CHT_HKL_DAYI ((HKL)0xE0060404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
213 #define CHT_HKL_NEW_PHONETIC ((HKL)0xE0080404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
214 #define CHT_HKL_NEW_CHANG_JIE ((HKL)0xE0090404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
215 #define CHT_HKL_NEW_QUICK ((HKL)0xE00A0404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
216 #define CHT_HKL_HK_CANTONESE ((HKL)0xE00B0404)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
217 #define CHT_IMEFILENAME1 "TINTLGNT.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
218 #define CHT_IMEFILENAME2 "CINTLGNT.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
219 #define CHT_IMEFILENAME3 "MSTCIPHA.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
220 #define IMEID_CHT_VER42 (LANG_CHT | MAKEIMEVERSION(4, 2))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
221 #define IMEID_CHT_VER43 (LANG_CHT | MAKEIMEVERSION(4, 3))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
222 #define IMEID_CHT_VER44 (LANG_CHT | MAKEIMEVERSION(4, 4))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
223 #define IMEID_CHT_VER50 (LANG_CHT | MAKEIMEVERSION(5, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
224 #define IMEID_CHT_VER51 (LANG_CHT | MAKEIMEVERSION(5, 1))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
225 #define IMEID_CHT_VER52 (LANG_CHT | MAKEIMEVERSION(5, 2))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
226 #define IMEID_CHT_VER60 (LANG_CHT | MAKEIMEVERSION(6, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
227 #define IMEID_CHT_VER_VISTA (LANG_CHT | MAKEIMEVERSION(7, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
228
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
229 #define CHS_HKL ((HKL)0xE00E0804)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
230 #define CHS_IMEFILENAME1 "PINTLGNT.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
231 #define CHS_IMEFILENAME2 "MSSCIPYA.IME"
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
232 #define IMEID_CHS_VER41 (LANG_CHS | MAKEIMEVERSION(4, 1))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
233 #define IMEID_CHS_VER42 (LANG_CHS | MAKEIMEVERSION(4, 2))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
234 #define IMEID_CHS_VER53 (LANG_CHS | MAKEIMEVERSION(5, 3))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
235
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
236 #define LANG() LOWORD((videodata->ime_hkl))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
237 #define PRIMLANG() ((WORD)PRIMARYLANGID(LANG()))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
238 #define SUBLANG() SUBLANGID(LANG())
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
239
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
240 static void IME_UpdateInputLocale(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
241 static void IME_ClearComposition(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
242 static void IME_SetWindow(SDL_VideoData* videodata, HWND hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
243 static void IME_SetupAPI(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
244 static DWORD IME_GetId(SDL_VideoData *videodata, UINT uIndex);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
245 static void IME_SendEditingEvent(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
246 #define SDL_IsEqualIID(riid1, riid2) SDL_IsEqualGUID(riid1, riid2)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
247 #define SDL_IsEqualGUID(rguid1, rguid2) (!SDL_memcmp(rguid1, rguid2, sizeof(GUID)))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
248
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
249 static SDL_bool UILess_SetupSinks(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
250 static void UILess_ReleaseSinks(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
251 static void UILess_EnableUIUpdates(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
252 static void UILess_DisableUIUpdates(SDL_VideoData *videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
253
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
254 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
255 IME_Init(SDL_VideoData *videodata, HWND hwnd)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
256 {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
257 if (videodata->ime_initialized)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
258 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
259
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
260 videodata->ime_hwnd_main = hwnd;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
261 if (SUCCEEDED(CoInitializeEx(NULL, COINIT_APARTMENTTHREADED))) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
262 videodata->ime_com_initialized = SDL_TRUE;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
263 CoCreateInstance(&CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfThreadMgr, (LPVOID *)&videodata->ime_threadmgr);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
264 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
265 videodata->ime_initialized = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
266 videodata->ime_himm32 = LoadLibraryA("imm32.dll");
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
267 if (!videodata->ime_himm32) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
268 videodata->ime_available = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
269 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
270 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
271 videodata->ImmLockIMC = (LPINPUTCONTEXT2 (WINAPI *)(HIMC))GetProcAddress(videodata->ime_himm32, "ImmLockIMC");
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
272 videodata->ImmUnlockIMC = (BOOL (WINAPI *)(HIMC))GetProcAddress(videodata->ime_himm32, "ImmUnlockIMC");
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
273 videodata->ImmLockIMCC = (LPVOID (WINAPI *)(HIMCC))GetProcAddress(videodata->ime_himm32, "ImmLockIMCC");
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
274 videodata->ImmUnlockIMCC = (BOOL (WINAPI *)(HIMCC))GetProcAddress(videodata->ime_himm32, "ImmUnlockIMCC");
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
275
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
276 IME_SetWindow(videodata, hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
277 videodata->ime_himc = ImmGetContext(hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
278 ImmReleaseContext(hwnd, videodata->ime_himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
279 if (!videodata->ime_himc) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
280 videodata->ime_available = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
281 IME_Disable(videodata, hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
282 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
283 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
284 videodata->ime_available = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
285 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
286 IME_SetupAPI(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
287 videodata->ime_uiless = UILess_SetupSinks(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
288 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
289 IME_Disable(videodata, hwnd);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
290 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
291
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
292 static void
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
293 IME_Enable(SDL_VideoData *videodata, HWND hwnd)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
294 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
295 if (!videodata->ime_initialized || !videodata->ime_hwnd_current)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
296 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
297
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
298 if (!videodata->ime_available) {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
299 IME_Disable(videodata, hwnd);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
300 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
301 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
302 if (videodata->ime_hwnd_current == videodata->ime_hwnd_main)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
303 ImmAssociateContext(videodata->ime_hwnd_current, videodata->ime_himc);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
304
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
305 videodata->ime_enabled = SDL_TRUE;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
306 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
307 UILess_EnableUIUpdates(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
308 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
309
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
310 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
311 IME_Disable(SDL_VideoData *videodata, HWND hwnd)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
312 {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
313 if (!videodata->ime_initialized || !videodata->ime_hwnd_current)
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
314 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
315
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
316 IME_ClearComposition(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
317 if (videodata->ime_hwnd_current == videodata->ime_hwnd_main)
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
318 ImmAssociateContext(videodata->ime_hwnd_current, (HIMC)0);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
319
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
320 videodata->ime_enabled = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
321 UILess_DisableUIUpdates(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
322 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
323
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
324 static void
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
325 IME_Quit(SDL_VideoData *videodata)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
326 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
327 if (!videodata->ime_initialized)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
328 return;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
329
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
330 UILess_ReleaseSinks(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
331 if (videodata->ime_hwnd_main)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
332 ImmAssociateContext(videodata->ime_hwnd_main, videodata->ime_himc);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
333
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
334 videodata->ime_hwnd_main = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
335 videodata->ime_himc = 0;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
336 if (videodata->ime_himm32) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
337 FreeLibrary(videodata->ime_himm32);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
338 videodata->ime_himm32 = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
339 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
340 if (videodata->ime_threadmgr) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
341 videodata->ime_threadmgr->lpVtbl->Release(videodata->ime_threadmgr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
342 videodata->ime_threadmgr = 0;
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
343 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
344 if (videodata->ime_com_initialized) {
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
345 CoUninitialize();
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
346 videodata->ime_com_initialized = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
347 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
348 videodata->ime_initialized = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
349 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
350
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
351 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
352 IME_GetReadingString(SDL_VideoData *videodata, HWND hwnd)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
353 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
354 DWORD id = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
355 HIMC himc = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
356 WCHAR buffer[16];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
357 WCHAR *s = buffer;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
358 DWORD len = 0;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
359 INT err = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
360 BOOL vertical = FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
361 UINT maxuilen = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
362 static OSVERSIONINFOA osversion = {0};
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
363 if (videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
364 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
365
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
366 videodata->ime_readingstring[0] = 0;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
367 if (!osversion.dwOSVersionInfoSize) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
368 osversion.dwOSVersionInfoSize = sizeof(osversion);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
369 GetVersionExA(&osversion);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
370 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
371 id = IME_GetId(videodata, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
372 if (!id)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
373 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
374
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
375 himc = ImmGetContext(hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
376 if (!himc)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
377 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
378
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
379 if (videodata->GetReadingString) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
380 len = videodata->GetReadingString(himc, 0, 0, &err, &vertical, &maxuilen);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
381 if (len) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
382 if (len > SDL_arraysize(buffer))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
383 len = SDL_arraysize(buffer);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
384
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
385 len = videodata->GetReadingString(himc, len, s, &err, &vertical, &maxuilen);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
386 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
387 SDL_wcslcpy(videodata->ime_readingstring, s, len);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
388 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
389 else {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
390 LPINPUTCONTEXT2 lpimc = videodata->ImmLockIMC(himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
391 LPBYTE p = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
392 s = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
393 switch (id)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
394 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
395 case IMEID_CHT_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
396 case IMEID_CHT_VER43:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
397 case IMEID_CHT_VER44:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
398 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + 24);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
399 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
400 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
401
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
402 len = *(DWORD *)(p + 7*4 + 32*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
403 s = (WCHAR *)(p + 56);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
404 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
405 case IMEID_CHT_VER51:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
406 case IMEID_CHT_VER52:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
407 case IMEID_CHS_VER53:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
408 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + 4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
409 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
410 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
411
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
412 p = *(LPBYTE *)((LPBYTE)p + 1*4 + 5*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
413 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
414 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
415
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
416 len = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16*2);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
417 s = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
418 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
419 case IMEID_CHS_VER41:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
420 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
421 int offset = (IME_GetId(videodata, 1) >= 0x00000002) ? 8 : 7;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
422 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + offset * 4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
423 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
424 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
425
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
426 len = *(DWORD *)(p + 7*4 + 16*2*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
427 s = (WCHAR *)(p + 6*4 + 16*2*1);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
428 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
429 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
430 case IMEID_CHS_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
431 if (osversion.dwPlatformId != VER_PLATFORM_WIN32_NT)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
432 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
433
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
434 p = *(LPBYTE *)((LPBYTE)videodata->ImmLockIMCC(lpimc->hPrivate) + 1*4 + 1*4 + 6*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
435 if (!p)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
436 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
437
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
438 len = *(DWORD *)(p + 1*4 + (16*2+2*4) + 5*4 + 16*2);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
439 s = (WCHAR *)(p + 1*4 + (16*2+2*4) + 5*4);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
440 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
441 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
442 if (s)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
443 SDL_wcslcpy(videodata->ime_readingstring, s, len + 1);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
444
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
445 videodata->ImmUnlockIMCC(lpimc->hPrivate);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
446 videodata->ImmUnlockIMC(himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
447 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
448 ImmReleaseContext(hwnd, himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
449 IME_SendEditingEvent(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
450 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
451
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
452 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
453 IME_InputLangChanged(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
454 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
455 UINT lang = PRIMLANG();
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
456 HWND hwndime = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
457 IME_UpdateInputLocale(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
458 IME_SetupAPI(videodata);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
459 if (lang != PRIMLANG()) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
460 IME_ClearComposition(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
461 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
462 hwndime = ImmGetDefaultIMEWnd(videodata->ime_hwnd_current);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
463 if (hwndime) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
464 SendMessageA(hwndime, WM_IME_CONTROL, IMC_OPENSTATUSWINDOW, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
465 SendMessageA(hwndime, WM_IME_CONTROL, IMC_CLOSESTATUSWINDOW, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
466 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
467 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
468
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
469 static DWORD
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
470 IME_GetId(SDL_VideoData *videodata, UINT uIndex)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
471 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
472 static HKL hklprev = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
473 static DWORD dwRet[2] = {0};
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
474 DWORD dwVerSize = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
475 DWORD dwVerHandle = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
476 LPVOID lpVerBuffer = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
477 LPVOID lpVerData = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
478 UINT cbVerData = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
479 char szTemp[256];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
480 HKL hkl = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
481 DWORD dwLang = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
482 if (uIndex >= sizeof(dwRet) / sizeof(dwRet[0]))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
483 return 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
484
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
485 hkl = videodata->ime_hkl;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
486 if (hklprev == hkl)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
487 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
488
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
489 hklprev = hkl;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
490 dwLang = ((DWORD)hkl & 0xffff);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
491 if (videodata->ime_uiless && LANG() == LANG_CHT) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
492 dwRet[0] = IMEID_CHT_VER_VISTA;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
493 dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
494 return dwRet[0];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
495 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
496 if (hkl != CHT_HKL_NEW_PHONETIC
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
497 && hkl != CHT_HKL_NEW_CHANG_JIE
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
498 && hkl != CHT_HKL_NEW_QUICK
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
499 && hkl != CHT_HKL_HK_CANTONESE
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
500 && hkl != CHS_HKL) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
501 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
502 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
503 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
504 if (ImmGetIMEFileNameA(hkl, szTemp, sizeof(szTemp) - 1) <= 0) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
505 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
506 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
507 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
508 if (!videodata->GetReadingString) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
509 #define LCID_INVARIANT MAKELCID(MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US), SORT_DEFAULT)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
510 if (CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHT_IMEFILENAME1, -1) != 2
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
511 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHT_IMEFILENAME2, -1) != 2
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
512 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHT_IMEFILENAME3, -1) != 2
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
513 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHS_IMEFILENAME1, -1) != 2
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
514 && CompareStringA(LCID_INVARIANT, NORM_IGNORECASE, szTemp, -1, CHS_IMEFILENAME2, -1) != 2) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
515 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
516 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
517 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
518 #undef LCID_INVARIANT
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
519 dwVerSize = GetFileVersionInfoSizeA(szTemp, &dwVerHandle);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
520 if (dwVerSize) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
521 lpVerBuffer = SDL_malloc(dwVerSize);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
522 if (lpVerBuffer) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
523 if (GetFileVersionInfoA(szTemp, dwVerHandle, dwVerSize, lpVerBuffer)) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
524 if (VerQueryValueA(lpVerBuffer, "\\", &lpVerData, &cbVerData)) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
525 #define pVerFixedInfo ((VS_FIXEDFILEINFO FAR*)lpVerData)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
526 DWORD dwVer = pVerFixedInfo->dwFileVersionMS;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
527 dwVer = (dwVer & 0x00ff0000) << 8 | (dwVer & 0x000000ff) << 16;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
528 if (videodata->GetReadingString ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
529 dwLang == LANG_CHT && (
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
530 dwVer == MAKEIMEVERSION(4, 2) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
531 dwVer == MAKEIMEVERSION(4, 3) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
532 dwVer == MAKEIMEVERSION(4, 4) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
533 dwVer == MAKEIMEVERSION(5, 0) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
534 dwVer == MAKEIMEVERSION(5, 1) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
535 dwVer == MAKEIMEVERSION(5, 2) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
536 dwVer == MAKEIMEVERSION(6, 0))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
537 ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
538 dwLang == LANG_CHS && (
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
539 dwVer == MAKEIMEVERSION(4, 1) ||
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
540 dwVer == MAKEIMEVERSION(4, 2) ||
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
541 dwVer == MAKEIMEVERSION(5, 3))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
542 dwRet[0] = dwVer | dwLang;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
543 dwRet[1] = pVerFixedInfo->dwFileVersionLS;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
544 SDL_free(lpVerBuffer);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
545 return dwRet[0];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
546 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
547 #undef pVerFixedInfo
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
548 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
549 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
550 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
551 SDL_free(lpVerBuffer);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
552 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
553 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
554 dwRet[0] = dwRet[1] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
555 return dwRet[uIndex];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
556 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
557
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
558 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
559 IME_SetupAPI(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
560 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
561 char ime_file[MAX_PATH + 1];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
562 HMODULE hime = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
563 HKL hkl = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
564 videodata->GetReadingString = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
565 videodata->ShowReadingWindow = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
566 if (videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
567 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
568
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
569 hkl = videodata->ime_hkl;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
570 if (ImmGetIMEFileNameA(hkl, ime_file, sizeof(ime_file) - 1) <= 0)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
571 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
572
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
573 hime = LoadLibraryA(ime_file);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
574 if (!hime)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
575 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
576
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
577 videodata->GetReadingString = (UINT (WINAPI *)(HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
578 GetProcAddress(hime, "GetReadingString");
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
579 videodata->ShowReadingWindow = (BOOL (WINAPI *)(HIMC, BOOL))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
580 GetProcAddress(hime, "ShowReadingWindow");
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
581
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
582 if (videodata->ShowReadingWindow) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
583 HIMC himc = ImmGetContext(videodata->ime_hwnd_current);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
584 if (himc) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
585 videodata->ShowReadingWindow(himc, FALSE);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
586 ImmReleaseContext(videodata->ime_hwnd_current, himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
587 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
588 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
589 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
590
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
591 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
592 IME_SetWindow(SDL_VideoData* videodata, HWND hwnd)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
593 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
594 videodata->ime_hwnd_current = hwnd;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
595 if (videodata->ime_threadmgr) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
596 struct ITfDocumentMgr *document_mgr = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
597 if (SUCCEEDED(videodata->ime_threadmgr->lpVtbl->AssociateFocus(videodata->ime_threadmgr, hwnd, NULL, &document_mgr))) {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
598 if (document_mgr)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
599 document_mgr->lpVtbl->Release(document_mgr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
600 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
601 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
602 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
603
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
604 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
605 IME_UpdateInputLocale(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
606 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
607 static HKL hklprev = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
608 videodata->ime_hkl = GetKeyboardLayout(0);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
609 if (hklprev == videodata->ime_hkl)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
610 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
611
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
612 hklprev = videodata->ime_hkl;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
613 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
614
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
615 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
616 IME_ClearComposition(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
617 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
618 HIMC himc = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
619 if (!videodata->ime_initialized)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
620 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
621
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
622 himc = ImmGetContext(videodata->ime_hwnd_current);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
623 if (!himc)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
624 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
625
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
626 ImmNotifyIME(himc, NI_COMPOSITIONSTR, CPS_CANCEL, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
627 if (videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
628 ImmSetCompositionString(himc, SCS_SETSTR, TEXT(""), sizeof(TCHAR), TEXT(""), sizeof(TCHAR));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
629
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
630 ImmNotifyIME(himc, NI_CLOSECANDIDATE, 0, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
631 ImmReleaseContext(videodata->ime_hwnd_current, himc);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
632 SDL_SendEditingText("", 0, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
633 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
634
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
635 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
636 IME_ClearEditing(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
637 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
638
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
639 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
640
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
641 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
642 IME_GetCompositionString(SDL_VideoData *videodata, HIMC himc, DWORD string)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
643 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
644 LONG length = ImmGetCompositionStringW(himc, string, videodata->ime_composition, sizeof(videodata->ime_composition));
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
645 if (length < 0)
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
646 length = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
647
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
648 length /= sizeof(videodata->ime_composition[0]);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
649 videodata->ime_cursor = LOWORD(ImmGetCompositionStringW(himc, GCS_CURSORPOS, 0, 0));
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
650 if (videodata->ime_composition[videodata->ime_cursor] == 0x3000) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
651 int i;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
652 for (i = videodata->ime_cursor + 1; i < length; ++i)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
653 videodata->ime_composition[i - 1] = videodata->ime_composition[i];
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
654
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
655 --length;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
656 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
657 videodata->ime_composition[length] = 0;
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
658 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
659
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
660 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
661 IME_SendInputEvent(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
662 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
663 char *s = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
664 s = WIN_StringToUTF8(videodata->ime_composition);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
665 SDL_SendKeyboardText(s);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
666 SDL_free(s);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
667
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
668 videodata->ime_composition[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
669 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
670 videodata->ime_cursor = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
671 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
672
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
673 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
674 IME_SendEditingEvent(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
675 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
676 char *s = 0;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
677 WCHAR buffer[SDL_TEXTEDITINGEVENT_TEXT_SIZE];
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
678 buffer[0] = 0;
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
679 if (videodata->ime_readingstring[0]) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
680 size_t len = SDL_min(SDL_wcslen(videodata->ime_composition), (size_t)videodata->ime_cursor);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
681 SDL_wcslcpy(buffer, videodata->ime_composition, len + 1);
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
682 SDL_wcslcat(buffer, videodata->ime_readingstring, sizeof(buffer));
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
683 SDL_wcslcat(buffer, &videodata->ime_composition[len], sizeof(buffer) - len);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
684 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
685 else {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
686 SDL_wcslcpy(buffer, videodata->ime_composition, sizeof(videodata->ime_composition));
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
687 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
688 s = WIN_StringToUTF8(buffer);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
689 SDL_SendEditingText(s, videodata->ime_cursor + SDL_wcslen(videodata->ime_readingstring), 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
690 SDL_free(s);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
691 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
692
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
693 SDL_bool
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
694 IME_HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM *lParam, SDL_VideoData *videodata)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
695 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
696 SDL_bool trap = SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
697 HIMC himc = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
698 if (!videodata->ime_initialized || !videodata->ime_available || !videodata->ime_enabled)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
699 return SDL_FALSE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
700
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
701 switch (msg)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
702 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
703 case WM_INPUTLANGCHANGE:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
704 //IME_InputLangChanged(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
705 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
706 case WM_IME_SETCONTEXT:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
707 *lParam = 0;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
708 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
709 case WM_IME_STARTCOMPOSITION:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
710 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
711 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
712 case WM_IME_COMPOSITION:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
713 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
714 himc = ImmGetContext(hwnd);
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
715 if (*lParam & GCS_RESULTSTR) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
716 IME_GetCompositionString(videodata, himc, GCS_RESULTSTR);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
717 IME_SendInputEvent(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
718 }
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
719 if (*lParam & GCS_COMPSTR) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
720 if (!videodata->ime_uiless)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
721 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
722
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
723 IME_GetCompositionString(videodata, himc, GCS_COMPSTR);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
724 IME_SendEditingEvent(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
725 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
726 ImmReleaseContext(hwnd, himc);
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
727 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
728 case WM_IME_ENDCOMPOSITION:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
729 videodata->ime_composition[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
730 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
731 videodata->ime_cursor = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
732 SDL_SendEditingText("", 0, 0);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
733 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
734 case WM_IME_NOTIFY:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
735 switch (wParam)
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
736 {
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
737 case IMN_SETCONVERSIONMODE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
738 case IMN_SETOPENSTATUS:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
739 IME_UpdateInputLocale(videodata);
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
740 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
741 case IMN_OPENCANDIDATE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
742 case IMN_CHANGECANDIDATE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
743 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
744 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
745 case IMN_CLOSECANDIDATE:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
746 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
747 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
748 case IMN_PRIVATE:
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
749 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
750 DWORD dwId = IME_GetId(videodata, 0);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
751 IME_GetReadingString(videodata, hwnd);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
752 switch (dwId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
753 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
754 case IMEID_CHT_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
755 case IMEID_CHT_VER43:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
756 case IMEID_CHT_VER44:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
757 case IMEID_CHS_VER41:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
758 case IMEID_CHS_VER42:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
759 if (*lParam == 1 || *lParam == 2)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
760 trap = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
761
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
762 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
763 case IMEID_CHT_VER50:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
764 case IMEID_CHT_VER51:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
765 case IMEID_CHT_VER52:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
766 case IMEID_CHT_VER60:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
767 case IMEID_CHS_VER53:
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
768 if (*lParam == 16
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
769 || *lParam == 17
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
770 || *lParam == 26
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
771 || *lParam == 27
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
772 || *lParam == 28)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
773 trap = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
774 break;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
775 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
776 }
4752
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
777 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
778 default:
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
779 trap = SDL_TRUE;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
780 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
781 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
782 break;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
783 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
784 return trap;
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
785 }
dc7bdcf06367 Initial IMM implementation.
dewyatt
parents: 4751
diff changeset
786
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
787 STDMETHODIMP_(ULONG) TSFSink_AddRef(TSFSink *sink)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
788 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
789 return ++sink->refcount;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
790 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
791
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
792 STDMETHODIMP_(ULONG)TSFSink_Release(TSFSink *sink)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
793 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
794 --sink->refcount;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
795 if (sink->refcount == 0)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
796 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
797 SDL_free(sink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
798 return 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
799 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
800 return sink->refcount;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
801 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
802
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
803 STDMETHODIMP UIElementSink_QueryInterface(TSFSink *sink, REFIID riid, PVOID *ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
804 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
805 if (!ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
806 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
807
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
808 *ppv = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
809 if (SDL_IsEqualIID(riid, &IID_IUnknown))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
810 *ppv = (IUnknown *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
811 else if (SDL_IsEqualIID(riid, &IID_ITfUIElementSink))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
812 *ppv = (ITfUIElementSink *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
813
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
814 if (*ppv) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
815 TSFSink_AddRef(sink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
816 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
817 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
818 return E_NOINTERFACE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
819 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
820
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
821 ITfUIElement *UILess_GetUIElement(SDL_VideoData *videodata, DWORD dwUIElementId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
822 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
823 ITfUIElementMgr *puiem = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
824 ITfUIElement *pelem = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
825 ITfThreadMgrEx *threadmgrex = videodata->ime_threadmgrex;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
826
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
827 if (SUCCEEDED(threadmgrex->lpVtbl->QueryInterface(threadmgrex, &IID_ITfUIElementMgr, (LPVOID *)&puiem))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
828 puiem->lpVtbl->GetUIElement(puiem, dwUIElementId, &pelem);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
829 puiem->lpVtbl->Release(puiem);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
830 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
831 return pelem;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
832 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
833
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
834 STDMETHODIMP UIElementSink_BeginUIElement(TSFSink *sink, DWORD dwUIElementId, BOOL *pbShow)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
835 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
836 ITfUIElement *element = UILess_GetUIElement((SDL_VideoData *)sink->data, dwUIElementId);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
837 ITfReadingInformationUIElement *preading = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
838 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
839 if (!element)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
840 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
841
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
842 *pbShow = FALSE;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
843 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfReadingInformationUIElement, (LPVOID *)&preading))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
844 BSTR bstr;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
845 if (SUCCEEDED(preading->lpVtbl->GetString(preading, &bstr)) && bstr) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
846 WCHAR *s = (WCHAR *)bstr;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
847 SysFreeString(bstr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
848 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
849 preading->lpVtbl->Release(preading);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
850 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
851 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
852 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
853
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
854 STDMETHODIMP UIElementSink_UpdateUIElement(TSFSink *sink, DWORD dwUIElementId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
855 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
856 ITfUIElement *element = UILess_GetUIElement((SDL_VideoData *)sink->data, dwUIElementId);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
857 ITfReadingInformationUIElement *preading = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
858 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
859 if (!element)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
860 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
861
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
862 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfReadingInformationUIElement, (LPVOID *)&preading))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
863 BSTR bstr;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
864 if (SUCCEEDED(preading->lpVtbl->GetString(preading, &bstr)) && bstr) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
865 WCHAR *s = (WCHAR *)bstr;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
866 SDL_wcslcpy(videodata->ime_readingstring, s, sizeof(videodata->ime_readingstring));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
867 IME_SendEditingEvent(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
868 SysFreeString(bstr);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
869 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
870 preading->lpVtbl->Release(preading);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
871 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
872 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
873 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
874
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
875 STDMETHODIMP UIElementSink_EndUIElement(TSFSink *sink, DWORD dwUIElementId)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
876 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
877 ITfUIElement *element = UILess_GetUIElement((SDL_VideoData *)sink->data, dwUIElementId);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
878 ITfReadingInformationUIElement *preading = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
879 SDL_VideoData *videodata = (SDL_VideoData *)sink->data;
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
880 if (!element)
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
881 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
882
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
883 if (SUCCEEDED(element->lpVtbl->QueryInterface(element, &IID_ITfReadingInformationUIElement, (LPVOID *)&preading))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
884 videodata->ime_readingstring[0] = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
885 IME_SendEditingEvent(videodata);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
886 preading->lpVtbl->Release(preading);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
887 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
888 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
889 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
890
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
891 STDMETHODIMP IPPASink_QueryInterface(TSFSink *sink, REFIID riid, PVOID *ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
892 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
893 if (!ppv)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
894 return E_INVALIDARG;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
895
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
896 *ppv = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
897 if (SDL_IsEqualIID(riid, &IID_IUnknown))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
898 *ppv = (IUnknown *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
899 else if (SDL_IsEqualIID(riid, &IID_ITfInputProcessorProfileActivationSink))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
900 *ppv = (ITfInputProcessorProfileActivationSink *)sink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
901
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
902 if (*ppv) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
903 TSFSink_AddRef(sink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
904 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
905 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
906 return E_NOINTERFACE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
907 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
908
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
909 STDMETHODIMP IPPASink_OnActivated(TSFSink *sink, DWORD dwProfileType, LANGID langid, REFCLSID clsid, REFGUID catid, REFGUID guidProfile, HKL hkl, DWORD dwFlags)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
910 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
911 if (SDL_IsEqualIID(catid, &GUID_TFCAT_TIP_KEYBOARD) && (dwFlags & TF_IPSINK_FLAG_ACTIVE))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
912 IME_InputLangChanged((SDL_VideoData *)sink->data);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
913
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
914 return S_OK;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
915 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
916
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
917 static void *vtUIElementSink[] = {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
918 (void *)(UIElementSink_QueryInterface),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
919 (void *)(TSFSink_AddRef),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
920 (void *)(TSFSink_Release),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
921 (void *)(UIElementSink_BeginUIElement),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
922 (void *)(UIElementSink_UpdateUIElement),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
923 (void *)(UIElementSink_EndUIElement)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
924 };
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
925
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
926 static void *vtIPPASink[] = {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
927 (void *)(IPPASink_QueryInterface),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
928 (void *)(TSFSink_AddRef),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
929 (void *)(TSFSink_Release),
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
930 (void *)(IPPASink_OnActivated)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
931 };
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
932
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
933 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
934 UILess_EnableUIUpdates(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
935 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
936 ITfSource *source = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
937 if (!videodata->ime_threadmgrex || videodata->ime_uielemsinkcookie != TF_INVALID_COOKIE)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
938 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
939
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
940 if (SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
941 source->lpVtbl->AdviseSink(source, &IID_ITfUIElementSink, (IUnknown *)videodata->ime_uielemsink, &videodata->ime_uielemsinkcookie);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
942 source->lpVtbl->Release(source);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
943 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
944 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
945
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
946 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
947 UILess_DisableUIUpdates(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
948 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
949 ITfSource *source = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
950 if (!videodata->ime_threadmgrex || videodata->ime_uielemsinkcookie == TF_INVALID_COOKIE)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
951 return;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
952
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
953 if (SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
954 source->lpVtbl->UnadviseSink(source, videodata->ime_uielemsinkcookie);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
955 videodata->ime_uielemsinkcookie = TF_INVALID_COOKIE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
956 source->lpVtbl->Release(source);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
957 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
958 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
959
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
960 static SDL_bool
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
961 UILess_SetupSinks(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
962 {
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
963 TfClientId clientid = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
964 SDL_bool result = SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
965 ITfSource *source = 0;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
966 if (FAILED(CoCreateInstance(&CLSID_TF_ThreadMgr, NULL, CLSCTX_INPROC_SERVER, &IID_ITfThreadMgrEx, (LPVOID *)&videodata->ime_threadmgrex)))
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
967 return SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
968
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
969 if (FAILED(videodata->ime_threadmgrex->lpVtbl->ActivateEx(videodata->ime_threadmgrex, &clientid, TF_TMAE_UIELEMENTENABLEDONLY)))
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
970 return SDL_FALSE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
971
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
972 videodata->ime_uielemsink = SDL_malloc(sizeof(TSFSink));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
973 videodata->ime_ippasink = SDL_malloc(sizeof(TSFSink));
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
974
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
975 videodata->ime_uielemsink->lpVtbl = vtUIElementSink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
976 videodata->ime_uielemsink->refcount = 1;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
977 videodata->ime_uielemsink->data = videodata;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
978
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
979 videodata->ime_ippasink->lpVtbl = vtIPPASink;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
980 videodata->ime_ippasink->refcount = 1;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
981 videodata->ime_ippasink->data = videodata;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
982
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
983 if (SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
984 if (SUCCEEDED(source->lpVtbl->AdviseSink(source, &IID_ITfUIElementSink, (IUnknown *)videodata->ime_uielemsink, &videodata->ime_uielemsinkcookie))) {
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
985 if (SUCCEEDED(source->lpVtbl->AdviseSink(source, &IID_ITfInputProcessorProfileActivationSink, (IUnknown *)videodata->ime_ippasink, &videodata->ime_alpnsinkcookie))) {
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
986 result = SDL_TRUE;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
987 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
988 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
989 source->lpVtbl->Release(source);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
990 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
991 return result;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
992 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
993
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
994 #define SAFE_RELEASE(p) \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
995 { \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
996 if (p) { \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
997 (p)->lpVtbl->Release((p)); \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
998 (p) = 0; \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
999 } \
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1000 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1001
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1002 static void
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1003 UILess_ReleaseSinks(SDL_VideoData *videodata)
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1004 {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1005 ITfSource *source = 0;
4893
b2e434e0553b Fixed all MinGW problems (except libraries not added to build yet).
Daniel Wyatt <Daniel.Wyatt@gmail.com>
parents: 4763
diff changeset
1006 if (videodata->ime_threadmgrex && SUCCEEDED(videodata->ime_threadmgrex->lpVtbl->QueryInterface(videodata->ime_threadmgrex, &IID_ITfSource, (LPVOID *)&source))) {
4760
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1007 source->lpVtbl->UnadviseSink(source, videodata->ime_uielemsinkcookie);
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1008 source->lpVtbl->UnadviseSink(source, videodata->ime_alpnsinkcookie);
c40027ee6d47 Updated to fit SDL style a little more.
dewyatt
parents: 4759
diff changeset
1009 SAFE_RELEASE(source);
4759
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1010 videodata->ime_threadmgrex->lpVtbl->Deactivate(videodata->ime_threadmgrex);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1011 SAFE_RELEASE(videodata->ime_threadmgrex);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1012 TSFSink_Release(videodata->ime_uielemsink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1013 videodata->ime_uielemsink = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1014 TSFSink_Release(videodata->ime_ippasink);
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1015 videodata->ime_ippasink = 0;
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1016 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1017 }
863ba7d1f029 Large commit with initial reading string support, TSF UILess code, etc.
dewyatt
parents: 4753
diff changeset
1018
1895
c121d94672cb SDL 1.2 is moving to a branch, and SDL 1.3 is becoming the head.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1019 /* vi: set ts=4 sw=4 expandtab: */