Beispiel #1
0
static void
from_clipbd(Widget w, XtPointer client_data, XtPointer call_data)
{
    int status;
    long private_id;
    char buf[32];
    Display *dpy = XtDisplayOfObject(w);
    Window window = XtWindowOfObject(w);

    do {
	status = XmClipboardRetrieve(dpy, window, "STRING",
				     buf, sizeof(buf), NULL, &private_id);
    } while (status == ClipboardLocked);

    if (status == ClipboardSuccess)
	fprintf(stderr, "Retrieved '%s' (private_id %ld) from clipboard.\n",
	       buf, private_id);
    else
	fprintf(stderr, "Status was %s\n",
		(status == XmClipboardFail) ? "XmClipboardFail" :
		(status == XmClipboardSuccess) ? "XmClipboardSuccess" :
		(status == XmClipboardTruncate) ? "XmClipboardTruncate" :
		(status == XmClipboardLocked) ? "XmClipboardLocked" :
		(status == XmClipboardBadFormat) ? "XmClipboardBadFormat" :
		(status == XmClipboardNoData) ? "XmClipboardNoData" : "???");
}
Beispiel #2
0
static char* motClipboardGetTextAttrib(Ihandle *ih)
{
  unsigned long size;
  char* str;
  Window window = motClipboardGetWindow();
  (void)ih;
  
  if (XmClipboardInquireLength(iupmot_display, window, "STRING", &size)!=ClipboardSuccess)
    return NULL;

  str = iupStrGetMemory(size+1);

  if (XmClipboardRetrieve(iupmot_display, window, "STRING", str, size+1, NULL, NULL)!=ClipboardSuccess)
    return NULL;

  return str;
}
Beispiel #3
0
static char* motClipboardGetNativeImageAttrib(Ihandle *ih)
{
  unsigned long size;
  void* data;
  Pixmap pixmap;
  Window window = motClipboardGetWindow();
  (void)ih;
  
  if (XmClipboardInquireLength(iupmot_display, window, "PIXMAP", &size)!=ClipboardSuccess)
    return NULL;

  data = XtMalloc(size);

  if (XmClipboardRetrieve(iupmot_display, window, "PIXMAP", data, size, NULL, NULL)!=ClipboardSuccess)
    return NULL;

  pixmap = *((Pixmap*)data);
  XtFree(data);
  return (char*)pixmap;
}
Beispiel #4
0
static char* motClipboardGetFormatDataAttrib(Ihandle *ih)
{
  unsigned long size;
  void* data;
  Window window = motClipboardGetWindow();

  char* format = iupAttribGetStr(ih, "FORMAT");
  if (!format)
    return 0;
  
  /*  number of bytes of data */
  if (XmClipboardInquireLength(iupmot_display, window, format, &size)!=ClipboardSuccess)
    return NULL;

  data = iupStrGetMemory(size);

  if (XmClipboardRetrieve(iupmot_display, window, format, data, size, NULL, NULL)!=ClipboardSuccess)
    return NULL;

  iupAttribSetStrf(ih, "FORMATDATASIZE", "%d", size);
  return data;
}
Beispiel #5
0
bool wxClipboard::GetData( wxDataObject& data )
{
    wxCHECK_MSG( m_open, false, "clipboard not open" );

    Display* xdisplay = wxGlobalDisplay();
    Window xwindow = XtWindow( (Widget)wxTheApp->GetTopLevelRealizedWidget() );
    Time timestamp = XtLastTimestampProcessed( xdisplay );

    wxDataFormat chosenFormat;
    int retval;

    ///////////////////////////////////////////////////////////////////////////
    // determine if the cliboard holds any format we like
    ///////////////////////////////////////////////////////////////////////////
    while( ( retval = XmClipboardStartRetrieve( xdisplay, xwindow,
                      timestamp ) )
            == XmClipboardLocked );
    if( retval != XmClipboardSuccess )
        return false;

    wxClipboardEndRetrieve endRetrieve( xdisplay, xwindow );

    int count;
    unsigned long max_name_length;
    size_t dfcount = data.GetFormatCount( wxDataObject::Set );
    wxDataFormatScopedArray dfarr(dfcount);
    data.GetAllFormats( dfarr.get(), wxDataObject::Set );

    if( XmClipboardInquireCount( xdisplay, xwindow, &count, &max_name_length )
            == XmClipboardSuccess )
    {
        wxCharBuffer buf( max_name_length + 1 );
        unsigned long copied;

        for( int i = 0; i < count; ++i )
        {
            if( XmClipboardInquireFormat( xdisplay, xwindow, i + 1,
                                          (XtPointer)buf.data(),
                                          max_name_length, &copied )
                    != XmClipboardSuccess )
                continue;

            buf.data()[copied] = '\0';

            // try preferred format
            if( buf == data.GetPreferredFormat( wxDataObject::Set ).GetId() )
            {
                chosenFormat = data.GetPreferredFormat( wxDataObject::Set );
                break;
            }

            // try all other formats
            for( size_t i = 0; i < dfcount; ++i )
            {
                if( buf == dfarr[i].GetId() )
                    chosenFormat = dfarr[i];
            }
        }
    }

    if( chosenFormat == wxDF_INVALID )
        return false;

    ///////////////////////////////////////////////////////////////////////////
    // now retrieve the data
    ///////////////////////////////////////////////////////////////////////////
    unsigned long length, dummy1;
    long dummy2;
    wxString id = chosenFormat.GetId();

    while( ( retval = XmClipboardInquireLength( xdisplay, xwindow,
                      id.char_str(),
                      &length ) )
            == XmClipboardLocked );
    if( retval != XmClipboardSuccess )
        return false;

    wxCharBuffer buf(length);

    while( ( retval = XmClipboardRetrieve( xdisplay, xwindow,
                                           id.char_str(),
                                           (XtPointer)buf.data(),
                                           length, &dummy1, &dummy2 ) )
            == XmClipboardLocked );
    if( retval != XmClipboardSuccess )
        return false;

    if( !data.SetData( chosenFormat, length, buf.data() ) )
        return false;

    return true;
}