/* edit_cb() −− the callback routine for the items in the edit menu */
void
edit_cb(widget, client_data, call_data)
Widget widget;
XtPointer client_data;
XtPointer call_data;
{
Boolean result = True;
int reason = (int) client_data;
XEvent *event = ((XmPushButtonCallbackStruct *) call_data)−>event;
Time when;
XmTextSetString (text_output, NULL); /* clear message area */
if (event != NULL &&
reason == EDIT_CUT || reason == EDIT_COPY || reason == EDIT_CLEAR) {
switch (event−>type) {
case ButtonRelease :
when = event−>xbutton.time;
break;
case KeyRelease :
when = event−>xkey.time;
break;
default:
when = CurrentTime;
break;
}
}
switch (reason) {
case EDIT_CUT :
result = XmTextCut (text_edit, when);
break;
case EDIT_COPY :
result = XmTextCopy (text_edit, when);
break;
case EDIT_PASTE :
result = XmTextPaste (text_edit);
case EDIT_CLEAR :
XmTextClearSelection (text_edit, when);
break;
}
if (result == False)
XmTextSetString (text_output, "There is no selection.");
}
15.5 Text Callbacks
The Text and TextField widgets use callback routines in the same way as other Motif widgets. The widgets provide
callbacks for a number of different purposes, such as text modification, activation, and selection ownership. Some of
the routines, such as those that monitor keyboard input, may be invoked rather frequently. In the next few sections, we
introduce several of the callback routines for the widgets.
15.5.1 The Activation Callback
We begin by exploring the callback routine that is most commonly used for ...