summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/pgtkim.c12
-rw-r--r--src/pgtkterm.c13
-rw-r--r--src/pgtkterm.h2
3 files changed, 23 insertions, 4 deletions
diff --git a/src/pgtkim.c b/src/pgtkim.c
index 68f83d2c6e1..ba69a27501a 100644
--- a/src/pgtkim.c
+++ b/src/pgtkim.c
@@ -210,6 +210,18 @@ pgtk_im_filter_keypress (struct frame *f, GdkEventKey * ev)
return false;
}
+void
+pgtk_im_set_cursor_location (struct frame *f, int x, int y, int width,
+ int height)
+{
+ struct pgtk_display_info *dpyinfo = FRAME_DISPLAY_INFO (f);
+ if (dpyinfo->im.context != NULL && dpyinfo->im.focused_frame == f)
+ {
+ GdkRectangle area = { x, y, width, height };
+ gtk_im_context_set_cursor_location (dpyinfo->im.context, &area);
+ }
+}
+
static void
pgtk_im_use_context (struct pgtk_display_info *dpyinfo, bool use_p)
{
diff --git a/src/pgtkterm.c b/src/pgtkterm.c
index 44e1f3e2966..5d1716adcb8 100644
--- a/src/pgtkterm.c
+++ b/src/pgtkterm.c
@@ -2878,6 +2878,7 @@ pgtk_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x,
int y, enum text_cursor_kinds cursor_type,
int cursor_width, bool on_p, bool active_p)
{
+ struct frame *f = XFRAME (w->frame);
PGTK_TRACE ("draw_window_cursor: %d, %d, %d, %d, %d, %d.",
x, y, cursor_type, cursor_width, on_p, active_p);
if (on_p)
@@ -2922,11 +2923,15 @@ pgtk_draw_window_cursor (struct window *w, struct glyph_row *glyph_row, int x,
}
}
-#ifdef HAVE_X_I18N
if (w == XWINDOW (f->selected_window))
- if (FRAME_XIC (f) && (FRAME_XIC_STYLE (f) & XIMPreeditPosition))
- xic_set_preeditarea (w, x, y);
-#endif
+ {
+ int frame_x =
+ WINDOW_TO_FRAME_PIXEL_X (w, x) + WINDOW_LEFT_FRINGE_WIDTH (w);
+ int frame_y = WINDOW_TO_FRAME_PIXEL_Y (w, y);
+ pgtk_im_set_cursor_location (f, frame_x, frame_y,
+ w->phys_cursor_width,
+ w->phys_cursor_height);
+ }
}
}
diff --git a/src/pgtkterm.h b/src/pgtkterm.h
index 5e71f939987..07d7fc10c65 100644
--- a/src/pgtkterm.h
+++ b/src/pgtkterm.h
@@ -653,6 +653,8 @@ extern void pgtk_enqueue_preedit (struct frame *f, Lisp_Object image_data);
extern void pgtk_im_focus_in (struct frame *f);
extern void pgtk_im_focus_out (struct frame *f);
extern bool pgtk_im_filter_keypress (struct frame *f, GdkEventKey * ev);
+extern void pgtk_im_set_cursor_location (struct frame *f, int x, int y,
+ int width, int height);
extern void pgtk_im_init (struct pgtk_display_info *dpyinfo);
extern void pgtk_im_finish (struct pgtk_display_info *dpyinfo);