SOXTCLIPBOARD(3iv)

πŸ’– SoXtClipboard πŸ’–

okay bestie, buckle up, we're reading the SoXtClipboard(3IV) manual together and honestly? it's giving clipboard royalty πŸ‘‘


✨ NAME ✨

SoXtClipboard β€” Provides Inventor copy/paste support 🫢


πŸ¦‹ INHERITS FROM πŸ¦‹

SoXtClipboard

(i mean. it inherits from itself. iconic behavior honestly, no notes πŸ’…)


🌸 SYNOPSIS 🌸

#include <Inventor/Xt/SoXtClipboard.h>

typedef void        SoXtClipboardPasteCB(void *userData, SoPathList
                         *pathList)
typedef void        SoXtClipboardImportCB(void *userData, Atom dataType,
                         void *data, uint32_t numBytes)

                         #define _XA_CLIPBOARD_ ((Atom) 0)

Methods from class SoXtClipboard:

                    SoXtClipboard(Widget w, Atom selectionAtom =
                         _XA_CLIPBOARD_)
                    ~SoXtClipboard()
void                copy(SoNode *node, Time eventTime)
void                copy(SoPath *path, Time eventTime)
void                copy(SoPathList *pathList, Time eventTime)
void                copy(Atom dataType, void *data, uint32_t numBytes,
                         Time eventTime)
void                paste(Time eventTime, SoXtClipboardPasteCB
                         *pasteDoneFunc, void *userData = NULL)
void                addPasteInterest(Atom dataType, SoXtClipboardImportCB
                         *pasteImportFunc, void *userData = NULL)

πŸ’« DESCRIPTION πŸ’«

So this class is the manager of data transfers for copy and paste, bestie. Transfers can happen within the same process, or between different processes β€” it truly does not care, it's versatile like that ✨. It uses the Xt selection mechanism to implement the ICCCM protocol for the transfer of data. very demure, very standards-compliant πŸŽ€


πŸ‘‘ METHODS πŸ‘‘

🧚 SoXtClipboard / ~SoXtClipboard

                    SoXtClipboard(Widget w, Atom selectionAtom =
                         _XA_CLIPBOARD_)
                    ~SoXtClipboard()

Constructor and destructor, periodt.

  • w is the Xt widget for which this clipboard acts as an agent πŸ•΅οΈβ€β™€οΈ
  • selectionAtom is the X selection through which data should be transferred. For quick data transfers, this should be XA_PRIMARY ⚑ The default is _XA_CLIPBOARD_, which uses the X clipboard selection.

πŸ“‹ copy

void                copy(SoNode *node, Time eventTime)
void                copy(SoPath *path, Time eventTime)
void                copy(SoPathList *pathList, Time eventTime)

This copies the passed scene graph object, and tells the X server that the clipboard now owns the selection which was specified by selectionAtom in the constructor. When a paste happens β€” in this window, another window, or another process β€” the X server will ask this clipboard for the data it copied here. πŸ”

The eventTime should be the time found in the X event structure which triggered the copy operation, and it's used to ensure synchronization of copy and paste requests. don't skip it, fr fr ⏰

Data targets supported for export are:

  • INVENTOR_2_1
  • INVENTOR_2_1_FILE
  • INVENTOR_2_0
  • INVENTOR_2_0_FILE
  • VRML_1_0
  • VRML_1_0_FILE

Also exported for backwards compatibility are INVENTOR and INVENTOR_FILE, which are equivalent to INVENTOR_2_0 and INVENTOR_2_0_FILE. legacy support ate, ngl 🫢

🎁 copy (the dataType one)

void                copy(Atom dataType, void *data, uint32_t numBytes,
                         Time eventTime)

This behaves like the copy routines above, but the data can be in any format as specified by dataType. choose your own adventure, bestie 🌈

πŸ“₯ paste

void                paste(Time eventTime, SoXtClipboardPasteCB
                         *pasteDoneFunc, void *userData = NULL)

This makes a request to the X server for data to paste from the selection atom specified in the constructor (selectionAtom), then returns. so it doesn't block, it just goes and does its thing πŸ’…

When the data is retrieved from the selection owner, the pasteDoneFunc callback is invoked. The newly pasted data is passed as the callback function's pathList argument (an SoPathList). πŸ“¬

Data targets supported for import are:

  • INVENTOR_2_1
  • INVENTOR_2_1_FILE
  • INVENTOR_2_0
  • INVENTOR_2_0_FILE
  • VRML_1_0
  • VRML_1_0_FILE

Also imported for backwards compatibility are INVENTOR and INVENTOR_FILE, which are equivalent to INVENTOR_2_0 and INVENTOR_2_0_FILE. same energy as above, we love consistency πŸ’–

🌟 addPasteInterest

void                addPasteInterest(Atom dataType, SoXtClipboardImportCB
                         *pasteImportFunc, void *userData = NULL)

This extends the paste interest to recognize an additional target as specified by dataType. You can call it multiple times to register interest in more than one extension β€” go off, register everything πŸ‘‘

The pasteImportFunc will be called when data of the registered type is pasted.

⚠️ Passing NULL as the pasteImportFunc will remove paste interest for that data type β€” even if the data type is one of the defaults. yes bestie, even the defaults. it's cold like that 😭

This should be called before paste() so that paste() will accept pastes of data types that have been registered here. order matters, always πŸ”₯

A dataType atom can be created with XmInternAtom, e.g.:

XmInternAtom(XtDisplay(widget),"INVENTOR",False);

πŸ” SEE ALSO πŸ”

  • SoSelection
  • SoByteStream
  • SoXt
  • X Selections

and that's the whole page, bestie, we read every single line and we understood it πŸ’œ

so this was SoXtClipboard from the SoXtClipboard(3IV) manual page β€” the footer didn't give us a date or version string, it just said SoXtClipboard(3IV)() with an empty lil slot where the date would go πŸ™ˆ, so consider this your cute sign-off: manual name SoXtClipboard, section 3IV, date left blank by whoever wrote it. slay, go copy and paste something βœ¨πŸ¦‹πŸŽ€