From: Jihoon Kim <jihoon48.kim@samsung.com>
authorraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 29 Apr 2011 05:16:51 +0000 (05:16 +0000)
committerraster <raster@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Fri, 29 Apr 2011 05:16:51 +0000 (05:16 +0000)
Subject: [E-devel] [PATCH] Add ecore_imf_context_autocapital_type_{set, get},

To support the autocapitalization feature, I'd like to add
ecore_imf_context_autocapital_type_{set,get} API.
I will implement the autocapital feature in immodule, so the immodule
should know the autocapitalization type.
This API is for letting immodule know the autocapitalization type.

In addition, ecore_imf_context_prediction_allow_set API is used to set
whether the IM context should allow to use the text prediction.

git-svn-id: http://svn.enlightenment.org/svn/e/trunk/ecore@59025 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

ChangeLog
src/lib/ecore_imf/Ecore_IMF.h
src/lib/ecore_imf/ecore_imf_context.c
src/lib/ecore_imf/ecore_imf_private.h

index b57d937..085111e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
         monotonic clock through mach specific APIs that are perfectly suited
         for usage in ecore_timer.
 
+2011-04-20  Jihoon Kim
+
+        * Ecore_IMF: Added support for auto-capitalization and prediction
+        control API's
+
index e015bde..161c9f8 100644 (file)
@@ -120,6 +120,14 @@ typedef enum
    ECORE_IMF_PREEDIT_TYPE_SUB3
 } Ecore_IMF_Preedit_Type;
 
+typedef enum
+{
+   ECORE_IMF_AUTOCAPITAL_TYPE_NONE,
+   ECORE_IMF_AUTOCAPITAL_TYPE_WORD,
+   ECORE_IMF_AUTOCAPITAL_TYPE_SENTENCE,
+   ECORE_IMF_AUTOCAPITAL_TYPE_ALLCHARACTER
+} Ecore_IMF_Autocapital_Type;
+
 struct _Ecore_IMF_Event_Preedit_Start
 {
    Ecore_IMF_Context *ctx;
@@ -295,6 +303,8 @@ struct _Ecore_IMF_Context_Class
    void (*input_mode_set)      (Ecore_IMF_Context *ctx, Ecore_IMF_Input_Mode input_mode);
    Eina_Bool (*filter_event)   (Ecore_IMF_Context *ctx, Ecore_IMF_Event_Type type, Ecore_IMF_Event *event);
    void (*preedit_string_with_attributes_get) (Ecore_IMF_Context *ctx, char **str, Eina_List **attrs, int *cursor_pos);
+   void (*prediction_allow_set)(Ecore_IMF_Context *ctx, Eina_Bool prediction);
+   void (*autocapital_type_set)(Ecore_IMF_Context *ctx, Ecore_IMF_Autocapital_Type autocapital_type);
 };
 
 struct _Ecore_IMF_Context_Info
@@ -348,6 +358,10 @@ EAPI void                          ecore_imf_context_preedit_end_event_add(Ecore
 EAPI void                          ecore_imf_context_preedit_changed_event_add(Ecore_IMF_Context *ctx);
 EAPI void                          ecore_imf_context_commit_event_add(Ecore_IMF_Context *ctx, const char *str);
 EAPI void                          ecore_imf_context_delete_surrounding_event_add(Ecore_IMF_Context *ctx, int offset, int n_chars);
+EAPI void                          ecore_imf_context_prediction_allow_set(Ecore_IMF_Context *ctx, Eina_Bool prediction);
+EAPI Eina_Bool                     ecore_imf_context_prediction_allow_get(Ecore_IMF_Context *ctx);
+EAPI void                          ecore_imf_context_autocapital_type_set(Ecore_IMF_Context *ctx, Ecore_IMF_Autocapital_Type autocapital_type);
+EAPI Ecore_IMF_Autocapital_Type    ecore_imf_context_autocapital_type_get(Ecore_IMF_Context *ctx);
 
 /* The following entry points must be exported by each input method module
  */
index 53503be..50b6a87 100644 (file)
@@ -175,6 +175,15 @@ ecore_imf_context_add(const char *id)
    /* default use_preedit is EINA_TRUE, so let's make sure it's
     * set on the immodule */
    ecore_imf_context_use_preedit_set(ctx, EINA_TRUE);
+
+   /* default prediction is EINA_TRUE, so let's make sure it's
+    * set on the immodule */
+   ecore_imf_context_prediction_allow_set(ctx, EINA_TRUE);
+
+   /* default autocapital type is SENTENCE type, so let's make sure it's
+    * set on the immodule */
+   ecore_imf_context_autocapital_type_set(ctx, ECORE_IMF_AUTOCAPITAL_TYPE_SENTENCE);
+
    /* default input_mode is ECORE_IMF_INPUT_MODE_FULL, so let's make sure it's
     * set on the immodule */
    ecore_imf_context_input_mode_set(ctx, ECORE_IMF_INPUT_MODE_FULL);
@@ -513,6 +522,96 @@ ecore_imf_context_use_preedit_set(Ecore_IMF_Context *ctx, Eina_Bool use_preedit)
 }
 
 /**
+ * Set whether the IM context should allow to use the text prediction.
+ * If @prediction is EINA_FALSE (default is EINA_TRUE), then the IM context will not display the text prediction window.
+ *
+ * @param ctx An #Ecore_IMF_Context.
+ * @param prediction Whether the IM context should allow to use the text prediction.
+ * @ingroup Ecore_IMF_Context_Group
+ * @since 1.1.0
+ */
+EAPI void
+ecore_imf_context_prediction_allow_set(Ecore_IMF_Context *ctx, Eina_Bool prediction)
+{
+   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
+     {
+        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
+                         "ecore_imf_context_prediction_allow_set");
+        return;
+     }
+
+   ctx->allow_prediction = prediction;
+
+   if (ctx->klass->prediction_allow_set)
+     ctx->klass->prediction_allow_set(ctx, prediction);
+}
+
+/**
+ * Get whether the IM context should allow to use the text prediction.
+ *
+ * @param ctx An #Ecore_IMF_Context.
+ * @return EINA_TRUE if it allows to use the text prediction, otherwise EINA_FALSE.
+ * @ingroup Ecore_IMF_Context_Group
+ * @since 1.1.0
+ */
+EAPI Eina_Bool
+ecore_imf_context_prediction_allow_get(Ecore_IMF_Context *ctx)
+{
+   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
+     {
+        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
+                         "ecore_imf_context_prediction_allow_get");
+        return EINA_FALSE;
+     }
+
+   return ctx->allow_prediction;
+}
+
+/**
+ * Set the autocapitalization type on the immodule. 
+ *
+ * @param ctx An #Ecore_IMF_Context.
+ * @param autocapital_type the autocapitalization type.
+ * @ingroup Ecore_IMF_Context_Group
+ * @since 1.1.0
+ */
+EAPI void
+ecore_imf_context_autocapital_type_set(Ecore_IMF_Context *ctx, Ecore_IMF_Autocapital_Type autocapital_type)
+{
+   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
+     {
+        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
+                         "ecore_imf_context_autocapital_type_set");
+        return;
+     }
+
+   ctx->autocapital_type = autocapital_type;
+
+   if (ctx->klass->autocapital_type_set) ctx->klass->autocapital_type_set(ctx, autocapital_type);
+}
+
+/**
+ * Get the autocapitalization type.
+ *
+ * @param ctx An #Ecore_IMF_Context.
+ * @return The autocapital type being used by @p ctx.
+ * @ingroup Ecore_IMF_Context_Group
+ * @since 1.1.0
+ */
+EAPI Ecore_IMF_Autocapital_Type
+ecore_imf_context_autocapital_type_get(Ecore_IMF_Context *ctx)
+{
+   if (!ECORE_MAGIC_CHECK(ctx, ECORE_MAGIC_CONTEXT))
+     {
+        ECORE_MAGIC_FAIL(ctx, ECORE_MAGIC_CONTEXT,
+                         "ecore_imf_context_autocapital_allow_get");
+        return ECORE_IMF_AUTOCAPITAL_TYPE_NONE;
+     }
+
+   return ctx->autocapital_type;
+}
+
+/**
  * Set the callback to be used on get_surrounding request.
  *
  * This callback will be called when the Input Method Context
index 3137272..74f4836 100644 (file)
@@ -47,6 +47,8 @@ struct _Ecore_IMF_Context
    void                          *client_canvas;
    Eina_Bool                    (*retrieve_surrounding_func)(void *data, Ecore_IMF_Context *ctx, char **text, int *cursor_pos);
    void                          *retrieve_surrounding_data;
+   Ecore_IMF_Autocapital_Type     autocapital_type;
+   Eina_Bool                      allow_prediction : 1;
 };
 
 struct _Ecore_IMF_Module