Add interface to send private command from IME to application in wayland frontend 44/48644/1
authorJihoon Kim <jihoon48.kim@samsung.com>
Thu, 24 Sep 2015 06:11:25 +0000 (15:11 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Thu, 24 Sep 2015 06:11:25 +0000 (15:11 +0900)
Change-Id: If0526c9b658e40d58005dfad25d4669fc23292da

ism/extras/efl_wsc/isf_wsc_context.cpp

index e8670ab..5e329c1 100644 (file)
@@ -161,7 +161,8 @@ static void     panel_slot_delete_surrounding_text      (int
 static void     panel_slot_set_selection                (int                     context,
                                                          int                     start,
                                                          int                     end);
-
+static void     panel_slot_send_private_command         (int                     context,
+                                                         const String           &command);
 static void     panel_req_focus_in                      (WSCContextISF     *ic);
 static void     panel_req_update_factory_info           (WSCContextISF     *ic);
 static void     panel_req_update_spot_location          (WSCContextISF     *ic);
@@ -253,6 +254,9 @@ static void     slot_set_candidate_style                (IMEngineInstanceBase
                                                          ISF_CANDIDATE_PORTRAIT_LINE_T portrait_line,
                                                          ISF_CANDIDATE_MODE_T    mode);
 
+static void     slot_send_private_command               (IMEngineInstanceBase   *si,
+                                                         const String           &command);
+
 static void     reload_config_callback                  (const ConfigPointer    &config);
 
 static void     fallback_commit_string_cb               (IMEngineInstanceBase   *si,
@@ -2471,6 +2475,17 @@ panel_slot_set_selection (int context, int start, int end)
 }
 
 static void
+panel_slot_send_private_command (int context, const String &command)
+{
+    SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+
+    WSCContextISF *ic = find_ic (context);
+
+    if (ic && ic->impl && ic->impl->si && _focused_ic == ic)
+        slot_send_private_command (ic->impl->si, command);
+}
+
+static void
 panel_slot_update_displayed_candidate_number (int context, int number)
 {
     WSCContextISF *ic = find_ic (context);
@@ -2652,6 +2667,7 @@ initialize (void)
     _panel_client.signal_connect_longpress_candidate           (slot (panel_slot_longpress_candidate));
     _panel_client.signal_connect_update_ise_input_context      (slot (panel_slot_update_ise_input_context));
     _panel_client.signal_connect_update_isf_candidate_panel    (slot (panel_slot_update_isf_candidate_panel));
+    _panel_client.signal_connect_send_private_command          (slot (panel_slot_send_private_command));
 
     if (!panel_initialize ()) {
         std::cerr << "Ecore IM Module: Cannot connect to Panel!\n";
@@ -3012,6 +3028,9 @@ attach_instance (const IMEngineInstancePointer &si)
 
     si->signal_connect_set_candidate_style (
         slot (slot_set_candidate_style));
+
+    si->signal_connect_send_private_command (
+        slot (slot_send_private_command));
 }
 
 // Implementation of slot functions
@@ -3449,6 +3468,20 @@ slot_set_candidate_style (IMEngineInstanceBase *si, ISF_CANDIDATE_PORTRAIT_LINE_
 }
 
 static void
+slot_send_private_command (IMEngineInstanceBase *si,
+                           const String &command)
+{
+    SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";
+
+    WSCContextISF *ic = static_cast<WSCContextISF *> (si->get_frontend_data ());
+
+    if (_focused_ic && _focused_ic == ic) {
+        if (_focused_ic->ctx && _focused_ic->ctx->im_ctx)
+            wl_input_method_context_private_command (_focused_ic->ctx->im_ctx, _focused_ic->ctx->serial, command.c_str ());
+    }
+}
+
+static void
 reload_config_callback (const ConfigPointer &config)
 {
     SCIM_DEBUG_FRONTEND(1) << __FUNCTION__ << "...\n";