diff options
author | mezz <mezz@df743ca5-7f9a-e211-a948-0013205c9059> | 2006-08-01 13:14:21 +0800 |
---|---|---|
committer | mezz <mezz@df743ca5-7f9a-e211-a948-0013205c9059> | 2006-08-01 13:14:21 +0800 |
commit | 0498f266b25d0a46842901cb0f18836089919efa (patch) | |
tree | 1de361dd8a069e814506cbeb6ba4828ed3cee950 /textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c | |
parent | 64746be81f4b29b299031c00b6f738aceddf97b6 (diff) | |
download | marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.tar marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.tar.gz marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.tar.bz2 marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.tar.lz marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.tar.xz marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.tar.zst marcuscom-ports-0498f266b25d0a46842901cb0f18836089919efa.zip |
X11BASE -> LOCALBASE, gtk-query-immodules-2.0 lives in LOCALBASE. Bump the
PORTREVISION.
git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@6920 df743ca5-7f9a-e211-a948-0013205c9059
Diffstat (limited to 'textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c')
-rw-r--r-- | textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c b/textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c new file mode 100644 index 000000000..7a460ff26 --- /dev/null +++ b/textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c @@ -0,0 +1,149 @@ +--- iiimgcf/gtkimcontextiiim.c.orig Fri Apr 22 07:46:48 2005 ++++ iiimgcf/gtkimcontextiiim.c Tue May 17 23:33:11 2005 +@@ -39,6 +39,7 @@ + #include "imaux.h" + #include "imswitcher.h" + #include "IIIMGdkEventKey.h" ++#include "iconv.h" + + #ifdef DEBUG + #define DEBUG_DO(x) (x) +@@ -147,6 +148,8 @@ + static GdkAtom im_settings_atom = GDK_NONE; + static const char *_IM_SETTINGS = "_IM_SETTINGS"; + ++static iconv_t ic_u16_to_u8 = (iconv_t)-1; ++ + static gboolean on_status_toplevel_configure (GtkWidget *toplevel, + GdkEventConfigure *event, + StatusWindow *status_window); +@@ -305,6 +308,7 @@ + return; + } + utf8 = utf16_to_utf8 (text); ++ if (!utf8) utf8 = g_strdup(""); + + if (current_setting_enabled && + (current_setting.im_enabled == IM_OFF || +@@ -593,9 +597,12 @@ + IIIMCF_text text; + gchar *utf8 = NULL; + st = iiimcf_get_committed_text (c, &text); ++ if (st != IIIMF_STATUS_SUCCESS) break; + utf8 = utf16_to_utf8 (text); +- g_signal_emit_by_name (context_iiim, "commit", utf8); +- g_free (utf8); ++ if (utf8) { ++ g_signal_emit_by_name (context_iiim, "commit", utf8); ++ g_free (utf8); ++ } + } + break; + default: +@@ -936,7 +943,7 @@ + return; + } + +- gtk_frame_set_label(GTK_FRAME (cw->frame), title_u8); ++ gtk_frame_set_label(GTK_FRAME (cw->frame), (title_u8 ? title_u8 : "")); + + if (title_u8) + g_free (title_u8); +@@ -975,6 +982,7 @@ + if (label) + label_u8 = utf16_to_utf8 (label); + candidate_u8 = utf16_to_utf8 (candidate); ++ if (!candidate_u8) candidate_u8 = g_strdup(""); + DEBUG_DO (g_message ("candidate %s", candidate_u8)); + if (label_u8) + { +@@ -997,12 +1005,9 @@ + gtk_tree_view_get_selection (GTK_TREE_VIEW (cw->tree)); + gtk_tree_selection_select_iter (selection, &iter); + } +- if (result) +- { +- g_free (result); +- g_free (label_u8); +- } +- g_free (candidate_u8); ++ if (result) g_free(result); ++ if (candidate_u8) g_free (candidate_u8); ++ if (label_u8) g_free(label_u8); + } + gtk_widget_realize (w); + iiim_candidate_move (context_iiim, w); +@@ -1187,7 +1192,7 @@ + w->toplevel = gtk_window_new (GTK_WINDOW_POPUP); + gtk_container_set_border_width (GTK_CONTAINER (w->toplevel), 2); + +- w->frame = gtk_frame_new (title_u8); ++ w->frame = gtk_frame_new (title_u8 ? title_u8 : ""); + gtk_frame_set_shadow_type (GTK_FRAME (w->frame), GTK_SHADOW_ETCHED_OUT); + + w->tree = gtk_tree_view_new (); +@@ -1539,14 +1544,52 @@ + } + + static gchar * ++iconv_utf16_to_utf8(const gunichar2 *utf16, int length) ++{ ++ if (!utf16 || 0 >= length) return g_strdup(""); ++ ++ if ((iconv_t)-1 == ic_u16_to_u8) { ++ ic_u16_to_u8 = iconv_open("UTF-8", "UTF-16"); ++ ++ if ((iconv_t)-1 == ic_u16_to_u8) { ++ fprintf(stderr, "iiimgcf: Unable to open UTF-16 -> UTF-8 converter."); ++ return NULL; ++ } ++ } ++ ++ int inlen = length * sizeof(gunichar2); ++ int outlen = (length +1) * 4; ++ const char *inbuf = (char*)utf16; ++ char *outbuf = g_malloc0(outlen + 4); ++ gchar *utf8 = (gchar*)outbuf; ++ ++ if (!outbuf) { ++ fprintf(stderr, "iiimgcf: Out of memory error."); ++ return NULL; ++ } ++ ++ if ((size_t)-1 == iconv(ic_u16_to_u8, &inbuf, &inlen, &outbuf, &outlen)) { ++ fprintf(stderr, "iiimgcf: Unable to convert the string."); ++ g_free(utf8); ++ return NULL; ++ } ++ ++ return utf8; ++} ++ ++static gchar * + utf16_to_utf8 (IIIMCF_text text) + { + IIIMF_status st; ++ ++ int len = 0; + IIIMP_card16 *u16str = NULL; + st = iiimcf_get_text_utf16string (text, (const IIIMP_card16 **) &u16str); +- return (u16str != NULL ? +- g_utf16_to_utf8 ((const gunichar2 *) u16str, -1, NULL, NULL, NULL) : +- NULL); ++ st = iiimcf_get_text_length(text, &len); ++ ++ if (st != IIIMF_STATUS_SUCCESS) return NULL; ++ ++ return iconv_utf16_to_utf8((const gunichar2 *)u16str, len); + } + + static void +@@ -2094,7 +2137,7 @@ + goto Error; + utf8 = utf16_to_utf8 (text); + +- if (attrs) ++ if (attrs && utf8) + { + gint i; + gint j; |