tkSelect.h
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:7k
源码类别:

通讯编程

开发平台:

Visual C++

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