static void to_clipbd(Widget w, XtPointer client_data, XtPointer call_data) { long item_id = 0; int status; XmString clip_label; char buf[32]; static int cnt; Display *dpy = XtDisplayOfObject(w); Window window = XtWindowOfObject(w); char *data = (char *)client_data; sprintf(buf, "%s-%d", data, ++cnt); clip_label = XmStringCreateLocalized("to_clipbd"); do { status = XmClipboardStartCopy(dpy, window, clip_label, CurrentTime, NULL, NULL, &item_id); } while (status == ClipboardLocked); XmStringFree(clip_label); do { status = XmClipboardCopy(dpy, window, item_id, "STRING", buf, (long)strlen(buf)+1, cnt, NULL); } while (status == ClipboardLocked); do { status = XmClipboardEndCopy(dpy, window, item_id); } while (status == ClipboardLocked); fprintf(stderr, "copied: '%s' to clipboard\n", buf); }
static int motClipboardSetTextAttrib(Ihandle *ih, const char *value) { long item_id = 0; Window window = motClipboardGetWindow(); XmString clip_label; (void)ih; if (!value) { XmClipboardUndoCopy(iupmot_display, window); return 0; } clip_label = XmStringCreateLocalized ("IupClipboard"); if (XmClipboardStartCopy(iupmot_display, window, clip_label, CurrentTime, NULL, NULL, &item_id)!=ClipboardSuccess) { XmStringFree(clip_label); return 0; } XmClipboardCopy(iupmot_display, window, item_id, "STRING", (char*)value, (long)strlen(value)+1, 0, NULL); XmClipboardEndCopy(iupmot_display, window, item_id); XmStringFree(clip_label); return 0; }
static int motClipboardSetImageAttrib(Ihandle *ih, const char *value) { Pixmap pixmap; long item_id = 0; Window window = motClipboardGetWindow(); XmString clip_label; if (!value) { XmClipboardUndoCopy(iupmot_display, window); return 0; } clip_label = XmStringCreateLocalized ("IupClipboard"); if (XmClipboardStartCopy(iupmot_display, window, clip_label, CurrentTime, NULL, NULL, &item_id)!=ClipboardSuccess) { XmStringFree(clip_label); return 0; } pixmap = (Pixmap)iupImageGetImage(value, ih, 0); XmClipboardCopy(iupmot_display, window, item_id, "PIXMAP", (char*)&pixmap, sizeof(Pixmap), 0, NULL); XmClipboardEndCopy(iupmot_display, window, item_id); XmStringFree(clip_label); (void)ih; return 0; }
bool wxClipboard::AddData( wxDataObject *data ) { wxCHECK_MSG( data, false, "data is invalid" ); wxCHECK_MSG( m_open, false, "clipboard not open" ); m_data.Append( data ); Display* xdisplay = wxGlobalDisplay(); Widget xwidget = (Widget)wxTheApp->GetTopLevelRealizedWidget(); Window xwindow = XtWindow( xwidget ); wxXmString label( wxTheApp->GetAppDisplayName() ); Time timestamp = XtLastTimestampProcessed( xdisplay ); long itemId; int retval; while( ( retval = XmClipboardStartCopy( xdisplay, xwindow, label(), timestamp, xwidget, wxClipboardCallback, &itemId ) ) == XmClipboardLocked ); if( retval != XmClipboardSuccess ) return false; size_t count = data->GetFormatCount( wxDataObject::Get ); wxDataFormatScopedArray dfarr(count); data->GetAllFormats( dfarr.get(), wxDataObject::Get ); for( size_t i = 0; i < count; ++i ) { size_t size = data->GetDataSize( dfarr[i] ); long data_id; wxString id = dfarr[i].GetId(); while( ( retval = XmClipboardCopy( xdisplay, xwindow, itemId, id.char_str(), NULL, size, i, &data_id ) ) == XmClipboardLocked ); m_idToObject.Append( new wxDataIdToDataObject( data, data_id, size ) ); } while( XmClipboardEndCopy( xdisplay, xwindow, itemId ) == XmClipboardLocked ); return true; }
static int motClipboardSetFormatDataAttrib(Ihandle *ih, const char *value) { int size; long item_id = 0; Window window = motClipboardGetWindow(); XmString clip_label; char* format; if (!value) { XmClipboardUndoCopy(iupmot_display, window); return 0; } size = iupAttribGetInt(ih, "FORMATDATASIZE"); if (!size) return 0; format = iupAttribGetStr(ih, "FORMAT"); if (!format) return 0; clip_label = XmStringCreateLocalized ("IupClipboard"); if (XmClipboardStartCopy(iupmot_display, window, clip_label, CurrentTime, NULL, NULL, &item_id)!=ClipboardSuccess) { XmStringFree(clip_label); return 0; } XmClipboardCopy(iupmot_display, window, item_id, format, (char*)value, (long)size, 0, NULL); XmClipboardEndCopy(iupmot_display, window, item_id); XmStringFree(clip_label); return 0; }