1 |
578 |
markom |
/*
|
2 |
|
|
* tkSelect.h --
|
3 |
|
|
*
|
4 |
|
|
* Declarations of types shared among the files that implement
|
5 |
|
|
* selection support.
|
6 |
|
|
*
|
7 |
|
|
* Copyright (c) 1995 Sun Microsystems, Inc.
|
8 |
|
|
*
|
9 |
|
|
* See the file "license.terms" for information on usage and redistribution
|
10 |
|
|
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
|
11 |
|
|
*
|
12 |
|
|
* RCS: @(#) $Id: tkSelect.h,v 1.1.1.1 2002-01-16 10:25:52 markom Exp $
|
13 |
|
|
*/
|
14 |
|
|
|
15 |
|
|
#ifndef _TKSELECT
|
16 |
|
|
#define _TKSELECT
|
17 |
|
|
|
18 |
|
|
/*
|
19 |
|
|
* When a selection is owned by a window on a given display, one of the
|
20 |
|
|
* following structures is present on a list of current selections in the
|
21 |
|
|
* display structure. The structure is used to record the current owner of
|
22 |
|
|
* a selection for use in later retrieval requests. There is a list of
|
23 |
|
|
* such structures because a display can have multiple different selections
|
24 |
|
|
* active at the same time.
|
25 |
|
|
*/
|
26 |
|
|
|
27 |
|
|
typedef struct TkSelectionInfo {
|
28 |
|
|
Atom selection; /* Selection name, e.g. XA_PRIMARY. */
|
29 |
|
|
Tk_Window owner; /* Current owner of this selection. */
|
30 |
|
|
int serial; /* Serial number of last XSelectionSetOwner
|
31 |
|
|
* request made to server for this
|
32 |
|
|
* selection (used to filter out redundant
|
33 |
|
|
* SelectionClear events). */
|
34 |
|
|
Time time; /* Timestamp used to acquire selection. */
|
35 |
|
|
Tk_LostSelProc *clearProc; /* Procedure to call when owner loses
|
36 |
|
|
* selection. */
|
37 |
|
|
ClientData clearData; /* Info to pass to clearProc. */
|
38 |
|
|
struct TkSelectionInfo *nextPtr;
|
39 |
|
|
/* Next in list of current selections on
|
40 |
|
|
* this display. NULL means end of list */
|
41 |
|
|
} TkSelectionInfo;
|
42 |
|
|
|
43 |
|
|
/*
|
44 |
|
|
* One of the following structures exists for each selection handler
|
45 |
|
|
* created for a window by calling Tk_CreateSelHandler. The handlers
|
46 |
|
|
* are linked in a list rooted in the TkWindow structure.
|
47 |
|
|
*/
|
48 |
|
|
|
49 |
|
|
typedef struct TkSelHandler {
|
50 |
|
|
Atom selection; /* Selection name, e.g. XA_PRIMARY */
|
51 |
|
|
Atom target; /* Target type for selection
|
52 |
|
|
* conversion, such as TARGETS or
|
53 |
|
|
* STRING. */
|
54 |
|
|
Atom format; /* Format in which selection
|
55 |
|
|
* info will be returned, such
|
56 |
|
|
* as STRING or ATOM. */
|
57 |
|
|
Tk_SelectionProc *proc; /* Procedure to generate selection
|
58 |
|
|
* in this format. */
|
59 |
|
|
ClientData clientData; /* Argument to pass to proc. */
|
60 |
|
|
int size; /* Size of units returned by proc
|
61 |
|
|
* (8 for STRING, 32 for almost
|
62 |
|
|
* anything else). */
|
63 |
|
|
struct TkSelHandler *nextPtr;
|
64 |
|
|
/* Next selection handler associated
|
65 |
|
|
* with same window (NULL for end of
|
66 |
|
|
* list). */
|
67 |
|
|
} TkSelHandler;
|
68 |
|
|
|
69 |
|
|
/*
|
70 |
|
|
* When the selection is being retrieved, one of the following
|
71 |
|
|
* structures is present on a list of pending selection retrievals.
|
72 |
|
|
* The structure is used to communicate between the background
|
73 |
|
|
* procedure that requests the selection and the foreground
|
74 |
|
|
* event handler that processes the events in which the selection
|
75 |
|
|
* is returned. There is a list of such structures so that there
|
76 |
|
|
* can be multiple simultaneous selection retrievals (e.g. on
|
77 |
|
|
* different displays).
|
78 |
|
|
*/
|
79 |
|
|
|
80 |
|
|
typedef struct TkSelRetrievalInfo {
|
81 |
|
|
Tcl_Interp *interp; /* Interpreter for error reporting. */
|
82 |
|
|
TkWindow *winPtr; /* Window used as requestor for
|
83 |
|
|
* selection. */
|
84 |
|
|
Atom selection; /* Selection being requested. */
|
85 |
|
|
Atom property; /* Property where selection will appear. */
|
86 |
|
|
Atom target; /* Desired form for selection. */
|
87 |
|
|
int (*proc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp,
|
88 |
|
|
char *portion)); /* Procedure to call to handle pieces
|
89 |
|
|
* of selection. */
|
90 |
|
|
ClientData clientData; /* Argument for proc. */
|
91 |
|
|
int result; /* Initially -1. Set to a Tcl
|
92 |
|
|
* return value once the selection
|
93 |
|
|
* has been retrieved. */
|
94 |
|
|
Tcl_TimerToken timeout; /* Token for current timeout procedure. */
|
95 |
|
|
int idleTime; /* Number of seconds that have gone by
|
96 |
|
|
* without hearing anything from the
|
97 |
|
|
* selection owner. */
|
98 |
|
|
struct TkSelRetrievalInfo *nextPtr;
|
99 |
|
|
/* Next in list of all pending
|
100 |
|
|
* selection retrievals. NULL means
|
101 |
|
|
* end of list. */
|
102 |
|
|
} TkSelRetrievalInfo;
|
103 |
|
|
|
104 |
|
|
/*
|
105 |
|
|
* The clipboard contains a list of buffers of various types and formats.
|
106 |
|
|
* All of the buffers of a given type will be returned in sequence when the
|
107 |
|
|
* CLIPBOARD selection is retrieved. All buffers of a given type on the
|
108 |
|
|
* same clipboard must have the same format. The TkClipboardTarget structure
|
109 |
|
|
* is used to record the information about a chain of buffers of the same
|
110 |
|
|
* type.
|
111 |
|
|
*/
|
112 |
|
|
|
113 |
|
|
typedef struct TkClipboardBuffer {
|
114 |
|
|
char *buffer; /* Null terminated data buffer. */
|
115 |
|
|
long length; /* Length of string in buffer. */
|
116 |
|
|
struct TkClipboardBuffer *nextPtr; /* Next in list of buffers. NULL
|
117 |
|
|
* means end of list . */
|
118 |
|
|
} TkClipboardBuffer;
|
119 |
|
|
|
120 |
|
|
typedef struct TkClipboardTarget {
|
121 |
|
|
Atom type; /* Type conversion supported. */
|
122 |
|
|
Atom format; /* Representation used for data. */
|
123 |
|
|
TkClipboardBuffer *firstBufferPtr; /* First in list of data buffers. */
|
124 |
|
|
TkClipboardBuffer *lastBufferPtr; /* Last in list of clipboard buffers.
|
125 |
|
|
* Used to speed up appends. */
|
126 |
|
|
struct TkClipboardTarget *nextPtr; /* Next in list of targets on
|
127 |
|
|
* clipboard. NULL means end of
|
128 |
|
|
* list. */
|
129 |
|
|
} TkClipboardTarget;
|
130 |
|
|
|
131 |
|
|
/*
|
132 |
|
|
* It is possible for a Tk_SelectionProc to delete the handler that it
|
133 |
|
|
* represents. If this happens, the code that is retrieving the selection
|
134 |
|
|
* needs to know about it so it doesn't use the now-defunct handler
|
135 |
|
|
* structure. One structure of the following form is created for each
|
136 |
|
|
* retrieval in progress, so that the retriever can find out if its
|
137 |
|
|
* handler is deleted. All of the pending retrievals (if there are more
|
138 |
|
|
* than one) are linked into a list.
|
139 |
|
|
*/
|
140 |
|
|
|
141 |
|
|
typedef struct TkSelInProgress {
|
142 |
|
|
TkSelHandler *selPtr; /* Handler being executed. If this handler
|
143 |
|
|
* is deleted, the field is set to NULL. */
|
144 |
|
|
struct TkSelInProgress *nextPtr;
|
145 |
|
|
/* Next higher nested search. */
|
146 |
|
|
} TkSelInProgress;
|
147 |
|
|
|
148 |
|
|
/*
|
149 |
|
|
* Declarations for variables shared among the selection-related files:
|
150 |
|
|
*/
|
151 |
|
|
|
152 |
|
|
extern TkSelInProgress *pendingPtr;
|
153 |
|
|
/* Topmost search in progress, or
|
154 |
|
|
* NULL if none. */
|
155 |
|
|
|
156 |
|
|
/*
|
157 |
|
|
* Chunk size for retrieving selection. It's defined both in
|
158 |
|
|
* words and in bytes; the word size is used to allocate
|
159 |
|
|
* buffer space that's guaranteed to be word-aligned and that
|
160 |
|
|
* has an extra character for the terminating NULL.
|
161 |
|
|
*/
|
162 |
|
|
|
163 |
|
|
#define TK_SEL_BYTES_AT_ONCE 4000
|
164 |
|
|
#define TK_SEL_WORDS_AT_ONCE 1001
|
165 |
|
|
|
166 |
|
|
/*
|
167 |
|
|
* Declarations for procedures that are used by the selection-related files
|
168 |
|
|
* but shouldn't be used anywhere else in Tk (or by Tk clients):
|
169 |
|
|
*/
|
170 |
|
|
|
171 |
|
|
extern void TkSelClearSelection _ANSI_ARGS_((Tk_Window tkwin,
|
172 |
|
|
XEvent *eventPtr));
|
173 |
|
|
extern int TkSelDefaultSelection _ANSI_ARGS_((
|
174 |
|
|
TkSelectionInfo *infoPtr, Atom target,
|
175 |
|
|
char *buffer, int maxBytes, Atom *typePtr));
|
176 |
|
|
extern int TkSelGetSelection _ANSI_ARGS_((Tcl_Interp *interp,
|
177 |
|
|
Tk_Window tkwin, Atom selection, Atom target,
|
178 |
|
|
Tk_GetSelProc *proc, ClientData clientData));
|
179 |
|
|
#ifndef TkSelUpdateClipboard
|
180 |
|
|
extern void TkSelUpdateClipboard _ANSI_ARGS_((TkWindow *winPtr,
|
181 |
|
|
TkClipboardTarget *targetPtr));
|
182 |
|
|
#endif
|
183 |
|
|
|
184 |
|
|
#endif /* _TKSELECT */
|