summaryrefslogblamecommitdiff
path: root/japanese/gnumeric/files/patch-ac
blob: aeba4b9ae1861170166da6f617065717b6e15a43 (plain) (tree)






















































                                                                                   

                                           
 


                                                                                          

                                

                                                                                              
--- 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 (