Add isf_control_hide_ime () API 38/64438/3
authorHaifeng Deng <haifeng.deng@samsung.com>
Fri, 1 Apr 2016 07:33:13 +0000 (15:33 +0800)
committerHaifeng Deng <haifeng.deng@samsung.com>
Mon, 11 Apr 2016 08:46:06 +0000 (16:46 +0800)
Change-Id: I0de72142973da3c5d79b87fc1f485306b51f2319
Signed-off-by: Haifeng Deng <haifeng.deng@samsung.com>
12 files changed:
ism/modules/panelagent/ecoresocket/ecore_socket_panel_agent_module.cpp
ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp
ism/src/isf_control.cpp
ism/src/isf_control.h
ism/src/isf_imcontrol_client.cpp
ism/src/isf_imcontrol_client.h
ism/src/isf_info_manager.cpp
ism/src/isf_info_manager.h
ism/src/isf_panel_agent_base.cpp
ism/src/isf_panel_agent_base.h
ism/src/isf_panel_agent_manager.cpp
ism/src/isf_panel_agent_manager.h

index e80cbf7..eba4f86 100644 (file)
@@ -2791,6 +2791,15 @@ private:
                     }
 
                     trans.write_to_socket(client_socket);
+                } else if (cmd == ISM_TRANS_CMD_HIDE_ISE_PANEL) {
+                    Transaction trans;
+                    Socket client_socket(client_id);
+
+                    trans.clear();
+                    trans.put_command(SCIM_TRANS_CMD_REPLY);
+                    trans.put_command(SCIM_TRANS_CMD_OK);
+                    trans.write_to_socket(client_socket);
+                    m_info_manager->hide_helper_ise ();
                 } else {
                     LOGW ("unknow cmd: %d\n", cmd);
                 }
index 11821cf..2eb0073 100644 (file)
@@ -4376,6 +4376,17 @@ public:
         reload_config_callback (_config);
     }
 
+    void
+    hide_helper_ise (int id, uint32 context_id)
+    {
+        LOGD ("client id:%d", id);
+        WSCContextISF* ic = find_ic (context_id);
+
+        if (ic && ic->impl) {
+            wl_input_method_context_hide_input_panel (ic->im_ctx, ic->serial);
+        }
+    }
+
 };
 
 static scim::PanelAgentPointer instance;
index cfec1e5..6535459 100644 (file)
@@ -497,6 +497,26 @@ EXAPI int isf_control_get_recent_ime_geometry_with_rotation_angle (int angle, in
     return ret;
 }
 
+EXAPI int isf_control_hide_ime (void)
+{
+    IMControlClient imcontrol_client;
+    int ret = 0;
+
+    if (!imcontrol_client.open_connection ())
+        return -1;
+
+    imcontrol_client.prepare ();
+    if (!imcontrol_client.hide_helper_ise ()) {
+        LOGW ("hide_helper_ise failed");
+        ret = -1;
+    }
+
+    imcontrol_client.close_connection ();
+
+    return ret;
+}
+
+
 /*
 vi:ts=4:nowrap:ai:expandtab
 */
index 988efab..6f26b7b 100644 (file)
@@ -317,6 +317,16 @@ EXAPI int isf_control_get_recent_ime_geometry (int *x, int *y, int *w, int *h);
  * @return 0 if successfully, otherwise return -1;
  */
 EXAPI int isf_control_get_recent_ime_geometry_with_rotation_angle (int angle, int *x, int *y, int *w, int *h);
+
+/**
+ * @brief Requests to hide the input panel.
+ *
+ * @since_tizen 2.4
+ *
+ * @return 0 on success, otherwise return -1
+ */
+EXAPI int isf_control_hide_ime (void);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
index 978db7e..1b0827d 100644 (file)
@@ -561,6 +561,25 @@ public:
             return false;
         }
     }
+
+    bool hide_helper_ise (void) {
+        int cmd;
+        m_trans.put_command (ISM_TRANS_CMD_HIDE_ISE_PANEL);
+        m_trans.write_to_socket (m_socket_imclient2panel);
+        if (!m_trans.read_from_socket (m_socket_imclient2panel, m_socket_timeout)) {
+            std::cerr << __func__ << " read_from_socket() may be timeout \n";
+            return false;
+        }
+
+        if (m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_REPLY &&
+            m_trans.get_command (cmd) && cmd == SCIM_TRANS_CMD_OK) {
+            return true;
+        } else {
+            std::cerr << __func__ << " get_command() or get_data() may fail!!!\n";
+            return false;
+        }
+    }
+
 };
 
 IMControlClient::IMControlClient ()
@@ -681,6 +700,11 @@ bool IMControlClient::get_recent_ime_geometry (int *x, int *y, int *w, int *h, i
 {
     return m_impl->get_recent_ime_geometry (x, y, w, h, angle);
 }
+
+bool IMControlClient::hide_helper_ise (void)
+{
+    return m_impl->hide_helper_ise ();
+}
 };
 
 /*
index 75fe187..fd4f64c 100644 (file)
@@ -63,6 +63,7 @@ public:
     bool show_helper_ise_selector (void);
     bool is_helper_ise_enabled (const char* appid, int &enabled);
     bool get_recent_ime_geometry (int *x, int *y, int *w, int *h, int angle = -1);
+    bool hide_helper_ise (void);
 };
 
 }
index 02963c4..a32638e 100644 (file)
@@ -1365,6 +1365,17 @@ public:
         delete_ise_context_buffer ();
     }
 
+    void hide_helper_ise (void) {
+#ifdef WAYLAND
+        int    focused_client;
+        uint32 focused_context;
+        get_focused_context (focused_client, focused_context);
+        m_panel_agent_manager.hide_helper_ise (focused_client, focused_context);
+#else
+        m_signal_hide_ise ();
+#endif
+    }
+
     void set_default_ise (const DEFAULT_ISE_T& ise) {
         LOGD ("");
         scim_global_config_write (String (SCIM_GLOBAL_CONFIG_DEFAULT_ISE_UUID), ise.uuid);
@@ -4135,6 +4146,12 @@ void InfoManager::hide_ise_panel (int client_id, uint32 client, uint32 context)
     m_impl->hide_ise_panel (client_id, client, context);
 }
 
+//ISM_TRANS_CMD_HIDE_ISE_PANEL from ISF control
+void InfoManager::hide_helper_ise (void)
+{
+    m_impl->hide_helper_ise ();
+}
+
 //SCIM_TRANS_CMD_PROCESS_KEY_EVENT
 bool InfoManager::process_key_event (KeyEvent& key, _OUT_ uint32& result)
 {
index c1cd690..3795fd8 100644 (file)
@@ -640,6 +640,9 @@ public:
     //ISM_TRANS_CMD_HIDE_ISE_PANEL
     void hide_ise_panel (int client_id, uint32 client, uint32 context);
 
+    //ISM_TRANS_CMD_HIDE_ISE_PANEL from ISF control
+    void hide_helper_ise (void);
+
     //SCIM_TRANS_CMD_PROCESS_KEY_EVENT
     bool process_key_event (KeyEvent& key, _OUT_ uint32& result);
 
index 109754d..f4d2675 100644 (file)
@@ -488,6 +488,11 @@ void PanelAgentBase::helper_attach_input_context_and_update_screen (int client,
     LOGW ("not implemented for %s", m_name.c_str ());
 }
 
+void PanelAgentBase::hide_helper_ise (int client, uint32 context)
+{
+    LOGW ("not implemented for %s", m_name.c_str ());
+}
+
 
 } /* namespace scim */
 
index 21ad30d..cc40351 100644 (file)
@@ -772,6 +772,14 @@ public:
      */
     virtual void helper_attach_input_context_and_update_screen (int client, std::vector < std::pair <uint32, String> >& helper_ic_index, uint32 current_screen);
 
+    /**
+     * @brief hide_helper_ise.
+     *
+     * @param
+     *
+     * @return none.
+     */
+    virtual void hide_helper_ise (int client, uint32 context);
 };
 
 /**  @} */
index 6aba004..a174c61 100644 (file)
@@ -764,6 +764,14 @@ void PanelAgentManager::helper_attach_input_context_and_update_screen (int id, s
         _p->helper_attach_input_context_and_update_screen (id, helper_ic_index, current_screen);
 }
 
+void PanelAgentManager::hide_helper_ise (int id, uint32 context)
+{
+    PanelAgentPointer _p = m_impl->get_panel_agent_by_id (id);
+
+    if (!_p.null ())
+        _p->hide_helper_ise (id, context);
+}
+
 
 } /* namespace scim */
 
index ae126b9..a91d219 100644 (file)
@@ -340,6 +340,7 @@ public:
     void update_preedit_string (int target_client, uint32  target_context, WideString wstr, AttributeList& attrs, uint32 caret);
     void update_preedit_caret (int focused_client, uint32 focused_context, uint32 caret);
     void helper_attach_input_context_and_update_screen (int client, std::vector < std::pair <uint32, String> >& helper_ic_index, uint32 current_screen);
+    void hide_helper_ise (int id, uint32 context);
 };
 
 /**  @} */