Tizen 2.1 base
[framework/uifw/ecore.git] / src / modules / immodules / ibus / ibus_module.c
1 #include <ibus.h>
2 #include "ibus_imcontext.h"
3 #include <Ecore_IMF.h>
4 #include <Ecore.h>
5 #include <stdio.h>
6
7 #define IBUS_LOCALDIR ""
8 static const Ecore_IMF_Context_Info ibus_im_info = {
9     "ibus",
10     "IBus (Intelligent Input Bus)",
11     "*",
12     NULL,
13     0
14 };
15
16 static Ecore_IMF_Context_Class ibus_imf_class = {
17     ibus_im_context_add,                    /* add */
18     ibus_im_context_del,                    /* del */
19     ibus_im_context_client_window_set,      /* client_window_set */
20     ibus_im_context_client_canvas_set,      /* client_canvas_set */
21     NULL,                                   /* input_panel_show */
22     NULL,                                   /* input_panel_hide */
23     ibus_im_context_preedit_string_get,     /* get_preedit_string */
24     ibus_im_context_focus_in,               /* focus_in */
25     ibus_im_context_focus_out,              /* focus_out */
26     ibus_im_context_reset,                  /* reset */
27     NULL,                                   /* cursor_position_set */
28     ibus_im_context_use_preedit_set,        /* use_preedit_set */
29     NULL,                                   /* input_mode_set */
30     ibus_im_context_filter_event,           /* filter_event */
31     ibus_im_context_preedit_string_with_attributes_get,  /* preedit_string_with_attribute_get */
32     NULL,                                   /* prediction_allow_set */
33     NULL,                                   /* autocapital_type_set */
34     NULL,                                   /* control panel show */
35     NULL,                                   /* control panel hide */
36     NULL,                                   /* input_panel_layout_set */
37     NULL,                                   /* ibus_im_context_input_panel_layout_get, */
38     NULL,                                   /* ibus_im_context_input_panel_language_set, */
39     NULL,                                   /* ibus_im_context_input_panel_language_get, */
40     ibus_im_context_cursor_location_set,    /* cursor_location_set */
41     NULL,                                   /* input_panel_imdata_set */
42     NULL,                                   /* input_panel_imdata_get */
43     NULL,                                   /* input_panel_return_key_type_set */
44     NULL,                                   /* input_panel_return_key_disabled_set */
45     NULL,                                   /* input_panel_caps_lock_mode_set */
46     NULL,
47     NULL,
48     NULL,
49     NULL,
50     NULL,
51     NULL
52 };
53
54 static Ecore_IMF_Context *im_module_create (void);
55 static Ecore_IMF_Context *im_module_exit (void);
56
57 static Eina_Bool
58 im_module_init(void)
59 {
60     ecore_main_loop_glib_integrate();
61     ibus_init();
62     ecore_imf_module_register(&ibus_im_info, im_module_create, im_module_exit);
63
64     return EINA_TRUE;
65 }
66
67 static void im_module_shutdown(void)
68 {
69 }
70
71 static Ecore_IMF_Context *
72 im_module_exit(void)
73 {
74     return NULL;
75 }
76
77 static Ecore_IMF_Context *
78 im_module_create()
79 {
80     Ecore_IMF_Context *ctx = NULL;
81     IBusIMContext *ctxd = NULL;
82
83     ctxd = ibus_im_context_new();
84     if (!ctxd)
85       {
86          return NULL;
87       }
88
89     ctx = ecore_imf_context_new(&ibus_imf_class);
90     if (!ctx)
91       {
92          free(ctxd);
93          return NULL;
94       }
95
96     ecore_imf_context_data_set(ctx, ctxd);
97
98     return ctx;
99 }
100
101 EINA_MODULE_INIT(im_module_init);
102 EINA_MODULE_SHUTDOWN(im_module_shutdown);
103