From: Jihoon Kim Date: Fri, 11 Jul 2014 02:19:27 +0000 (+0900) Subject: Add interface to send private command from IME to application X-Git-Tag: submit/tizen/20150128.083920~137 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5dfc2672dc44b24eb18b10bf80b12d6bed9ed4d2;p=platform%2Fcore%2Fuifw%2Fisf.git Add interface to send private command from IME to application [model] Redwood, B1, B2 [binary_type] PDA [customer] OPEN [issue#] N/A [problem] IME send only key event to application, other interface requires. [cause] No interface to send private command [solution] Add interface to send private command from IME to application [team] Input Framework [request] N/A [horizontal_expansion] N/A Change-Id: Ia9f76f1b14a6dc6d3499bf688e6a35ddde6dbd37 --- diff --git a/ism/extras/efl_immodule/isf_imf_context.cpp b/ism/extras/efl_immodule/isf_imf_context.cpp index d78ea9a7..c4087c5a 100644 --- a/ism/extras/efl_immodule/isf_imf_context.cpp +++ b/ism/extras/efl_immodule/isf_imf_context.cpp @@ -148,7 +148,8 @@ static void panel_slot_get_selection (int static void panel_slot_set_selection (int context, int start, int end); - +static void panel_slot_send_private_command (int context, + const String &command); static void panel_req_focus_in (EcoreIMFContextISF *ic); static void panel_req_update_factory_info (EcoreIMFContextISF *ic); static void panel_req_update_spot_location (EcoreIMFContextISF *ic); @@ -235,13 +236,14 @@ static bool slot_get_selection (IMEngineInstanceBase static bool slot_set_selection (IMEngineInstanceBase *si, int start, int end); - static void slot_expand_candidate (IMEngineInstanceBase *si); static void slot_contract_candidate (IMEngineInstanceBase *si); static void slot_set_candidate_style (IMEngineInstanceBase *si, ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line, ISF_CANDIDATE_MODE_T mode); +static void slot_send_private_command (IMEngineInstanceBase *si, + const String &command); static void reload_config_callback (const ConfigPointer &config); @@ -2657,7 +2659,7 @@ panel_slot_set_selection (int context, int start, int end) EcoreIMFContextISF *ic = find_ic (context); - if (ic && ic->impl && _focused_ic == ic && ic->impl->si) + if (ic && ic->impl && ic->impl->si && _focused_ic == ic) slot_set_selection (ic->impl->si, start, end); } @@ -2666,7 +2668,7 @@ panel_slot_update_displayed_candidate_number (int context, int number) { EcoreIMFContextISF *ic = find_ic (context); SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " number=" << number << " ic=" << ic << "\n"; - if (ic && ic->impl && _focused_ic == ic && ic->impl->si) { + if (ic && ic->impl && ic->impl->si && _focused_ic == ic) { _panel_client.prepare (ic->id); ic->impl->si->update_displayed_candidate_number (number); _panel_client.send (); @@ -2678,7 +2680,7 @@ panel_slot_candidate_more_window_show (int context) { EcoreIMFContextISF *ic = find_ic (context); SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " ic=" << ic << "\n"; - if (ic && ic->impl && _focused_ic == ic && ic->impl->si) { + if (ic && ic->impl && ic->impl->si && _focused_ic == ic) { _panel_client.prepare (ic->id); ic->impl->si->candidate_more_window_show (); _panel_client.send (); @@ -2690,7 +2692,7 @@ panel_slot_candidate_more_window_hide (int context) { EcoreIMFContextISF *ic = find_ic (context); SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " ic=" << ic << "\n"; - if (ic && ic->impl && _focused_ic == ic && ic->impl->si) { + if (ic && ic->impl && ic->impl->si && _focused_ic == ic) { _panel_client.prepare (ic->id); ic->impl->si->candidate_more_window_hide (); _panel_client.send (); @@ -2702,7 +2704,7 @@ panel_slot_longpress_candidate (int context, int index) { EcoreIMFContextISF *ic = find_ic (context); SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " index=" << index << " ic=" << ic << "\n"; - if (ic && ic->impl && _focused_ic == ic && ic->impl->si) { + if (ic && ic->impl && ic->impl->si && _focused_ic == ic) { _panel_client.prepare (ic->id); ic->impl->si->longpress_candidate (index); _panel_client.send (); @@ -2725,6 +2727,17 @@ panel_slot_update_isf_candidate_panel (int context, int type, int value) process_update_input_context (type, value); } +static void +panel_slot_send_private_command (int context, const String &command) +{ + SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n"; + + EcoreIMFContextISF *ic = find_ic (context); + + if (ic && ic->impl && ic->impl->si && _focused_ic == ic) + slot_send_private_command (ic->impl->si, command); +} + /* Panel Requestion functions. */ static void panel_req_show_help (EcoreIMFContextISF *ic) @@ -3278,6 +3291,7 @@ initialize (void) _panel_client.signal_connect_longpress_candidate (slot (panel_slot_longpress_candidate)); _panel_client.signal_connect_update_ise_input_context (slot (panel_slot_update_ise_input_context)); _panel_client.signal_connect_update_isf_candidate_panel (slot (panel_slot_update_isf_candidate_panel)); + _panel_client.signal_connect_send_private_command (slot (panel_slot_send_private_command)); if (!panel_initialize ()) { std::cerr << "Ecore IM Module: Cannot connect to Panel!\n"; @@ -3775,6 +3789,9 @@ attach_instance (const IMEngineInstancePointer &si) si->signal_connect_set_candidate_style ( slot (slot_set_candidate_style)); + + si->signal_connect_send_private_command ( + slot (slot_send_private_command)); } // Implementation of slot functions @@ -4181,7 +4198,7 @@ slot_delete_surrounding_text (IMEngineInstanceBase *si, EcoreIMFContextISF *ic = static_cast (si->get_frontend_data ()); - if (ic && ic->impl && _focused_ic == ic) { + if (_focused_ic && _focused_ic == ic) { Ecore_IMF_Event_Delete_Surrounding ev; ev.ctx = _focused_ic->ctx; ev.n_chars = len; @@ -4202,7 +4219,7 @@ slot_get_selection (IMEngineInstanceBase *si, #ifdef _WEARABLE EcoreIMFContextISF *ic = static_cast (si->get_frontend_data ()); - if (ic && ic->impl && _focused_ic == ic) { + if (_focused_ic && _focused_ic == ic) { char *selection = NULL; if (ecore_imf_context_selection_get (_focused_ic->ctx, &selection)) { SCIM_DEBUG_FRONTEND(2) << "Selection: " << selection <<"\n"; @@ -4230,7 +4247,7 @@ slot_set_selection (IMEngineInstanceBase *si, #ifdef _WEARABLE EcoreIMFContextISF *ic = static_cast (si->get_frontend_data ()); - if (ic && ic->impl && _focused_ic == ic) { + if (_focused_ic && _focused_ic == ic) { Ecore_IMF_Event_Selection ev; ev.ctx = _focused_ic->ctx; ev.start = start; @@ -4275,6 +4292,19 @@ slot_set_candidate_style (IMEngineInstanceBase *si, ISF_CANDIDATE_PORTRAIT_LINE_ _panel_client.set_candidate_style (ic->id, portrait_line, mode); } +static void +slot_send_private_command (IMEngineInstanceBase *si, + const String &command) +{ + SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n"; + + EcoreIMFContextISF *ic = static_cast (si->get_frontend_data ()); + + if (_focused_ic && _focused_ic == ic) { + ecore_imf_context_event_callback_call (_focused_ic->ctx, ECORE_IMF_CALLBACK_PRIVATE_COMMAND_SEND, (void *)command.c_str ()); + } +} + static void reload_config_callback (const ConfigPointer &config) { diff --git a/ism/modules/frontend/scim_socket_frontend.cpp b/ism/modules/frontend/scim_socket_frontend.cpp index 77cdce30..44a6a995 100644 --- a/ism/modules/frontend/scim_socket_frontend.cpp +++ b/ism/modules/frontend/scim_socket_frontend.cpp @@ -742,6 +742,15 @@ SocketFrontEnd::set_selection (int id, int start, int end) return ret; } +void +SocketFrontEnd::send_private_command (int id, const String &command) +{ + if (m_current_instance == id) { + m_send_trans.put_command (SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND); + m_temp_trans.put_data (command); + } +} + void SocketFrontEnd::expand_candidate (int id) { diff --git a/ism/modules/frontend/scim_socket_frontend.h b/ism/modules/frontend/scim_socket_frontend.h index 39a190fb..799308a5 100644 --- a/ism/modules/frontend/scim_socket_frontend.h +++ b/ism/modules/frontend/scim_socket_frontend.h @@ -149,6 +149,8 @@ protected: ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line, ISF_CANDIDATE_MODE_T mode); + virtual void send_private_command (int id, const String &command); + public: virtual void init (int argc, char **argv); virtual void run (); diff --git a/ism/modules/frontend/scim_x11_frontend.h b/ism/modules/frontend/scim_x11_frontend.h index 9e56cbaa..b429f28b 100644 --- a/ism/modules/frontend/scim_x11_frontend.h +++ b/ism/modules/frontend/scim_x11_frontend.h @@ -124,6 +124,8 @@ protected: virtual bool get_selection (int siid, WideString &text); virtual bool set_selection (int siid, int start, int end); + virtual void send_private_command (int siid, const String & command); + public: virtual void init (int argc, char **argv); virtual void run (); diff --git a/ism/modules/imengine/scim_socket_imengine.cpp b/ism/modules/imengine/scim_socket_imengine.cpp index bd136724..95a9b1fd 100644 --- a/ism/modules/imengine/scim_socket_imengine.cpp +++ b/ism/modules/imengine/scim_socket_imengine.cpp @@ -1259,6 +1259,14 @@ SocketInstance::do_transaction (Transaction &trans, bool &ret) cont = true; break; } + case SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND: + { + String command; + if (trans.get_data (command)) { + send_private_command (command); + } + break; + } case ISM_TRANS_CMD_EXPAND_CANDIDATE: { SCIM_DEBUG_IMENGINE(3) << " expand_candidate ()\n"; diff --git a/ism/src/scim_filter.cpp b/ism/src/scim_filter.cpp index 65109c96..1c87bc85 100644 --- a/ism/src/scim_filter.cpp +++ b/ism/src/scim_filter.cpp @@ -188,6 +188,9 @@ public: m_orig->signal_connect_set_selection ( slot (this, &FilterInstanceBase::FilterInstanceBaseImpl::slot_set_selection)); + + m_orig->signal_connect_send_private_command ( + slot (this, &FilterInstanceBase::FilterInstanceBaseImpl::slot_send_private_command)); } } @@ -331,6 +334,10 @@ private: bool slot_set_selection (IMEngineInstanceBase * si, int start, int end) { return m_parent->filter_set_selection (start, end); } + + void slot_send_private_command (IMEngineInstanceBase * si, const String & command) { + m_parent->filter_send_private_command (command); + } }; FilterInstanceBase::FilterInstanceBase (FilterFactoryBase *factory, @@ -558,6 +565,12 @@ FilterInstanceBase::filter_set_selection (int start, int end) return set_selection (start, end); } +void +FilterInstanceBase::filter_send_private_command (const String &command) +{ + send_private_command (command); +} + } // namespace scim /* diff --git a/ism/src/scim_filter.h b/ism/src/scim_filter.h index 2ba88072..0a2f6813 100644 --- a/ism/src/scim_filter.h +++ b/ism/src/scim_filter.h @@ -388,6 +388,7 @@ protected: virtual bool filter_delete_surrounding_text (int offset, int len); virtual bool filter_get_selection (WideString &text); virtual bool filter_set_selection (int start, int end); + virtual void filter_send_private_command (const String &command); /** @} */ }; diff --git a/ism/src/scim_frontend.cpp b/ism/src/scim_frontend.cpp index 52bb1e49..9f69fcfd 100644 --- a/ism/src/scim_frontend.cpp +++ b/ism/src/scim_frontend.cpp @@ -175,6 +175,10 @@ public: m_frontend->set_candidate_style (si->get_id (), portrait_line, mode); } + void slot_send_private_command(IMEngineInstanceBase * si, const String & command) { + m_frontend->send_private_command (si->get_id (), command); + } + void attach_instance (const IMEngineInstancePointer &si) { si->signal_connect_show_preedit_string ( @@ -244,6 +248,9 @@ public: si->signal_connect_set_candidate_style ( slot (this, &FrontEndBase::FrontEndBaseImpl::slot_set_candidate_style)); + + si->signal_connect_send_private_command ( + slot (this, &FrontEndBase::FrontEndBaseImpl::slot_send_private_command)); } }; @@ -928,6 +935,10 @@ FrontEndBase::set_candidate_style (int id, ISF_CANDIDATE_PORTRAIT_LINE_T portrai { } void +FrontEndBase::send_private_command (int id, const String & command) +{ +} +void FrontEndBase::dump_instances (void) { SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n"; diff --git a/ism/src/scim_frontend.h b/ism/src/scim_frontend.h index 5e6e8bb4..8c2058bb 100644 --- a/ism/src/scim_frontend.h +++ b/ism/src/scim_frontend.h @@ -755,6 +755,15 @@ protected: virtual void set_candidate_style (int id, ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line, ISF_CANDIDATE_MODE_T mode); + + /** + * @brief Send a private command to an application. + * + * @param id the id of the IMEngine instance. It must have been focused in. + * @param command The private command + */ + virtual void send_private_command (int id, const String &command); + /** * @} */ diff --git a/ism/src/scim_helper.cpp b/ism/src/scim_helper.cpp index b35d245d..ef9ae995 100644 --- a/ism/src/scim_helper.cpp +++ b/ism/src/scim_helper.cpp @@ -1449,7 +1449,7 @@ HelperAgent::get_selection (const String &uuid) const } /** - * @brief Request to selected text. + * @brief Request to select text. * * @param start The start position in text. * @param end The end position in text. @@ -1468,6 +1468,24 @@ HelperAgent::set_selection (int start, int end) const } } +/** + * @brief Send a private command to an application. + * + * @param command The private command sent from IME. + */ +void +HelperAgent::send_private_command (const String &command) const +{ + if (m_impl->socket_active.is_connected ()) { + m_impl->send.clear (); + m_impl->send.put_command (SCIM_TRANS_CMD_REQUEST); + m_impl->send.put_data (m_impl->magic_active); + m_impl->send.put_command (SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND); + m_impl->send.put_data (command); + m_impl->send.write_to_socket (m_impl->socket_active, m_impl->magic_active); + } +} + /** * @brief Request to get uuid list of all keyboard ISEs. * diff --git a/ism/src/scim_helper.h b/ism/src/scim_helper.h index 355b3f06..e3509e61 100644 --- a/ism/src/scim_helper.h +++ b/ism/src/scim_helper.h @@ -666,6 +666,13 @@ public: */ void reset_keyboard_ise (void) const; + /** + * @brief Send a private command to an application + * + * @param command The private command sent from IME. + */ + void send_private_command (const String &command) const; + public: /** * @brief Connect a slot to Helper exit signal. diff --git a/ism/src/scim_imengine.cpp b/ism/src/scim_imengine.cpp index 5abacd91..6cadfc61 100644 --- a/ism/src/scim_imengine.cpp +++ b/ism/src/scim_imengine.cpp @@ -147,6 +147,8 @@ public: IMEngineSignalCandidateStyle m_signal_set_candidate_style; + IMEngineSignalString m_signal_send_private_command; + int m_id; void * m_frontend_data; @@ -623,6 +625,12 @@ IMEngineInstanceBase::signal_connect_set_candidate_style (IMEngineSlotCandidateS return m_impl->m_signal_set_candidate_style.connect (slot); } +Connection +IMEngineInstanceBase::signal_connect_send_private_command (IMEngineSlotString *slot) +{ + return m_impl->m_signal_send_private_command.connect (slot); +} + void IMEngineInstanceBase::show_preedit_string () { @@ -801,6 +809,12 @@ IMEngineInstanceBase::set_autocapital_type (int mode) { } +void +IMEngineInstanceBase::send_private_command (const String &command) +{ + m_impl->m_signal_send_private_command (this, command); +} + // implementation of DummyIMEngine DummyIMEngineFactory::DummyIMEngineFactory () { diff --git a/ism/src/scim_imengine.h b/ism/src/scim_imengine.h index 293f2288..f1013e6f 100644 --- a/ism/src/scim_imengine.h +++ b/ism/src/scim_imengine.h @@ -67,7 +67,7 @@ enum ClientCapability SCIM_CLIENT_CAP_ONTHESPOT_PREEDIT = (1 << 0), /**< The client support OnTheSpot preedit (embed preedit string into client window) */ SCIM_CLIENT_CAP_SINGLE_LEVEL_PROPERTY = (1 << 1), /**< The client support displaying single level property, property tree may not be supported*/ SCIM_CLIENT_CAP_MULTI_LEVEL_PROPERTY = (1 << 2), /**< The client support displaying multiple level property, aka. property tree */ - SCIM_CLIENT_CAP_TRIGGER_PROPERTY = (1 << 3), /**< The client is capabile to trigger the IMEngine property. */ + SCIM_CLIENT_CAP_TRIGGER_PROPERTY = (1 << 3), /**< The client is capable to trigger the IMEngine property. */ SCIM_CLIENT_CAP_HELPER_MODULE = (1 << 4), /**< The client support helper module */ SCIM_CLIENT_CAP_SURROUNDING_TEXT = (1 << 5), /**< The client support get/delete surrounding text operations */ SCIM_CLIENT_CAP_ALL_CAPABILITIES = 0x3F @@ -521,6 +521,8 @@ public: Connection signal_connect_contract_candidate (IMEngineSlotVoid *slot); Connection signal_connect_set_candidate_style (IMEngineSlotCandidateStyle *slot); + + Connection signal_connect_send_private_command (IMEngineSlotString *slot); /** @} */ public: @@ -841,7 +843,7 @@ protected: /** * @brief Commit a string to the client application. * - * The preedit string should be hid before calling + * The preedit string should be hidden before calling * this method. Otherwise the clients which use * OnTheSpot input mode will flicker annoyingly. * @@ -916,9 +918,9 @@ protected: * * @param text location to store the context string around the insertion point. * @param cursor location to store index of the insertion cursor within @text. - * @param maxlen_before the maxmium length of context string to be retrieved + * @param maxlen_before the maximum length of context string to be retrieved * before the cursor; -1 means unlimited. - * @param maxlen_after the maxmium length of context string to be retrieved + * @param maxlen_after the maximum length of context string to be retrieved * after the cursor; -1 means unlimited. * * @return true if surrounding text was provided. @@ -981,6 +983,8 @@ protected: void set_candidate_style (ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line = ONE_LINE_CANDIDATE, ISF_CANDIDATE_MODE_T mode = FIXED_CANDIDATE_WINDOW); + void send_private_command (const String &command); + /** @} */ }; diff --git a/ism/src/scim_panel_agent.cpp b/ism/src/scim_panel_agent.cpp index 36416bc6..32c23d04 100644 --- a/ism/src/scim_panel_agent.cpp +++ b/ism/src/scim_panel_agent.cpp @@ -3667,6 +3667,8 @@ private: socket_helper_get_selection (client_id); } else if (cmd == SCIM_TRANS_CMD_SET_SELECTION) { socket_helper_set_selection (client_id); + } else if (cmd == SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND) { + socket_helper_send_private_command (client_id); } else if (cmd == ISM_TRANS_CMD_UPDATE_ISE_EXIT) { HelperInfoRepository::iterator hiit = m_helper_active_info_repository.find (client.get_id ()); if (hiit != m_helper_active_info_repository.end ()) { @@ -5238,6 +5240,32 @@ private: } } + void socket_helper_send_private_command (int client) + { + SCIM_DEBUG_MAIN(4) << __FUNCTION__ << " (" << client << ")\n"; + + String command; + + if (m_recv_trans.get_data (command)) { + int focused_client; + uint32 focused_context; + String focused_uuid = get_focused_context (focused_client, focused_context); + + ClientInfo client_info = socket_get_client_info (focused_client); + if (client_info.type == FRONTEND_CLIENT) { + Socket socket_client (focused_client); + lock (); + m_send_trans.clear (); + m_send_trans.put_command (SCIM_TRANS_CMD_REPLY); + m_send_trans.put_data (focused_context); + m_send_trans.put_command (SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND); + m_send_trans.put_data (command); + m_send_trans.write_to_socket (socket_client); + unlock (); + } + } + } + void socket_reset_helper_input_context (const String &uuid, int client, uint32 context) { HelperClientIndex::iterator it = m_helper_client_index.find (m_current_helper_uuid); diff --git a/ism/src/scim_panel_client.cpp b/ism/src/scim_panel_client.cpp index b93c682a..bd767b09 100644 --- a/ism/src/scim_panel_client.cpp +++ b/ism/src/scim_panel_client.cpp @@ -131,6 +131,7 @@ class PanelClient::PanelClientImpl PanelClientSignalInt m_signal_longpress_candidate; PanelClientSignalIntInt m_signal_update_ise_input_context; PanelClientSignalIntInt m_signal_update_isf_candidate_panel; + PanelClientSignalString m_signal_send_private_command; public: PanelClientImpl () @@ -484,6 +485,13 @@ public: m_signal_update_isf_candidate_panel ((int) context, (int)type, (int)value); } break; + case SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND: + { + String str; + if (recv.get_data (str)) + m_signal_send_private_command ((int) context, str); + } + break; default: break; } @@ -1226,6 +1234,7 @@ public: m_signal_longpress_candidate.reset(); m_signal_update_ise_input_context.reset(); m_signal_update_isf_candidate_panel.reset(); + m_signal_send_private_command.reset(); } Connection signal_connect_reload_config (PanelClientSlotVoid *slot) @@ -1325,7 +1334,7 @@ public: return m_signal_hide_preedit_string.connect (slot); } - Connection signal_connect_update_preedit_string (PanelClientSlotStringAttrsInt *slot) + Connection signal_connect_update_preedit_string (PanelClientSlotStringAttrsInt *slot) { return m_signal_update_preedit_string.connect (slot); } @@ -1340,7 +1349,7 @@ public: return m_signal_delete_surrounding_text.connect (slot); } - Connection signal_connect_get_selection (PanelClientSlotVoid *slot) + Connection signal_connect_get_selection (PanelClientSlotVoid *slot) { return m_signal_get_selection.connect (slot); } @@ -1380,6 +1389,11 @@ public: return m_signal_update_isf_candidate_panel.connect (slot); } + Connection signal_connect_send_private_command (PanelClientSlotString *slot) + { + return m_signal_send_private_command.connect (slot); + } + private: void launch_panel (const String &config, const String &display) const { @@ -1928,7 +1942,7 @@ PanelClient::signal_connect_delete_surrounding_text (PanelClientSlotIntInt } Connection -PanelClient::signal_connect_get_selection (PanelClientSlotVoid *slot) +PanelClient::signal_connect_get_selection (PanelClientSlotVoid *slot) { return m_impl->signal_connect_get_selection (slot); } @@ -1975,6 +1989,12 @@ PanelClient::signal_connect_update_isf_candidate_panel (PanelClientSlotIntInt return m_impl->signal_connect_update_isf_candidate_panel (slot); } +Connection +PanelClient::signal_connect_send_private_command (PanelClientSlotString *slot) +{ + return m_impl->signal_connect_send_private_command (slot); +} + } /* namespace scim */ /* diff --git a/ism/src/scim_panel_client.h b/ism/src/scim_panel_client.h index a2cf8ecd..d4fd5787 100644 --- a/ism/src/scim_panel_client.h +++ b/ism/src/scim_panel_client.h @@ -510,6 +510,13 @@ public: */ Connection signal_connect_update_isf_candidate_panel (PanelClientSlotIntInt *slot); + /** + * @brief Signal: send private command + * + * slot prototype: void send_private_command (int context, const String & command); + */ + Connection signal_connect_send_private_command (PanelClientSlotString *slot); + /** @} */ }; diff --git a/ism/src/scim_trans_commands.h b/ism/src/scim_trans_commands.h index 9d8e0430..b3519ebd 100644 --- a/ism/src/scim_trans_commands.h +++ b/ism/src/scim_trans_commands.h @@ -531,6 +531,7 @@ const int ISM_TRANS_CMD_UPDATE_ASSOCIATE_TABLE = 172; const int ISM_TRANS_CMD_TRANSACTION_CONTINUE = 173; const int SCIM_TRANS_CMD_GET_SELECTION = 174; const int SCIM_TRANS_CMD_SET_SELECTION = 175; +const int SCIM_TRANS_CMD_SEND_PRIVATE_COMMAND = 176; // Socket IMEngine to Socket FrontEnd const int SCIM_TRANS_CMD_NEW_INSTANCE = 200;