2 * GTK+ MiM input module
9 #include <gtk/gtkimcontext.h>
10 #include <gtk/gtkimmodule.h>
11 #include <gdk/gdkkeysyms.h>
14 #include "im-extra-intl.h"
18 /* is this a character that could appear in a mim word */
20 is_mim_word_character(gunichar uc)
22 return (((uc >= 0x0590 && uc <= 0x5ff) || (uc >= 0xfb1d && uc <= 0xfb4f))
23 && g_unichar_isdefined(uc) && !g_unichar_ispunct(uc));
28 at_initial_position(GtkIMContext *context)
35 if (!gtk_im_context_get_surrounding(context, &text, &cursor_index))
38 prevp = g_utf8_find_prev_char(text, text + cursor_index);
42 uc = g_utf8_get_char_validated(prevp, text + cursor_index - prevp);
43 g_return_val_if_fail(uc != (gunichar)(-1) && uc != (gunichar)(-2), FALSE);
45 if (is_mim_word_character(uc))
52 mim_filter_keypress(GtkIMContext *context, GdkEventKey *event)
57 if (event->type == GDK_KEY_RELEASE)
60 /* don't filter key events with accelerator modifiers held down */
61 if (event->state & (gtk_accelerator_get_default_mod_mask()
65 is_initial = at_initial_position(context);
70 mim_set_client_window(GtkIMContext *context,
74 /* create new client window */
75 //mim_mui_create_window();
80 mim_reset(GtkIMContext *context)
85 mim_class_init(GtkIMContextClass *clazz)
87 clazz->filter_keypress = mim_filter_keypress;
88 clazz->reset = mim_reset;
89 clazz->set_client_window = mim_set_client_window;
93 mim_init(GtkIMContext *im_context)
98 mim_register_type(GTypeModule *module)
100 static const GTypeInfo object_info =
102 sizeof(GtkIMContextClass),
103 (GBaseInitFunc) NULL,
104 (GBaseFinalizeFunc) NULL,
105 (GClassInitFunc) mim_class_init,
106 NULL, /* class_finalize */
107 NULL, /* class_data */
108 sizeof(GtkIMContext),
110 (GInstanceInitFunc) mim_init,
113 type_mim = g_type_module_register_type(module,
115 "GtkIMContextYiddishNoah",
121 GtkIMContextInfo mim_info =
124 N_("MiM"), /* Human readable name */
125 GETTEXT_PACKAGE, /* Translation domain */
126 LOCALEDIR, /* Dir for bindtextdomain */
127 "zh_CN", /* Languages for which this module is the default */
131 GtkIMContextInfo *info_list[] =
137 im_module_init(GTypeModule *module)
139 g_debug("mim-immodule imported!");
140 mim_register_type(module);
146 g_debug("mim-immodule released!");
150 im_module_list(const GtkIMContextInfo ***contexts,
153 *contexts = info_list;
154 *n_contexts = G_N_ELEMENTS(info_list);
158 im_module_create(const gchar *context_id)
160 if (strcmp(context_id, "mim-n") == 0)
161 return GTK_IM_CONTEXT(g_object_new(type_mim, NULL));