--- src/item-edit.c.orig Thu Dec 27 07:10:52 2001
+++ src/item-edit.c Fri Mar 1 21:58:00 2002
@@ -42,6 +42,41 @@
ARG_SHEET_CONTROL_GUI, /* The SheetControlGUI * argument */
};
+/* Update XIM position */
+static void
+item_edit_update_im_position(ItemEdit* item_edit, int x, int y)
+{
+ /* Need widget pointer that has GdkIC */
+ GnumericCanvas* gcanvas =
+ GNUMERIC_CANVAS(GNOME_CANVAS_ITEM(item_edit)->canvas);
+ int cx, cy;
+
+ if (GTK_WIDGET_HAS_FOCUS(gcanvas) && gdk_im_ready() &&
+ gcanvas->ic && (gdk_ic_get_style (gcanvas->ic)
+ & GDK_IM_PREEDIT_POSITION)){
+
+ int width, height;
+
+ /* position should be inside the widget */
+ if ( x <= 0 || y <=0 )
+ return;
+
+ gnome_canvas_get_scroll_offsets(GNOME_CANVAS(gcanvas), &cx, &cy);
+
+ gcanvas->ic_attr->spot_location.x =
+ (int)GNOME_CANVAS_ITEM(item_edit)->x1 + x - cx;
+ gcanvas->ic_attr->spot_location.y =
+ (int)GNOME_CANVAS_ITEM(item_edit)->y1 + y - 2 - cy;
+
+ gdk_window_get_size (GTK_WIDGET(gcanvas)->window, &width, &height);
+ gcanvas->ic_attr->preedit_area.width = width;
+ gcanvas->ic_attr->preedit_area.height = height;
+
+ gdk_ic_set_attr (gcanvas->ic, gcanvas->ic_attr,
+ GDK_IC_SPOT_LOCATION | GDK_IC_PREEDIT_AREA);
+ }
+}
+
static void
scan_at (const char *text, int *scan)
{
@@ -169,6 +204,8 @@
gdk_draw_line (drawable, style->black_gc,
x, y-font->ascent,
x, y+font->descent);
+
+ item_edit_update_im_position(item_edit, x, y+font->descent);
}
static void
@@ -239,6 +276,11 @@
if (item_edit->font == NULL)
return;
top_pos += item_edit->font->ascent;
+
+ /* Handle multibyte */
+ if( cursor_pos != -1 )
+ cursor_pos = strlen(gtk_editable_get_chars(GTK_EDITABLE(item_edit->entry),
+ 0, cursor_pos));
/* Draw the background (recall that gdk_draw_rectangle excludes far coords) */
gdk_draw_rectangle (