imhangul에서 안마태 자판이 선택되는 현상 해결하기
Posted by 마냥 on the 16th of December, 2012 at 1:02 pm under 컴퓨터. This post has no comments.지난번에 웹비넷으로 옮기고 테스트할 때 젠투리눅스 업데이트를 했는데 파이어폭스에서 입력기가 안마태 자판으로 설정되는 문제가 있었다. 일단 gtk.immodules에서 imhangul 목록을 내가 쓰는것만 남기고 지워서 썼는데, gtk.immodules가 업데이트 되면 자꾸 안마태 자판이 떠서 원인을 찾아봤다.
원인은 http://git.gnome.org/browse/gtk+/commit/gtk/gtkimmodule.c?id=4d7e47ddd0590a6cad1bdf5d785203e8aa9f259e 에 있었다. GTK_IM_MODULE 환경변수는 이전에는 하나만 지원했는데 : 을 구분자로 fallback을 추가할 수 있도록 바뀌었다. 그러면서 추가된 lookup_immodule 함수가 문제였다. GTK_IM_MODULE에서 설정한 context를 가지고 찾은 immodule의 첫번째 context를 return하면서 자꾸 안마태 자판이 나온 것이다.
코드는 간단히 immodule이 가지고 있는 context중에 실제 요청한 context를 return하도록 고치면 된다.
--- gtk+-2.24.12/gtk/gtkimmodule.c.orig 2012-12-14 09:42:51.500009901 +0900
+++ gtk+-2.24.12/gtk/gtkimmodule.c 2012-12-14 09:58:14.960465057 +0900
@@ -662,7 +662,16 @@
GtkIMModule *module;
module = g_hash_table_lookup (contexts_hash, *immodules_list);
if (module)
- return module->contexts[0]->context_id;
+ {
+ int i;
+ for (i = 0; i < module->n_contexts; i++)
+ {
+ if (strcmp (module->contexts[i]->context_id, *immodules_list) == 0)
+ return module->contexts[i]->context_id;
+ }
+
+ return NULL;
+ }
}
immodules_list++;
}

