From: Haifeng Deng Date: Tue, 3 Sep 2013 11:15:18 +0000 (+0800) Subject: Merge IMControlClient function into PanelClient X-Git-Tag: submit/tizen/20140310.020845~109 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F27%2F17527%2F1;p=platform%2Fcore%2Fuifw%2Fisf.git Merge IMControlClient function into PanelClient Change-Id: I625377ea840970ed077d004b502144337f25f461 --- diff --git a/ism/extras/efl_immodule/isf_imf_context.cpp b/ism/extras/efl_immodule/isf_imf_context.cpp index c59d0298..09619f4b 100644 --- a/ism/extras/efl_immodule/isf_imf_context.cpp +++ b/ism/extras/efl_immodule/isf_imf_context.cpp @@ -266,7 +266,7 @@ static int _context_count static IMEngineFactoryPointer _fallback_factory; static IMEngineInstancePointer _fallback_instance; -static PanelClient _panel_client; +PanelClient _panel_client; static int _panel_client_id = 0; static Ecore_Fd_Handler *_panel_iochannel_read_handler = 0; @@ -306,7 +306,8 @@ static int __current_numlock_mask = Mod2Mask; #define SHIFT_MODE_ENABLE 0x9fe7 #define SHIFT_MODE_DISABLE 0x9fe8 -extern Ecore_IMF_Context *input_panel_ctx; +extern Ecore_IMF_Input_Panel_State input_panel_state; +extern Ecore_IMF_Context *input_panel_ctx; // A hack to shutdown the immodule cleanly even if im_module_exit () is not called when exiting. class FinalizeHandler @@ -1092,7 +1093,7 @@ isf_imf_context_del (Ecore_IMF_Context *ctx) input_panel_state == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { ecore_imf_context_input_panel_hide (ctx); input_panel_event_callback_call (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_HIDE); - isf_imf_context_input_panel_send_will_hide_ack (); + isf_imf_context_input_panel_send_will_hide_ack (ctx); } } @@ -1231,7 +1232,6 @@ isf_imf_context_focus_in (Ecore_IMF_Context *ctx) if (context_scim && context_scim->impl) { _focused_ic = context_scim; - isf_imf_context_control_focus_in (ctx); _panel_client.send (); @@ -1872,8 +1872,7 @@ isf_imf_context_filter_event (Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type, caps_mode_check (ctx, EINA_FALSE, EINA_TRUE); ret = EINA_TRUE; } - } - else { + } else { if (key.code == SCIM_KEY_space || key.code == SCIM_KEY_KP_Space) autoperiod_insert (ctx); @@ -2471,11 +2470,19 @@ panel_slot_longpress_candidate (int context, int index) } static void -panel_slot_update_client_id (int context, int client_id) +panel_slot_update_ise_input_context (int context, int type, int value) +{ + SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n"; + + process_update_input_context (type, value); +} + +static void +panel_slot_update_isf_candidate_panel (int context, int type, int value) { - SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << " context=" << context << " client_id=" << client_id << "\n"; + SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n"; - _panel_client_id = client_id; + process_update_input_context (type, value); } /* Panel Requestion functions. */ @@ -2634,6 +2641,12 @@ panel_initialize (void) } if (_panel_client.open_connection (_config->get_name (), display_name) >= 0) { + if (_panel_client.get_client_id (_panel_client_id)) { + _panel_client.prepare (0); + _panel_client.register_client (_panel_client_id); + _panel_client.send (); + } + int fd = _panel_client.get_connection_number (); _panel_iochannel_read_handler = ecore_main_fd_handler_add (fd, ECORE_FD_READ, panel_iochannel_handler, NULL, NULL, NULL); @@ -2650,9 +2663,16 @@ panel_initialize (void) } if (_focused_ic) { - _panel_client.prepare (_focused_ic->id); - panel_req_focus_in (_focused_ic); - _panel_client.send (); + scim_usleep (2000000); // Wait for ISE ready + Ecore_IMF_Context *ctx = _focused_ic->ctx; + _focused_ic = 0; + if (input_panel_state == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { + input_panel_state = ECORE_IMF_INPUT_PANEL_STATE_HIDE; + isf_imf_context_focus_in (ctx); + ecore_imf_context_input_panel_show (ctx); + } else { + isf_imf_context_focus_in (ctx); + } } return true; @@ -2820,7 +2840,7 @@ initialize (void) bool socket = true; String config_module_name = "simple"; - SCIM_DEBUG_FRONTEND(1) << "Initializing Ecore ISF IMModule...\n"; + LOGD ("Initializing Ecore ISF IMModule...\n"); // Get system language. _language = scim_get_locale_language (scim_get_current_locale ()); @@ -2935,7 +2955,8 @@ initialize (void) _panel_client.signal_connect_candidate_more_window_show (slot (panel_slot_candidate_more_window_show)); _panel_client.signal_connect_candidate_more_window_hide (slot (panel_slot_candidate_more_window_hide)); _panel_client.signal_connect_longpress_candidate (slot (panel_slot_longpress_candidate)); - _panel_client.signal_connect_update_client_id (slot (panel_slot_update_client_id)); + _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)); if (!panel_initialize ()) { std::cerr << "Ecore IM Module: Cannot connect to Panel!\n"; @@ -2945,7 +2966,7 @@ initialize (void) static void finalize (void) { - SCIM_DEBUG_FRONTEND(1) << "Finalizing Ecore ISF IMModule...\n"; + LOGD ("Finalizing Ecore ISF IMModule...\n"); // Reset this first so that the shared instance could be released correctly afterwards. _default_instance.reset (); @@ -3659,10 +3680,10 @@ slot_commit_string (IMEngineInstanceBase *si, } converted[0] = utf8_wcstombs (str).at (0); if (uppercase) { - if(converted[0] >= 'a' && converted[0] <= 'z') + if (converted[0] >= 'a' && converted[0] <= 'z') converted[0] -= 32; } else { - if(converted[0] >= 'A' && converted[0] <= 'Z') + if (converted[0] >= 'A' && converted[0] <= 'Z') converted[0] += 32; } diff --git a/ism/extras/efl_immodule/isf_imf_control.cpp b/ism/extras/efl_immodule/isf_imf_control.cpp index f8416a95..b2f0d1c2 100644 --- a/ism/extras/efl_immodule/isf_imf_control.cpp +++ b/ism/extras/efl_immodule/isf_imf_control.cpp @@ -24,6 +24,7 @@ #define Uses_SCIM_TRANSACTION #define Uses_ISF_IMCONTROL_CLIENT +#define Uses_SCIM_PANEL_CLIENT #include #include @@ -40,319 +41,175 @@ using namespace scim; #define IMFCONTROLERR(str...) printf(str) -static Ecore_Fd_Handler *_read_handler = 0; -static IMControlClient _imcontrol_client; +extern PanelClient _panel_client; -extern void ecore_ise_process_data (Transaction &trans, int cmd); - - -static int isf_socket_wait_for_data_internal (int socket_id, int timeout) -{ - fd_set fds; - struct timeval tv; - struct timeval begin_tv; - int ret; - - int m_id = socket_id; - - if (timeout >= 0) { - gettimeofday (&begin_tv, 0); - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - } - - while (1) { - FD_ZERO (&fds); - FD_SET (m_id, &fds); - - ret = select (m_id + 1, &fds, NULL, NULL, (timeout >= 0) ? &tv : NULL); - if (timeout > 0) { - int elapsed; - struct timeval cur_tv; - gettimeofday (&cur_tv, 0); - elapsed = (cur_tv.tv_sec - begin_tv.tv_sec) * 1000 + - (cur_tv.tv_usec - begin_tv.tv_usec) / 1000; - timeout = timeout - elapsed; - if (timeout > 0) { - tv.tv_sec = timeout / 1000; - tv.tv_usec = (timeout % 1000) * 1000; - } else { - tv.tv_sec = 0; - tv.tv_usec = 0; - timeout = 0; - } - } - if (ret > 0) { - return ret; - } else if (ret == 0) { - if (timeout == 0) - return ret; - else - continue; - } - - if (errno == EINTR) - continue; - - return ret; - } -} - -static Eina_Bool ecore_ise_input_handler (void *data, Ecore_Fd_Handler *fd_handler) -{ - int cmd; - int timeout = 0; - Transaction trans; - - if (fd_handler == NULL) - return ECORE_CALLBACK_RENEW; - - int fd = ecore_main_fd_handler_fd_get (fd_handler); - if (_imcontrol_client.is_connected () && - isf_socket_wait_for_data_internal (fd, timeout) > 0) { - trans.clear (); - if (!trans.read_from_socket (fd, timeout)) { - IMFCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - _isf_imf_control_finalize (); - return ECORE_CALLBACK_CANCEL; - } - - if (trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REQUEST) { - while (trans.get_command (cmd)) { - ecore_ise_process_data (trans, cmd); - } - } - return ECORE_CALLBACK_RENEW; - } - IMFCONTROLERR ("ecore_ise_input_handler is failed!!!\n"); - _isf_imf_control_finalize (); - return ECORE_CALLBACK_CANCEL; -} - -static void connect_panel (void) -{ - if (!_imcontrol_client.is_connected ()) { - _imcontrol_client.open_connection (); - int fd = _imcontrol_client.get_panel2imclient_connection_number (); - if (fd > 0) { - _read_handler = ecore_main_fd_handler_add (fd, ECORE_FD_READ, ecore_ise_input_handler, NULL, NULL, NULL); - } - } -} - -void _isf_imf_control_finalize (void) -{ - IMFCONTROLDBG ("%s ...\n", __FUNCTION__); - - _imcontrol_client.close_connection (); - - if (_read_handler) { - ecore_main_fd_handler_del (_read_handler); - _read_handler = 0; - } -} - int _isf_imf_context_input_panel_show (int client_id, int context, void *data, int length, bool &input_panel_show) { int temp = 0; - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.show_ise (client_id, context, data, length, &temp); + _panel_client.prepare (context); + _panel_client.show_ise (client_id, context, data, length, &temp); input_panel_show = (bool)temp; return 0; } int _isf_imf_context_input_panel_hide (int client_id, int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.hide_ise (client_id, context); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.hide_ise (client_id, context); + _panel_client.send (); return 0; } -int _isf_imf_context_control_panel_show (void) +int _isf_imf_context_control_panel_show (int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.show_control_panel (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.show_control_panel (); + _panel_client.send (); return 0; } -int _isf_imf_context_control_panel_hide (void) +int _isf_imf_context_control_panel_hide (int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.hide_control_panel (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.hide_control_panel (); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_language_set (Ecore_IMF_Input_Panel_Lang lang) +int _isf_imf_context_input_panel_language_set (int context, Ecore_IMF_Input_Panel_Lang lang) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.set_ise_language (lang); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.set_ise_language (lang); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_language_locale_get (char **locale) +int _isf_imf_context_input_panel_language_locale_get (int context, char **locale) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_ise_language_locale (locale); + _panel_client.prepare (context); + _panel_client.get_ise_language_locale (locale); return 0; } -int _isf_imf_context_input_panel_imdata_set (const void *data, int len) +int _isf_imf_context_input_panel_imdata_set (int context, const void *data, int len) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.set_imdata ((const char *)data, len); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.set_imdata ((const char *)data, len); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_imdata_get (void *data, int *len) +int _isf_imf_context_input_panel_imdata_get (int context, void *data, int *len) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_imdata ((char *)data, len); + _panel_client.prepare (context); + _panel_client.get_imdata ((char *)data, len); return 0; } -int _isf_imf_context_input_panel_geometry_get (int *x, int *y, int *w, int *h) +int _isf_imf_context_input_panel_geometry_get (int context, int *x, int *y, int *w, int *h) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_ise_window_geometry (x, y, w, h); + _panel_client.prepare (context); + _panel_client.get_ise_window_geometry (x, y, w, h); return 0; } -int _isf_imf_context_input_panel_return_key_type_set (Ecore_IMF_Input_Panel_Return_Key_Type type) +int _isf_imf_context_input_panel_return_key_type_set (int context, Ecore_IMF_Input_Panel_Return_Key_Type type) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.set_return_key_type ((int)type); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.set_return_key_type ((int)type); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_return_key_type_get (Ecore_IMF_Input_Panel_Return_Key_Type &type) +int _isf_imf_context_input_panel_return_key_type_get (int context, Ecore_IMF_Input_Panel_Return_Key_Type &type) { int temp = 0; - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_return_key_type (temp); + _panel_client.prepare (context); + _panel_client.get_return_key_type (temp); type = (Ecore_IMF_Input_Panel_Return_Key_Type)temp; return 0; } -int _isf_imf_context_input_panel_return_key_disabled_set (Eina_Bool disabled) +int _isf_imf_context_input_panel_return_key_disabled_set (int context, Eina_Bool disabled) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.set_return_key_disable ((int)disabled); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.set_return_key_disable ((int)disabled); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_return_key_disabled_get (Eina_Bool &disabled) +int _isf_imf_context_input_panel_return_key_disabled_get (int context, Eina_Bool &disabled) { int temp = 0; - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_return_key_disable (temp); + _panel_client.prepare (context); + _panel_client.get_return_key_disable (temp); disabled = (Eina_Bool)temp; return 0; } -int _isf_imf_context_input_panel_layout_set (Ecore_IMF_Input_Panel_Layout layout) +int _isf_imf_context_input_panel_layout_set (int context, Ecore_IMF_Input_Panel_Layout layout) { - int layout_temp = layout; - - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.set_layout (layout_temp); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.set_layout (layout); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_layout_get (Ecore_IMF_Input_Panel_Layout *layout) +int _isf_imf_context_input_panel_layout_get (int context, Ecore_IMF_Input_Panel_Layout *layout) { int layout_temp; - - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_layout (&layout_temp); + _panel_client.prepare (context); + _panel_client.get_layout (&layout_temp); *layout = (Ecore_IMF_Input_Panel_Layout)layout_temp; return 0; } -int _isf_imf_context_input_panel_caps_mode_set (unsigned int mode) -{ - connect_panel (); - - _imcontrol_client.prepare (); - _imcontrol_client.set_caps_mode (mode); - _imcontrol_client.send (); - return 0; -} - -int _isf_imf_context_candidate_window_geometry_get (int *x, int *y, int *w, int *h) +int _isf_imf_context_input_panel_caps_mode_set (int context, unsigned int mode) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.get_candidate_window_geometry (x, y, w, h); + _panel_client.prepare (context); + _panel_client.set_caps_mode (mode); + _panel_client.send (); return 0; } -int _isf_imf_context_control_focus_in (void) +int _isf_imf_context_candidate_window_geometry_get (int context, int *x, int *y, int *w, int *h) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.focus_in (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.get_candidate_window_geometry (x, y, w, h); return 0; } -int _isf_imf_context_control_focus_out (void) +int _isf_imf_context_input_panel_send_will_show_ack (int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.focus_out (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.send_will_show_ack (); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_send_will_show_ack (void) +int _isf_imf_context_input_panel_send_will_hide_ack (int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.send_will_show_ack (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.send_will_hide_ack (); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_send_will_hide_ack (void) +int _isf_imf_context_set_hardware_keyboard_mode (int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.send_will_hide_ack (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.set_hardware_keyboard_mode (); + _panel_client.send (); return 0; } -int _isf_imf_context_input_panel_send_candidate_will_hide_ack (void) +int _isf_imf_context_input_panel_send_candidate_will_hide_ack (int context) { - connect_panel (); - _imcontrol_client.prepare (); - _imcontrol_client.send_candidate_will_hide_ack (); - _imcontrol_client.send (); + _panel_client.prepare (context); + _panel_client.send_candidate_will_hide_ack (); + _panel_client.send (); return 0; } diff --git a/ism/extras/efl_immodule/isf_imf_control.h b/ism/extras/efl_immodule/isf_imf_control.h index 256bef5b..73913051 100644 --- a/ism/extras/efl_immodule/isf_imf_control.h +++ b/ism/extras/efl_immodule/isf_imf_control.h @@ -32,37 +32,33 @@ extern "C" { #endif /* __cplusplus */ - /* non UI related works */ - void _isf_imf_control_finalize (void); - int _isf_imf_context_input_panel_show (int client_id, int context, void *data, int length, bool &input_panel_show); int _isf_imf_context_input_panel_hide (int client_id, int context); - int _isf_imf_context_control_panel_show (void); - int _isf_imf_context_control_panel_hide (void); + int _isf_imf_context_control_panel_show (int context); + int _isf_imf_context_control_panel_hide (int context); - int _isf_imf_context_input_panel_language_set (Ecore_IMF_Input_Panel_Lang lang); - int _isf_imf_context_input_panel_language_locale_get (char **locale); + int _isf_imf_context_input_panel_language_set (int context, Ecore_IMF_Input_Panel_Lang lang); + int _isf_imf_context_input_panel_language_locale_get (int context, char **locale); - int _isf_imf_context_input_panel_imdata_set (const void *data, int len); - int _isf_imf_context_input_panel_imdata_get (void *data, int *len); - int _isf_imf_context_input_panel_geometry_get (int *x, int *y, int *w, int *h); - int _isf_imf_context_input_panel_layout_set (Ecore_IMF_Input_Panel_Layout layout); - int _isf_imf_context_input_panel_layout_get (Ecore_IMF_Input_Panel_Layout *layout); - int _isf_imf_context_input_panel_return_key_type_set (Ecore_IMF_Input_Panel_Return_Key_Type type); - int _isf_imf_context_input_panel_return_key_type_get (Ecore_IMF_Input_Panel_Return_Key_Type &type); - int _isf_imf_context_input_panel_return_key_disabled_set (Eina_Bool disabled); - int _isf_imf_context_input_panel_return_key_disabled_get (Eina_Bool &disabled); - int _isf_imf_context_input_panel_caps_mode_set (unsigned int mode); + int _isf_imf_context_input_panel_imdata_set (int context, const void *data, int len); + int _isf_imf_context_input_panel_imdata_get (int context, void *data, int *len); + int _isf_imf_context_input_panel_geometry_get (int context, int *x, int *y, int *w, int *h); + int _isf_imf_context_input_panel_layout_set (int context, Ecore_IMF_Input_Panel_Layout layout); + int _isf_imf_context_input_panel_layout_get (int context, Ecore_IMF_Input_Panel_Layout *layout); + int _isf_imf_context_input_panel_return_key_type_set (int context, Ecore_IMF_Input_Panel_Return_Key_Type type); + int _isf_imf_context_input_panel_return_key_type_get (int context, Ecore_IMF_Input_Panel_Return_Key_Type &type); + int _isf_imf_context_input_panel_return_key_disabled_set (int context, Eina_Bool disabled); + int _isf_imf_context_input_panel_return_key_disabled_get (int context, Eina_Bool &disabled); + int _isf_imf_context_input_panel_caps_mode_set (int context, unsigned int mode); - int _isf_imf_context_candidate_window_geometry_get (int *x, int *y, int *w, int *h); + int _isf_imf_context_candidate_window_geometry_get (int context, int *x, int *y, int *w, int *h); - int _isf_imf_context_control_focus_in (void); - int _isf_imf_context_control_focus_out (void); + int _isf_imf_context_input_panel_send_will_show_ack (int context); + int _isf_imf_context_input_panel_send_will_hide_ack (int context); - int _isf_imf_context_input_panel_send_will_show_ack (void); - int _isf_imf_context_input_panel_send_will_hide_ack (void); + int _isf_imf_context_set_hardware_keyboard_mode (int context); - int _isf_imf_context_input_panel_send_candidate_will_hide_ack (void); + int _isf_imf_context_input_panel_send_candidate_will_hide_ack (int context); #ifdef __cplusplus } diff --git a/ism/extras/efl_immodule/isf_imf_control_ui.cpp b/ism/extras/efl_immodule/isf_imf_control_ui.cpp index f9ab2404..56e9a796 100644 --- a/ism/extras/efl_immodule/isf_imf_control_ui.cpp +++ b/ism/extras/efl_immodule/isf_imf_control_ui.cpp @@ -49,7 +49,7 @@ static Ecore_X_Window _rootwin; static unsigned int hw_kbd_num = 0; static Ecore_Timer *hide_timer = NULL; static Ecore_Timer *will_show_timer = NULL; -static Ecore_IMF_Input_Panel_State input_panel_state = ECORE_IMF_INPUT_PANEL_STATE_HIDE; +Ecore_IMF_Input_Panel_State input_panel_state = ECORE_IMF_INPUT_PANEL_STATE_HIDE; static Ecore_IMF_Input_Panel_State notified_state = ECORE_IMF_INPUT_PANEL_STATE_HIDE; static int hide_context_id = -1; static Evas *active_context_canvas = NULL; @@ -62,17 +62,35 @@ static Eina_Bool will_hide = EINA_FALSE; static void _send_input_panel_hide_request (); +static Ecore_IMF_Context *_get_using_ic (Ecore_IMF_Input_Panel_Event type, int value) { + Ecore_IMF_Context *using_ic = NULL; + if (show_req_ic) + using_ic = show_req_ic; + else if (get_focused_ic ()) + using_ic = get_focused_ic ()->ctx; + + if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT && + value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + if (hide_req_ic) { + using_ic = hide_req_ic; + } + } + return using_ic; +} + static void _render_post_cb (void *data, Evas *e, void *event_info) { + LOGD ("[_render_post_cb]\n"); evas_event_callback_del_full (e, EVAS_CALLBACK_RENDER_POST, _render_post_cb, NULL); conformant_reset_done = EINA_TRUE; - isf_imf_context_input_panel_send_will_hide_ack (); + isf_imf_context_input_panel_send_will_hide_ack (_get_using_ic (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_SHOW)); } static void _candidate_render_post_cb (void *data, Evas *e, void *event_info) { + LOGD ("[%s]\n", __func__); evas_event_callback_del_full (e, EVAS_CALLBACK_RENDER_POST, _candidate_render_post_cb, NULL); - isf_imf_context_input_panel_send_candidate_will_hide_ack (); + isf_imf_context_input_panel_send_candidate_will_hide_ack (_get_using_ic (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_SHOW)); } static void _clear_will_show_timer () @@ -122,11 +140,9 @@ static Eina_Bool _prop_change (void *data, int ev_type, void *ev) conformant_reset_done = EINA_FALSE; LOGD ("[ECORE_X_VIRTUAL_KEYBOARD_STATE_ON] geometry x : %d, y : %d, w : %d, h : %d\n", sx, sy, sw, sh); } - } - else { + } else { if (event->win != _rootwin) return ECORE_CALLBACK_PASS_ON; if (event->atom != prop_x_ext_keyboard_exist) return ECORE_CALLBACK_PASS_ON; - if (!ecore_x_window_prop_card32_get (event->win, prop_x_ext_keyboard_exist, &val, 1) > 0) return ECORE_CALLBACK_PASS_ON; @@ -182,19 +198,7 @@ static void _save_current_xid (Ecore_IMF_Context *ctx) static void _event_callback_call (Ecore_IMF_Input_Panel_Event type, int value) { - Ecore_IMF_Context *using_ic = NULL; - - if (show_req_ic) - using_ic = show_req_ic; - else if (get_focused_ic ()) - using_ic = get_focused_ic ()->ctx; - - if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT && - value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { - if (hide_req_ic) { - using_ic = hide_req_ic; - } - } + Ecore_IMF_Context *using_ic = _get_using_ic (type, value); switch (type) { case ECORE_IMF_INPUT_PANEL_STATE_EVENT: @@ -240,7 +244,7 @@ static void _event_callback_call (Ecore_IMF_Input_Panel_Event type, int value) if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT && value == ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW) { - isf_imf_context_input_panel_send_will_show_ack (); + isf_imf_context_input_panel_send_will_show_ack (using_ic); } if (type == ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT && @@ -249,7 +253,7 @@ static void _event_callback_call (Ecore_IMF_Input_Panel_Event type, int value) if (active_context_canvas && _conformant_get ()) evas_event_callback_add (active_context_canvas, EVAS_CALLBACK_RENDER_POST, _candidate_render_post_cb, NULL); else - isf_imf_context_input_panel_send_candidate_will_hide_ack (); + isf_imf_context_input_panel_send_candidate_will_hide_ack (using_ic); } } @@ -390,7 +394,7 @@ void isf_imf_context_control_panel_show (Ecore_IMF_Context *ctx) if (IfInitContext == false) { _isf_imf_context_init (); } - _isf_imf_context_control_panel_show (); + _isf_imf_context_control_panel_show (_get_context_id (ctx)); } void isf_imf_context_control_panel_hide (Ecore_IMF_Context *ctx) @@ -398,7 +402,7 @@ void isf_imf_context_control_panel_hide (Ecore_IMF_Context *ctx) if (IfInitContext == false) { _isf_imf_context_init (); } - _isf_imf_context_control_panel_hide (); + _isf_imf_context_control_panel_hide (_get_context_id (ctx)); } void isf_imf_input_panel_init (void) @@ -438,8 +442,6 @@ void isf_imf_input_panel_shutdown (void) _clear_will_show_timer (); _clear_hide_timer (); - - _isf_imf_control_finalize (); } void isf_imf_context_input_panel_show (Ecore_IMF_Context* ctx) @@ -603,7 +605,7 @@ void isf_imf_context_input_panel_language_set (Ecore_IMF_Context *ctx, Ecore_IMF if (context_scim == get_focused_ic ()) { LOGD ("language mode : %d\n", language); - _isf_imf_context_input_panel_language_set (language); + _isf_imf_context_input_panel_language_set (_get_context_id (ctx), language); } } @@ -620,7 +622,7 @@ void isf_imf_context_input_panel_language_locale_get (Ecore_IMF_Context *ctx, ch _isf_imf_context_init (); if (locale) - _isf_imf_context_input_panel_language_locale_get (locale); + _isf_imf_context_input_panel_language_locale_get (_get_context_id (ctx), locale); } void isf_imf_context_input_panel_caps_mode_set (Ecore_IMF_Context *ctx, unsigned int mode) @@ -628,7 +630,7 @@ void isf_imf_context_input_panel_caps_mode_set (Ecore_IMF_Context *ctx, unsigned if (!IfInitContext) _isf_imf_context_init (); LOGD ("ctx : %p, mode : %d\n", ctx, mode); - _isf_imf_context_input_panel_caps_mode_set (mode); + _isf_imf_context_input_panel_caps_mode_set (_get_context_id (ctx), mode); } void isf_imf_context_input_panel_caps_lock_mode_set (Ecore_IMF_Context *ctx, Eina_Bool mode) @@ -654,7 +656,7 @@ void isf_imf_context_input_panel_imdata_set (Ecore_IMF_Context *ctx, const void* EcoreIMFContextISF *context_scim = (EcoreIMFContextISF *)ecore_imf_context_data_get (ctx); if (context_scim == get_focused_ic ()) - _isf_imf_context_input_panel_imdata_set (data, length); + _isf_imf_context_input_panel_imdata_set (_get_context_id (ctx), data, length); } /** @@ -668,7 +670,7 @@ void isf_imf_context_input_panel_imdata_get (Ecore_IMF_Context *ctx, void* data, { if (!IfInitContext) _isf_imf_context_init (); - _isf_imf_context_input_panel_imdata_get (data, length); + _isf_imf_context_input_panel_imdata_get (_get_context_id (ctx), data, length); } /** @@ -685,7 +687,7 @@ void isf_imf_context_input_panel_geometry_get (Ecore_IMF_Context *ctx, int *x, i { if (!IfInitContext) _isf_imf_context_init (); - _isf_imf_context_input_panel_geometry_get (x, y, w, h); + _isf_imf_context_input_panel_geometry_get (_get_context_id (ctx), x, y, w, h); LOGD ("ctx : %p, x : %d, y : %d, w : %d, h : %d\n", ctx, *x, *y, *w, *h); } @@ -705,7 +707,7 @@ void isf_imf_context_input_panel_return_key_type_set (Ecore_IMF_Context *ctx, Ec if (context_scim == get_focused_ic ()) { LOGD ("Return key type : %d\n", type); - _isf_imf_context_input_panel_return_key_type_set (type); + _isf_imf_context_input_panel_return_key_type_set (_get_context_id (ctx), type); } } @@ -725,7 +727,7 @@ Ecore_IMF_Input_Panel_Return_Key_Type isf_imf_context_input_panel_return_key_typ Ecore_IMF_Input_Panel_Return_Key_Type type = ECORE_IMF_INPUT_PANEL_RETURN_KEY_TYPE_DEFAULT; if (context_scim == get_focused_ic ()) - _isf_imf_context_input_panel_return_key_type_get (type); + _isf_imf_context_input_panel_return_key_type_get (_get_context_id (ctx), type); return type; } @@ -745,7 +747,7 @@ void isf_imf_context_input_panel_return_key_disabled_set (Ecore_IMF_Context *ctx if (context_scim == get_focused_ic ()) { LOGD ("Return key disabled : %d\n", disabled); - _isf_imf_context_input_panel_return_key_disabled_set (disabled); + _isf_imf_context_input_panel_return_key_disabled_set (_get_context_id (ctx), disabled); } } @@ -765,7 +767,7 @@ Eina_Bool isf_imf_context_input_panel_return_key_disabled_get (Ecore_IMF_Context Eina_Bool disabled = EINA_FALSE; if (context_scim == get_focused_ic ()) - _isf_imf_context_input_panel_return_key_disabled_get (disabled); + _isf_imf_context_input_panel_return_key_disabled_get (_get_context_id (ctx), disabled); return disabled; } @@ -786,7 +788,7 @@ isf_imf_context_input_panel_layout_set (Ecore_IMF_Context *ctx, Ecore_IMF_Input_ if (context_scim == get_focused_ic ()) { LOGD ("layout type : %d\n", layout); - _isf_imf_context_input_panel_layout_set (layout); + _isf_imf_context_input_panel_layout_set (_get_context_id (ctx), layout); imengine_layout_set (ctx, layout); } } @@ -803,7 +805,7 @@ Ecore_IMF_Input_Panel_Layout isf_imf_context_input_panel_layout_get (Ecore_IMF_C Ecore_IMF_Input_Panel_Layout layout; if (!IfInitContext) _isf_imf_context_init (); - _isf_imf_context_input_panel_layout_get (&layout); + _isf_imf_context_input_panel_layout_get (_get_context_id (ctx), &layout); return layout; } @@ -847,49 +849,21 @@ void isf_imf_context_candidate_window_geometry_get (Ecore_IMF_Context *ctx, int { if (!IfInitContext) _isf_imf_context_init (); - _isf_imf_context_candidate_window_geometry_get (x, y, w, h); + _isf_imf_context_candidate_window_geometry_get (_get_context_id (ctx), x, y, w, h); LOGD ("ctx : %p, x : %d, y : %d, w : %d, h : %d\n", ctx, *x, *y, *w, *h); } -/** - * This method should be called when focus in - * - * @param[in] ctx a #Ecore_IMF_Context - */ -void isf_imf_context_control_focus_in (Ecore_IMF_Context *ctx) +void isf_imf_context_input_panel_send_will_show_ack (Ecore_IMF_Context *ctx) { if (IfInitContext == false) { _isf_imf_context_init (); } - /* Set the current XID of the active window into the root window property */ - _save_current_xid (ctx); - _isf_imf_context_control_focus_in (); -} -/** - * This method should be called when focus out - * - * @param[in] ctx a #Ecore_IMF_Context - */ -void isf_imf_context_control_focus_out (Ecore_IMF_Context *ctx) -{ - if (IfInitContext == false) { - _isf_imf_context_init (); - } - _isf_imf_context_control_focus_out (); -} - -void isf_imf_context_input_panel_send_will_show_ack () -{ - if (IfInitContext == false) { - _isf_imf_context_init (); - } - - _isf_imf_context_input_panel_send_will_show_ack (); + _isf_imf_context_input_panel_send_will_show_ack (_get_context_id (ctx)); } -void isf_imf_context_input_panel_send_will_hide_ack () +void isf_imf_context_input_panel_send_will_hide_ack (Ecore_IMF_Context *ctx) { if (IfInitContext == false) { _isf_imf_context_init (); @@ -898,28 +872,36 @@ void isf_imf_context_input_panel_send_will_hide_ack () if (_conformant_get ()) { if (conformant_reset_done && received_will_hide_event) { LOGD ("Send will hide ack\n"); - _isf_imf_context_input_panel_send_will_hide_ack (); + _isf_imf_context_input_panel_send_will_hide_ack (_get_context_id (ctx)); conformant_reset_done = EINA_FALSE; received_will_hide_event = EINA_FALSE; } - } - else { - _isf_imf_context_input_panel_send_will_hide_ack (); + } else { + _isf_imf_context_input_panel_send_will_hide_ack (_get_context_id (ctx)); } } -void isf_imf_context_input_panel_send_candidate_will_hide_ack () +void isf_imf_context_set_hardware_keyboard_mode (Ecore_IMF_Context *ctx) { if (IfInitContext == false) { _isf_imf_context_init (); } - LOGD ("Send candidate will hide ack\n"); - _isf_imf_context_input_panel_send_candidate_will_hide_ack (); + hw_kbd_num = 1; + SECURE_LOGD ("The number of connected H/W keyboard : %d\n", hw_kbd_num); + _isf_imf_context_set_hardware_keyboard_mode (_get_context_id (ctx)); +} + +void isf_imf_context_input_panel_send_candidate_will_hide_ack (Ecore_IMF_Context *ctx) +{ + if (IfInitContext == false) { + _isf_imf_context_init (); + } + _isf_imf_context_input_panel_send_candidate_will_hide_ack (_get_context_id (ctx)); } /** - * process command message, ISM_TRANS_CMD_ISE_PANEL_SHOWED of ecore_ise_process_event () + * process input panel show message */ static bool _process_ise_panel_showed (void) { @@ -936,7 +918,7 @@ static bool _process_ise_panel_showed (void) } /** - * process command message, ISM_TRANS_CMD_ISE_PANEL_HIDED of ecore_ise_process_event () + * process input panel hide message */ static bool _process_ise_panel_hided (void) { @@ -950,22 +932,16 @@ static bool _process_ise_panel_hided (void) _event_callback_call (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_HIDE); received_will_hide_event = EINA_TRUE; - isf_imf_context_input_panel_send_will_hide_ack (); + isf_imf_context_input_panel_send_will_hide_ack (_get_using_ic (ECORE_IMF_INPUT_PANEL_STATE_EVENT, ECORE_IMF_INPUT_PANEL_STATE_HIDE)); return true; } /** - * process command message, ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT of gtk_ise_process_event () + * process input panel related message */ -static bool _process_update_input_context (Transaction &trans) +bool process_update_input_context (int type, int value) { - uint32 type; - uint32 value; - - if (!(trans.get_data (type) && trans.get_data (value))) - return false; - if (type == (uint32)ECORE_IMF_INPUT_PANEL_STATE_EVENT) { switch (value) { case ECORE_IMF_INPUT_PANEL_STATE_HIDE: @@ -988,41 +964,6 @@ static bool _process_update_input_context (Transaction &trans) _event_callback_call ((Ecore_IMF_Input_Panel_Event)type, (int)value); - if (type == ECORE_IMF_INPUT_PANEL_STATE_EVENT && - value == ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW) { - isf_imf_context_input_panel_send_will_show_ack (); - } - return true; } -/** - * process ISE data of command message with ISF - * - * @param[in] trans packet data to be processed - * @param[in] cmd command ID that defines with ISF - */ -void ecore_ise_process_data (Transaction &trans, int cmd) -{ - switch (cmd) { - case ISM_TRANS_CMD_ISE_PANEL_SHOWED : { - _process_ise_panel_showed (); - break; - } - case ISM_TRANS_CMD_ISE_PANEL_HIDED : { - _process_ise_panel_hided (); - break; - } - case ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT : { - _process_update_input_context (trans); - break; - } - case ISM_TRANS_CMD_UPDATE_ISF_CANDIDATE_PANEL : { - _process_update_input_context (trans); - break; - } - default : - break; - } -} - diff --git a/ism/extras/efl_immodule/isf_imf_control_ui.h b/ism/extras/efl_immodule/isf_imf_control_ui.h index 782d090e..b9da9bb4 100644 --- a/ism/extras/efl_immodule/isf_imf_control_ui.h +++ b/ism/extras/efl_immodule/isf_imf_control_ui.h @@ -32,9 +32,9 @@ extern "C" { #endif /* __cplusplus */ void input_panel_event_callback_call (Ecore_IMF_Input_Panel_Event type, int value); - int hw_keyboard_num_get (); + int hw_keyboard_num_get (); + bool process_update_input_context (int type, int value); - /* non UI related works */ void isf_imf_input_panel_init (); void isf_imf_input_panel_shutdown (); void isf_imf_context_input_panel_show (Ecore_IMF_Context *ctx); @@ -61,11 +61,11 @@ extern "C" void isf_imf_context_input_panel_caps_lock_mode_set (Ecore_IMF_Context *ctx, Eina_Bool mode); void isf_imf_context_candidate_window_geometry_get (Ecore_IMF_Context *ctx, int *x, int *y, int *w, int *h); - void isf_imf_context_control_focus_in (Ecore_IMF_Context *ctx); - void isf_imf_context_control_focus_out (Ecore_IMF_Context *ctx); - void isf_imf_context_input_panel_send_will_show_ack (); - void isf_imf_context_input_panel_send_will_hide_ack (); - void isf_imf_context_input_panel_send_candidate_will_hide_ack (); + void isf_imf_context_input_panel_send_will_show_ack (Ecore_IMF_Context *ctx); + void isf_imf_context_input_panel_send_will_hide_ack (Ecore_IMF_Context *ctx); + void isf_imf_context_set_hardware_keyboard_mode (Ecore_IMF_Context *ctx); + + void isf_imf_context_input_panel_send_candidate_will_hide_ack (Ecore_IMF_Context *ctx); #ifdef __cplusplus } diff --git a/ism/src/isf_imcontrol_client.cpp b/ism/src/isf_imcontrol_client.cpp index 2011a22c..fd76ef17 100644 --- a/ism/src/isf_imcontrol_client.cpp +++ b/ism/src/isf_imcontrol_client.cpp @@ -133,240 +133,18 @@ public: return false; } - - void show_ise (int client_id, int context, void *data, int length, int *input_panel_show) { - int cmd; - uint32 temp; - m_trans.put_command (ISM_TRANS_CMD_SHOW_ISE_PANEL); - m_trans.put_data ((uint32)client_id); - m_trans.put_data ((uint32)context); - m_trans.put_data ((const char *)data, (size_t)length); - m_trans.write_to_socket (m_socket_imclient2panel); - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (temp)) { - if (input_panel_show) - *input_panel_show = temp; - } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); - if (input_panel_show) - *input_panel_show = false; - } - } - - void hide_ise (int client_id, int context) { - m_trans.put_command (ISM_TRANS_CMD_HIDE_ISE_PANEL); - m_trans.put_data ((uint32)client_id); - m_trans.put_data ((uint32)context); - } - - void show_control_panel (void) { - m_trans.put_command (ISM_TRANS_CMD_SHOW_ISF_CONTROL); - } - - void hide_control_panel (void) { - m_trans.put_command (ISM_TRANS_CMD_HIDE_ISF_CONTROL); - } - - void set_mode (int mode) { - m_trans.put_command (ISM_TRANS_CMD_SET_ISE_MODE); - m_trans.put_data (mode); - } - - void set_imdata (const char* data, int len) { - m_trans.put_command (ISM_TRANS_CMD_SET_ISE_IMDATA); - m_trans.put_data (data, len); - } - - void get_imdata (char* data, int* len) { - int cmd; - size_t datalen = 0; - char* data_temp = NULL; - - m_trans.put_command (ISM_TRANS_CMD_GET_ISE_IMDATA); - m_trans.write_to_socket (m_socket_imclient2panel); - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (&data_temp, datalen)) { - memcpy (data, data_temp, datalen); - *len = datalen; - } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); - } - delete [] data_temp; - } - - void get_ise_window_geometry (int* x, int* y, int* width, int* height) { - int cmd; - uint32 x_temp = 0; - uint32 y_temp = 0; - uint32 w_temp = 0; - uint32 h_temp = 0; - - m_trans.put_command (ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY); - m_trans.write_to_socket (m_socket_imclient2panel); - - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (x_temp) && - m_trans.get_data (y_temp) && - m_trans.get_data (w_temp) && - m_trans.get_data (h_temp)) { - *x = x_temp; - *y = y_temp; - *width = w_temp; - *height = h_temp; - } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); - } - } - - void get_candidate_window_geometry (int* x, int* y, int* width, int* height) { - int cmd; - uint32 x_temp = 0; - uint32 y_temp = 0; - uint32 w_temp = 0; - uint32 h_temp = 0; - - m_trans.put_command (ISM_TRANS_CMD_GET_CANDIDATE_GEOMETRY); - m_trans.write_to_socket (m_socket_imclient2panel); - - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s::read_from_socket () may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (x_temp) && - m_trans.get_data (y_temp) && - m_trans.get_data (w_temp) && - m_trans.get_data (h_temp)) { - *x = x_temp; - *y = y_temp; - *width = w_temp; - *height = h_temp; - } else { - IMCONTROLERR ("%s::get_command () or get_data () is failed!!!\n", __FUNCTION__); - } - } - - void get_ise_language_locale (char **locale) { - int cmd; - size_t datalen = 0; - char *data = NULL; - - m_trans.put_command (ISM_TRANS_CMD_GET_ISE_LANGUAGE_LOCALE); - m_trans.write_to_socket (m_socket_imclient2panel); - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s::read_from_socket () may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (&data, datalen)) { - if (locale) - *locale = strndup (data, datalen); - } else { - IMCONTROLERR ("%s::get_command () or get_data () is failed!!!\n", __FUNCTION__); - if (locale) - *locale = strdup (""); - } - if (data) - delete [] data; - } - - void set_return_key_type (int type) { - m_trans.put_command (ISM_TRANS_CMD_SET_RETURN_KEY_TYPE); - m_trans.put_data (type); - } - - void get_return_key_type (int &type) { - int cmd; - uint32 temp; - - m_trans.put_command (ISM_TRANS_CMD_GET_RETURN_KEY_TYPE); - m_trans.write_to_socket (m_socket_imclient2panel); - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (temp)) { - type = temp; - } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); - } - } - - void set_return_key_disable (int disabled) { - m_trans.put_command (ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE); - m_trans.put_data (disabled); - } - - void get_return_key_disable (int &disabled) { - int cmd; - uint32 temp; - - m_trans.put_command (ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE); - m_trans.write_to_socket (m_socket_imclient2panel); - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (temp)) { - disabled = temp; - } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); - } - } - - void set_layout (int layout) { - m_trans.put_command (ISM_TRANS_CMD_SET_LAYOUT); - m_trans.put_data (layout); - } - - void get_layout (int* layout) { - int cmd; - uint32 layout_temp; - - m_trans.put_command (ISM_TRANS_CMD_GET_LAYOUT); - m_trans.write_to_socket (m_socket_imclient2panel); - if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); - - if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && - m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && - m_trans.get_data (layout_temp)) { - *layout = layout_temp; - } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); - } - } - - void set_ise_language (int language) { - m_trans.put_command (ISM_TRANS_CMD_SET_ISE_LANGUAGE); - m_trans.put_data (language); - } - void set_active_ise_by_uuid (const char* uuid) { int cmd; m_trans.put_command (ISM_TRANS_CMD_SET_ACTIVE_ISE_BY_UUID); m_trans.put_data (uuid, strlen(uuid)+1); m_trans.write_to_socket (m_socket_imclient2panel); if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); + std::cerr << __func__ << " read_from_socket() may be timeout \n"; if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; } } @@ -377,14 +155,14 @@ public: m_trans.put_command (ISM_TRANS_CMD_GET_ACTIVE_ISE); m_trans.write_to_socket (m_socket_imclient2panel); if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); + std::cerr << __func__ << " read_from_socket() may be timeout \n"; if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && m_trans.get_data (strTemp)) { uuid = strTemp; } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; } } @@ -398,7 +176,7 @@ public: m_trans.put_command (ISM_TRANS_CMD_GET_ISE_LIST); m_trans.write_to_socket (m_socket_imclient2panel); if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); + std::cerr << __func__ << " read_from_socket() may be timeout \n"; if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && @@ -406,7 +184,7 @@ public: *count = count_temp; } else { *count = 0; - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; } if (count_temp > 0) { @@ -432,7 +210,7 @@ public: m_trans.put_data (String (uuid)); m_trans.write_to_socket (m_socket_imclient2panel); if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); + std::cerr << __func__ << " read_from_socket() may be timeout \n"; if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && @@ -443,7 +221,7 @@ public: type = tmp_type; option = tmp_option; } else { - IMCONTROLERR ("%s:: get_command() or get_data() may fail!!!\n", __FUNCTION__); + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; } } @@ -453,37 +231,16 @@ public: m_trans.put_command (ISM_TRANS_CMD_RESET_ISE_OPTION); m_trans.write_to_socket (m_socket_imclient2panel); if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) - IMCONTROLERR ("%s:: read_from_socket() may be timeout \n", __FUNCTION__); + std::cerr << __func__ << " read_from_socket() may be timeout \n"; if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) { ; } else { - IMCONTROLERR ("%s:: get_command() is failed!!!\n", __FUNCTION__); + std::cerr << __func__ << " get_command() is failed!!!\n"; } } - void set_caps_mode (int mode) { - m_trans.put_command (ISM_TRANS_CMD_SET_CAPS_MODE); - m_trans.put_data (mode); - } - - void focus_in (void) { - m_trans.put_command (SCIM_TRANS_CMD_FOCUS_IN); - } - - void focus_out (void) { - m_trans.put_command (SCIM_TRANS_CMD_FOCUS_OUT); - } - - void send_will_show_ack (void) { - m_trans.put_command (ISM_TRANS_CMD_SEND_WILL_SHOW_ACK); - } - - void send_will_hide_ack (void) { - m_trans.put_command (ISM_TRANS_CMD_SEND_WILL_HIDE_ACK); - } - void set_active_ise_to_default (void) { m_trans.put_command (ISM_TRANS_CMD_RESET_DEFAULT_ISE); } @@ -537,91 +294,6 @@ IMControlClient::send (void) return m_impl->send (); } -void IMControlClient::show_ise (int client_id, int context, void *data, int length, int *input_panel_show) -{ - m_impl->show_ise (client_id, context, data,length, input_panel_show); -} - -void IMControlClient::hide_ise (int client_id, int context) -{ - m_impl->hide_ise (client_id, context); -} - -void IMControlClient::show_control_panel (void) -{ - m_impl->show_control_panel (); -} - -void IMControlClient::hide_control_panel (void) -{ - m_impl->hide_control_panel (); -} - -void IMControlClient::set_mode (int mode) -{ - m_impl->set_mode (mode); -} - -void IMControlClient::set_imdata (const char* data, int len) -{ - m_impl->set_imdata (data, len); -} - -void IMControlClient::get_imdata (char* data, int* len) -{ - m_impl->get_imdata (data, len); -} - -void IMControlClient::get_ise_window_geometry (int* x, int* y, int* width, int* height) -{ - m_impl->get_ise_window_geometry (x, y, width, height); -} - -void IMControlClient::get_candidate_window_geometry (int* x, int* y, int* width, int* height) -{ - m_impl->get_candidate_window_geometry (x, y, width, height); -} - -void IMControlClient::get_ise_language_locale (char **locale) -{ - m_impl->get_ise_language_locale (locale); -} - -void IMControlClient::set_return_key_type (int type) -{ - m_impl->set_return_key_type (type); -} - -void IMControlClient::get_return_key_type (int &type) -{ - m_impl->get_return_key_type (type); -} - -void IMControlClient::set_return_key_disable (int disabled) -{ - m_impl->set_return_key_disable (disabled); -} - -void IMControlClient::get_return_key_disable (int &disabled) -{ - m_impl->get_return_key_disable (disabled); -} - -void IMControlClient::set_layout (int layout) -{ - m_impl->set_layout (layout); -} - -void IMControlClient::get_layout (int* layout) -{ - m_impl->get_layout (layout); -} - -void IMControlClient::set_ise_language (int language) -{ - m_impl->set_ise_language (language); -} - void IMControlClient::set_active_ise_by_uuid (const char* uuid) { m_impl->set_active_ise_by_uuid (uuid); @@ -647,31 +319,6 @@ void IMControlClient::reset_ise_option (void) m_impl->reset_ise_option (); } -void IMControlClient::set_caps_mode (int mode) -{ - m_impl->set_caps_mode (mode); -} - -void IMControlClient::focus_in (void) -{ - m_impl->focus_in (); -} - -void IMControlClient::focus_out (void) -{ - m_impl->focus_out (); -} - -void IMControlClient::send_will_show_ack (void) -{ - m_impl->send_will_show_ack (); -} - -void IMControlClient::send_will_hide_ack (void) -{ - m_impl->send_will_hide_ack (); -} - void IMControlClient::set_active_ise_to_default (void) { m_impl->set_active_ise_to_default (); @@ -681,7 +328,6 @@ void IMControlClient::send_candidate_will_hide_ack (void) { m_impl->send_candidate_will_hide_ack (); } - }; /* diff --git a/ism/src/isf_imcontrol_client.h b/ism/src/isf_imcontrol_client.h index 9cd55111..cceacb48 100644 --- a/ism/src/isf_imcontrol_client.h +++ b/ism/src/isf_imcontrol_client.h @@ -50,34 +50,11 @@ public: bool prepare (void); bool send (void); - void show_ise (int client_id, int context, void *data, int length, int *input_panel_show); - void hide_ise (int client_id, int context); - void show_control_panel (void); - void hide_control_panel (void); - void set_mode (int mode); - - void set_imdata (const char* data, int len); - void get_imdata (char* data, int* len); - void get_ise_window_geometry (int* x, int* y, int* width, int* height); - void get_candidate_window_geometry (int* x, int* y, int* width, int* height); - void get_ise_language_locale (char **locale); - void set_return_key_type (int type); - void get_return_key_type (int &type); - void set_return_key_disable (int disabled); - void get_return_key_disable (int &disabled); - void set_layout (int layout); - void get_layout (int* layout); - void set_ise_language (int language); void set_active_ise_by_uuid (const char* uuid); void get_active_ise (String &uuid); void get_ise_list (int* count, char*** iselist); void get_ise_info (const char* uuid, String &name, String &language, int &type, int &option); void reset_ise_option (void); - void set_caps_mode (int mode); - void focus_in (void); - void focus_out (void); - void send_will_show_ack (void); - void send_will_hide_ack (void); void set_active_ise_to_default (void); void send_candidate_will_hide_ack (void); }; diff --git a/ism/src/scim_panel_agent.cpp b/ism/src/scim_panel_agent.cpp index 31208f05..c3d6683c 100644 --- a/ism/src/scim_panel_agent.cpp +++ b/ism/src/scim_panel_agent.cpp @@ -156,6 +156,7 @@ typedef Signal5 enum ClientType { UNKNOWN_CLIENT, FRONTEND_CLIENT, + FRONTEND_ACT_CLIENT, HELPER_CLIENT, HELPER_ACT_CLIENT, IMCONTROL_ACT_CLIENT, @@ -250,9 +251,10 @@ class PanelAgent::PanelAgentImpl String m_last_helper_uuid; String m_current_ise_name; uint32 m_current_ise_style; - int m_current_active_imcontrol_id; int m_pending_active_imcontrol_id; - int m_show_request_imcontrol_id; + int m_show_request_client_id; + int m_active_client_id; + IntIntRepository m_panel_client_map; IntIntRepository m_imcontrol_map; bool m_should_shared_ise; bool m_ise_exiting; @@ -339,7 +341,6 @@ class PanelAgent::PanelAgentImpl PanelAgentSignalStringVector m_signal_get_language_list; PanelAgentSignalStringVector m_signal_get_all_language; PanelAgentSignalStrStringVector m_signal_get_ise_language; - PanelAgentSignalString m_signal_set_isf_language; PanelAgentSignalStringISEINFO m_signal_get_ise_info_by_uuid; PanelAgentSignalKeyEvent m_signal_send_key_event; @@ -358,6 +359,9 @@ class PanelAgent::PanelAgentImpl PanelAgentSignalVoid m_signal_will_show_ack; PanelAgentSignalVoid m_signal_will_hide_ack; + + PanelAgentSignalVoid m_signal_set_hardware_keyboard_mode; + PanelAgentSignalVoid m_signal_candidate_will_hide_ack; public: PanelAgentImpl () @@ -368,7 +372,8 @@ public: m_current_socket_client (-1), m_current_client_context (0), m_current_toolbar_mode (TOOLBAR_KEYBOARD_MODE), m_current_ise_style (0), - m_current_active_imcontrol_id (-1), m_pending_active_imcontrol_id (-1), + m_pending_active_imcontrol_id (-1), + m_active_client_id (-1), m_should_shared_ise (false), m_ise_exiting (false), m_is_imengine_aux (false), m_is_imengine_candidate (false), m_last_socket_client (-1), m_last_client_context (0) @@ -376,6 +381,7 @@ public: m_current_ise_name = String (_("English Keyboard")); m_imcontrol_repository.clear (); m_imcontrol_map.clear (); + m_panel_client_map.clear (); m_socket_server.signal_connect_accept (slot (this, &PanelAgentImpl::socket_accept_callback)); m_socket_server.signal_connect_receive (slot (this, &PanelAgentImpl::socket_receive_callback)); m_socket_server.signal_connect_exception (slot (this, &PanelAgentImpl::socket_exception_callback)); @@ -505,65 +511,30 @@ public: m_current_toolbar_mode = mode; } - void update_ise_name (String &name) - { - ClientRepository::iterator iter = m_client_repository.begin (); - - for (; iter != m_client_repository.end (); iter++) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; - - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - trans.put_command (ISM_TRANS_CMD_ISE_CHANGED); - trans.put_data (name); - - trans.write_to_socket (client_socket); - break; - } - } - } - - void update_ise_style (uint32 &style) - { - ClientRepository::iterator iter = m_client_repository.begin (); - - for (; iter != m_client_repository.end (); iter++) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; - - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - trans.put_command (ISM_TRANS_CMD_UPDATE_ISE_STYLE); - trans.put_data (style); - - trans.write_to_socket (client_socket); - break; - } - } - } - void update_panel_event (int cmd, uint32 nType, uint32 nValue) { - SCIM_DEBUG_MAIN(1) << __func__ << " (" << nType << ", " << nValue << ")\n"; - ClientRepository::iterator iter = m_client_repository.begin (); - - for (; iter != m_client_repository.end (); iter++) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; + int focused_client; + uint32 focused_context; + get_focused_context (focused_client, focused_context); + if (focused_client == -1 && m_active_client_id != -1) { + focused_client = m_panel_client_map[m_active_client_id]; + focused_context = 0; + } - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - trans.put_command (cmd); - trans.put_data (nType); - trans.put_data (nValue); + SCIM_DEBUG_MAIN(1) << __func__ << " (" << nType << ", " << nValue << "), client=" << focused_client << "\n"; - trans.write_to_socket (client_socket); - break; - } + ClientInfo client_info = socket_get_client_info (focused_client); + if (client_info.type == FRONTEND_CLIENT) { + Socket client_socket (focused_client); + 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 (cmd); + m_send_trans.put_data (nType); + m_send_trans.put_data (nValue); + m_send_trans.write_to_socket (client_socket); + } else { + std::cerr << __func__ << " client is not existed!!!" << "\n"; } } @@ -694,24 +665,6 @@ public: return client >= 0; } - bool update_client_id (int client_id) - { - SCIM_DEBUG_MAIN(1) << __func__ << " (" << client_id << ")\n"; - - if (client_id >= 0) { - uint32 context = 0; - Socket client_socket (client_id); - m_send_trans.clear (); - m_send_trans.put_command (SCIM_TRANS_CMD_REPLY); - m_send_trans.put_data (context); - m_send_trans.put_command (ISM_TRANS_CMD_PANEL_UPDATE_CLIENT_ID); - m_send_trans.put_data ((uint32)client_id); - m_send_trans.write_to_socket (client_socket); - } - - return client_id >= 0; - } - bool change_factory (const String &uuid) { SCIM_DEBUG_MAIN(1) << "PanelAgent::change_factory (" << uuid << ")\n"; @@ -1627,18 +1580,12 @@ public: void show_isf_panel (int client_id) { SCIM_DEBUG_MAIN(4) << "PanelAgent::show_isf_panel ()\n"; - Transaction trans; - Socket client_socket (client_id); - m_signal_show_panel (); } void hide_isf_panel (int client_id) { SCIM_DEBUG_MAIN(4) << "PanelAgent::hide_isf_panel ()\n"; - Transaction trans; - Socket client_socket (client_id); - m_signal_hide_panel (); } @@ -1655,15 +1602,23 @@ public: bool ret = false; Transaction trans; Socket client_socket (client_id); - m_current_active_imcontrol_id = client_id; - m_show_request_imcontrol_id = client_id; + m_show_request_client_id = client_id; + m_active_client_id = client_id; uint32 client; uint32 context; if (m_recv_trans.get_data (client) && m_recv_trans.get_data (context) && m_recv_trans.get_data (&data, len)) { SCIM_DEBUG_MAIN(4) << __func__ << " (client:" << client << " context:" << context << ")\n"; if (TOOLBAR_HELPER_MODE == m_current_toolbar_mode) { - uint32 ctx = get_helper_ic (client, context); + int focused_client; + uint32 focused_context; + get_focused_context (focused_client, focused_context); + if (focused_client == -1 && m_active_client_id != -1) { + focused_client = m_panel_client_map[m_active_client_id]; + focused_context = 0; + } + + uint32 ctx = get_helper_ic (focused_client, focused_context); ret = show_helper (m_current_helper_uuid, data, len, ctx); } } @@ -1695,8 +1650,16 @@ public: uint32 context; if (m_recv_trans.get_data (client) && m_recv_trans.get_data (context)) { SCIM_DEBUG_MAIN(4) << __func__ << " (client:" << client << " context:" << context << ")\n"; - if ((client_id == m_current_active_imcontrol_id || client_id == m_show_request_imcontrol_id) && TOOLBAR_HELPER_MODE == mode) { - uint32 ctx = get_helper_ic (client, context); + if ((m_panel_client_map[client_id] == m_current_socket_client || client_id == m_show_request_client_id) && TOOLBAR_HELPER_MODE == mode) { + int focused_client; + uint32 focused_context; + get_focused_context (focused_client, focused_context); + if (focused_client == -1 && m_active_client_id != -1) { + focused_client = m_panel_client_map[m_active_client_id]; + focused_context = 0; + } + + uint32 ctx = get_helper_ic (focused_client, focused_context); hide_helper (m_current_helper_uuid, ctx); } } @@ -1968,21 +1931,6 @@ public: } } - void set_isf_language (int client_id) - { - SCIM_DEBUG_MAIN(4) << "PanelAgent::set_isf_language ()\n"; - char *buf = NULL; - size_t len; - - if (m_recv_trans.get_data (&buf, len)) { - String lang (buf); - m_signal_set_isf_language (lang); - } - - if (NULL != buf) - delete[] buf; - } - void set_ise_imdata (int client_id) { SCIM_DEBUG_MAIN(4) << "PanelAgent::set_ise_imdata ()\n"; @@ -2268,7 +2216,6 @@ public: size_t len; Transaction trans; Socket client_socket (client_id); - m_current_active_imcontrol_id = client_id; trans.clear (); trans.put_command (SCIM_TRANS_CMD_REPLY); @@ -2339,27 +2286,6 @@ public: delete[] buf; } - void update_isf_control_status (const bool showed) - { - for (ClientRepository::iterator iter = m_client_repository.begin (); - iter != m_client_repository.end (); ++iter) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; - - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - if (showed) - trans.put_command (ISM_TRANS_CMD_ISF_CONTROL_SHOWED); - else - trans.put_command (ISM_TRANS_CMD_ISF_CONTROL_HIDED); - trans.write_to_socket (client_socket); - break; - } - } - return; - } - void set_ise_return_key_type (int client_id) { SCIM_DEBUG_MAIN(4) << __func__ << "\n"; @@ -2513,13 +2439,10 @@ public: m_send_trans.put_command (SCIM_TRANS_CMD_RELOAD_CONFIG); for (ClientRepository::iterator it = m_client_repository.begin (); it != m_client_repository.end (); ++it) { - if (it->second.type == IMCONTROL_ACT_CLIENT - || it->second.type == IMCONTROL_CLIENT - || it->second.type == HELPER_ACT_CLIENT) - continue; - - Socket client_socket (it->first); - m_send_trans.write_to_socket (client_socket); + if (it->second.type == FRONTEND_CLIENT || it->second.type == HELPER_CLIENT) { + Socket client_socket (it->first); + m_send_trans.write_to_socket (client_socket); + } } unlock (); @@ -2593,13 +2516,6 @@ public: m_signal_will_hide_ack (); } - void candidate_will_hide_ack (int client_id) - { - SCIM_DEBUG_MAIN(4) << "PanelAgent::will_hide_ack ()\n"; - - m_signal_candidate_will_hide_ack (); - } - void reset_default_ise (int client_id) { SCIM_DEBUG_MAIN(4) << __func__ << "\n"; @@ -2611,6 +2527,20 @@ public: std::cerr << "Read SCIM_GLOBAL_CONFIG_INITIAL_ISE_UUID is failed!!!\n"; } + void set_hardware_keyboard_mode (int client_id) + { + SCIM_DEBUG_MAIN(4) << "PanelAgent::set_hardware_keyboard_mode ()\n"; + + m_signal_set_hardware_keyboard_mode (); + } + + void candidate_will_hide_ack (int client_id) + { + SCIM_DEBUG_MAIN(4) << "PanelAgent::will_hide_ack ()\n"; + + m_signal_candidate_will_hide_ack (); + } + Connection signal_connect_reload_config (PanelAgentSlotVoid *slot) { return m_signal_reload_config.connect (slot); @@ -2856,11 +2786,6 @@ public: return m_signal_get_ise_language.connect (slot); } - Connection signal_connect_set_isf_language (PanelAgentSlotString *slot) - { - return m_signal_set_isf_language.connect (slot); - } - Connection signal_connect_get_ise_info_by_uuid (PanelAgentSlotStringISEINFO *slot) { return m_signal_get_ise_info_by_uuid.connect (slot); @@ -2931,10 +2856,16 @@ public: return m_signal_will_hide_ack.connect (slot); } + Connection signal_connect_set_hardware_keyboard_mode (PanelAgentSlotVoid *slot) + { + return m_signal_set_hardware_keyboard_mode.connect (slot); + } + Connection signal_connect_candidate_will_hide_ack (PanelAgentSlotVoid *slot) { return m_signal_candidate_will_hide_ack.connect (slot); } + private: bool socket_check_client_connection (const Socket &client) { @@ -2996,12 +2927,7 @@ private: /* If it's a new client, then request to open the connection first. */ if (client_info.type == UNKNOWN_CLIENT) { - bool bSuccess = socket_open_connection (server, client); - if (bSuccess) { - ClientInfo client_info = socket_get_client_info (client_id); - if (client_info.type == FRONTEND_CLIENT) - update_client_id (client_id); - } + socket_open_connection (server, client); return; } @@ -3014,24 +2940,34 @@ private: !m_recv_trans.get_data (key) || key != (uint32) client_info.key) return; - if (client_info.type == FRONTEND_CLIENT) { + if (client_info.type == FRONTEND_ACT_CLIENT) { if (m_recv_trans.get_data (context)) { SCIM_DEBUG_MAIN (1) << "PanelAgent::FrontEnd Client, context = " << context << "\n"; socket_transaction_start(); while (m_recv_trans.get_command (cmd)) { SCIM_DEBUG_MAIN (3) << "PanelAgent::cmd = " << cmd << "\n"; + if (cmd == ISM_TRANS_CMD_REGISTER_PANEL_CLIENT) { + uint32 id = 0; + if (m_recv_trans.get_data (id)) { + SCIM_DEBUG_MAIN(4) << " ISM_TRANS_CMD_REGISTER_PANEL_CLIENT (" << client_id << "," << "," << context << "," << id << ")\n"; + m_panel_client_map [client_id] = (int)id; + } + continue; + } + if (cmd == SCIM_TRANS_CMD_PANEL_REGISTER_INPUT_CONTEXT) { if (m_recv_trans.get_data (uuid)) { SCIM_DEBUG_MAIN (2) << "PanelAgent::register_input_context (" << client_id << "," << "," << context << "," << uuid << ")\n"; - uint32 ctx = get_helper_ic (client_id, context); + uint32 ctx = get_helper_ic (m_panel_client_map[client_id], context); m_client_context_uuids [ctx] = uuid; } continue; } if (cmd == SCIM_TRANS_CMD_PANEL_REMOVE_INPUT_CONTEXT) { - uint32 ctx = get_helper_ic (client_id, context); + SCIM_DEBUG_MAIN(4) << " SCIM_TRANS_CMD_PANEL_REMOVE_INPUT_CONTEXT (" << "client:" << client_id << " context:" << context << ")\n"; + uint32 ctx = get_helper_ic (m_panel_client_map[client_id], context); m_client_context_uuids.erase (ctx); if (ctx == get_helper_ic (m_current_socket_client, m_current_client_context)) { lock (); @@ -3058,7 +2994,7 @@ private: } if (cmd == SCIM_TRANS_CMD_PANEL_RESET_INPUT_CONTEXT) { - socket_reset_input_context (client_id, context); + socket_reset_input_context (m_panel_client_map[client_id], context); continue; } @@ -3066,17 +3002,18 @@ private: SCIM_DEBUG_MAIN(4) << " SCIM_TRANS_CMD_FOCUS_IN (" << "client:" << client_id << " context:" << context << ")\n"; m_signal_focus_in (); if (TOOLBAR_HELPER_MODE == m_current_toolbar_mode) - focus_in_helper (m_current_helper_uuid, client_id, context); + focus_in_helper (m_current_helper_uuid, m_panel_client_map[client_id], context); if (m_recv_trans.get_data (uuid)) { SCIM_DEBUG_MAIN (2) << "PanelAgent::focus_in (" << client_id << "," << "," << context << "," << uuid << ")\n"; + m_active_client_id = client_id; lock (); if (m_current_socket_client >= 0) { m_last_socket_client = m_current_socket_client; m_last_client_context = m_current_client_context; m_last_context_uuid = m_current_context_uuid; } - m_current_socket_client = client_id; + m_current_socket_client = m_panel_client_map[client_id]; m_current_client_context = context; m_current_context_uuid = uuid; unlock (); @@ -3089,20 +3026,85 @@ private: continue; } + if (cmd == ISM_TRANS_CMD_SHOW_ISF_CONTROL) { + show_isf_panel (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_HIDE_ISF_CONTROL) { + hide_isf_panel (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SHOW_ISE_PANEL) { + show_ise_panel (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_HIDE_ISE_PANEL) { + hide_ise_panel (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY) { + get_input_panel_geometry (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_CANDIDATE_GEOMETRY) { + get_candidate_window_geometry (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_ISE_LANGUAGE_LOCALE) { + get_ise_language_locale (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_ISE_LANGUAGE) { + set_ise_language (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_ISE_IMDATA) { + set_ise_imdata (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_ISE_IMDATA) { + get_ise_imdata (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_RETURN_KEY_TYPE) { + set_ise_return_key_type (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_RETURN_KEY_TYPE) { + get_ise_return_key_type (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE) { + set_ise_return_key_disable (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE) { + get_ise_return_key_disable (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_GET_LAYOUT) { + get_ise_layout (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_LAYOUT) { + set_ise_layout (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_CAPS_MODE) { + set_ise_caps_mode (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SEND_WILL_SHOW_ACK) { + will_show_ack (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SEND_WILL_HIDE_ACK) { + will_hide_ack (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SET_HARDWARE_KEYBOARD_MODE) { + set_hardware_keyboard_mode (client_id); + continue; + } else if (cmd == ISM_TRANS_CMD_SEND_CANDIDATE_WILL_HIDE_ACK) { + candidate_will_hide_ack (client_id); + continue; + } + current = last = false; uuid.clear (); /* Get the context uuid from the client context registration table. */ { - ClientContextUUIDRepository::iterator it = m_client_context_uuids.find (get_helper_ic (client_id, context)); + ClientContextUUIDRepository::iterator it = m_client_context_uuids.find (get_helper_ic (m_panel_client_map[client_id], context)); if (it != m_client_context_uuids.end ()) uuid = it->second; } - if (m_current_socket_client == client_id && m_current_client_context == context) { + if (m_current_socket_client == m_panel_client_map[client_id] && m_current_client_context == context) { current = true; if (!uuid.length ()) uuid = m_current_context_uuid; - } else if (m_last_socket_client == client_id && m_last_client_context == context) { + } else if (m_last_socket_client == m_panel_client_map[client_id] && m_last_client_context == context) { last = true; if (!uuid.length ()) uuid = m_last_context_uuid; } @@ -3116,13 +3118,13 @@ private: } if (cmd == SCIM_TRANS_CMD_START_HELPER) { - socket_start_helper (client_id, context, uuid); + socket_start_helper (m_panel_client_map[client_id], context, uuid); continue; } else if (cmd == SCIM_TRANS_CMD_SEND_HELPER_EVENT) { - socket_send_helper_event (client_id, context, uuid); + socket_send_helper_event (m_panel_client_map[client_id], context, uuid); continue; } else if (cmd == SCIM_TRANS_CMD_STOP_HELPER) { - socket_stop_helper (client_id, context, uuid); + socket_stop_helper (m_panel_client_map[client_id], context, uuid); continue; } @@ -3197,7 +3199,7 @@ private: TOOLBAR_MODE_T mode = m_current_toolbar_mode; if (TOOLBAR_HELPER_MODE == mode) - focus_out_helper (m_current_helper_uuid, client_id, context); + focus_out_helper (m_current_helper_uuid, m_panel_client_map[client_id], context); if (m_current_socket_client >= 0) { m_last_socket_client = m_current_socket_client; @@ -3212,6 +3214,27 @@ private: } socket_transaction_end (); } + } else if (client_info.type == FRONTEND_CLIENT) { + if (m_recv_trans.get_data (context)) { + SCIM_DEBUG_MAIN (1) << "client_info.type == FRONTEND_CLIENT\n"; + socket_transaction_start(); + while (m_recv_trans.get_command (cmd)) { + SCIM_DEBUG_MAIN (3) << "PanelAgent::cmd = " << cmd << "\n"; + + if (cmd == ISM_TRANS_CMD_GET_PANEL_CLIENT_ID) { + Socket client_socket (client_id); + + Transaction trans; + trans.clear (); + trans.put_command (SCIM_TRANS_CMD_REPLY); + trans.put_command (SCIM_TRANS_CMD_OK); + trans.put_data (client_id); + trans.write_to_socket (client_socket); + continue; + } + } + socket_transaction_end (); + } } else if (client_info.type == HELPER_CLIENT) { socket_transaction_start (); while (m_recv_trans.get_command (cmd)) { @@ -3269,10 +3292,6 @@ private: } else if (cmd == SCIM_TRANS_CMD_RELOAD_CONFIG) { reload_config (); m_signal_reload_config (); - } else if (cmd == ISM_TRANS_CMD_ISE_PANEL_HIDED) { - socket_helper_update_state_hided (client_id); - } else if (cmd == ISM_TRANS_CMD_ISE_PANEL_SHOWED) { - socket_helper_update_state_showed (client_id); } else if (cmd == ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT) { socket_helper_update_input_context (client_id); } else if (cmd == ISM_TRANS_CMD_GET_KEYBOARD_ISE_LIST) { @@ -3321,70 +3340,17 @@ private: socket_transaction_start (); while (m_recv_trans.get_command (cmd)) { - if (cmd == ISM_TRANS_CMD_SHOW_ISF_CONTROL) - show_isf_panel (client_id); - else if (cmd == ISM_TRANS_CMD_HIDE_ISF_CONTROL) - hide_isf_panel (client_id); - else if (cmd == ISM_TRANS_CMD_SHOW_ISE_PANEL) - show_ise_panel (client_id); - else if (cmd == ISM_TRANS_CMD_HIDE_ISE_PANEL) - hide_ise_panel (client_id); - else if (cmd == ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY) - get_input_panel_geometry (client_id); - else if (cmd == ISM_TRANS_CMD_GET_CANDIDATE_GEOMETRY) - get_candidate_window_geometry (client_id); - else if (cmd == ISM_TRANS_CMD_GET_ISE_LANGUAGE_LOCALE) - get_ise_language_locale (client_id); - else if (cmd == ISM_TRANS_CMD_SET_ISE_MODE) - set_ise_mode (client_id); - else if (cmd == ISM_TRANS_CMD_SET_ISE_LANGUAGE) - set_ise_language (client_id); - else if (cmd == ISM_TRANS_CMD_SET_ISE_IMDATA) - set_ise_imdata (client_id); - else if (cmd == ISM_TRANS_CMD_GET_ISE_IMDATA) - get_ise_imdata (client_id); - else if (cmd == ISM_TRANS_CMD_GET_ACTIVE_ISE) + if (cmd == ISM_TRANS_CMD_GET_ACTIVE_ISE) get_active_ise (client_id); - else if (cmd == ISM_TRANS_CMD_SET_ACTIVE_ISE_BY_UUID) + else if (cmd == ISM_TRANS_CMD_SET_ACTIVE_ISE_BY_UUID) { set_active_ise_by_uuid (client_id); - else if (cmd == ISM_TRANS_CMD_SET_RETURN_KEY_TYPE) - set_ise_return_key_type (client_id); - else if (cmd == ISM_TRANS_CMD_GET_RETURN_KEY_TYPE) - get_ise_return_key_type (client_id); - else if (cmd == ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE) - set_ise_return_key_disable (client_id); - else if (cmd == ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE) - get_ise_return_key_disable (client_id); - else if (cmd == ISM_TRANS_CMD_GET_LAYOUT) - get_ise_layout (client_id); - else if (cmd == ISM_TRANS_CMD_SET_LAYOUT) - set_ise_layout (client_id); - else if (cmd == ISM_TRANS_CMD_SET_CAPS_MODE) - set_ise_caps_mode (client_id); + } else if (cmd == ISM_TRANS_CMD_GET_ISE_LIST) get_ise_list (client_id); else if (cmd == ISM_TRANS_CMD_GET_ISE_INFORMATION) get_ise_information (client_id); else if (cmd == ISM_TRANS_CMD_RESET_ISE_OPTION) reset_ise_option (client_id); - else if (cmd == ISM_TRANS_CMD_GET_LANGUAGE_LIST) - get_language_list (client_id); - else if (cmd == ISM_TRANS_CMD_GET_ALL_LANGUAGE_LIST) - get_all_language (client_id); - else if (cmd == ISM_TRANS_CMD_GET_ISE_LANGUAGE) - get_ise_language (client_id); - else if (cmd == ISM_TRANS_CMD_SET_ISF_LANGUAGE) - set_isf_language (client_id); - else if (cmd == ISM_TRANS_CMD_RESET_ISE_CONTEXT) - reset_ise_context (client_id); - else if (cmd == SCIM_TRANS_CMD_FOCUS_IN) - m_current_active_imcontrol_id = client_id; - else if (cmd == ISM_TRANS_CMD_SEND_WILL_SHOW_ACK) - will_show_ack (client_id); - else if (cmd == ISM_TRANS_CMD_SEND_WILL_HIDE_ACK) - will_hide_ack (client_id); - else if (cmd == ISM_TRANS_CMD_SEND_CANDIDATE_WILL_HIDE_ACK) - candidate_will_hide_ack (client_id); else if (cmd == ISM_TRANS_CMD_RESET_DEFAULT_ISE) reset_default_ise (client_id); } @@ -3409,7 +3375,7 @@ private: uint32 key; String type = scim_socket_accept_connection (key, String ("Panel"), - String ("FrontEnd,Helper,Helper_Active,IMControl_Active,IMControl_Passive"), + String ("FrontEnd,FrontEnd_Active,Helper,Helper_Active,IMControl_Active,IMControl_Passive"), client, m_socket_timeout); @@ -3417,9 +3383,10 @@ private: ClientInfo info; info.key = key; info.type = ((type == "FrontEnd") ? FRONTEND_CLIENT : + ((type == "FrontEnd_Active") ? FRONTEND_ACT_CLIENT : ((type == "IMControl_Active") ? IMCONTROL_ACT_CLIENT : ((type == "Helper_Active") ? HELPER_ACT_CLIENT : - ((type == "IMControl_Passive") ? IMCONTROL_CLIENT : HELPER_CLIENT)))); + ((type == "IMControl_Passive") ? IMCONTROL_CLIENT : HELPER_CLIENT))))); SCIM_DEBUG_MAIN (4) << "Add client to repository. Type=" << type << " key=" << key << "\n"; lock (); @@ -3472,6 +3439,9 @@ private: SCIM_DEBUG_MAIN(4) << "It's a FrontEnd client.\n"; /* The focused client is closed. */ if (m_current_socket_client == client.get_id ()) { + if (TOOLBAR_HELPER_MODE == m_current_toolbar_mode) + hide_helper (m_current_helper_uuid); + lock (); m_current_socket_client = -1; m_current_client_context = 0; @@ -3547,6 +3517,11 @@ private: if (!(iter->second.option & ISM_ISE_HIDE_IN_CONTROL_PANEL)) socket_update_control_panel (); } + } else if (client_info.type == FRONTEND_ACT_CLIENT) { + SCIM_DEBUG_MAIN(4) << "It's a FRONTEND_ACT_CLIENT client.\n"; + IntIntRepository::iterator iter2 = m_panel_client_map.find (client.get_id ()); + if (iter2 != m_panel_client_map.end ()) + m_panel_client_map.erase (iter2); } else if (client_info.type == HELPER_CLIENT) { SCIM_DEBUG_MAIN(4) << "It's a Helper client.\n"; @@ -3594,10 +3569,6 @@ private: SCIM_DEBUG_MAIN(4) << "It's a IMCONTROL_ACT_CLIENT client.\n"; int client_id = client.get_id (); - if (client_id == m_current_active_imcontrol_id - && TOOLBAR_HELPER_MODE == m_current_toolbar_mode) - hide_helper (m_current_helper_uuid); - IMControlRepository::iterator iter = m_imcontrol_repository.find (client_id); if (iter != m_imcontrol_repository.end ()) { int size = iter->second.info.size (); @@ -4700,11 +4671,6 @@ private: m_send_trans.put_data (icit->second [i].second); } m_start_helper_ic_index.erase (icit); - } else { - m_send_trans.put_command (SCIM_TRANS_CMD_HELPER_ATTACH_INPUT_CONTEXT); - uint32 ctx = get_helper_ic (m_current_socket_client, m_current_client_context); - m_send_trans.put_data (ctx); - m_send_trans.put_data (info.uuid); } m_send_trans.put_command (SCIM_TRANS_CMD_UPDATE_SCREEN); @@ -4773,48 +4739,6 @@ private: unlock (); } - void socket_helper_update_state_hided (int client) - { - SCIM_DEBUG_MAIN(4) << "PanelAgent::socket_helper_update_state_hided (" << client << ")\n"; - - ClientRepository::iterator iter = m_client_repository.begin (); - - for (; iter != m_client_repository.end (); iter++) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; - - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - trans.put_command (ISM_TRANS_CMD_ISE_PANEL_HIDED); - - trans.write_to_socket (client_socket); - break; - } - } - } - - void socket_helper_update_state_showed (int client) - { - SCIM_DEBUG_MAIN(4) << "PanelAgent::socket_helper_update_state_showed (" << client << ")\n"; - - ClientRepository::iterator iter = m_client_repository.begin (); - - for (; iter != m_client_repository.end (); iter++) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; - - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - trans.put_command (ISM_TRANS_CMD_ISE_PANEL_SHOWED); - - trans.write_to_socket (client_socket); - break; - } - } - } - void socket_helper_update_input_context (int client) { SCIM_DEBUG_MAIN(4) << "PanelAgent::socket_helper_update_input_context (" << client << ")\n"; @@ -4824,22 +4748,23 @@ private: if (m_recv_trans.get_data (type) && m_recv_trans.get_data (value)) { m_signal_update_input_context ((int)type, (int)value); - ClientRepository::iterator iter = m_client_repository.begin (); - - for (; iter != m_client_repository.end (); iter++) { - if (IMCONTROL_CLIENT == iter->second.type && iter->first == m_imcontrol_map[m_current_active_imcontrol_id]) { - Socket client_socket (iter->first); - Transaction trans; - trans.clear (); - trans.put_command (SCIM_TRANS_CMD_REQUEST); - trans.put_command (ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT); - trans.put_data (type); - trans.put_data (value); + int focused_client; + uint32 focused_context; + get_focused_context (focused_client, focused_context); - trans.write_to_socket (client_socket); - break; - } + ClientInfo client_info = socket_get_client_info (focused_client); + if (client_info.type == FRONTEND_CLIENT) { + Socket client_socket (focused_client); + 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 (ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT); + m_send_trans.put_data (type); + m_send_trans.put_data (value); + m_send_trans.write_to_socket (client_socket); + } else { + std::cerr << "focused client is not existed!!!" << "\n"; } } } @@ -5467,18 +5392,6 @@ PanelAgent::set_current_ise_style (uint32 &style) m_impl->set_current_ise_style (style); } -void -PanelAgent::update_ise_name (String &name) -{ - m_impl->update_ise_name (name); -} - -void -PanelAgent::update_ise_style (uint32 &style) -{ - m_impl->update_ise_style (style); -} - void PanelAgent::update_candidate_panel_event (uint32 nType, uint32 nValue) { @@ -5672,12 +5585,6 @@ PanelAgent::filter_helper_manager_event (void) return m_impl->filter_helper_manager_event (); } -void -PanelAgent::update_isf_control_status (const bool showed) -{ - m_impl->update_isf_control_status (showed); -} - int PanelAgent::send_display_name (String &name) { @@ -6014,12 +5921,6 @@ PanelAgent::signal_connect_get_ise_language (PanelAgentSlotStrStringVe return m_impl->signal_connect_get_ise_language (slot); } -Connection -PanelAgent::signal_connect_set_isf_language (PanelAgentSlotString *slot) -{ - return m_impl->signal_connect_set_isf_language (slot); -} - Connection PanelAgent::signal_connect_get_ise_info_by_uuid (PanelAgentSlotStringISEINFO *slot) { @@ -6105,7 +6006,13 @@ PanelAgent::signal_connect_will_hide_ack (PanelAgentSlotVoid } Connection -PanelAgent::signal_connect_candidate_will_hide_ack (PanelAgentSlotVoid *slot) +PanelAgent::signal_connect_set_hardware_keyboard_mode (PanelAgentSlotVoid *slot) +{ + return m_impl->signal_connect_set_hardware_keyboard_mode (slot); +} + +Connection +PanelAgent::signal_connect_candidate_will_hide_ack (PanelAgentSlotVoid *slot) { return m_impl->signal_connect_candidate_will_hide_ack (slot); } diff --git a/ism/src/scim_panel_agent.h b/ism/src/scim_panel_agent.h index b3d0e315..d3dc454c 100644 --- a/ism/src/scim_panel_agent.h +++ b/ism/src/scim_panel_agent.h @@ -365,20 +365,6 @@ public: */ void get_current_ise_geometry (rectinfo &rect); - /** - * @brief Update ISE name to IM Control. - * - * @param name The ISE name. - */ - void update_ise_name (String &name); - - /** - * @brief Update ISE style to IM Control. - * - * @param style The ISE style. - */ - void update_ise_style (uint32 &style); - /** * @brief Send candidate panel event to IM Control. * @@ -395,13 +381,6 @@ public: */ void update_input_panel_event (uint32 nType, uint32 nValue); - /** - * @brief Update ISE control panel status to IM Control. - * - * @param showed The control panel status. - */ - void update_isf_control_status (const bool showed); - /** * @brief Notice helper ISE to focus out. * @@ -1043,13 +1022,6 @@ public: */ Connection signal_connect_get_ise_language (PanelAgentSlotStrStringVector *slot); - /** - * @brief Signal: Set the isf language. - * - * slot prototype: void get_ise_language (char *, std::vector &); - */ - Connection signal_connect_set_isf_language (PanelAgentSlotString *slot); - /** * @brief Signal: Get the ise information by uuid. * @@ -1158,12 +1130,20 @@ public: */ Connection signal_connect_will_hide_ack (PanelAgentSlotVoid *slot); + /** + * @brief Signal: Set hardware mode + * + * slot prototype: void set_hardware_keyboard_mode (void); + */ + Connection signal_connect_set_hardware_keyboard_mode (PanelAgentSlotVoid *slot); + /** * @brief Signal: Notifies the client finished handling WILL_HIDE event for candidate * * slot prototype: void candidate_will_hide_ack (void); */ Connection signal_connect_candidate_will_hide_ack (PanelAgentSlotVoid *slot); + }; /** @} */ diff --git a/ism/src/scim_panel_client.cpp b/ism/src/scim_panel_client.cpp index cdd58d09..3554698d 100644 --- a/ism/src/scim_panel_client.cpp +++ b/ism/src/scim_panel_client.cpp @@ -28,15 +28,17 @@ * * Modifications by Samsung Electronics Co., Ltd. * 1. Add new signals - * a. m_signal_select_aux, m_signal_reset_keyboard_ise and m_signal_update_client_id + * a. m_signal_select_aux, m_signal_reset_keyboard_ise * b. m_signal_update_candidate_item_layout and m_signal_update_displayed_candidate_number * c. m_signal_get_surrounding_text and m_signal_delete_surrounding_text * d. m_signal_show_preedit_string, m_signal_hide_preedit_string, m_signal_update_preedit_string and m_signal_update_preedit_caret * e. m_signal_candidate_more_window_show, m_signal_candidate_more_window_hide, m_signal_longpress_candidate + * f. m_signal_update_ise_input_context, m_signal_update_isf_candidate_panel * 2. Add new interface APIs in PanelClient class * a. update_cursor_position () and update_surrounding_text () * b. expand_candidate (), contract_candidate () and set_candidate_style () - * c. reset_input_context () and turn_on_log + * c. reset_input_context () and turn_on_log () + * d. get_client_id () and register_client () * * $Id: scim_panel_client.cpp,v 1.6 2005/06/26 16:35:33 suzhe Exp $ * @@ -52,6 +54,7 @@ #include "scim.h" #include +#include namespace scim { @@ -85,9 +88,12 @@ typedef Signal2 &> class PanelClient::PanelClientImpl { SocketClient m_socket; + SocketClient m_socket_active; int m_socket_timeout; uint32 m_socket_magic_key; + uint32 m_socket_magic_key_active; Transaction m_send_trans; + Transaction m_recv_trans; int m_current_icid; int m_send_refcount; @@ -121,12 +127,13 @@ class PanelClient::PanelClientImpl PanelClientSignalVoid m_signal_candidate_more_window_show; PanelClientSignalVoid m_signal_candidate_more_window_hide; PanelClientSignalInt m_signal_longpress_candidate; - PanelClientSignalInt m_signal_update_client_id; + PanelClientSignalIntInt m_signal_update_ise_input_context; + PanelClientSignalIntInt m_signal_update_isf_candidate_panel; public: PanelClientImpl () : m_socket_timeout (scim_get_default_socket_timeout ()), - m_socket_magic_key (0), + m_socket_magic_key (0), m_socket_magic_key_active (0), m_current_icid (-1), m_send_refcount (0) { @@ -166,6 +173,15 @@ public: if (ret && scim_socket_open_connection (m_socket_magic_key, String ("FrontEnd"), String ("Panel"), m_socket, m_socket_timeout)) { ISF_LOG (" PID=%d connect to PanelAgent (%s), connected:%d.\n", getpid (), panel_address.c_str (), count); + if (!m_socket_active.connect (addr)) + return -1; + if (!scim_socket_open_connection (m_socket_magic_key_active, + String ("FrontEnd_Active"), String ("Panel"), + m_socket_active, m_socket_timeout)) { + m_socket_active.close (); + m_socket_magic_key_active = 0; + return -1; + } break; } else { std::cerr << " PID=" << getpid () << " cannot connect to PanelAgent (" << panel_address << "), connected:" << count << ".\n"; @@ -185,7 +201,9 @@ public: void close_connection () { m_socket.close (); - m_socket_magic_key = 0; + m_socket_active.close (); + m_socket_magic_key = 0; + m_socket_magic_key_active = 0; } int get_connection_number () const @@ -437,11 +455,18 @@ public: m_signal_longpress_candidate ((int) context, (int)index); } break; - case ISM_TRANS_CMD_PANEL_UPDATE_CLIENT_ID: + case ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT: + { + uint32 type, value; + if (recv.get_data (type) && recv.get_data (value)) + m_signal_update_ise_input_context ((int) context, (int)type, (int)value); + } + break; + case ISM_TRANS_CMD_UPDATE_ISF_CANDIDATE_PANEL: { - uint32 client_id; - if (recv.get_data (client_id)) - m_signal_update_client_id ((int) context, (int)client_id); + uint32 type, value; + if (recv.get_data (type) && recv.get_data (value)) + m_signal_update_isf_candidate_panel ((int) context, (int)type, (int)value); } break; default: @@ -453,7 +478,7 @@ public: bool prepare (int icid) { - if (!m_socket.is_connected ()) return false; + if (!m_socket_active.is_connected ()) return false; int cmd; uint32 data; @@ -462,7 +487,7 @@ public: m_current_icid = icid; m_send_trans.clear (); m_send_trans.put_command (SCIM_TRANS_CMD_REQUEST); - m_send_trans.put_data (m_socket_magic_key); + m_send_trans.put_data (m_socket_magic_key_active); m_send_trans.put_data ((uint32) icid); if (m_send_trans.get_command (cmd) && @@ -482,7 +507,7 @@ public: bool send () { - if (!m_socket.is_connected ()) return false; + if (!m_socket_active.is_connected ()) return false; if (m_send_refcount <= 0) return false; @@ -491,7 +516,7 @@ public: if (m_send_refcount > 0) return false; if (m_send_trans.get_data_type () != SCIM_TRANS_DATA_UNKNOWN) - return m_send_trans.write_to_socket (m_socket, 0x4d494353); + return m_send_trans.write_to_socket (m_socket_active, 0x4d494353); return false; } @@ -717,6 +742,357 @@ public: } } + bool post_prepare (void) + { + if (m_socket_active.is_connected () && m_send_refcount > 0) { + m_send_trans.clear (); + m_send_trans.put_command (SCIM_TRANS_CMD_REQUEST); + m_send_trans.put_data (m_socket_magic_key_active); + m_send_trans.put_data ((uint32) m_current_icid); + + return true; + } + + return false; + } + + bool instant_send (void) + { + if (m_socket_active.is_connected () && m_send_refcount > 0) { + + m_send_refcount --; + + if (m_send_trans.get_data_type () != SCIM_TRANS_DATA_UNKNOWN) + return m_send_trans.write_to_socket (m_socket_active, 0x4d494353); + } + + return false; + } + + void show_ise (int client_id, int icid, void *data, int length, int *input_panel_show) { + if (m_send_refcount > 0 && m_current_icid == icid) { + int cmd; + uint32 temp; + m_send_trans.put_command (ISM_TRANS_CMD_SHOW_ISE_PANEL); + m_send_trans.put_data ((uint32)client_id); + m_send_trans.put_data ((uint32)icid); + m_send_trans.put_data ((const char *)data, (size_t)length); + instant_send (); + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (temp)) { + if (input_panel_show) + *input_panel_show = temp; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + if (input_panel_show) + *input_panel_show = false; + } + post_prepare (); + } + } + + void hide_ise (int client_id, int icid) { + if (m_send_refcount > 0 && m_current_icid == icid) { + m_send_trans.put_command (ISM_TRANS_CMD_HIDE_ISE_PANEL); + m_send_trans.put_data ((uint32)client_id); + m_send_trans.put_data ((uint32)icid); + } + } + + void show_control_panel (void) { + if (m_send_refcount > 0) + m_send_trans.put_command (ISM_TRANS_CMD_SHOW_ISF_CONTROL); + } + + void hide_control_panel (void) { + if (m_send_refcount > 0) + m_send_trans.put_command (ISM_TRANS_CMD_HIDE_ISF_CONTROL); + } + + void set_imdata (const char* data, int len) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_SET_ISE_IMDATA); + m_send_trans.put_data (data, len); + } + } + + void get_imdata (char* data, int* len) { + if (m_send_refcount > 0) { + int cmd; + size_t datalen = 0; + char* data_temp = NULL; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_ISE_IMDATA); + instant_send (); + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (&data_temp, datalen)) { + memcpy (data, data_temp, datalen); + *len = datalen; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + } + if (data_temp) + delete [] data_temp; + post_prepare (); + } + } + + void get_ise_window_geometry (int* x, int* y, int* width, int* height) { + if (m_send_refcount > 0) { + int cmd; + uint32 x_temp = 0; + uint32 y_temp = 0; + uint32 w_temp = 0; + uint32 h_temp = 0; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_ACTIVE_ISE_GEOMETRY); + instant_send (); + + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (x_temp) && + m_send_trans.get_data (y_temp) && + m_send_trans.get_data (w_temp) && + m_send_trans.get_data (h_temp)) { + *x = x_temp; + *y = y_temp; + *width = w_temp; + *height = h_temp; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + } + post_prepare (); + } + } + + void get_candidate_window_geometry (int* x, int* y, int* width, int* height) { + if (m_send_refcount > 0) { + int cmd; + uint32 x_temp = 0; + uint32 y_temp = 0; + uint32 w_temp = 0; + uint32 h_temp = 0; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_CANDIDATE_GEOMETRY); + instant_send (); + + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket () may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (x_temp) && + m_send_trans.get_data (y_temp) && + m_send_trans.get_data (w_temp) && + m_send_trans.get_data (h_temp)) { + *x = x_temp; + *y = y_temp; + *width = w_temp; + *height = h_temp; + } else { + std::cerr << __func__ << " get_command () or get_data () is failed!!!\n"; + } + post_prepare (); + } + } + + void get_ise_language_locale (char **locale) { + if (m_send_refcount > 0) { + int cmd; + size_t datalen = 0; + char *data = NULL; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_ISE_LANGUAGE_LOCALE); + instant_send (); + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket () may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (&data, datalen)) { + if (locale) + *locale = strndup (data, datalen); + } else { + std::cerr << __func__ << " get_command () or get_data () is failed!!!\n"; + if (locale) + *locale = strdup (""); + } + if (data) + delete [] data; + post_prepare (); + } + } + + void set_return_key_type (int type) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_SET_RETURN_KEY_TYPE); + m_send_trans.put_data (type); + } + } + + void get_return_key_type (int &type) { + if (m_send_refcount > 0) { + int cmd; + uint32 temp; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_RETURN_KEY_TYPE); + instant_send (); + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (temp)) { + type = temp; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + } + post_prepare (); + } + } + + void set_return_key_disable (int disabled) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE); + m_send_trans.put_data (disabled); + } + } + + void get_return_key_disable (int &disabled) { + if (m_send_refcount > 0) { + int cmd; + uint32 temp; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE); + instant_send (); + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (temp)) { + disabled = temp; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + } + post_prepare (); + } + } + + void set_layout (int layout) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_SET_LAYOUT); + m_send_trans.put_data (layout); + } + } + + void get_layout (int* layout) { + if (m_send_refcount > 0) { + int cmd; + uint32 layout_temp; + + m_send_trans.put_command (ISM_TRANS_CMD_GET_LAYOUT); + instant_send (); + if (!m_send_trans.read_from_socket (m_socket_active, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (layout_temp)) { + *layout = layout_temp; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + } + post_prepare (); + } + } + + void set_ise_language (int language) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_SET_ISE_LANGUAGE); + m_send_trans.put_data (language); + } + } + + void set_caps_mode (int mode) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_SET_CAPS_MODE); + m_send_trans.put_data (mode); + } + } + + void send_will_show_ack (void) { + if (m_send_refcount > 0) + m_send_trans.put_command (ISM_TRANS_CMD_SEND_WILL_SHOW_ACK); + } + + void send_will_hide_ack (void) { + if (m_send_refcount > 0) + m_send_trans.put_command (ISM_TRANS_CMD_SEND_WILL_HIDE_ACK); + } + + void set_hardware_keyboard_mode (void) { + if (m_send_refcount > 0) + m_send_trans.put_command (ISM_TRANS_CMD_SET_HARDWARE_KEYBOARD_MODE); + } + + void send_candidate_will_hide_ack (void) { + if (m_send_refcount > 0) + m_send_trans.put_command (ISM_TRANS_CMD_SEND_CANDIDATE_WILL_HIDE_ACK); + } + + bool get_client_id (int &client_id) { + if (!m_socket.is_connected ()) return false; + + int cmd; + uint32 data; + uint32 id; + + m_send_trans.clear (); + m_send_trans.put_command (SCIM_TRANS_CMD_REQUEST); + m_send_trans.put_data (m_socket_magic_key); + m_send_trans.put_data (0); + + if (m_send_trans.get_command (cmd) && + m_send_trans.get_data (data) && + m_send_trans.get_data (data)) { + m_send_trans.put_command (ISM_TRANS_CMD_GET_PANEL_CLIENT_ID); + m_send_trans.write_to_socket (m_socket); + + if (!m_send_trans.read_from_socket (m_socket, m_socket_timeout)) + std::cerr << __func__ << " read_from_socket() may be timeout \n"; + + if (m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY && + m_send_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK && + m_send_trans.get_data (id)) { + client_id = id; + return true; + } else { + std::cerr << __func__ << " get_command() or get_data() may fail!!!\n"; + return false; + } + } + + return false; + } + + void register_client (int client_id) { + if (m_send_refcount > 0) { + m_send_trans.put_command (ISM_TRANS_CMD_REGISTER_PANEL_CLIENT); + m_send_trans.put_data (client_id); + } + } + public: void reset_signal_handler (void) { @@ -750,7 +1126,8 @@ public: m_signal_candidate_more_window_show.reset(); m_signal_candidate_more_window_hide.reset(); m_signal_longpress_candidate.reset(); - m_signal_update_client_id.reset(); + m_signal_update_ise_input_context.reset(); + m_signal_update_isf_candidate_panel.reset(); } Connection signal_connect_reload_config (PanelClientSlotVoid *slot) @@ -885,9 +1262,14 @@ public: return m_signal_longpress_candidate.connect (slot); } - Connection signal_connect_update_client_id (PanelClientSlotInt *slot) + Connection signal_connect_update_ise_input_context (PanelClientSlotIntInt *slot) + { + return m_signal_update_ise_input_context.connect (slot); + } + + Connection signal_connect_update_isf_candidate_panel (PanelClientSlotIntInt *slot) { - return m_signal_update_client_id.connect (slot); + return m_signal_update_isf_candidate_panel.connect (slot); } private: @@ -1126,6 +1508,144 @@ PanelClient::set_candidate_style (int icid, ISF_CANDIDATE_PORTRAIT_LINE_T por m_impl->set_candidate_style (icid, portrait_line, mode); } +void +PanelClient::show_ise (int client_id, int icid, void *data, int length, int *input_panel_show) +{ + m_impl->show_ise (client_id, icid, data, length, input_panel_show); +} + +void +PanelClient::hide_ise (int client_id, int icid) +{ + m_impl->hide_ise (client_id, icid); +} + +void +PanelClient::show_control_panel (void) +{ + m_impl->show_control_panel (); +} + +void +PanelClient::hide_control_panel (void) +{ + m_impl->hide_control_panel (); +} + +void +PanelClient::set_imdata (const char* data, int len) +{ + m_impl->set_imdata (data, len); +} + +void +PanelClient::get_imdata (char* data, int* len) +{ + m_impl->get_imdata (data, len); +} + +void +PanelClient::get_ise_window_geometry (int* x, int* y, int* width, int* height) +{ + m_impl->get_ise_window_geometry (x, y, width, height); +} + +void +PanelClient::get_candidate_window_geometry (int* x, int* y, int* width, int* height) +{ + m_impl->get_candidate_window_geometry (x, y, width, height); +} + +void +PanelClient::get_ise_language_locale (char **locale) +{ + m_impl->get_ise_language_locale (locale); +} + +void +PanelClient::set_return_key_type (int type) +{ + m_impl->set_return_key_type (type); +} + +void +PanelClient::get_return_key_type (int &type) +{ + m_impl->get_return_key_type (type); +} + +void +PanelClient::set_return_key_disable (int disabled) +{ + m_impl->set_return_key_disable (disabled); +} + +void +PanelClient::get_return_key_disable (int &disabled) +{ + m_impl->get_return_key_disable (disabled); +} + +void +PanelClient::set_layout (int layout) +{ + m_impl->set_layout (layout); +} + +void +PanelClient::get_layout (int* layout) +{ + m_impl->get_layout (layout); +} + +void +PanelClient::set_ise_language (int language) +{ + m_impl->set_ise_language (language); +} + +void +PanelClient::set_caps_mode (int mode) +{ + m_impl->set_caps_mode (mode); +} + +void +PanelClient::send_will_show_ack (void) +{ + m_impl->send_will_show_ack (); +} + +void +PanelClient::send_will_hide_ack (void) +{ + m_impl->send_will_hide_ack (); +} + +void +PanelClient::set_hardware_keyboard_mode (void) +{ + m_impl->set_hardware_keyboard_mode (); +} + +void +PanelClient::send_candidate_will_hide_ack (void) +{ + m_impl->send_candidate_will_hide_ack (); +} + +bool +PanelClient::get_client_id (int &client_id) +{ + return m_impl->get_client_id (client_id); +} + +void +PanelClient::register_client (int client_id) +{ + m_impl->register_client (client_id); +} + void PanelClient::reset_signal_handler (void) { @@ -1295,9 +1815,15 @@ PanelClient::signal_connect_longpress_candidate (PanelClientSlotInt } Connection -PanelClient::signal_connect_update_client_id (PanelClientSlotInt *slot) +PanelClient::signal_connect_update_ise_input_context (PanelClientSlotIntInt *slot) +{ + return m_impl->signal_connect_update_ise_input_context (slot); +} + +Connection +PanelClient::signal_connect_update_isf_candidate_panel (PanelClientSlotIntInt *slot) { - return m_impl->signal_connect_update_client_id (slot); + return m_impl->signal_connect_update_isf_candidate_panel (slot); } } /* namespace scim */ diff --git a/ism/src/scim_panel_client.h b/ism/src/scim_panel_client.h index a3d1d658..a0f191d5 100644 --- a/ism/src/scim_panel_client.h +++ b/ism/src/scim_panel_client.h @@ -33,15 +33,17 @@ * * Modifications by Samsung Electronics Co., Ltd. * 1. Add new signals - * a. m_signal_select_aux, m_signal_reset_keyboard_ise and m_signal_update_client_id + * a. m_signal_select_aux, m_signal_reset_keyboard_ise * b. m_signal_update_candidate_item_layout and m_signal_update_displayed_candidate_number * c. m_signal_get_surrounding_text and m_signal_delete_surrounding_text * d. m_signal_show_preedit_string, m_signal_hide_preedit_string, m_signal_update_preedit_string and m_signal_update_preedit_caret * e. m_signal_candidate_more_window_show, m_signal_candidate_more_window_hide, m_signal_longpress_candidate + * f. m_signal_update_ise_input_context, m_signal_update_isf_candidate_panel * 2. Add new interface APIs in PanelClient class * a. update_cursor_position () and update_surrounding_text () * b. expand_candidate (), contract_candidate () and set_candidate_style () - * c. reset_input_context () and turn_on_log + * c. reset_input_context () and turn_on_log () + * d. get_client_id () and register_client () * * $Id: scim_panel_client.h,v 1.4 2005/06/26 16:35:33 suzhe Exp $ */ @@ -217,6 +219,30 @@ public: void expand_candidate (int icid); void contract_candidate (int icid); void set_candidate_style (int icid, ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line, ISF_CANDIDATE_MODE_T mode); + void show_ise (int client_id, int icid, void *data, int length, int *input_panel_show); + void hide_ise (int client_id, int icid); + void show_control_panel (void); + void hide_control_panel (void); + void set_imdata (const char* data, int len); + void get_imdata (char* data, int* len); + void get_ise_window_geometry (int* x, int* y, int* width, int* height); + void get_candidate_window_geometry (int* x, int* y, int* width, int* height); + void get_ise_language_locale (char **locale); + void set_return_key_type (int type); + void get_return_key_type (int &type); + void set_return_key_disable (int disabled); + void get_return_key_disable (int &disabled); + void set_layout (int layout); + void get_layout (int* layout); + void set_ise_language (int language); + void set_caps_mode (int mode); + void send_will_show_ack (void); + void send_will_hide_ack (void); + void set_hardware_keyboard_mode (void); + void send_candidate_will_hide_ack (void); + bool get_client_id (int &client_id); + void register_client (int client_id); + /** @} */ public: @@ -453,11 +479,18 @@ public: Connection signal_connect_longpress_candidate (PanelClientSlotInt *slot); /** - * @brief Signal: update client ID + * @brief Signal: update ise input context + * + * slot prototype: void update_ise_input_context (int context, int type, int value); + */ + Connection signal_connect_update_ise_input_context (PanelClientSlotIntInt *slot); + + /** + * @brief Signal: update isf candidate panel * - * slot prototype: void update_client_id (int context, int client_id); + * slot prototype: void update_isf_candidate_panel (int context, int type, int value); */ - Connection signal_connect_update_client_id (PanelClientSlotInt *slot); + Connection signal_connect_update_isf_candidate_panel (PanelClientSlotIntInt *slot); /** @} */ }; diff --git a/ism/src/scim_trans_commands.h b/ism/src/scim_trans_commands.h index 9a86c73e..2dc6306b 100644 --- a/ism/src/scim_trans_commands.h +++ b/ism/src/scim_trans_commands.h @@ -586,7 +586,6 @@ const int SCIM_TRANS_CMD_PANEL_REQUEST_FACTORY_MENU = 521; const int SCIM_TRANS_CMD_PANEL_CHANGE_FACTORY = 522; const int ISM_TRANS_CMD_PANEL_RESET_KEYBOARD_ISE = 523; const int ISM_TRANS_CMD_PANEL_UPDATE_KEYBOARD_ISE = 524; -const int ISM_TRANS_CMD_PANEL_UPDATE_CLIENT_ID = 525; // Helper Client To Panel const int SCIM_TRANS_CMD_PANEL_REGISTER_HELPER = 540; @@ -613,19 +612,18 @@ const int ISM_TRANS_CMD_SHOW_ISE_PANEL = 1000; const int ISM_TRANS_CMD_HIDE_ISE_PANEL = 1001; const int ISM_TRANS_CMD_SHOW_ISF_CONTROL = 1002; const int ISM_TRANS_CMD_HIDE_ISF_CONTROL = 1003; -const int ISM_TRANS_CMD_GET_LANGUAGE_LIST = 1004; -const int ISM_TRANS_CMD_GET_ISE_LANGUAGE = 1005; -const int ISM_TRANS_CMD_SET_ISF_LANGUAGE = 1006; -const int ISM_TRANS_CMD_GET_ALL_LANGUAGE_LIST = 1007; -const int ISM_TRANS_CMD_RESET_ISE_OPTION = 1008; -const int ISM_TRANS_CMD_SET_ACTIVE_ISE_BY_UUID = 1009; -const int ISM_TRANS_CMD_GET_ACTIVE_ISE = 1010; -const int ISM_TRANS_CMD_GET_ISE_LIST = 1011; -const int ISM_TRANS_CMD_GET_ISE_INFORMATION = 1012; -const int ISM_TRANS_CMD_SEND_WILL_SHOW_ACK = 1013; -const int ISM_TRANS_CMD_SEND_WILL_HIDE_ACK = 1014; -const int ISM_TRANS_CMD_RESET_DEFAULT_ISE = 1015; -const int ISM_TRANS_CMD_SEND_CANDIDATE_WILL_HIDE_ACK = 1016; +const int ISM_TRANS_CMD_RESET_ISE_OPTION = 1004; +const int ISM_TRANS_CMD_SET_ACTIVE_ISE_BY_UUID = 1005; +const int ISM_TRANS_CMD_GET_ACTIVE_ISE = 1006; +const int ISM_TRANS_CMD_GET_ISE_LIST = 1007; +const int ISM_TRANS_CMD_GET_ISE_INFORMATION = 1008; +const int ISM_TRANS_CMD_SEND_WILL_SHOW_ACK = 1009; +const int ISM_TRANS_CMD_SEND_WILL_HIDE_ACK = 1010; +const int ISM_TRANS_CMD_RESET_DEFAULT_ISE = 1011; +const int ISM_TRANS_CMD_SET_HARDWARE_KEYBOARD_MODE = 1012; +const int ISM_TRANS_CMD_SEND_CANDIDATE_WILL_HIDE_ACK = 1013; +const int ISM_TRANS_CMD_GET_PANEL_CLIENT_ID = 1014; +const int ISM_TRANS_CMD_REGISTER_PANEL_CLIENT = 1015; /* IMControl to ISE */ @@ -644,18 +642,9 @@ const int ISM_TRANS_CMD_GET_RETURN_KEY_TYPE = 1119; const int ISM_TRANS_CMD_SET_RETURN_KEY_DISABLE = 1120; const int ISM_TRANS_CMD_GET_RETURN_KEY_DISABLE = 1121; -/* ISE to IMControl */ -const int ISM_TRANS_CMD_UPDATE_ISE_HIDED = 1127; -const int ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT = 1128; - -/* Panel to IMControl */ -const int ISM_TRANS_CMD_ISE_PANEL_SHOWED = 1130; -const int ISM_TRANS_CMD_ISE_PANEL_HIDED = 1131; -const int ISM_TRANS_CMD_ISF_CONTROL_SHOWED = 1132; -const int ISM_TRANS_CMD_ISF_CONTROL_HIDED = 1133; -const int ISM_TRANS_CMD_UPDATE_ISF_CANDIDATE_PANEL = 1134; -const int ISM_TRANS_CMD_UPDATE_ISE_STYLE = 1135; -const int ISM_TRANS_CMD_ISE_CHANGED = 1136; +/* ISE/Panel to IMControl */ +const int ISM_TRANS_CMD_UPDATE_ISE_INPUT_CONTEXT = 1151; +const int ISM_TRANS_CMD_UPDATE_ISF_CANDIDATE_PANEL = 1152; /* ISE to Panel */