File bugzilla-63978-hoge.patch of Package kinput2

diff -ur kinput2-v3.1.org/lib/imlib/imconv.c kinput2-v3.1/lib/imlib/imconv.c
--- kinput2-v3.1.org/lib/imlib/imconv.c	2002-10-03 18:35:30.000000000 +0900
+++ kinput2-v3.1/lib/imlib/imconv.c	2004-12-22 11:59:00.721597279 +0900
@@ -909,11 +909,20 @@
 	ICClearConversion(input_obj);
 	TRACE(("\twas converting. %d bytes left\n", num_bytes));

+#if 0
+	/*
+	 * IMStopConversion() seems to not work correctly while
+	 * resetting IC. So this block was moved to ximResetICProc().
+	 * If calling IMResetIC() is required in other functions,
+	 * the following block is also used in it.
+	 */
 	if (icp->common_attr.reset_state == XIMInitialState) {
 	    /* Force to end the conversion. */
 	    TRACE(("\tback to the initial state\n"));
 	    IMStopConversion(icp);
 	}
+#endif
+
     }
     return num_bytes;
 }
@@ -965,6 +974,42 @@

 /* ARGSUSED */
 void
+IMStatusDraw(icp)
+IMIC *icp;
+{
+    Widget input_obj;
+    OCCPreeditDrawArg arg;
+
+    TRACE(("IMStatusDraw(ic%d)\n", icp->id));
+    if (!(icp->common_attr.input_style & XIMStatusCallbacks))
+	return;
+
+
+    arg.caret = 0;         /* ignored */
+    arg.chg_first = 0;     /* ignored */
+    arg.chg_length = 0;    /* ignored */
+    arg.encoding = IMCtextAtom(icp->im->connection->proto_widget);
+    arg.format = 0;        /* set by ICGetStatusString */
+    arg.text_length = 0;   /* set by ICGetStatusString */
+    arg.text = NULL;       /* set by ICGetStatusString */
+    arg.attrs_length = 0;  /* ignored */
+    arg.attrs = NULL;      /* ignored */
+
+    if (icp->conversion) {
+	XtVaGetValues(icp->conversion, XtNinputObject, &input_obj, NULL);
+	if (ICGetStatusString(input_obj, &arg.encoding, &arg.format,
+			      &arg.text_length, &arg.text,
+			      &arg.attrs_length) == -1)
+	return;
+    }
+
+    statusDraw(icp, &arg);
+
+    XtFree((char *)arg.text);
+}
+
+/* ARGSUSED */
+void
 IMStatusDone(icp)
 IMIC *icp;
 {
diff -ur kinput2-v3.1.org/lib/imlib/imfuncs.h kinput2-v3.1/lib/imlib/imfuncs.h
--- kinput2-v3.1.org/lib/imlib/imfuncs.h	2002-10-03 18:35:30.000000000 +0900
+++ kinput2-v3.1/lib/imlib/imfuncs.h	2004-12-22 11:59:00.722597158 +0900
@@ -102,6 +102,7 @@
 extern void IMSetFocus _Pt_((IMIC *icp));
 extern void IMUnsetFocus _Pt_((IMIC *icp));
 extern void IMStatusStart _Pt_((IMIC *icp));
+extern void IMStatusDraw _Pt_((IMIC *icp));
 extern void IMStatusDone _Pt_((IMIC *icp));
 extern void IMStartForwarding _Pt_((IMIC *icp));
 extern void IMStopForwarding _Pt_((IMIC *icp));
diff -ur kinput2-v3.1.org/lib/imlib/imrequest.c kinput2-v3.1/lib/imlib/imrequest.c
--- kinput2-v3.1.org/lib/imlib/imrequest.c	2002-10-03 18:35:30.000000000 +0900
+++ kinput2-v3.1/lib/imlib/imrequest.c	2004-12-22 12:16:30.835247338 +0900
@@ -1353,6 +1353,14 @@
     IMFinishRequest(conn, offset);
     if (text != NULL) XtFree(text);
     icp->state &= ~IC_RESETTING;
+
+    IMStatusDraw(icp);
+   /* moved from IMResetIC() */
+    if (icp->common_attr.reset_state == XIMInitialState) {
+	/* Force to end the conversion. */
+	TRACE(("\tback to the initial state\n"));
+	IMStopConversion(icp);
+    }
 }

 /*- ximExtMoveProc: handle XIM_EXT_MOVE request -*/