ecore_imf/wayland: support autocapital mode in wayland text input
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 27 May 2015 05:39:37 +0000 (14:39 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Wed, 27 May 2015 05:39:37 +0000 (14:39 +0900)
@feature

src/modules/ecore_imf/wayland/wayland_imcontext.c
src/modules/ecore_imf/wayland/wayland_imcontext.h
src/modules/ecore_imf/wayland/wayland_module.c

index adc5367..3e13081 100644 (file)
@@ -76,6 +76,7 @@ struct _WaylandIMContext
    uint32_t serial;
    uint32_t reset_serial;
    uint32_t content_purpose;
+   uint32_t content_hint;
 };
 
 static unsigned int
@@ -646,7 +647,7 @@ wayland_im_context_focus_in(Ecore_IMF_Context *ctx)
                                ecore_wl_window_surface_get(imcontext->window));
 
         wl_text_input_set_content_type(imcontext->text_input,
-                                       WL_TEXT_INPUT_CONTENT_HINT_NONE,
+                                       imcontext->content_hint,
                                        imcontext->content_purpose);
      }
 }
@@ -818,6 +819,23 @@ wayland_im_context_cursor_location_set(Ecore_IMF_Context *ctx, int x, int y, int
      }
 }
 
+EAPI void wayland_im_context_autocapital_type_set(Ecore_IMF_Context *ctx,
+                                                  Ecore_IMF_Autocapital_Type autocapital_type)
+{
+   WaylandIMContext *imcontext = (WaylandIMContext *)ecore_imf_context_data_get(ctx);
+
+   imcontext->content_hint &= ~(WL_TEXT_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION |
+                                WL_TEXT_INPUT_CONTENT_HINT_UPPERCASE |
+                                WL_TEXT_INPUT_CONTENT_HINT_LOWERCASE);
+
+   if (autocapital_type == ECORE_IMF_AUTOCAPITAL_TYPE_SENTENCE)
+     imcontext->content_hint |= WL_TEXT_INPUT_CONTENT_HINT_AUTO_CAPITALIZATION;
+   else if (autocapital_type == ECORE_IMF_AUTOCAPITAL_TYPE_ALLCHARACTER)
+     imcontext->content_hint |= WL_TEXT_INPUT_CONTENT_HINT_UPPERCASE;
+   else
+     imcontext->content_hint |= WL_TEXT_INPUT_CONTENT_HINT_LOWERCASE;
+}
+
 EAPI void
 wayland_im_context_input_panel_layout_set(Ecore_IMF_Context *ctx, Ecore_IMF_Input_Panel_Layout layout)
 {
index 111dd5f..9ec9f30 100644 (file)
@@ -60,6 +60,9 @@ EAPI void wayland_im_context_cursor_location_set(Ecore_IMF_Context    *ctx,
                                                  int                   width,
                                                  int                   height);
 
+EAPI void wayland_im_context_autocapital_type_set(Ecore_IMF_Context *ctx,
+                                                  Ecore_IMF_Autocapital_Type autocapital_type);
+
 EAPI void wayland_im_context_input_panel_layout_set(Ecore_IMF_Context *ctx,
                                                     Ecore_IMF_Input_Panel_Layout layout);
 
index d189d6b..3e83f74 100644 (file)
@@ -61,7 +61,7 @@ static Ecore_IMF_Context_Class wayland_imf_class =
    wayland_im_context_filter_event,           /* filter_event */
    wayland_im_context_preedit_string_with_attributes_get, /* preedit_string_with_attribute_get */
    NULL,                                      /* prediction_allow_set */
-   NULL,                                      /* autocapital_type_set */
+   wayland_im_context_autocapital_type_set,   /* autocapital_type_set */
    NULL,                                      /* control panel show */
    NULL,                                      /* control panel hide */
    wayland_im_context_input_panel_layout_set, /* input_panel_layout_set */