2 * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
19 using System.Runtime.InteropServices;
20 using Tizen.Uix.InputMethod;
23 /// Partial Interop Class
25 internal static partial class Interop
28 /// InputMethod Interop Class
30 internal static class InputMethod
32 internal static string LogTag = "Tizen.Uix.InputMethod";
34 private const int ErrorInputMethod = -0x02F20000;
36 internal enum ErrorCode
38 None = Tizen.Internals.Errors.ErrorCode.None, /**< Successful */
39 InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter, /**< Invalid parameter */
40 PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied, /**< Permission denied */
41 NoCallbackFunction = ErrorInputMethod | 0x0001, /**< Necessary callback function is not set */
42 NotRunning = ErrorInputMethod | 0x0002, /**< IME main loop isn't started yet */
43 OperationFailed = ErrorInputMethod | 0x0010, /**< Operation failed */
44 OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory /**< out of memory */
47 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
48 internal struct ImeCallbackStruct
50 [MarshalAs(UnmanagedType.FunctionPtr)]
51 internal ImeCreateCb create;
52 [MarshalAs(UnmanagedType.FunctionPtr)]
53 internal ImeTerminateCb terminate;
54 [MarshalAs(UnmanagedType.FunctionPtr)]
55 internal ImeShowCb show;
56 [MarshalAs(UnmanagedType.FunctionPtr)]
57 internal ImeHideCb hide;
60 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
61 internal struct ImePreEditAttributeStruct
69 internal sealed class ImeCallbackStructGCHandle : IDisposable
71 internal ImeCallbackStruct _imeCallbackStruct;
72 internal GCHandle _imeCallbackStructHandle;
73 public ImeCallbackStructGCHandle()
75 _imeCallbackStruct = new ImeCallbackStruct();
76 _imeCallbackStructHandle = GCHandle.Alloc(_imeCallbackStruct);
79 #region IDisposable Support
80 private bool disposedValue = false;
82 void Dispose(bool disposing)
84 Tizen.Log.Info(LogTag, "In Dispose");
89 Tizen.Log.Info(LogTag, "In Dispose free called");
90 _imeCallbackStructHandle.Free();
104 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
105 internal delegate void ImeRunCb();
107 [DllImport(Libraries.InputMethod, EntryPoint = "ime_run")]
108 internal static extern ErrorCode ImeRun(ref ImeCallbackStruct basicCB, IntPtr userData);
110 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_in_cb")]
111 internal static extern ErrorCode ImeEventSetFocusedInCb(ImeFocusedInCb callbackFunction, IntPtr userData);
113 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_out_cb")]
114 internal static extern ErrorCode ImeEventSetFocusedOutCb(ImeFocusedOutCb callbackFunction, IntPtr userData);
116 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_surrounding_text_updated_cb")]
117 internal static extern ErrorCode ImeEventSetSurroundingTextUpdatedCb(ImeSurroundingTextUpdatedCb callbackFunction, IntPtr userData);
119 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_input_context_reset_cb")]
120 internal static extern ErrorCode ImeEventSetInputContextResetCb(ImeInputContextResetCb callbackFunction, IntPtr userData);
122 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_cursor_position_updated_cb")]
123 internal static extern ErrorCode ImeEventSetCursorPositionitionUpdatedCb(ImeCursorPositionitionUpdatedCb callbackFunction, IntPtr userData);
125 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_requested_cb")]
126 internal static extern ErrorCode ImeEventSetLanguageRequestedCallbackCb(ImeLanguageRequestedCb callbackFunction, IntPtr userData);
128 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_set_cb")]
129 internal static extern ErrorCode ImeEventSetLanguageSetCb(ImeLanguageSetCb callbackFunction, IntPtr userData);
131 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_set_cb")]
132 internal static extern ErrorCode ImeEventSetImdataSetCb(ImeImdataSetCb callbackFunction, IntPtr userData);
134 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_requested_cb")]
135 internal static extern ErrorCode ImeEventSetImdataRequestedCb(ImeImdataRequestedCb callbackFunction, IntPtr userData);
137 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_layout_set_cb")]
138 internal static extern ErrorCode ImeEventSetLayoutSetCb(ImeLayoutSetCb callbackFunction, IntPtr userData);
140 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_type_set_cb")]
141 internal static extern ErrorCode ImeEventSetReturnKeySetCb(ImeReturnKeySetCb callbackFunction, IntPtr userData);
143 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_state_set_cb")]
144 internal static extern ErrorCode ImeEventSetReturnKeyStateSetCb(ImeReturnKeyStateSetCb callbackFunction, IntPtr userData);
146 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_geometry_requested_cb")]
147 internal static extern ErrorCode ImeEventSetGeometryRequestedCallbackCb(ImeGeometryRequestedCb callbackFunction, IntPtr userData);
149 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_process_key_event_cb")]
150 internal static extern ErrorCode ImeEventSetProcessKeyEventCb(ImeProcessKeyEventCb callbackFunction, IntPtr userData);
152 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_display_language_changed_cb")]
153 internal static extern ErrorCode ImeEventSetDisplayLanguageChangedCb(ImeDisplayLanguageChangedCb callbackFunction, IntPtr userData);
155 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_rotation_degree_changed_cb")]
156 internal static extern ErrorCode ImeEventSetRotationChangedCb(ImeRotationChangedCb callbackFunction, IntPtr userData);
158 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_accessibility_state_changed_cb")]
159 internal static extern ErrorCode ImeEventSetAccessibilityStateChangedCb(ImeAccessibilityStateChangedCb callbackFunction, IntPtr userData);
161 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_option_window_created_cb")]
162 internal static extern ErrorCode ImeEventSetOptionWindowCreatedCb(ImeOptionWindowCreatedCb callbackFunction, IntPtr userData);
164 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_option_window_destroyed_cb")]
165 internal static extern ErrorCode ImeEventSetOptionWindowDestroyedCb(ImeOptionWindowDestroyedCb callbackFunction, IntPtr userData);
167 [DllImport(Libraries.InputMethod, EntryPoint = "ime_send_key_event")]
168 internal static extern ErrorCode ImeSendKeyEvent(KeyCode keycode, KeyMask keymask, bool forwardKey);
170 [DllImport(Libraries.InputMethod, EntryPoint = "ime_commit_string")]
171 internal static extern ErrorCode ImeCommitString(string str);
173 [DllImport(Libraries.InputMethod, EntryPoint = "ime_show_preedit_string")]
174 internal static extern ErrorCode ImeShowPreeditString();
176 [DllImport(Libraries.InputMethod, EntryPoint = "ime_hide_preedit_string")]
177 internal static extern ErrorCode ImeHidePreeditString();
179 [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_preedit_string")]
180 internal static extern ErrorCode ImeUpdatePreeditString(string str, IntPtr attrs);
182 [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_surrounding_text")]
183 internal static extern ErrorCode ImeRequestSurroundingText(int maxlenBefore, int maxlenAfter);
185 [DllImport(Libraries.InputMethod, EntryPoint = "ime_delete_surrounding_text")]
186 internal static extern ErrorCode ImeDeleteSurroundingText(int offset, int len);
188 [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_surrounding_text")]
189 internal static extern ErrorCode ImeGetSurroundingText(int maxlenBefore, int maxlenAfter, out IntPtr text, out int cursorPos);
191 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_selection")]
192 internal static extern ErrorCode ImeSetSelection(int start, int end);
194 [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_main_window")]
195 internal static extern IntPtr ImeGetMainWindow();
197 [DllImport(Libraries.InputMethod, EntryPoint = "ime_prepare")]
198 internal static extern ErrorCode ImePrepare();
200 [DllImport(Libraries.InputMethod, EntryPoint = "ime_initialize")]
201 internal static extern ErrorCode ImeInitialize();
203 [DllImport(Libraries.InputMethod, EntryPoint = "ime_finalize")]
204 internal static extern ErrorCode ImeFinalize();
206 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_size")]
207 internal static extern ErrorCode ImeSetSize(int portraitWidth, int portraitHeight, int landscapeWidth, int landscapeHeight);
209 [DllImport(Libraries.InputMethod, EntryPoint = "ime_create_option_window")]
210 internal static extern ErrorCode ImeCreateOptionWindow();
212 [DllImport(Libraries.InputMethod, EntryPoint = "ime_destroy_option_window")]
213 internal static extern ErrorCode ImeDestroyOptionWindow(IntPtr window);
215 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout")]
216 internal static extern ErrorCode ImeContextGetLayout(IntPtr context, out InputPanelLayout layout);
218 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout_variation")]
219 internal static extern ErrorCode ImeContextGetLayoutVariation(IntPtr context, out LayoutVariation layoutVariation);
221 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_cursor_position")]
222 internal static extern ErrorCode ImeContextGetCursorPositionition(IntPtr context, out int cursorPos);
224 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_autocapital_type")]
225 internal static extern ErrorCode ImeContextGetAutocapitalType(IntPtr context, out AutoCapitalization autocapitalType);
227 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_type")]
228 internal static extern ErrorCode ImeContextGetReturnKey(IntPtr context, out InputPanelReturnKey returnKeyType);
230 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_state")]
231 internal static extern ErrorCode ImeContextGetReturnKeyState(IntPtr context, out bool returnKeyState);
233 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_prediction_mode")]
234 internal static extern ErrorCode ImeContextGetPredictionMode(IntPtr context, out bool predictionMode);
236 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_password_mode")]
237 internal static extern ErrorCode ImeContextGetPasswordMode(IntPtr context, out bool passwordMode);
239 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_input_hint")]
240 internal static extern ErrorCode ImeContextGetInputHint(IntPtr context, out InputHints inputHint);
242 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_bidi_direction")]
243 internal static extern ErrorCode ImeContextGetBidiDirection(IntPtr context, out BiDirection bidi);
245 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_language")]
246 internal static extern ErrorCode ImeContextGetLanguage(IntPtr context, out InputPanelLanguage language);
248 [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_name")]
249 internal static extern ErrorCode ImeDeviceInfoGetName(IntPtr dev_info, out string devName);
251 [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_class")]
252 internal static extern ErrorCode ImeDeviceInfoGetClass(IntPtr dev_info, out DeviceClass devClass);
254 [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_subclass")]
255 internal static extern ErrorCode ImeDeviceInfoGetSubclass(IntPtr dev_info, out DeviceSubclass devSubClass);
258 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
259 internal delegate void ImeCreateCb(IntPtr userData);
261 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
262 internal delegate void ImeTerminateCb(IntPtr userData);
264 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
265 internal delegate void ImeShowCb(int contextId, IntPtr context, IntPtr userData);
267 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
268 internal delegate void ImeHideCb(int contextId, IntPtr userData);
270 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
271 internal delegate void ImeFocusedInCb(int contextId, IntPtr userData);
273 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
274 internal delegate void ImeFocusedOutCb(int contextId, IntPtr userData);
276 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
277 internal delegate void ImeSurroundingTextUpdatedCb(int contextId, IntPtr text, int cursorPos, IntPtr userData);
279 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
280 internal delegate void ImeInputContextResetCb(IntPtr userData);
282 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
283 internal delegate void ImeCursorPositionitionUpdatedCb(int cursorPos, IntPtr userData);
285 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
286 internal delegate void ImeLanguageRequestedCb(IntPtr userData, out IntPtr langCode);
288 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
289 internal delegate void ImeLanguageSetCb(InputPanelLanguage language, IntPtr userData);
291 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
292 internal delegate void ImeImdataSetCb(IntPtr data, uint dataLength, IntPtr userData);
294 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
295 internal delegate void ImeImdataRequestedCb(IntPtr userData, out IntPtr data, out uint dataLength);
297 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
298 internal delegate void ImeLayoutSetCb(InputPanelLayout layout, IntPtr userData);
300 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
301 internal delegate void ImeReturnKeySetCb(InputPanelReturnKey type, IntPtr userData);
303 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
304 internal delegate void ImeReturnKeyStateSetCb(bool disabled, IntPtr userData);
306 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
307 internal delegate void ImeGeometryRequestedCb(IntPtr userData, out int x, out int y, out int w, out int h);
309 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
310 internal delegate bool ImeProcessKeyEventCb(KeyCode keycode, KeyMask keymask, IntPtr devInfo, IntPtr userData);
312 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
313 internal delegate void ImeDisplayLanguageChangedCb(IntPtr language, IntPtr userData);
315 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
316 internal delegate void ImeRotationChangedCb(int degree, IntPtr userData);
318 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
319 internal delegate void ImeAccessibilityStateChangedCb(bool state, IntPtr userData);
321 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
322 internal delegate void ImeOptionWindowCreatedCb(IntPtr window, OptionWindowType type, IntPtr userData);
324 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
325 internal delegate void ImeOptionWindowDestroyedCb(IntPtr window, IntPtr userData);