1
Index: gtk+2.0-2.17.3/gtk/gtkimmodule.c
2
===================================================================
3
--- gtk+2.0-2.17.3.orig/gtk/gtkimmodule.c 2009-06-04 21:18:04.000000000 +0200
4
+++ gtk+2.0-2.17.3/gtk/gtkimmodule.c 2009-07-09 17:41:30.000000000 +0200
6
#define GTK_IM_MODULE(im_module) (G_TYPE_CHECK_INSTANCE_CAST ((im_module), GTK_TYPE_IM_MODULE, GtkIMModule))
7
#define GTK_IS_IM_MODULE(im_module) (G_TYPE_CHECK_INSTANCE_TYPE ((im_module), GTK_TYPE_IM_MODULE))
9
+#define IMMODULEFILEEXT ".immodules"
10
+#define IMMODULEFILEEXT_LEN ((int) strlen (IMMODULEFILEEXT))
14
GTypeModule parent_instance;
19
-gtk_im_module_initialize (void)
20
+process_module_file (const gchar *filename, FILE *file)
22
GString *line_buf = g_string_new (NULL);
23
GString *tmp_buf = g_string_new (NULL);
24
- gchar *filename = gtk_rc_get_im_module_file();
26
gboolean have_error = FALSE;
28
GtkIMModule *module = NULL;
31
- contexts_hash = g_hash_table_new (g_str_hash, g_str_equal);
33
#define do_builtin(m) \
35
const GtkIMContextInfo **contexts; \
40
- file = g_fopen (filename, "r");
43
- /* In case someone wants only the default input method,
44
- * we allow no file at all.
46
- g_string_free (line_buf, TRUE);
47
- g_string_free (tmp_buf, TRUE);
52
while (!have_error && pango_read_line (file, line_buf))
57
add_module (module, infos);
60
g_string_free (line_buf, TRUE);
61
g_string_free (tmp_buf, TRUE);
66
+gtk_im_module_initialize (void)
68
+ gchar *im_module_file_str = gtk_rc_get_im_module_file();
69
+ gchar *im_module_files_d_str = g_build_filename (GTK_LIBDIR,
79
+ list_str = g_strjoin (G_SEARCHPATH_SEPARATOR_S,
80
+ im_module_files_d_str,
84
+ files = pango_split_file_list (list_str);
86
+ contexts_hash = g_hash_table_new (g_str_hash, g_str_equal);
94
+ GDir *dir = g_dir_open (files[n], 0, NULL);
99
+ while ((dent = g_dir_read_name (dir)))
101
+ int len = strlen (dent);
102
+ if (len > IMMODULEFILEEXT_LEN && strcmp (dent + len - IMMODULEFILEEXT_LEN, IMMODULEFILEEXT) == 0)
104
+ gchar *pathname = g_build_filename (files[n], dent, NULL);
105
+ file = g_fopen (pathname, "r");
108
+ process_module_file(pathname, file);
118
+ file = g_fopen (files[n], "r");
121
+ process_module_file(files[n], file);
127
+ g_strfreev (files);
129
+ g_free (im_module_files_d_str);
130
+ g_free (im_module_file_str);