*** /tmp/d00947 Wed Apr 22 11:59:38 1992 --- lib/Xaw/TextAction.c Sun Apr 12 17:59:48 1992 *************** *** 1,4 **** ! /* $XConsortium: TextAction.c,v 1.43 91/07/23 12:23:54 rws Exp $ */ /*********************************************************** Copyright 1989 by the Massachusetts Institute of Technology, --- 1,4 ---- ! /* $XConsortium: TextAction.c,v 1.44 92/03/18 12:03:30 rws Exp $ */ /*********************************************************** Copyright 1989 by the Massachusetts Institute of Technology, *************** *** 77,106 **** case ButtonPress: case ButtonRelease: ctx->text.time = event->xbutton.time; - ctx->text.ev_x = event->xbutton.x; - ctx->text.ev_y = event->xbutton.y; break; case KeyPress: case KeyRelease: ctx->text.time = event->xkey.time; - ctx->text.ev_x = event->xkey.x; - ctx->text.ev_y = event->xkey.y; break; case MotionNotify: ctx->text.time = event->xmotion.time; - ctx->text.ev_x = event->xmotion.x; - ctx->text.ev_y = event->xmotion.y; break; case EnterNotify: case LeaveNotify: ctx->text.time = event->xcrossing.time; - ctx->text.ev_x = event->xcrossing.x; - ctx->text.ev_y = event->xcrossing.y; } } } static void EndAction(ctx) TextWidget ctx; { --- 77,129 ---- case ButtonPress: case ButtonRelease: ctx->text.time = event->xbutton.time; break; case KeyPress: case KeyRelease: ctx->text.time = event->xkey.time; break; case MotionNotify: ctx->text.time = event->xmotion.time; break; case EnterNotify: case LeaveNotify: ctx->text.time = event->xcrossing.time; } } } static void + NotePosition(ctx, event) + TextWidget ctx; + XEvent *event; + { + switch (event->type) { + case ButtonPress: + case ButtonRelease: + ctx->text.ev_x = event->xbutton.x; + ctx->text.ev_y = event->xbutton.y; + break; + case KeyPress: + case KeyRelease: + { + XRectangle cursor; + XawTextSinkGetCursorBounds(ctx->text.sink, &cursor); + ctx->text.ev_x = cursor.x + cursor.width / 2;; + ctx->text.ev_y = cursor.y + cursor.height / 2;; + } + break; + case MotionNotify: + ctx->text.ev_x = event->xmotion.x; + ctx->text.ev_y = event->xmotion.y; + break; + case EnterNotify: + case LeaveNotify: + ctx->text.ev_x = event->xcrossing.x; + ctx->text.ev_y = event->xcrossing.y; + } + } + + static void EndAction(ctx) TextWidget ctx; { *************** *** 848,853 **** --- 871,877 ---- Cardinal *num_params; /* unused */ { StartAction(ctx, event); + NotePosition(ctx, event); _XawTextAlterSelection(ctx, mode, action, params, num_params); EndAction(ctx); }