7a8c4ef672af117bcaca39623e23218a5d45bc88
* Declarations of types shared among the files that implement
* Copyright (c) 1995 Sun Microsystems, Inc.
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
* RCS: @(#) $Id: tkSelect.h,v 1.2 1998/09/14 18:23:17 stanton Exp $
* When a selection is owned by a window on a given display, one of the
* following structures is present on a list of current selections in the
* display structure. The structure is used to record the current owner of
* a selection for use in later retrieval requests. There is a list of
* such structures because a display can have multiple different selections
* active at the same time.
typedef struct TkSelectionInfo
{
Atom selection
; /* Selection name, e.g. XA_PRIMARY. */
Tk_Window owner
; /* Current owner of this selection. */
int serial
; /* Serial number of last XSelectionSetOwner
* request made to server for this
* selection (used to filter out redundant
* SelectionClear events). */
Time time
; /* Timestamp used to acquire selection. */
Tk_LostSelProc
*clearProc
; /* Procedure to call when owner loses
ClientData clearData
; /* Info to pass to clearProc. */
struct TkSelectionInfo
*nextPtr
;
/* Next in list of current selections on
* this display. NULL means end of list */
* One of the following structures exists for each selection handler
* created for a window by calling Tk_CreateSelHandler. The handlers
* are linked in a list rooted in the TkWindow structure.
typedef struct TkSelHandler
{
Atom selection
; /* Selection name, e.g. XA_PRIMARY */
Atom target
; /* Target type for selection
* conversion, such as TARGETS or
Atom format
; /* Format in which selection
* info will be returned, such
Tk_XSelectionProc
*proc
; /* Procedure to generate selection
ClientData clientData
; /* Argument to pass to proc. */
int size
; /* Size of units returned by proc
* (8 for STRING, 32 for almost
struct TkSelHandler
*nextPtr
;
/* Next selection handler associated
* with same window (NULL for end of
* When the selection is being retrieved, one of the following
* structures is present on a list of pending selection retrievals.
* The structure is used to communicate between the background
* procedure that requests the selection and the foreground
* event handler that processes the events in which the selection
* is returned. There is a list of such structures so that there
* can be multiple simultaneous selection retrievals (e.g. on
typedef struct TkSelRetrievalInfo
{
Tcl_Interp
*interp
; /* Interpreter for error reporting. */
TkWindow
*winPtr
; /* Window used as requestor for
Atom selection
; /* Selection being requested. */
Atom property
; /* Property where selection will appear. */
Atom target
; /* Desired form for selection. */
Tk_GetXSelProc
*proc
; /* Procedure to call to handle pieces
ClientData clientData
; /* Argument for proc. */
int result
; /* Initially -1. Set to a Tcl
* return value once the selection
Tcl_TimerToken timeout
; /* Token for current timeout procedure. */
int idleTime
; /* Number of seconds that have gone by
* without hearing anything from the
struct TkSelRetrievalInfo
*nextPtr
;
/* Next in list of all pending
* selection retrievals. NULL means
* The clipboard contains a list of buffers of various types and formats.
* All of the buffers of a given type will be returned in sequence when the
* CLIPBOARD selection is retrieved. All buffers of a given type on the
* same clipboard must have the same format. The TkClipboardTarget structure
* is used to record the information about a chain of buffers of the same
typedef struct TkClipboardBuffer
{
char *buffer
; /* Null terminated data buffer. */
long length
; /* Length of string in buffer. */
struct TkClipboardBuffer
*nextPtr
; /* Next in list of buffers. NULL
typedef struct TkClipboardTarget
{
Atom type
; /* Type conversion supported. */
Atom format
; /* Representation used for data. */
TkClipboardBuffer
*firstBufferPtr
; /* First in list of data buffers. */
TkClipboardBuffer
*lastBufferPtr
; /* Last in list of clipboard buffers.
* Used to speed up appends. */
struct TkClipboardTarget
*nextPtr
; /* Next in list of targets on
* clipboard. NULL means end of
* It is possible for a Tk_SelectionProc to delete the handler that it
* represents. If this happens, the code that is retrieving the selection
* needs to know about it so it doesn't use the now-defunct handler
* structure. One structure of the following form is created for each
* retrieval in progress, so that the retriever can find out if its
* handler is deleted. All of the pending retrievals (if there are more
* than one) are linked into a list.
typedef struct TkSelInProgress
{
TkSelHandler
*selPtr
; /* Handler being executed. If this handler
* is deleted, the field is set to NULL. */
struct TkSelInProgress
*nextPtr
;
/* Next higher nested search. */
* Declarations for variables shared among the selection-related files:
extern TkSelInProgress
*pendingPtr
;
/* Topmost search in progress, or
* Chunk size for retrieving selection. It's defined both in
* words and in bytes; the word size is used to allocate
* buffer space that's guaranteed to be word-aligned and that
* has an extra character for the terminating NULL.
#define TK_SEL_BYTES_AT_ONCE 4000
#define TK_SEL_WORDS_AT_ONCE 1001
* Declarations for procedures that are used by the selection-related files
* but shouldn't be used anywhere else in Tk (or by Tk clients):
extern void TkSelClearSelection
_ANSI_ARGS_((Tk_Window tkwin
,
extern int TkSelDefaultSelection
_ANSI_ARGS_((
TkSelectionInfo
*infoPtr
, Atom target
,
long *lbuffer
, int maxBytes
, Atom
*typePtr
, int *formatPtr
));
extern int TkSelGetSelection
_ANSI_ARGS_((Tcl_Interp
*interp
,
Tk_Window tkwin
, Atom selection
, Atom target
,
Tk_GetXSelProc
*proc
, ClientData clientData
));
char * TkSelCvtFromX
_ANSI_ARGS_((long *propPtr
, int numValues
,
Atom type
, Tk_Window tkwin
));
int TkSelCvtToX
_ANSI_ARGS_((long *buffer
, char *string
, Atom type
,
Tk_Window tkwin
, int maxBytes
));
#ifndef TkSelUpdateClipboard
extern void TkSelUpdateClipboard
_ANSI_ARGS_((TkWindow
*winPtr
,
TkClipboardTarget
*targetPtr
));