|
| JXDNDManager (JXDisplay *display) |
|
| ~JXDNDManager () override |
|
Atom | GetDNDSelectionName () const |
|
Atom | GetCurrentDNDVersion () const |
|
JCursorIndex | GetDefaultDNDCursor (const bool dropAccepted=false, const Atom action=None) const |
|
JCursorIndex | GetDefaultDNDCopyCursor () const |
|
JCursorIndex | GetDefaultDNDMoveCursor () const |
|
JCursorIndex | GetDefaultDNDLinkCursor () const |
|
JCursorIndex | GetDefaultDNDAskCursor () const |
|
JCursorIndex | GetDNDCursor (const bool dropAccepted, const Atom action, const JCursorIndex *cursor) const |
|
Atom | GetDNDActionCopyXAtom () const |
|
Atom | GetDNDActionMoveXAtom () const |
|
Atom | GetDNDActionLinkXAtom () const |
|
Atom | GetDNDActionAskXAtom () const |
|
Atom | GetDNDActionPrivateXAtom () const |
|
Atom | GetDNDActionDirectSaveXAtom () const |
|
bool | GetAskActions (JArray< Atom > *actionList, JPtrArray< JString > *descriptionList) const |
|
bool | ChooseDropAction (const JArray< Atom > &actionList, const JPtrArray< JString > &descriptionList, Atom *action) const |
|
bool | IsDragging () const |
|
Window | GetDraggerWindow () const |
|
bool | TargetWillAcceptDrop () const |
|
Atom | GetDNDDirectSave0XAtom () const |
|
JCursorIndex | GetDNDFileCursor (const bool dropAccepted=false, const Atom action=None) const |
|
JCursorIndex | GetDNDCopyFileCursor () const |
|
JCursorIndex | GetDNDMoveFileCursor () const |
|
JCursorIndex | GetDNDLinkFileCursor () const |
|
JCursorIndex | GetDNDAskFileCursor () const |
|
JCursorIndex | GetDNDDirectoryCursor (const bool dropAccepted=false, const Atom action=None) const |
|
JCursorIndex | GetDNDCopyDirectoryCursor () const |
|
JCursorIndex | GetDNDMoveDirectoryCursor () const |
|
JCursorIndex | GetDNDLinkDirectoryCursor () const |
|
JCursorIndex | GetDNDAskDirectoryCursor () const |
|
JCursorIndex | GetDNDFileAndDirectoryCursor (const bool dropAccepted=false, const Atom action=None) const |
|
JCursorIndex | GetDNDCopyFileAndDirectoryCursor () const |
|
JCursorIndex | GetDNDMoveFileAndDirectoryCursor () const |
|
JCursorIndex | GetDNDLinkFileAndDirectoryCursor () const |
|
JCursorIndex | GetDNDAskFileAndDirectoryCursor () const |
|
bool | IsDNDAware (const Window xWindow, Window *proxy, JSize *vers) const |
|
bool | BeginDND (JXWidget *widget, const JPoint &pt, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers, JXSelectionData *data, TargetFinder *targetFinder) |
|
void | HandleDND (const JPoint &pt, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers, const JXMouseButton scrollButton) |
|
void | FinishDND () |
|
void | EnableDND (const Window xWindow) const |
|
bool | CancelDND () |
|
bool | HandleClientMessage (const XClientMessageEvent &clientMessage) |
|
bool | HandleDestroyNotify (const XDestroyWindowEvent &xEvent) |
|
bool | IsLastFakePasteTime (const Time time) const |
|
| JBroadcaster () |
|
virtual | ~JBroadcaster () |
|
JBroadcaster & | operator= (const JBroadcaster &source) |
|
bool | HasSenders () const |
|
JSize | GetSenderCount () const |
|
bool | HasRecipients () const |
|
JSize | GetRecipientCount () const |
|
virtual JString | ToString () const |
|
template<class T > |
void | ListenTo (const JBroadcaster *sender, const std::function< void(const T &)> &f) |
|
Global object to manage Drag-And-Drop interactions.
When the drop is intra-application, we simply call the Widget directly.
When the drop is inter-application, we send ClientMessages.
Refer to http://johnlindal.wixsite.com/xdnd for the complete protocol.
When we are the source, itsDragger, itsDraggerWindow, and itsDraggerTypeList
refer to the source Widget. If the mouse is in a local window, itsMouseContainer
points to the Widget that the mouse is in. If the mouse is in the window
of another application, itsMouseWindow is the XID of the window.
When we are the target (always inter-application), itsDraggerWindow
refers to the source window. itsDraggerTypeList is the list of types from
the source. itsMouseWindow refers to the target window, and itsMouseContainer
is the Widget that the mouse is in. Since we only receive window-level
XdndEnter and XdndLeave messages, we have to manually generate DNDEnter()
and DNDLeave() calls to each widget.