summaryrefslogtreecommitdiffstats
path: root/textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c
diff options
context:
space:
mode:
authormezz <mezz@df743ca5-7f9a-e211-a948-0013205c9059>2006-08-01 13:14:21 +0800
committermezz <mezz@df743ca5-7f9a-e211-a948-0013205c9059>2006-08-01 13:14:21 +0800
commit0498f266b25d0a46842901cb0f18836089919efa (patch)
tree1de361dd8a069e814506cbeb6ba4828ed3cee950 /textproc/iiimf-gtk/files/patch-iiimgcf_gtkimcontextiiim.c
parent64746be81f4b29b299031c00b6f738aceddf97b6 (diff)
downloadmarcuscom-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.c149
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;