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"
19 /* is this a character that could appear in a mim word */
21 is_mim_word_character (gunichar uc)
23 return (((uc >= 0x0590 && uc <= 0x5ff) || (uc >= 0xfb1d && uc <= 0xfb4f))
24 && g_unichar_isdefined (uc) && ! g_unichar_ispunct (uc));
30 at_initial_position (GtkIMContext *context)
37 if (! gtk_im_context_get_surrounding (context, &text, &cursor_index))
40 prevp = g_utf8_find_prev_char (text, text + cursor_index);
44 uc = g_utf8_get_char_validated (prevp, text + cursor_index - prevp);
45 g_return_val_if_fail (uc != (gunichar)(-1) && uc != (gunichar)(-2),
48 if (is_mim_word_character (uc))
55 mim_reset (GtkIMContext *context)
60 mim_filter_keypress (GtkIMContext *context,
66 if (event->type == GDK_KEY_RELEASE)
69 /* don't filter key events with accelerator modifiers held down */
71 & (gtk_accelerator_get_default_mod_mask () & ~GDK_SHIFT_MASK))
74 is_initial = at_initial_position (context);
80 mim_class_init (GtkIMContextClass *clazz)
82 clazz->filter_keypress = mim_filter_keypress;
83 clazz->reset = mim_reset;
87 mim_init (GtkIMContext *im_context)
93 mim_register_type (GTypeModule *module)
95 static const GTypeInfo object_info =
97 sizeof (GtkIMContextClass),
99 (GBaseFinalizeFunc) NULL,
100 (GClassInitFunc) mim_class_init,
101 NULL, /* class_finalize */
102 NULL, /* class_data */
103 sizeof (GtkIMContext),
105 (GInstanceInitFunc) mim_init,
109 g_type_module_register_type (module,
111 "GtkIMContextYiddishNoah",
116 static const GtkIMContextInfo mim_info =
119 N_("MiM"), /* Human readable name */
120 GETTEXT_PACKAGE, /* Translation domain */
121 LOCALEDIR, /* Dir for bindtextdomain */
122 "zh_CN", /* Languages for which this module is the default */
126 static const GtkIMContextInfo *info_list[] =
133 im_module_init (GTypeModule *module)
135 g_debug("mim-immodule imported!");
136 mim_register_type (module);
142 g_debug("mim-immodule released!");
146 im_module_list (const GtkIMContextInfo ***contexts, gint *n_contexts)
148 *contexts = info_list;
149 *n_contexts = G_N_ELEMENTS (info_list);
154 im_module_create (const gchar *context_id)
156 if (strcmp (context_id, "mim-n") == 0)
157 return GTK_IM_CONTEXT (g_object_new (type_mim, NULL));