diff -Nuar gnumeric-1.1.13/src/gnumeric-canvas.c gnumeric-1.1.13-canvasim/src/gnumeric-canvas.c
--- gnumeric-1.1.13/src/gnumeric-canvas.c	2003-01-05 21:49:51.000000000 +0700
+++ gnumeric-1.1.13-canvasim/src/gnumeric-canvas.c	2003-01-05 21:50:39.000000000 +0700
@@ -624,6 +624,39 @@
 	g_free (preedit_string);
 }
 
+static gboolean
+gnm_canvas_retrieve_surrounding_cb (GtkIMContext *context, GnmCanvas *gcanvas)
+{
+	WorkbookControlGUI *wbcg = gcanvas->simple.scg->wbcg;
+	GtkEditable *editable = GTK_EDITABLE (gnm_expr_entry_get_entry (wbcg_get_entry_logical (wbcg)));
+	gchar *surrounding = gtk_editable_get_chars (editable, 0, -1);
+	gint  cur_pos = gtk_editable_get_position (editable);
+
+	gtk_im_context_set_surrounding (context,
+	                                surrounding, strlen (surrounding),
+	                                g_utf8_offset_to_pointer (surrounding, cur_pos) - surrounding);
+
+	g_free(surrounding);
+	return TRUE;
+}
+
+static gboolean
+gnm_canvas_delete_surrounding_cb (GtkIMContext *context,
+                                  gint         offset,
+                                  gint         n_chars,
+                                  GnmCanvas    *gcanvas)
+{
+	WorkbookControlGUI *wbcg = gcanvas->simple.scg->wbcg;
+	GtkEditable *editable = GTK_EDITABLE (gnm_expr_entry_get_entry (wbcg_get_entry_logical (wbcg)));
+	gint cur_pos = gtk_editable_get_position (editable);
+
+	gtk_editable_delete_text (editable,
+	                          cur_pos + offset,
+	                          cur_pos + offset + n_chars);
+
+	return TRUE;
+}
+
 static void
 gnm_canvas_init (GnmCanvas *gcanvas)
 {
@@ -649,6 +682,10 @@
 		G_CALLBACK (gnm_canvas_commit_cb), gcanvas);
 	g_signal_connect (G_OBJECT (gcanvas->im_context), "preedit_changed",
 		G_CALLBACK (gnm_canvas_preedit_changed_cb), gcanvas);
+	g_signal_connect (G_OBJECT (gcanvas->im_context), "retrieve_surrounding",
+		G_CALLBACK (gnm_canvas_retrieve_surrounding_cb), gcanvas);
+	g_signal_connect (G_OBJECT (gcanvas->im_context), "delete_surrounding",
+		G_CALLBACK (gnm_canvas_delete_surrounding_cb), gcanvas);
 
 	GTK_WIDGET_SET_FLAGS (canvas, GTK_CAN_FOCUS);
 	GTK_WIDGET_SET_FLAGS (canvas, GTK_CAN_DEFAULT);

