From 4980747b565a652f5238080075d0e97a5084fdaa Mon Sep 17 00:00:00 2001 From: Haifeng Deng Date: Tue, 4 Dec 2012 17:34:00 +0800 Subject: [PATCH] Add focus_in and focus_out for IMControl Change-Id: I8080cda6cea5e8b13d66c87217e2697542ed0ab4 --- configure.ac | 4 +-- debian/changelog | 9 ++++++ ism/extras/efl_immodule/isf_imf_context.cpp | 2 ++ ism/extras/efl_immodule/isf_imf_control.cpp | 22 ++++++++++++-- ism/extras/efl_immodule/isf_imf_control.h | 3 ++ ism/extras/efl_immodule/isf_imf_control_ui.cpp | 41 ++++++++++++++++++++++---- ism/extras/efl_immodule/isf_imf_control_ui.h | 3 ++ ism/extras/efl_panel/isf_panel_efl.cpp | 28 ++++++++++-------- ism/src/isf_imcontrol_client.cpp | 18 +++++++++++ ism/src/isf_imcontrol_client.h | 2 ++ ism/src/scim_panel_agent.cpp | 3 +- packaging/isf.spec | 4 +-- releasenote.txt | 5 ++++ 13 files changed, 119 insertions(+), 25 deletions(-) diff --git a/configure.ac b/configure.ac index c6d06c7..bd7eb7c 100755 --- a/configure.ac +++ b/configure.ac @@ -1,6 +1,6 @@ # Process this file with autoconf to produce a configure script #AC_INIT(scim, 1.4.7, suzhe@tsinghua.org.cn) -AC_INIT(isf, 2.3.5930, isf@samsung.com) +AC_INIT(isf, 2.3.6004, isf@samsung.com) AC_CONFIG_SRCDIR([ism/src/scim.h]) m4_pattern_allow([^AS_]) @@ -11,7 +11,7 @@ m4_pattern_allow([^AS_]) # ISF version ISF_MAJOR_VERSION=2 ISF_MINOR_VERSION=3 -ISF_MICRO_VERSION=5929 +ISF_MICRO_VERSION=6004 ISF_VERSION=$ISF_MAJOR_VERSION.$ISF_MINOR_VERSION.$ISF_MICRO_VERSION diff --git a/debian/changelog b/debian/changelog index f48015c..47545c4 100755 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,12 @@ +isf (2.3.6004-1slp2+1) unstable; urgency=low + + * [immodule] Add focus_in and focus_out for IMControl + * Add ISF logs for no-ise-launching-at-first-boot in emulator + * Git: framework/uifw/isf + * Tag: isf_2.3.6004-1slp2+1 + + -- Haifeng Deng Tue, 04 Dec 2012 18:10:00 +0900 + isf (2.3.5930-1slp2+1) unstable; urgency=low * [immodule] Set using_ic in _event_callback_call diff --git a/ism/extras/efl_immodule/isf_imf_context.cpp b/ism/extras/efl_immodule/isf_imf_context.cpp index fbd9013..0f7ef8e 100644 --- a/ism/extras/efl_immodule/isf_imf_context.cpp +++ b/ism/extras/efl_immodule/isf_imf_context.cpp @@ -1081,6 +1081,8 @@ 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.prepare (context_scim->id); // Handle the "Shared Input Method" mode. diff --git a/ism/extras/efl_immodule/isf_imf_control.cpp b/ism/extras/efl_immodule/isf_imf_control.cpp index 6e66bac..0692e07 100644 --- a/ism/extras/efl_immodule/isf_imf_control.cpp +++ b/ism/extras/efl_immodule/isf_imf_control.cpp @@ -167,7 +167,7 @@ EAPI int _isf_imf_context_input_panel_hide (void) { connect_panel (); _imcontrol_client.prepare (); - _imcontrol_client.hide_ise(); + _imcontrol_client.hide_ise (); _imcontrol_client.send (); return 0; } @@ -204,7 +204,7 @@ EAPI int _isf_imf_context_input_panel_language_set (Ecore_IMF_Input_Panel_Lang l { connect_panel (); _imcontrol_client.prepare (); - _imcontrol_client.set_ise_language(lang); + _imcontrol_client.set_ise_language (lang); _imcontrol_client.send (); return 0; } @@ -321,6 +321,24 @@ EAPI int _isf_imf_context_candidate_window_geometry_get (int *x, int *y, int *w, return 0; } +EAPI int _isf_imf_context_control_focus_in (void) +{ + connect_panel (); + _imcontrol_client.prepare (); + _imcontrol_client.focus_in (); + _imcontrol_client.send (); + return 0; +} + +EAPI int _isf_imf_context_control_focus_out (void) +{ + connect_panel (); + _imcontrol_client.prepare (); + _imcontrol_client.focus_out (); + _imcontrol_client.send (); + return 0; +} + /* vi:ts=4:expandtab:nowrap */ diff --git a/ism/extras/efl_immodule/isf_imf_control.h b/ism/extras/efl_immodule/isf_imf_control.h index 79e16ad..f912554 100644 --- a/ism/extras/efl_immodule/isf_imf_control.h +++ b/ism/extras/efl_immodule/isf_imf_control.h @@ -56,6 +56,9 @@ extern "C" int _isf_imf_context_candidate_window_geometry_get (int *x, int *y, int *w, int *h); + int _isf_imf_context_control_focus_in (void); + int _isf_imf_context_control_focus_out (void); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/ism/extras/efl_immodule/isf_imf_control_ui.cpp b/ism/extras/efl_immodule/isf_imf_control_ui.cpp index 2e344e2..4834aa6 100644 --- a/ism/extras/efl_immodule/isf_imf_control_ui.cpp +++ b/ism/extras/efl_immodule/isf_imf_control_ui.cpp @@ -406,13 +406,13 @@ EAPI void isf_imf_context_input_panel_show (Ecore_IMF_Context* ctx) memcpy ((void *)((unsigned int)packet + sizeof (iseContext)), (void *)imdata, iseContext.imdata_size); - _isf_imf_context_input_panel_show (packet , length, input_panel_show); + _isf_imf_context_input_panel_show (packet, length, input_panel_show); if (input_panel_show == true) input_panel_state = ECORE_IMF_INPUT_PANEL_STATE_WILL_SHOW; free (packet); - caps_mode_check(ctx, EINA_TRUE, EINA_TRUE); + caps_mode_check (ctx, EINA_TRUE, EINA_TRUE); LOGD ("===============================================================\n"); } @@ -453,7 +453,8 @@ EAPI void isf_imf_context_input_panel_language_set (Ecore_IMF_Context *ctx, Ecor EAPI Ecore_IMF_Input_Panel_Lang isf_imf_context_input_panel_language_get (Ecore_IMF_Context *ctx) { IMFCONTROLUIDBG("[%s] language : %d\n", __func__, iseContext.language); - if (!IfInitContext) _isf_imf_context_init(); + if (!IfInitContext) + _isf_imf_context_init (); return iseContext.language; } @@ -684,9 +685,7 @@ EAPI void isf_imf_context_input_panel_event_callback_add (Ecore_IMF_Context *ctx void (*func) (void *data, Ecore_IMF_Context *ctx, int value), void *data) { - EventCallbackNode *fn = NULL; - - fn = (EventCallbackNode *)calloc (1, sizeof (EventCallbackNode)); + EventCallbackNode *fn = (EventCallbackNode *)calloc (1, sizeof (EventCallbackNode)); if (!fn) return; @@ -765,6 +764,36 @@ EAPI void isf_imf_context_candidate_window_geometry_get (Ecore_IMF_Context *ctx, } /** + * This method should be called when focus in + * + * @param[in] ctx a #Ecore_IMF_Context + */ +EAPI void isf_imf_context_control_focus_in (Ecore_IMF_Context *ctx) +{ + IMFCONTROLUIDBG("[%s]\n", __FUNCTION__); + + if (IfInitContext == false) { + _isf_imf_context_init (); + } + _isf_imf_context_control_focus_in (); +} + +/** + * This method should be called when focus out + * + * @param[in] ctx a #Ecore_IMF_Context + */ +EAPI void isf_imf_context_control_focus_out (Ecore_IMF_Context *ctx) +{ + IMFCONTROLUIDBG("[%s]\n", __FUNCTION__); + + if (IfInitContext == false) { + _isf_imf_context_init (); + } + _isf_imf_context_control_focus_out (); +} + +/** * process command message, ISM_TRANS_CMD_ISE_PANEL_SHOWED of ecore_ise_process_event() */ static bool _process_ise_panel_showed (void) diff --git a/ism/extras/efl_immodule/isf_imf_control_ui.h b/ism/extras/efl_immodule/isf_imf_control_ui.h index 429d787..a80a832 100644 --- a/ism/extras/efl_immodule/isf_imf_control_ui.h +++ b/ism/extras/efl_immodule/isf_imf_control_ui.h @@ -62,6 +62,9 @@ extern "C" void isf_imf_context_candidate_window_geometry_get (Ecore_IMF_Context *ctx, int *x, int *y, int *w, int *h); void input_panel_event_callback_call (Ecore_IMF_Input_Panel_Event type, int value); + void isf_imf_context_control_focus_in (Ecore_IMF_Context *ctx); + void isf_imf_context_control_focus_out (Ecore_IMF_Context *ctx); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/ism/extras/efl_panel/isf_panel_efl.cpp b/ism/extras/efl_panel/isf_panel_efl.cpp index f77af33..f86c819 100644 --- a/ism/extras/efl_panel/isf_panel_efl.cpp +++ b/ism/extras/efl_panel/isf_panel_efl.cpp @@ -372,9 +372,7 @@ static void set_keyboard_geometry_atom_info (VIRTUAL_KEYBOARD_STATE kbd_state) info.pos_y = _screen_height - info.height; } else { get_ise_geometry (info, kbd_state); - if (_candidate_mode == FLOATING_CANDIDATE_WINDOW) { - ; // Floating style - } else { + if (_candidate_mode == FIXED_CANDIDATE_WINDOW) { if (_candidate_window && evas_object_visible_get (_candidate_window)) { _candidate_valid_height = ui_candidate_get_valid_height (); if ((_candidate_height - _candidate_valid_height) > _ise_height) { @@ -634,7 +632,7 @@ static void ui_candidate_window_resize (int new_width, int new_height) if (evas_object_visible_get (_candidate_window)) _panel_agent->update_candidate_panel_event ((uint32)ECORE_IMF_CANDIDATE_PANEL_GEOMETRY_EVENT, 0); - if (evas_object_visible_get (_candidate_window)) { + if (evas_object_visible_get (_candidate_window) && _candidate_mode == FIXED_CANDIDATE_WINDOW) { height = ui_candidate_get_valid_height (); if ((_ise_width == 0 && _ise_height == 0) || (_ise_height > 0 && _candidate_valid_height != height) || @@ -886,7 +884,10 @@ static void ui_candidate_show (void) evas_object_show (_candidate_window); _panel_agent->update_candidate_panel_event ((uint32)ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT, (uint32)ECORE_IMF_CANDIDATE_PANEL_SHOW); - if (_candidate_mode != FLOATING_CANDIDATE_WINDOW) { + if (_candidate_mode == FIXED_CANDIDATE_WINDOW) { + if (!_ise_show) + _panel_agent->update_input_panel_event ((uint32)ECORE_IMF_INPUT_PANEL_STATE_EVENT, (uint32)ECORE_IMF_INPUT_PANEL_STATE_SHOW); + set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON); _panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0); } @@ -927,12 +928,14 @@ static void ui_candidate_hide (bool bForce) evas_object_hide (_candidate_window); _panel_agent->update_candidate_panel_event ((uint32)ECORE_IMF_CANDIDATE_PANEL_STATE_EVENT, (uint32)ECORE_IMF_CANDIDATE_PANEL_HIDE); - if (_candidate_mode != FLOATING_CANDIDATE_WINDOW) { + if (_candidate_mode == FIXED_CANDIDATE_WINDOW) { _panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0); - if (_ise_show) + if (_ise_show) { set_keyboard_geometry_atom_info (KEYBOARD_STATE_ON); - else + } else { set_keyboard_geometry_atom_info (KEYBOARD_STATE_OFF); + _panel_agent->update_input_panel_event ((uint32)ECORE_IMF_INPUT_PANEL_STATE_EVENT, (uint32)ECORE_IMF_INPUT_PANEL_STATE_HIDE); + } } } @@ -1423,8 +1426,11 @@ static void ui_settle_candidate_window (void) _candidate_x = spot_x; _candidate_y = spot_y; evas_object_move (_candidate_window, spot_x, spot_y); - if (evas_object_visible_get (_candidate_window)) + if (evas_object_visible_get (_candidate_window)) { _panel_agent->update_candidate_panel_event ((uint32)ECORE_IMF_CANDIDATE_PANEL_GEOMETRY_EVENT, 0); + if (_candidate_mode == FIXED_CANDIDATE_WINDOW) + _panel_agent->update_input_panel_event (ECORE_IMF_INPUT_PANEL_GEOMETRY_EVENT, 0); + } } if (!_candidate_window_show) @@ -2425,9 +2431,7 @@ static void slot_get_input_panel_geometry (struct rectinfo &info) info.pos_y = _screen_height - info.height; } else { get_ise_geometry (info, kbd_state); - if (_candidate_mode == FLOATING_CANDIDATE_WINDOW) { - ; // Floating style - } else { + if (_candidate_mode == FIXED_CANDIDATE_WINDOW) { if (_candidate_window && evas_object_visible_get (_candidate_window)) { int height = ui_candidate_get_valid_height (); if ((_candidate_height - height) > _ise_height) { diff --git a/ism/src/isf_imcontrol_client.cpp b/ism/src/isf_imcontrol_client.cpp index 512faa9..050a416 100644 --- a/ism/src/isf_imcontrol_client.cpp +++ b/ism/src/isf_imcontrol_client.cpp @@ -417,6 +417,14 @@ public: 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); + } }; IMControlClient::IMControlClient () @@ -568,6 +576,16 @@ 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 (); +} + }; /* diff --git a/ism/src/isf_imcontrol_client.h b/ism/src/isf_imcontrol_client.h index 890494f..7a70603 100644 --- a/ism/src/isf_imcontrol_client.h +++ b/ism/src/isf_imcontrol_client.h @@ -72,6 +72,8 @@ public: void get_ise_list (int* count, char*** iselist); void reset_ise_option (void); void set_caps_mode (int mode); + void focus_in (void); + void focus_out (void); }; } diff --git a/ism/src/scim_panel_agent.cpp b/ism/src/scim_panel_agent.cpp index c07a577..837c4a5 100644 --- a/ism/src/scim_panel_agent.cpp +++ b/ism/src/scim_panel_agent.cpp @@ -2348,7 +2348,6 @@ public: { SCIM_DEBUG_MAIN(4) << "PanelAgent::set_ise_caps_mode ()\n"; uint32 mode; - m_current_active_imcontrol_id = client_id; if (m_recv_trans.get_data (mode)) { if (TOOLBAR_HELPER_MODE == m_current_toolbar_mode) set_helper_caps_mode (m_current_helper_uuid, mode); @@ -3150,6 +3149,8 @@ private: 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; } socket_transaction_end (); diff --git a/packaging/isf.spec b/packaging/isf.spec index f628236..345a59f 100755 --- a/packaging/isf.spec +++ b/packaging/isf.spec @@ -1,10 +1,10 @@ -#sbs-git:framework/uifw/isf isf 2.3.5929 07f2b65224e6cef5cd6799065bb01fa656bc115e +#sbs-git:framework/uifw/isf isf 2.3.6004 07f2b65224e6cef5cd6799065bb01fa656bc115e %define _usrdir /usr %define _ugdir %{_usrdir}/ug Name: isf Summary: Input Service Framework -Version: 2.3.5930 +Version: 2.3.6004 Release: 1 Group: TO_BE/FILLED_IN License: LGPL diff --git a/releasenote.txt b/releasenote.txt index 44547cc..2504114 100755 --- a/releasenote.txt +++ b/releasenote.txt @@ -1,3 +1,8 @@ +ISF 2.3.6004 : + 1. [immodule] Add focus_in and focus_out for IMControl + 2. Add ISF logs for no-ise-launching-at-first-boot in emulator + + ISF 2.3.5930 : 1. [immodule] Set using_ic in _event_callback_call -- 2.7.4