void RXmTextXYToPos(message_t message) { Widget w; Position x,y; toolkit_read_value(message,&w,XtRWidget); toolkit_read_value(message,&x,XtRInt); toolkit_read_value(message,&y,XtRInt); reply_with_integer(message,XmTextXYToPos(w,x,y)); }
static void B1_move(Widget w, XEvent *event, char **str, Cardinal *num) { XmTextPosition pos; XButtonEvent *ev = (XButtonEvent *)event; pos = XmTextXYToPos(w, (Position)(ev->x), (Position)(ev->y)); if (last_pos > pos) /* must have backed up the cursor */ XmTextSetHighlight(w, pos, last_pos, XmHIGHLIGHT_NORMAL); if (down_pos != pos) XmTextSetHighlight(w, down_pos, pos, XmHIGHLIGHT_SELECTED); last_pos = pos; }
static void B1_release(Widget w, XEvent *event, char **str, Cardinal *num) { XmTextPosition pos; XButtonEvent *ev = (XButtonEvent *)event; pos = XmTextXYToPos(w, (Position)(ev->x), (Position)(ev->y)); XmTextSetCursorPosition(w, pos); if (down_pos != pos) { XmTextSetHighlight(w, down_pos, pos, XmHIGHLIGHT_SELECTED); if (listener_selection) {XtFree(listener_selection); listener_selection = NULL;} XmTextSetSelection(w, down_pos, pos, CurrentTime); listener_selection = XmTextGetSelection(w); } }
static void B1_press(Widget w, XEvent *event, char **str, Cardinal *num) { XmTextPosition pos; XButtonEvent *ev = (XButtonEvent *)event; XmProcessTraversal(w, XmTRAVERSE_CURRENT); /* we're replacing the built-in take_focus action here, so do it by hand, but leave listener blue, so to speak */ if (w != listener_text) XtVaSetValues(w, XmNbackground, ss->sgx->white, NULL); else XmTextClearSelection(listener_text, CurrentTime); /* should this happen in other windows as well? */ pos = XmTextXYToPos(w, (Position)(ev->x), (Position)(ev->y)); XmTextSetCursorPosition(w, pos); down_pos = pos; last_pos = pos; if (XEN_HOOKED(listener_click_hook)) run_hook(listener_click_hook, XEN_LIST_1(C_TO_XEN_INT((int)pos)), S_listener_click_hook); }
static int motTextConvertXYToPos(Ihandle* ih, int x, int y) { return XmTextXYToPos(ih->handle, x, y); }