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 /// The Partial Interop class.
25 internal static partial class Interop
28 /// The 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,
39 InvalidParameter = Tizen.Internals.Errors.ErrorCode.InvalidParameter,
40 PermissionDenied = Tizen.Internals.Errors.ErrorCode.PermissionDenied,
41 NoCallbackFunction = ErrorInputMethod | 0x0001,
42 NotRunning = ErrorInputMethod | 0x0002,
43 OperationFailed = ErrorInputMethod | 0x0010,
44 OutOfMemory = Tizen.Internals.Errors.ErrorCode.OutOfMemory
47 internal enum ImeEventType
49 Language = 1, /* The language of the input panel */
50 ShiftMode = 2, /* The shift key state of the input panel */
51 Geometry = 3 /* The size of the input panel */
54 internal enum ImeShiftMode
60 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
61 internal struct ImeCallbackStruct
63 [MarshalAs(UnmanagedType.FunctionPtr)]
64 internal ImeCreateCb create;
65 [MarshalAs(UnmanagedType.FunctionPtr)]
66 internal ImeTerminateCb terminate;
67 [MarshalAs(UnmanagedType.FunctionPtr)]
68 internal ImeShowCb show;
69 [MarshalAs(UnmanagedType.FunctionPtr)]
70 internal ImeHideCb hide;
73 [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
74 internal struct ImePreEditAttributeStruct
82 internal sealed class ImeCallbackStructGCHandle : IDisposable
84 internal ImeCallbackStruct _imeCallbackStruct;
85 internal GCHandle _imeCallbackStructHandle;
86 public ImeCallbackStructGCHandle()
88 _imeCallbackStruct = new ImeCallbackStruct();
89 _imeCallbackStructHandle = GCHandle.Alloc(_imeCallbackStruct);
92 #region IDisposable Support
93 private bool disposedValue = false;
95 void Dispose(bool disposing)
97 Tizen.Log.Info(LogTag, "In Dispose");
102 Tizen.Log.Info(LogTag, "In Dispose free called");
103 _imeCallbackStructHandle.Free();
106 disposedValue = true;
110 public void Dispose()
117 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
118 internal delegate void ImeRunCb();
120 [DllImport(Libraries.InputMethod, EntryPoint = "ime_run")]
121 internal static extern ErrorCode ImeRun(ref ImeCallbackStruct basicCB, IntPtr userData);
123 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_in_cb")]
124 internal static extern ErrorCode ImeEventSetFocusedInCb(ImeFocusedInCb callbackFunction, IntPtr userData);
126 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_focus_out_cb")]
127 internal static extern ErrorCode ImeEventSetFocusedOutCb(ImeFocusedOutCb callbackFunction, IntPtr userData);
129 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_surrounding_text_updated_cb")]
130 internal static extern ErrorCode ImeEventSetSurroundingTextUpdatedCb(ImeSurroundingTextUpdatedCb callbackFunction, IntPtr userData);
132 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_input_context_reset_cb")]
133 internal static extern ErrorCode ImeEventSetInputContextResetCb(ImeInputContextResetCb callbackFunction, IntPtr userData);
135 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_cursor_position_updated_cb")]
136 internal static extern ErrorCode ImeEventSetCursorPositionUpdatedCb(ImeCursorPositionUpdatedCb callbackFunction, IntPtr userData);
138 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_requested_cb")]
139 internal static extern ErrorCode ImeEventSetLanguageRequestedCallbackCb(ImeLanguageRequestedCb callbackFunction, IntPtr userData);
141 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_language_set_cb")]
142 internal static extern ErrorCode ImeEventSetLanguageSetCb(ImeLanguageSetCb callbackFunction, IntPtr userData);
144 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_set_cb")]
145 internal static extern ErrorCode ImeEventSetImdataSetCb(ImeImdataSetCb callbackFunction, IntPtr userData);
147 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_imdata_requested_cb")]
148 internal static extern ErrorCode ImeEventSetImdataRequestedCb(ImeImdataRequestedCb callbackFunction, IntPtr userData);
150 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_layout_set_cb")]
151 internal static extern ErrorCode ImeEventSetLayoutSetCb(ImeLayoutSetCb callbackFunction, IntPtr userData);
153 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_type_set_cb")]
154 internal static extern ErrorCode ImeEventSetReturnKeySetCb(ImeReturnKeySetCb callbackFunction, IntPtr userData);
156 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_return_key_state_set_cb")]
157 internal static extern ErrorCode ImeEventSetReturnKeyStateSetCb(ImeReturnKeyStateSetCb callbackFunction, IntPtr userData);
159 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_geometry_requested_cb")]
160 internal static extern ErrorCode ImeEventSetGeometryRequestedCallbackCb(ImeGeometryRequestedCb callbackFunction, IntPtr userData);
162 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_process_key_event_cb")]
163 internal static extern ErrorCode ImeEventSetProcessKeyEventCb(ImeProcessKeyEventCb callbackFunction, IntPtr userData);
165 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_display_language_changed_cb")]
166 internal static extern ErrorCode ImeEventSetDisplayLanguageChangedCb(ImeDisplayLanguageChangedCb callbackFunction, IntPtr userData);
168 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_rotation_degree_changed_cb")]
169 internal static extern ErrorCode ImeEventSetRotationChangedCb(ImeRotationChangedCb callbackFunction, IntPtr userData);
171 [DllImport(Libraries.InputMethod, EntryPoint = "ime_event_set_accessibility_state_changed_cb")]
172 internal static extern ErrorCode ImeEventSetAccessibilityStateChangedCb(ImeAccessibilityStateChangedCb callbackFunction, IntPtr userData);
174 [DllImport(Libraries.InputMethod, EntryPoint = "ime_send_key_event")]
175 internal static extern ErrorCode ImeSendKeyEvent(KeyCode keycode, KeyMask keymask, bool forwardKey);
177 [DllImport(Libraries.InputMethod, EntryPoint = "ime_commit_string")]
178 internal static extern ErrorCode ImeCommitString(string str);
180 [DllImport(Libraries.InputMethod, EntryPoint = "ime_show_preedit_string")]
181 internal static extern ErrorCode ImeShowPreeditString();
183 [DllImport(Libraries.InputMethod, EntryPoint = "ime_hide_preedit_string")]
184 internal static extern ErrorCode ImeHidePreeditString();
186 [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_preedit_string")]
187 internal static extern ErrorCode ImeUpdatePreeditString(string str, IntPtr attrs);
189 [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_surrounding_text")]
190 internal static extern ErrorCode ImeRequestSurroundingText(int maxlenBefore, int maxlenAfter);
192 [DllImport(Libraries.InputMethod, EntryPoint = "ime_delete_surrounding_text")]
193 internal static extern ErrorCode ImeDeleteSurroundingText(int offset, int len);
195 [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_surrounding_text")]
196 internal static extern ErrorCode ImeGetSurroundingText(int maxlenBefore, int maxlenAfter, out IntPtr text, out int cursorPos);
198 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_selection")]
199 internal static extern ErrorCode ImeSetSelection(int start, int end);
201 [DllImport(Libraries.InputMethod, EntryPoint = "ime_get_main_window")]
202 internal static extern IntPtr ImeGetMainWindow();
204 [DllImport(Libraries.InputMethod, EntryPoint = "ime_request_hide")]
205 internal static extern ErrorCode ImeRequestHide();
207 [DllImport(Libraries.InputMethod, EntryPoint = "ime_prepare")]
208 internal static extern ErrorCode ImePrepare();
210 [DllImport(Libraries.InputMethod, EntryPoint = "ime_initialize")]
211 internal static extern ErrorCode ImeInitialize();
213 [DllImport(Libraries.InputMethod, EntryPoint = "ime_finalize")]
214 internal static extern ErrorCode ImeFinalize();
216 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_dotnet_flag")]
217 internal static extern ErrorCode ImeSetDotnetFlag(bool set);
219 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_size")]
220 internal static extern ErrorCode ImeSetSize(int portraitWidth, int portraitHeight, int landscapeWidth, int landscapeHeight);
222 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout")]
223 internal static extern ErrorCode ImeContextGetLayout(IntPtr context, out InputPanelLayout layout);
225 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_layout_variation")]
226 internal static extern ErrorCode ImeContextGetLayoutVariation(IntPtr context, out LayoutVariation layoutVariation);
228 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_cursor_position")]
229 internal static extern ErrorCode ImeContextGetCursorPosition(IntPtr context, out int cursorPos);
231 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_autocapital_type")]
232 internal static extern ErrorCode ImeContextGetAutocapitalType(IntPtr context, out AutoCapitalization autocapitalType);
234 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_type")]
235 internal static extern ErrorCode ImeContextGetReturnKey(IntPtr context, out InputPanelReturnKey returnKeyType);
237 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_return_key_state")]
238 internal static extern ErrorCode ImeContextGetReturnKeyState(IntPtr context, out bool returnKeyState);
240 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_prediction_mode")]
241 internal static extern ErrorCode ImeContextGetPredictionMode(IntPtr context, out bool predictionMode);
243 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_password_mode")]
244 internal static extern ErrorCode ImeContextGetPasswordMode(IntPtr context, out bool passwordMode);
246 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_input_hint")]
247 internal static extern ErrorCode ImeContextGetInputHint(IntPtr context, out InputHints inputHint);
249 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_bidi_direction")]
250 internal static extern ErrorCode ImeContextGetBidiDirection(IntPtr context, out BiDirection bidi);
252 [DllImport(Libraries.InputMethod, EntryPoint = "ime_context_get_language")]
253 internal static extern ErrorCode ImeContextGetLanguage(IntPtr context, out InputPanelLanguage language);
255 [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_name")]
256 internal static extern ErrorCode ImeDeviceInfoGetName(IntPtr dev_info, out string devName);
258 [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_class")]
259 internal static extern ErrorCode ImeDeviceInfoGetClass(IntPtr dev_info, out DeviceClass devClass);
261 [DllImport(Libraries.InputMethod, EntryPoint = "ime_device_info_get_subclass")]
262 internal static extern ErrorCode ImeDeviceInfoGetSubclass(IntPtr dev_info, out DeviceSubclass devSubClass);
264 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_floating_mode")]
265 internal static extern ErrorCode ImeSetFloatingMode(bool floating_mode);
267 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_floating_drag_start")]
268 internal static extern ErrorCode ImeSetFloatingDragStart();
270 [DllImport(Libraries.InputMethod, EntryPoint = "ime_set_floating_drag_end")]
271 internal static extern ErrorCode ImeSetFloatingDragEnd();
273 [DllImport(Libraries.InputMethod, EntryPoint = "ime_update_input_panel_event")]
274 internal static extern ErrorCode ImeUpdateInputPanelEvent(ImeEventType type, uint value);
276 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
277 internal delegate void ImeCreateCb(IntPtr userData);
279 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
280 internal delegate void ImeTerminateCb(IntPtr userData);
282 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
283 internal delegate void ImeShowCb(int contextId, IntPtr context, IntPtr userData);
285 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
286 internal delegate void ImeHideCb(int contextId, IntPtr userData);
288 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
289 internal delegate void ImeFocusedInCb(int contextId, IntPtr userData);
291 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
292 internal delegate void ImeFocusedOutCb(int contextId, IntPtr userData);
294 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
295 internal delegate void ImeSurroundingTextUpdatedCb(int contextId, IntPtr text, int cursorPos, IntPtr userData);
297 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
298 internal delegate void ImeInputContextResetCb(IntPtr userData);
300 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
301 internal delegate void ImeCursorPositionUpdatedCb(int cursorPos, IntPtr userData);
303 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
304 internal delegate void ImeLanguageRequestedCb(IntPtr userData, out IntPtr langCode);
306 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
307 internal delegate void ImeLanguageSetCb(InputPanelLanguage language, IntPtr userData);
309 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
310 internal delegate void ImeImdataSetCb(IntPtr data, uint dataLength, IntPtr userData);
312 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
313 internal delegate void ImeImdataRequestedCb(IntPtr userData, out IntPtr data, out uint dataLength);
315 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
316 internal delegate void ImeLayoutSetCb(InputPanelLayout layout, IntPtr userData);
318 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
319 internal delegate void ImeReturnKeySetCb(InputPanelReturnKey type, IntPtr userData);
321 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
322 internal delegate void ImeReturnKeyStateSetCb(bool disabled, IntPtr userData);
324 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
325 internal delegate void ImeGeometryRequestedCb(IntPtr userData, out int x, out int y, out int w, out int h);
327 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
328 internal delegate bool ImeProcessKeyEventCb(KeyCode keycode, KeyMask keymask, IntPtr devInfo, IntPtr userData);
330 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
331 internal delegate void ImeDisplayLanguageChangedCb(IntPtr language, IntPtr userData);
333 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
334 internal delegate void ImeRotationChangedCb(int degree, IntPtr userData);
336 [UnmanagedFunctionPointer(CallingConvention.Cdecl)]
337 internal delegate void ImeAccessibilityStateChangedCb(bool state, IntPtr userData);