/*++++++++++++++++++++++++++++ transfer_data() ++++++++++++++++++++++++++*/ static void transfer_data(Widget w, XtPointer client_data, Atom *selection, Atom *type, XtPointer value, unsigned long *length, int *format) { if ((*type == compound_text) && (y != -1)) { int i, no_selected, *select_list, pos = XmListYToPos(host_list_w, y); char *ptr; XmString str; XmStringTable xmsel; /* Retrieve the selected items from the list. */ XtVaGetValues(host_list_w, XmNselectedItemCount, &no_selected, XmNselectedItems, &xmsel, NULL); for (i = 0; i < no_selected; i++) { ptr = XmCvtXmStringToCT(xmsel[i]); str = XmStringCreateLocalized(ptr); if (pos == 0) /* Last position! */ { XmListAddItemUnselected(host_list_w, str, 0); } else { XmListAddItemUnselected(host_list_w, str, pos + i); } XmStringFree(str); } if (XmListGetSelectedPos(host_list_w, &select_list, &no_selected) == True) { XmListDeletePositions(host_list_w, select_list, no_selected); } /* Select the host that was selected last. */ str = XmStringCreateLocalized(last_selected_host); last_selected = -1; XmListSelectItem(host_list_w, str, True); XmStringFree(str); XtFree((char *)select_list); host_alias_order_change = YES; } return; }
static Boolean DragConvertProc( Widget w, Atom *selection, Atom *target, Atom *typeRtn, XtPointer *valueRtn, unsigned long *lengthRtn, int *formatRtn, unsigned long *max_lengthRtn, XtPointer client_data, XtRequestId *request_id) #endif { XmString cString; char *cText, *passText; if (channelName != NULL) { if (*target != COMPOUND_TEXT) return(False); cString = XmStringCreateSimple(channelName); cText = XmCvtXmStringToCT(cString); passText = XtMalloc(STRLEN(cText)+1); memcpy(passText,cText,STRLEN(cText)+1); /* probably need this too */ XmStringFree(cString); /* format the value for return */ *typeRtn = COMPOUND_TEXT; *valueRtn = (XtPointer)passText; *lengthRtn = STRLEN(passText); *formatRtn = 8; /* from example - related to #bits for data elements */ return(True); } else { /* monitorData not found */ return(False); } }