2 * ISF(Input Service Framework)
4 * ISF is based on SCIM 1.4.7 and extended for supporting more mobile fitable.
5 * Copyright (c) 2012-2016 Samsung Electronics Co., Ltd.
7 * Contact: Ji-hoon Lee <dalton.lee@samsung.com>, Jihoon Kim <jihoon48.kim@samsung.com>
9 * This library is free software; you can redistribute it and/or modify it under
10 * the terms of the GNU Lesser General Public License as published by the
11 * Free Software Foundation; either version 2.1 of the License, or (at your option)
14 * This library is distributed in the hope that it will be useful, but WITHOUT ANY
15 * WARRANTY; without even the implied warranty of MERCHANTABILITY or
16 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17 * License for more details.
19 * You should have received a copy of the GNU Lesser General Public License
20 * along with this library; if not, write to the Free Software Foundation, Inc., 51
21 * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
25 #ifndef __ISF_MESSAGE_QUEUE_H
26 #define __ISF_MESSAGE_QUEUE_H
28 #define Uses_SCIM_TRANSACTION
29 #define Uses_SCIM_TRANS_COMMANDS
30 #define Uses_SCIM_HELPER
31 #define Uses_SCIM_SOCKET
32 #define Uses_SCIM_EVENT
33 #define Uses_SCIM_BACKEND
34 #define Uses_SCIM_IMENGINE_MODULE
39 #include "scim_private.h"
41 #include <scim_panel_common.h>
42 #include "isf_query_utility.h"
44 #include "isf_debug.h"
49 #define LOG_TAG "ISF_MESSAGE_QUEUE"
56 MessageItem() : m_command(0) {}
57 virtual ~MessageItem() {}
59 int& get_command_ref() { return m_command; }
64 class MessageItemHelper : public MessageItem
67 MessageItemHelper() : m_ic(0) {}
68 virtual ~MessageItemHelper() {}
70 uint32& get_ic_ref() { return m_ic; }
71 String& get_ic_uuid_ref() { return m_ic_uuid; }
77 /* SCIM_TRANS_CMD_EXIT */
78 class MessageItemExit : public MessageItemHelper
82 /* SCIM_TRANS_CMD_RELOAD_CONFIG */
83 class MessageItemReloadConfig : public MessageItemHelper
87 /* SCIM_TRANS_CMD_UPDATE_SCREEN */
88 class MessageItemUpdateScreen : public MessageItemHelper
91 MessageItemUpdateScreen() : m_screen(0) {}
92 virtual ~MessageItemUpdateScreen() {}
94 uint32& get_screen_ref() { return m_screen; }
99 /* SCIM_TRANS_CMD_UPDATE_SPOT_LOCATION */
100 class MessageItemUpdateSpotLocation : public MessageItemHelper
103 MessageItemUpdateSpotLocation() : m_x(0), m_y(0) {}
104 virtual ~MessageItemUpdateSpotLocation() {}
106 uint32& get_x_ref() { return m_x; }
107 uint32& get_y_ref() { return m_y; }
114 /* ISM_TRANS_CMD_UPDATE_CURSOR_POSITION */
115 class MessageItemUpdateCursorPosition : public MessageItemHelper
118 MessageItemUpdateCursorPosition() : m_cursor_pos(0) {}
119 virtual ~MessageItemUpdateCursorPosition() {}
121 uint32& get_cursor_pos_ref() { return m_cursor_pos; }
126 /* ISM_TRANS_CMD_UPDATE_SURROUNDING_TEXT */
127 class MessageItemUpdateSurroundingText : public MessageItemHelper
130 MessageItemUpdateSurroundingText() : m_cursor(0) {}
131 virtual ~MessageItemUpdateSurroundingText() {}
133 String& get_text_ref() { return m_text; }
134 uint32& get_cursor_ref() { return m_cursor; }
140 /* ISM_TRANS_CMD_UPDATE_SELECTION */
141 class MessageItemUpdateSelection : public MessageItemHelper
144 MessageItemUpdateSelection() {}
145 virtual ~MessageItemUpdateSelection() {}
147 String& get_text_ref() { return m_text; }
152 /* SCIM_TRANS_CMD_TRIGGER_PROPERTY */
153 class MessageItemTriggerProperty : public MessageItemHelper
156 MessageItemTriggerProperty() {}
157 virtual ~MessageItemTriggerProperty() {}
159 String& get_property_ref() { return m_property; }
164 /* SCIM_TRANS_CMD_HELPER_PROCESS_IMENGINE_EVENT */
165 class MessageItemHelperProcessImengineEvent : public MessageItemHelper
168 MessageItemHelperProcessImengineEvent() {}
169 virtual ~MessageItemHelperProcessImengineEvent() {}
171 Transaction& get_transaction_ref() { return m_trans; }
176 /* SCIM_TRANS_CMD_HELPER_ATTACH_INPUT_CONTEXT */
177 class MessageItemHelperAttachInputContext : public MessageItemHelper
181 /* SCIM_TRANS_CMD_HELPER_DETACH_INPUT_CONTEXT */
182 class MessageItemHelperDetachInputContext : public MessageItemHelper
186 /* SCIM_TRANS_CMD_FOCUS_OUT */
187 class MessageItemFocusOut : public MessageItemHelper
191 /* SCIM_TRANS_CMD_FOCUS_IN */
192 class MessageItemFocusIn : public MessageItemHelper
196 /* ISM_TRANS_CMD_SHOW_ISE_PANEL */
197 class MessageItemShowISEPanel : public MessageItemHelper
200 MessageItemShowISEPanel() : m_data(NULL), m_len(0) {}
201 virtual ~MessageItemShowISEPanel() { if (m_data) delete[] m_data; m_data = NULL; }
203 char** get_data_ptr() { return &m_data; }
204 size_t& get_len_ref() { return m_len; }
210 /* ISM_TRANS_CMD_HIDE_ISE_PANEL */
211 class MessageItemHideISEPanel : public MessageItemHelper
215 // ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY
216 class MessageItemGetActiveISEGeometry : public MessageItemHelper
220 /* ISM_TRANS_CMD_SET_ISE_MODE */
221 class MessageItemSetISEMode : public MessageItemHelper
224 MessageItemSetISEMode() : m_mode(0) {}
225 virtual ~MessageItemSetISEMode() {}
227 uint32& get_mode_ref() { return m_mode; }
232 /* ISM_TRANS_CMD_SET_ISE_LANGUAGE */
233 class MessageItemSetISELanguage : public MessageItemHelper
236 MessageItemSetISELanguage() : m_language(0) {}
237 virtual ~MessageItemSetISELanguage() {}
239 uint32& get_language_ref() { return m_language; }
244 /* ISM_TRANS_CMD_SET_ISE_IMDATA */
245 class MessageItemSetISEImData : public MessageItemHelper
248 MessageItemSetISEImData() : m_imdata(NULL), m_len(0) {}
249 virtual ~MessageItemSetISEImData() { if (m_imdata) delete[] m_imdata; m_imdata = NULL; }
251 char** get_imdata_ptr() { return &m_imdata; }
252 size_t& get_len_ref() { return m_len; }
258 /* ISM_TRANS_CMD_GET_ISE_IMDATA */
259 class MessageItemGetISEImdata : public MessageItemHelper
263 /* ISM_TRANS_CMD_GET_ISE_LANGUAGE_LOCALE */
264 class MessageItemGetISELanguageLocale : public MessageItemHelper
268 /* ISM_TRANS_CMD_SET_RETURN_KEY_TYPE */
269 class MessageItemSetReturnKeyType : public MessageItemHelper
272 MessageItemSetReturnKeyType() : m_type(0) {}
273 virtual ~MessageItemSetReturnKeyType() {}
275 uint32& get_type_ref() { return m_type; }
280 /* ISM_TRANS_CMD_GET_RETURN_KEY_TYPE */
281 class MessageItemGetReturnKeyType : public MessageItemHelper
284 MessageItemGetReturnKeyType() : m_type(0) {}
285 virtual ~MessageItemGetReturnKeyType() {}
287 uint32& get_type_ref() { return m_type; }
292 /* ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE */
293 class MessageItemSetReturnKeyDisable : public MessageItemHelper
296 MessageItemSetReturnKeyDisable() : m_disabled(0) {}
297 virtual ~MessageItemSetReturnKeyDisable() {}
299 uint32& get_disabled_ref() { return m_disabled; }
304 /* ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE */
305 class MessageItemGetReturnKeyDisable : public MessageItemHelper
308 MessageItemGetReturnKeyDisable() : m_disabled(0) {}
309 virtual ~MessageItemGetReturnKeyDisable() {}
311 uint32& get_disabled_ref() { return m_disabled; }
316 /* SCIM_TRANS_CMD_PROCESS_KEY_EVENT */
317 class MessageItemProcessKeyEvent : public MessageItemHelper
320 MessageItemProcessKeyEvent() : m_serial(0) {}
321 virtual ~MessageItemProcessKeyEvent() {}
323 KeyEvent& get_key_ref() { return m_key; }
324 uint32& get_serial_ref() { return m_serial; }
330 /* ISM_TRANS_CMD_SET_LAYOUT */
331 class MessageItemSetLayout : public MessageItemHelper
334 MessageItemSetLayout() : m_layout(0) {}
335 virtual ~MessageItemSetLayout() {}
337 uint32& get_layout_ref() { return m_layout; }
342 /* ISM_TRANS_CMD_GET_LAYOUT */
343 class MessageItemGetLayout : public MessageItemHelper
346 MessageItemGetLayout() : m_layout(0) {}
347 virtual ~MessageItemGetLayout() {}
349 uint32& get_layout_ref() { return m_layout; }
354 /* ISM_TRANS_CMD_SET_INPUT_MODE */
355 class MessageItemSetInputMode : public MessageItemHelper
358 MessageItemSetInputMode() : m_input_mode(0) {}
359 virtual ~MessageItemSetInputMode() {}
361 uint32& get_input_mode_ref() { return m_input_mode; }
366 /* ISM_TRANS_CMD_SET_CAPS_MODE */
367 class MessageItemSetCapsMode : public MessageItemHelper
370 MessageItemSetCapsMode() : m_mode(0) {}
371 virtual ~MessageItemSetCapsMode() {}
373 uint32& get_mode_ref() { return m_mode; }
378 /* SCIM_TRANS_CMD_PANEL_RESET_INPUT_CONTEXT */
379 class MessageItemPanelResetInputContext : public MessageItemHelper
383 /* ISM_TRANS_CMD_UPDATE_CANDIDATE_UI */
384 class MessageItemUpdateCandidateUI : public MessageItemHelper
387 MessageItemUpdateCandidateUI() : m_style(0), m_mode(0) {}
388 virtual ~MessageItemUpdateCandidateUI() {}
390 uint32& get_style_ref() { return m_style; }
391 uint32& get_mode_ref() { return m_mode; }
397 /* ISM_TRANS_CMD_UPDATE_CANDIDATE_GEOMETRY */
398 class MessageItemUpdateCandidateGeometry : public MessageItemHelper
401 MessageItemUpdateCandidateGeometry() {}
402 virtual ~MessageItemUpdateCandidateGeometry() {}
404 struct rectinfo& get_rectinfo_ref() { return m_info; }
406 struct rectinfo m_info;
409 /* ISM_TRANS_CMD_UPDATE_KEYBOARD_ISE */
410 class MessageItemUpdateKeyboardISE : public MessageItemHelper
413 MessageItemUpdateKeyboardISE() {}
414 virtual ~MessageItemUpdateKeyboardISE() {}
416 String& get_name_ref() { return m_name; }
417 String& get_uuid_ref() { return m_uuid; }
423 /* ISM_TRANS_CMD_UPDATE_KEYBOARD_ISE_LIST */
424 class MessageItemUpdateKeyboardISEList : public MessageItemHelper
427 MessageItemUpdateKeyboardISEList() {}
428 virtual ~MessageItemUpdateKeyboardISEList() {}
430 std::vector<String>& get_list_ref() { return m_list; }
432 std::vector<String> m_list;
435 /* ISM_TRANS_CMD_CANDIDATE_MORE_WINDOW_SHOW */
436 class MessageItemCandidateMoreWindowShow : public MessageItemHelper
440 /* ISM_TRANS_CMD_CANDIDATE_MORE_WINDOW_HIDE */
441 class MessageItemCandidateMoreWindowHide : public MessageItemHelper
445 /* ISM_TRANS_CMD_SELECT_AUX */
446 class MessageItemSelectAux : public MessageItemHelper
449 MessageItemSelectAux() : m_item(0) {}
450 virtual ~MessageItemSelectAux() {}
452 uint32& get_item_ref() { return m_item; }
457 /* SCIM_TRANS_CMD_SELECT_CANDIDATE */
458 class MessageItemSelectCandidate : public MessageItemHelper
461 MessageItemSelectCandidate() : m_item(0) {}
462 virtual ~MessageItemSelectCandidate() {}
464 uint32& get_item_ref() { return m_item; }
469 /* SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_UP */
470 class MessageItemLookupTablePageUp : public MessageItemHelper
474 /* SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_DOWN */
475 class MessageItemLookupTablePageDown : public MessageItemHelper
479 /* SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE_PAGE_SIZE: */
480 class MessageItemUpdateLookupTablePageSize : public MessageItemHelper
483 MessageItemUpdateLookupTablePageSize() : m_size(0) {}
484 virtual ~MessageItemUpdateLookupTablePageSize() {}
486 uint32& get_size_ref() { return m_size; }
491 /* ISM_TRANS_CMD_CANDIDATE_SHOW */
492 class MessageItemCandidateShow : public MessageItemHelper
496 /* ISM_TRANS_CMD_CANDIDATE_HIDE */
497 class MessageItemCandidateHide : public MessageItemHelper
501 /* ISM_TRANS_CMD_UPDATE_LOOKUP_TABLE */
502 class MessageItemUpdateLookupTable : public MessageItemHelper
505 MessageItemUpdateLookupTable() {}
506 virtual ~MessageItemUpdateLookupTable() {}
508 CommonLookupTable& get_candidate_table_ref() { return m_helper_candidate_table; }
510 CommonLookupTable m_helper_candidate_table;
513 /* ISM_TRANS_CMD_UPDATE_CANDIDATE_ITEM_LAYOUT */
514 class MessageItemUpdateCandidateItemLayout : public MessageItemHelper
517 MessageItemUpdateCandidateItemLayout() {}
518 virtual ~MessageItemUpdateCandidateItemLayout() {}
520 std::vector<uint32>& get_row_items_ref() { return m_row_items; }
522 std::vector<uint32> m_row_items;
525 /* ISM_TRANS_CMD_SELECT_ASSOCIATE: */
526 class MessageItemSelectAssociate : public MessageItemHelper
529 MessageItemSelectAssociate() : m_item(0) {}
530 virtual ~MessageItemSelectAssociate() {}
532 uint32& get_item_ref() { return m_item; }
537 /* ISM_TRANS_CMD_ASSOCIATE_TABLE_PAGE_UP */
538 class MessageItemAssociateTablePageUp : public MessageItemHelper
542 /* ISM_TRANS_CMD_ASSOCIATE_TABLE_PAGE_DOWN */
543 class MessageItemAssociateTablePageDown : public MessageItemHelper
547 /* ISM_TRANS_CMD_UPDATE_ASSOCIATE_TABLE_PAGE_SIZE */
548 class MessageItemUpdateAssociateTablePageSize : public MessageItemHelper
551 MessageItemUpdateAssociateTablePageSize() : m_size(0) {}
552 virtual ~MessageItemUpdateAssociateTablePageSize() {}
554 uint32& get_size_ref() { return m_size; }
559 /* ISM_TRANS_CMD_RESET_ISE_CONTEXT */
560 class MessageItemResetISEContext : public MessageItemHelper
564 /* ISM_TRANS_CMD_TURN_ON_LOG */
565 class MessageItemTurnOnLog : public MessageItemHelper
568 MessageItemTurnOnLog() : m_state(0) {}
569 virtual ~MessageItemTurnOnLog() {}
571 uint32& get_state_ref() { return m_state; }
576 /* ISM_TRANS_CMD_UPDATE_DISPLAYED_CANDIDATE */
577 class MessageItemUpdateDisplayedCandidate : public MessageItemHelper
580 MessageItemUpdateDisplayedCandidate() : m_size(0) {}
581 virtual ~MessageItemUpdateDisplayedCandidate() {}
583 uint32& get_size_ref() { return m_size; }
588 /* ISM_TRANS_CMD_LONGPRESS_CANDIDATE */
589 class MessageItemLongpressCandidate : public MessageItemHelper
592 MessageItemLongpressCandidate() : m_index(0) {}
593 virtual ~MessageItemLongpressCandidate() {}
595 uint32& get_index_ref() { return m_index; }
600 /* ISM_TRANS_CMD_SET_INPUT_HINT */
601 class MessageItemSetInputHint : public MessageItemHelper
604 MessageItemSetInputHint() : m_input_hint(0) {}
605 virtual ~MessageItemSetInputHint() {}
607 uint32& get_input_hint_ref() { return m_input_hint; }
612 /* ISM_TRANS_CMD_UPDATE_BIDI_DIRECTION */
613 class MessageItemUpdateBidiDirection : public MessageItemHelper
616 MessageItemUpdateBidiDirection() : m_bidi_direction(0) {}
617 virtual ~MessageItemUpdateBidiDirection() {}
619 uint32& get_bidi_direction() { return m_bidi_direction; }
621 uint32 m_bidi_direction;
624 /* ISM_TRANS_CMD_SHOW_ISE_OPTION_WINDOW */
625 class MessageItemShowISEOptionWindow : public MessageItemHelper
629 /* ISM_TRANS_CMD_RESUME_ISE_OPTION_WINDOW */
630 class MessageItemResumeISEOptionWindow : public MessageItemHelper
634 /* ISM_TRANS_CMD_CHECK_OPTION_WINDOW */
635 class MessageItemCheckOptionWindow : public MessageItemHelper
638 MessageItemCheckOptionWindow() : m_avail(0) {}
639 virtual ~MessageItemCheckOptionWindow() {}
641 uint32& get_avail_ref() { return m_avail; }
646 /* ISM_TRANS_CMD_PROCESS_INPUT_DEVICE_EVENT */
647 class MessageItemProcessInputDeviceEvent : public MessageItemHelper
650 MessageItemProcessInputDeviceEvent() : m_type(0), m_data(NULL), m_len(0) {}
651 virtual ~MessageItemProcessInputDeviceEvent() {}
653 uint32& get_type_ref() { return m_type; }
654 char** get_data_ptr() { return &m_data; }
655 size_t& get_len_ref() { return m_len; }
662 /* SCIM_TRANS_CMD_SET_AUTOCAPITAL_TYPE */
663 class MessageItemSetAutocapitalType : public MessageItemHelper
666 MessageItemSetAutocapitalType() : m_auto_capital_type(0) {}
667 virtual ~MessageItemSetAutocapitalType() {}
669 uint32& get_auto_capital_type_ref() { return m_auto_capital_type; }
671 uint32 m_auto_capital_type;
674 /* ISM_TRANS_CMD_SET_PREDICTION_ALLOW */
675 class MessageItemSetPredictionAllow : public MessageItemHelper
678 MessageItemSetPredictionAllow() : m_prediction_allow(1) {}
679 virtual ~MessageItemSetPredictionAllow() {}
681 uint32& get_prediction_allow_ref() { return m_prediction_allow; }
683 uint32 m_prediction_allow;
686 template <typename T>
688 alloc_message() /* We could use memory pool in the future for performance enhancement */
693 template <typename T>
695 dealloc_message(T* ptr) /* We could use memory pool in the future for performance enhancement */
704 virtual ~MessageQueue() { destroy(); }
711 for (MESSAGE_LIST::iterator iter = m_list_messages.begin();
712 iter != m_list_messages.end(); advance(iter, 1)) {
713 /* Here we are using MessageItem type template deallocator, should be cautious when using memory pool */
714 dealloc_message<MessageItem>(*iter);
716 m_list_messages.clear();
719 bool has_pending_message() {
720 return (m_list_messages.size() > 0);
723 MessageItem* get_pending_message()
725 MessageItem* ret = NULL;
726 if (!m_list_messages.empty()) {
727 ret = m_list_messages.front();
732 MessageItem* get_pending_message_by_cmd(int cmd)
734 MessageItem* ret = NULL;
735 for (MESSAGE_LIST::iterator iter = m_list_messages.begin();
736 !ret && iter != m_list_messages.end(); advance(iter, 1)) {
737 if ((*iter)->get_command_ref() == cmd) {
744 void remove_message(MessageItem *message)
747 for (MESSAGE_LIST::iterator iter = m_list_messages.begin();
748 iter != m_list_messages.end(); advance(iter, 1)) {
749 if ((*iter) == message) {
750 iter = m_list_messages.erase(iter);
753 /* Here we are using MessageItem type template deallocator, should be cautious when using memory pool */
754 dealloc_message<MessageItem>(message);
759 bool read_from_transaction(scim::Transaction &transaction)
763 uint32 ic = (uint32)-1;
766 if (!transaction.get_command(cmd) || cmd != SCIM_TRANS_CMD_REPLY) {
767 LOGW("wrong format of transaction\n");
771 /* If there are ic and ic_uuid then read them. */
772 if (!(transaction.get_data_type() == SCIM_TRANS_DATA_COMMAND) &&
773 !(transaction.get_data(ic) && transaction.get_data(ic_uuid))) {
774 LOGW("wrong format of transaction\n");
778 while (transaction.get_command(cmd)) {
780 case SCIM_TRANS_CMD_EXIT:
782 MessageItemExit *message = alloc_message<MessageItemExit>();
784 message->get_command_ref() = cmd;
785 message->get_ic_ref() = ic;
786 message->get_ic_uuid_ref() = ic_uuid;
787 m_list_messages.push_back(message);
791 case SCIM_TRANS_CMD_RELOAD_CONFIG:
793 MessageItemReloadConfig *message = alloc_message<MessageItemReloadConfig>();
795 message->get_command_ref() = cmd;
796 message->get_ic_ref() = ic;
797 message->get_ic_uuid_ref() = ic_uuid;
798 m_list_messages.push_back(message);
802 case SCIM_TRANS_CMD_UPDATE_SCREEN:
804 MessageItemUpdateScreen *message = alloc_message<MessageItemUpdateScreen>();
806 message->get_command_ref() = cmd;
807 if (transaction.get_data(message->get_screen_ref())) {
808 message->get_ic_ref() = ic;
809 message->get_ic_uuid_ref() = ic_uuid;
810 m_list_messages.push_back(message);
812 LOGW("wrong format of transaction\n");
813 dealloc_message<MessageItemUpdateScreen>(message);
818 case SCIM_TRANS_CMD_UPDATE_SPOT_LOCATION:
820 MessageItemUpdateSpotLocation *message = alloc_message<MessageItemUpdateSpotLocation>();
822 message->get_command_ref() = cmd;
823 if (transaction.get_data(message->get_x_ref()) && transaction.get_data(message->get_y_ref())) {
824 message->get_ic_ref() = ic;
825 message->get_ic_uuid_ref() = ic_uuid;
826 m_list_messages.push_back(message);
828 LOGW("wrong format of transaction\n");
829 dealloc_message<MessageItemUpdateSpotLocation>(message);
834 case ISM_TRANS_CMD_UPDATE_CURSOR_POSITION:
836 MessageItemUpdateCursorPosition *message = alloc_message<MessageItemUpdateCursorPosition>();
838 message->get_command_ref() = cmd;
839 if (transaction.get_data(message->get_cursor_pos_ref())) {
840 message->get_ic_ref() = ic;
841 message->get_ic_uuid_ref() = ic_uuid;
842 m_list_messages.push_back(message);
844 LOGW("wrong format of transaction\n");
845 dealloc_message<MessageItemUpdateCursorPosition>(message);
850 case ISM_TRANS_CMD_UPDATE_SURROUNDING_TEXT:
852 MessageItemUpdateSurroundingText *message = alloc_message<MessageItemUpdateSurroundingText>();
854 message->get_command_ref() = cmd;
855 if (transaction.get_data(message->get_text_ref()) &&
856 transaction.get_data(message->get_cursor_ref())) {
857 message->get_ic_ref() = ic;
858 m_list_messages.push_back(message);
860 LOGW("wrong format of transaction\n");
861 dealloc_message<MessageItemUpdateSurroundingText>(message);
866 case ISM_TRANS_CMD_UPDATE_SELECTION:
868 MessageItemUpdateSelection *message = alloc_message<MessageItemUpdateSelection>();
870 message->get_command_ref() = cmd;
871 if (transaction.get_data(message->get_text_ref())) {
872 message->get_ic_ref() = ic;
873 m_list_messages.push_back(message);
875 LOGW("wrong format of transaction\n");
876 dealloc_message<MessageItemUpdateSelection>(message);
881 case SCIM_TRANS_CMD_TRIGGER_PROPERTY:
883 MessageItemTriggerProperty *message = alloc_message<MessageItemTriggerProperty>();
885 message->get_command_ref() = cmd;
886 if (transaction.get_data(message->get_property_ref())) {
887 m_list_messages.push_back(message);
889 LOGW("wrong format of transaction\n");
890 dealloc_message<MessageItemTriggerProperty>(message);
895 case SCIM_TRANS_CMD_HELPER_PROCESS_IMENGINE_EVENT:
897 MessageItemHelperProcessImengineEvent *message = alloc_message<MessageItemHelperProcessImengineEvent>();
899 message->get_command_ref() = cmd;
900 if (transaction.get_data(message->get_transaction_ref())) {
901 message->get_ic_ref() = ic;
902 message->get_ic_uuid_ref() = ic_uuid;
903 m_list_messages.push_back(message);
905 LOGW("wrong format of transaction\n");
906 dealloc_message<MessageItemHelperProcessImengineEvent>(message);
911 case SCIM_TRANS_CMD_HELPER_ATTACH_INPUT_CONTEXT:
913 MessageItemHelperAttachInputContext *message = alloc_message<MessageItemHelperAttachInputContext>();
915 message->get_command_ref() = cmd;
916 message->get_ic_ref() = ic;
917 message->get_ic_uuid_ref() = ic_uuid;
918 m_list_messages.push_back(message);
922 case SCIM_TRANS_CMD_HELPER_DETACH_INPUT_CONTEXT:
924 MessageItemHelperDetachInputContext *message = alloc_message<MessageItemHelperDetachInputContext>();
926 message->get_command_ref() = cmd;
927 message->get_ic_ref() = ic;
928 message->get_ic_uuid_ref() = ic_uuid;
929 m_list_messages.push_back(message);
933 case SCIM_TRANS_CMD_FOCUS_OUT:
935 MessageItemFocusOut *message = alloc_message<MessageItemFocusOut>();
937 message->get_command_ref() = cmd;
938 message->get_ic_ref() = ic;
939 message->get_ic_uuid_ref() = ic_uuid;
940 m_list_messages.push_back(message);
944 case SCIM_TRANS_CMD_FOCUS_IN:
946 MessageItemFocusIn *message = alloc_message<MessageItemFocusIn>();
948 message->get_command_ref() = cmd;
949 message->get_ic_ref() = ic;
950 message->get_ic_uuid_ref() = ic_uuid;
951 m_list_messages.push_back(message);
955 case ISM_TRANS_CMD_SHOW_ISE_PANEL:
957 MessageItemShowISEPanel *message = alloc_message<MessageItemShowISEPanel>();
959 message->get_command_ref() = cmd;
960 if (transaction.get_data(message->get_data_ptr(), message->get_len_ref())) {
961 message->get_ic_ref() = ic;
962 m_list_messages.push_back(message);
964 LOGW("wrong format of transaction\n");
965 dealloc_message<MessageItemShowISEPanel>(message);
970 case ISM_TRANS_CMD_HIDE_ISE_PANEL:
972 MessageItemHideISEPanel *message = alloc_message<MessageItemHideISEPanel>();
974 message->get_command_ref() = cmd;
975 message->get_ic_ref() = ic;
976 message->get_ic_uuid_ref() = ic_uuid;
977 m_list_messages.push_back(message);
981 case ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY:
983 MessageItemGetActiveISEGeometry *message = alloc_message<MessageItemGetActiveISEGeometry>();
985 message->get_command_ref() = cmd;
986 m_list_messages.push_back(message);
990 case ISM_TRANS_CMD_SET_ISE_MODE:
992 MessageItemSetISEMode *message = alloc_message<MessageItemSetISEMode>();
994 message->get_command_ref() = cmd;
995 if (transaction.get_data(message->get_mode_ref())) {
996 m_list_messages.push_back(message);
998 LOGW("wrong format of transaction\n");
999 dealloc_message<MessageItemSetISEMode>(message);
1004 case ISM_TRANS_CMD_SET_ISE_LANGUAGE:
1006 MessageItemSetISELanguage *message = alloc_message<MessageItemSetISELanguage>();
1008 message->get_command_ref() = cmd;
1009 if (transaction.get_data(message->get_language_ref())) {
1010 m_list_messages.push_back(message);
1012 LOGW("wrong format of transaction\n");
1013 dealloc_message<MessageItemSetISELanguage>(message);
1018 case ISM_TRANS_CMD_SET_ISE_IMDATA:
1020 MessageItemSetISEImData *message = alloc_message<MessageItemSetISEImData>();
1022 message->get_command_ref() = cmd;
1023 if (transaction.get_data(message->get_imdata_ptr(), message->get_len_ref())) {
1024 m_list_messages.push_back(message);
1026 LOGW("wrong format of transaction\n");
1027 dealloc_message<MessageItemSetISEImData>(message);
1032 case ISM_TRANS_CMD_GET_ISE_IMDATA:
1034 MessageItemGetISEImdata *message = alloc_message<MessageItemGetISEImdata>();
1036 message->get_command_ref() = cmd;
1037 m_list_messages.push_back(message);
1041 case ISM_TRANS_CMD_GET_ISE_LANGUAGE_LOCALE:
1043 MessageItemGetISELanguageLocale *message = alloc_message<MessageItemGetISELanguageLocale>();
1045 message->get_command_ref() = cmd;
1046 m_list_messages.push_back(message);
1050 case ISM_TRANS_CMD_SET_RETURN_KEY_TYPE:
1052 MessageItemSetReturnKeyType *message = alloc_message<MessageItemSetReturnKeyType>();
1054 message->get_command_ref() = cmd;
1055 if (transaction.get_data(message->get_type_ref())) {
1056 m_list_messages.push_back(message);
1061 case ISM_TRANS_CMD_GET_RETURN_KEY_TYPE:
1063 MessageItemGetReturnKeyType *message = alloc_message<MessageItemGetReturnKeyType>();
1065 message->get_command_ref() = cmd;
1066 m_list_messages.push_back(message);
1070 case ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE:
1072 MessageItemSetReturnKeyDisable *message = alloc_message<MessageItemSetReturnKeyDisable>();
1074 message->get_command_ref() = cmd;
1075 if (transaction.get_data(message->get_disabled_ref())) {
1076 m_list_messages.push_back(message);
1078 LOGW("wrong format of transaction\n");
1079 dealloc_message<MessageItemSetReturnKeyDisable>(message);
1084 case ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE:
1086 MessageItemGetReturnKeyDisable *message = alloc_message<MessageItemGetReturnKeyDisable>();
1088 message->get_command_ref() = cmd;
1089 m_list_messages.push_back(message);
1093 case SCIM_TRANS_CMD_PROCESS_KEY_EVENT:
1095 MessageItemProcessKeyEvent *message = alloc_message<MessageItemProcessKeyEvent>();
1097 message->get_command_ref() = cmd;
1098 if (transaction.get_data(message->get_key_ref()) &&
1099 transaction.get_data(message->get_serial_ref())) {
1100 m_list_messages.push_back(message);
1102 LOGW("wrong format of transaction\n");
1103 dealloc_message<MessageItemProcessKeyEvent>(message);
1108 case ISM_TRANS_CMD_SET_LAYOUT:
1110 MessageItemSetLayout *message = alloc_message<MessageItemSetLayout>();
1112 message->get_command_ref() = cmd;
1113 if (transaction.get_data(message->get_layout_ref())) {
1114 m_list_messages.push_back(message);
1116 LOGW("wrong format of transaction\n");
1117 dealloc_message<MessageItemSetLayout>(message);
1122 case ISM_TRANS_CMD_GET_LAYOUT:
1124 MessageItemGetLayout *message = alloc_message<MessageItemGetLayout>();
1126 message->get_command_ref() = cmd;
1127 m_list_messages.push_back(message);
1131 case ISM_TRANS_CMD_SET_INPUT_MODE:
1133 MessageItemSetInputMode *message = alloc_message<MessageItemSetInputMode>();
1135 message->get_command_ref() = cmd;
1136 if (transaction.get_data(message->get_input_mode_ref())) {
1137 m_list_messages.push_back(message);
1139 LOGW("wrong format of transaction\n");
1140 dealloc_message<MessageItemSetInputMode>(message);
1145 case ISM_TRANS_CMD_SET_CAPS_MODE:
1147 MessageItemSetCapsMode *message = alloc_message<MessageItemSetCapsMode>();
1149 message->get_command_ref() = cmd;
1150 if (transaction.get_data(message->get_mode_ref())) {
1151 m_list_messages.push_back(message);
1153 LOGW("wrong format of transaction\n");
1154 dealloc_message<MessageItemSetCapsMode>(message);
1159 case SCIM_TRANS_CMD_PANEL_RESET_INPUT_CONTEXT:
1161 MessageItemPanelResetInputContext *message = alloc_message<MessageItemPanelResetInputContext>();
1163 message->get_command_ref() = cmd;
1164 message->get_ic_ref() = ic;
1165 message->get_ic_uuid_ref() = ic_uuid;
1166 m_list_messages.push_back(message);
1170 case ISM_TRANS_CMD_UPDATE_CANDIDATE_UI:
1172 MessageItemUpdateCandidateUI *message = alloc_message<MessageItemUpdateCandidateUI>();
1174 message->get_command_ref() = cmd;
1175 if (transaction.get_data(message->get_style_ref()) &&
1176 transaction.get_data(message->get_mode_ref())) {
1177 message->get_ic_ref() = ic;
1178 message->get_ic_uuid_ref() = ic_uuid;
1179 m_list_messages.push_back(message);
1181 LOGW("wrong format of transaction\n");
1182 dealloc_message<MessageItemUpdateCandidateUI>(message);
1187 case ISM_TRANS_CMD_UPDATE_CANDIDATE_GEOMETRY:
1189 MessageItemUpdateCandidateGeometry *message = alloc_message<MessageItemUpdateCandidateGeometry>();
1191 message->get_command_ref() = cmd;
1192 if (transaction.get_data(message->get_rectinfo_ref().pos_x)
1193 && transaction.get_data(message->get_rectinfo_ref().pos_y)
1194 && transaction.get_data(message->get_rectinfo_ref().width)
1195 && transaction.get_data(message->get_rectinfo_ref().height)) {
1196 message->get_ic_ref() = ic;
1197 message->get_ic_uuid_ref() = ic_uuid;
1198 m_list_messages.push_back(message);
1200 LOGW("wrong format of transaction\n");
1201 dealloc_message<MessageItemUpdateCandidateGeometry>(message);
1206 case ISM_TRANS_CMD_UPDATE_KEYBOARD_ISE:
1208 MessageItemUpdateKeyboardISE *message = alloc_message<MessageItemUpdateKeyboardISE>();
1210 message->get_command_ref() = cmd;
1212 if (transaction.get_data(message->get_name_ref()) &&
1213 transaction.get_data(message->get_uuid_ref())) {
1214 message->get_ic_ref() = ic;
1215 message->get_ic_uuid_ref() = ic_uuid;
1216 m_list_messages.push_back(message);
1218 LOGW("wrong format of transaction\n");
1219 dealloc_message<MessageItemUpdateKeyboardISE>(message);
1224 case ISM_TRANS_CMD_UPDATE_KEYBOARD_ISE_LIST:
1226 MessageItemUpdateKeyboardISEList *message = alloc_message<MessageItemUpdateKeyboardISEList>();
1228 message->get_command_ref() = cmd;
1231 if (transaction.get_data(num)) {
1232 for (unsigned int i = 0; i < num; i++) {
1233 if (transaction.get_data(ise)) {
1234 message->get_list_ref().push_back (ise);
1236 message->get_list_ref().clear ();
1240 message->get_ic_ref() = ic;
1241 message->get_ic_uuid_ref() = ic_uuid;
1242 m_list_messages.push_back(message);
1244 LOGW("wrong format of transaction\n");
1245 dealloc_message<MessageItemUpdateKeyboardISEList>(message);
1250 case ISM_TRANS_CMD_CANDIDATE_MORE_WINDOW_SHOW:
1252 MessageItemCandidateMoreWindowShow *message = alloc_message<MessageItemCandidateMoreWindowShow>();
1254 message->get_command_ref() = cmd;
1255 message->get_ic_ref() = ic;
1256 message->get_ic_uuid_ref() = ic_uuid;
1257 m_list_messages.push_back(message);
1261 case ISM_TRANS_CMD_CANDIDATE_MORE_WINDOW_HIDE:
1263 MessageItemCandidateMoreWindowHide *message = alloc_message<MessageItemCandidateMoreWindowHide>();
1265 message->get_command_ref() = cmd;
1266 message->get_ic_ref() = ic;
1267 message->get_ic_uuid_ref() = ic_uuid;
1268 m_list_messages.push_back(message);
1272 case ISM_TRANS_CMD_SELECT_AUX:
1274 MessageItemSelectAux *message = alloc_message<MessageItemSelectAux>();
1276 message->get_command_ref() = cmd;
1277 if (transaction.get_data(message->get_item_ref())) {
1278 message->get_ic_ref() = ic;
1279 message->get_ic_uuid_ref() = ic_uuid;
1280 m_list_messages.push_back(message);
1282 LOGW("wrong format of transaction\n");
1283 dealloc_message<MessageItemSelectAux>(message);
1288 case SCIM_TRANS_CMD_SELECT_CANDIDATE: //FIXME:remove if useless
1290 MessageItemSelectCandidate *message = alloc_message<MessageItemSelectCandidate>();
1292 message->get_command_ref() = cmd;
1293 if (transaction.get_data(message->get_item_ref())) {
1294 message->get_ic_ref() = ic;
1295 message->get_ic_uuid_ref() = ic_uuid;
1296 m_list_messages.push_back(message);
1298 LOGW("wrong format of transaction\n");
1299 dealloc_message<MessageItemSelectCandidate>(message);
1304 case SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_UP: //FIXME:remove if useless
1306 MessageItemLookupTablePageUp *message = alloc_message<MessageItemLookupTablePageUp>();
1308 message->get_command_ref() = cmd;
1309 message->get_ic_ref() = ic;
1310 message->get_ic_uuid_ref() = ic_uuid;
1311 m_list_messages.push_back(message);
1315 case SCIM_TRANS_CMD_LOOKUP_TABLE_PAGE_DOWN: //FIXME:remove if useless
1317 MessageItemLookupTablePageDown *message = alloc_message<MessageItemLookupTablePageDown>();
1319 message->get_command_ref() = cmd;
1320 message->get_ic_ref() = ic;
1321 message->get_ic_uuid_ref() = ic_uuid;
1322 m_list_messages.push_back(message);
1326 case SCIM_TRANS_CMD_UPDATE_LOOKUP_TABLE_PAGE_SIZE:
1328 MessageItemUpdateLookupTablePageSize *message = alloc_message<MessageItemUpdateLookupTablePageSize>();
1330 message->get_command_ref() = cmd;
1331 if (transaction.get_data(message->get_size_ref())) {
1332 message->get_ic_ref() = ic;
1333 message->get_ic_uuid_ref() = ic_uuid;
1334 m_list_messages.push_back(message);
1336 LOGW("wrong format of transaction\n");
1337 dealloc_message<MessageItemUpdateLookupTablePageSize>(message);
1342 case ISM_TRANS_CMD_CANDIDATE_SHOW: //FIXME:remove if useless
1344 MessageItemCandidateShow *message = alloc_message<MessageItemCandidateShow>();
1346 message->get_command_ref() = cmd;
1347 message->get_ic_ref() = ic;
1348 message->get_ic_uuid_ref() = ic_uuid;
1349 m_list_messages.push_back(message);
1353 case ISM_TRANS_CMD_CANDIDATE_HIDE: //FIXME:remove if useless
1355 MessageItemCandidateHide *message = alloc_message<MessageItemCandidateHide>();
1357 message->get_command_ref() = cmd;
1358 message->get_ic_ref() = ic;
1359 message->get_ic_uuid_ref() = ic_uuid;
1360 m_list_messages.push_back(message);
1364 case ISM_TRANS_CMD_UPDATE_LOOKUP_TABLE: //FIXME:remove if useless
1366 MessageItemUpdateLookupTable *message = alloc_message<MessageItemUpdateLookupTable>();
1368 message->get_command_ref() = cmd;
1369 if (transaction.get_data(message->get_candidate_table_ref())) {
1370 m_list_messages.push_back(message);
1372 LOGW("wrong format of transaction\n");
1373 dealloc_message<MessageItemUpdateLookupTable>(message);
1378 case ISM_TRANS_CMD_UPDATE_CANDIDATE_ITEM_LAYOUT:
1380 MessageItemUpdateCandidateItemLayout *message = alloc_message<MessageItemUpdateCandidateItemLayout>();
1381 if (transaction.get_data(message->get_row_items_ref())) {
1382 m_list_messages.push_back(message);
1384 LOGW("wrong format of transaction\n");
1385 dealloc_message<MessageItemUpdateCandidateItemLayout>(message);
1389 case ISM_TRANS_CMD_SELECT_ASSOCIATE:
1391 MessageItemSelectAssociate *message = alloc_message<MessageItemSelectAssociate>();
1392 if (transaction.get_data(message->get_item_ref())) {
1393 message->get_ic_ref() = ic;
1394 message->get_ic_uuid_ref() = ic_uuid;
1395 m_list_messages.push_back(message);
1397 LOGW("wrong format of transaction\n");
1398 dealloc_message<MessageItemSelectAssociate>(message);
1402 case ISM_TRANS_CMD_ASSOCIATE_TABLE_PAGE_UP:
1404 MessageItemAssociateTablePageUp *message = alloc_message<MessageItemAssociateTablePageUp>();
1405 message->get_ic_ref() = ic;
1406 message->get_ic_uuid_ref() = ic_uuid;
1407 m_list_messages.push_back(message);
1410 case ISM_TRANS_CMD_ASSOCIATE_TABLE_PAGE_DOWN:
1412 MessageItemAssociateTablePageDown *message = alloc_message<MessageItemAssociateTablePageDown>();
1413 message->get_ic_ref() = ic;
1414 message->get_ic_uuid_ref() = ic_uuid;
1415 m_list_messages.push_back(message);
1418 case ISM_TRANS_CMD_UPDATE_ASSOCIATE_TABLE_PAGE_SIZE:
1420 MessageItemUpdateAssociateTablePageSize *message = alloc_message<MessageItemUpdateAssociateTablePageSize>();
1421 if (transaction.get_data(message->get_size_ref())) {
1422 message->get_ic_ref() = ic;
1423 message->get_ic_uuid_ref() = ic_uuid;
1424 m_list_messages.push_back(message);
1426 LOGW("wrong format of transaction\n");
1427 dealloc_message<MessageItemUpdateAssociateTablePageSize>(message);
1431 case ISM_TRANS_CMD_RESET_ISE_CONTEXT:
1433 MessageItemResetISEContext *message = alloc_message<MessageItemResetISEContext>();
1435 message->get_command_ref() = cmd;
1436 message->get_ic_ref() = ic;
1437 message->get_ic_uuid_ref() = ic_uuid;
1438 m_list_messages.push_back(message);
1442 case ISM_TRANS_CMD_TURN_ON_LOG:
1444 MessageItemTurnOnLog *message = alloc_message<MessageItemTurnOnLog>();
1445 if (transaction.get_data(message->get_state_ref())) {
1446 m_list_messages.push_back(message);
1448 LOGW("wrong format of transaction\n");
1449 dealloc_message<MessageItemTurnOnLog>(message);
1453 case ISM_TRANS_CMD_UPDATE_DISPLAYED_CANDIDATE:
1455 MessageItemUpdateDisplayedCandidate *message = alloc_message<MessageItemUpdateDisplayedCandidate>();
1456 if (transaction.get_data(message->get_size_ref())) {
1457 message->get_ic_ref() = ic;
1458 message->get_ic_uuid_ref() = ic_uuid;
1459 m_list_messages.push_back(message);
1461 LOGW("wrong format of transaction\n");
1462 dealloc_message<MessageItemUpdateDisplayedCandidate>(message);
1466 case ISM_TRANS_CMD_LONGPRESS_CANDIDATE:
1468 MessageItemLongpressCandidate *message = alloc_message<MessageItemLongpressCandidate>();
1470 message->get_command_ref() = cmd;
1471 if (transaction.get_data(message->get_index_ref())) {
1472 message->get_ic_ref() = ic;
1473 message->get_ic_uuid_ref() = ic_uuid;
1474 m_list_messages.push_back(message);
1476 LOGW("wrong format of transaction\n");
1477 dealloc_message<MessageItemLongpressCandidate>(message);
1482 case ISM_TRANS_CMD_SET_INPUT_HINT:
1484 MessageItemSetInputHint *message = alloc_message<MessageItemSetInputHint>();
1486 message->get_command_ref() = cmd;
1487 if (transaction.get_data(message->get_input_hint_ref())) {
1488 m_list_messages.push_back(message);
1490 LOGW("wrong format of transaction\n");
1491 dealloc_message<MessageItemSetInputHint>(message);
1496 case ISM_TRANS_CMD_UPDATE_BIDI_DIRECTION:
1498 MessageItemUpdateBidiDirection *message = alloc_message<MessageItemUpdateBidiDirection>();
1500 message->get_command_ref() = cmd;
1501 if (transaction.get_data(message->get_bidi_direction())) {
1502 m_list_messages.push_back(message);
1504 LOGW("wrong format of transaction\n");
1505 dealloc_message<MessageItemUpdateBidiDirection>(message);
1510 case ISM_TRANS_CMD_SHOW_ISE_OPTION_WINDOW:
1512 MessageItemShowISEOptionWindow *message = alloc_message<MessageItemShowISEOptionWindow>();
1514 message->get_command_ref() = cmd;
1515 message->get_ic_ref() = ic;
1516 message->get_ic_uuid_ref() = ic_uuid;
1517 m_list_messages.push_back(message);
1521 case ISM_TRANS_CMD_RESUME_ISE_OPTION_WINDOW:
1523 MessageItemResumeISEOptionWindow *message = alloc_message<MessageItemResumeISEOptionWindow>();
1525 message->get_command_ref() = cmd;
1526 message->get_ic_ref() = ic;
1527 message->get_ic_uuid_ref() = ic_uuid;
1528 m_list_messages.push_back(message);
1532 case ISM_TRANS_CMD_CHECK_OPTION_WINDOW:
1534 MessageItemCheckOptionWindow *message = alloc_message<MessageItemCheckOptionWindow>();
1536 message->get_command_ref() = cmd;
1537 m_list_messages.push_back(message);
1541 case ISM_TRANS_CMD_PROCESS_INPUT_DEVICE_EVENT:
1543 MessageItemProcessInputDeviceEvent *message = alloc_message<MessageItemProcessInputDeviceEvent>();
1545 message->get_command_ref() = cmd;
1546 if (transaction.get_data(message->get_type_ref()) &&
1547 transaction.get_data(message->get_data_ptr(), message->get_len_ref())) {
1548 m_list_messages.push_back(message);
1550 LOGW("wrong format of transaction\n");
1551 dealloc_message<MessageItemProcessInputDeviceEvent>(message);
1556 case SCIM_TRANS_CMD_SET_AUTOCAPITAL_TYPE:
1558 MessageItemSetAutocapitalType *message = alloc_message<MessageItemSetAutocapitalType>();
1560 message->get_command_ref() = cmd;
1561 if (transaction.get_data(message->get_auto_capital_type_ref())) {
1562 m_list_messages.push_back(message);
1564 LOGW("wrong format of transaction\n");
1565 dealloc_message<MessageItemSetAutocapitalType>(message);
1570 case ISM_TRANS_CMD_SET_PREDICTION_ALLOW:
1572 MessageItemSetPredictionAllow *message = alloc_message<MessageItemSetPredictionAllow>();
1574 message->get_command_ref() = cmd;
1575 if (transaction.get_data(message->get_prediction_allow_ref())) {
1576 m_list_messages.push_back(message);
1578 LOGW("wrong format of transaction\n");
1579 dealloc_message<MessageItemSetPredictionAllow>(message);
1591 typedef std::list<MessageItem*> MESSAGE_LIST;
1592 MESSAGE_LIST m_list_messages;
1595 } /* namespace scim */
1597 #endif /* __ISF_MESSAGE_H */
1600 vi:ts=4:expandtab:nowrap