|
|
1.1 ! root 1: /* ! 2: * tkInt.h -- ! 3: * ! 4: * Declarations for things used internally by the Tk ! 5: * procedures but not exported outside the module. ! 6: * ! 7: * Copyright 1990-1992 Regents of the University of California. ! 8: * Permission to use, copy, modify, and distribute this ! 9: * software and its documentation for any purpose and without ! 10: * fee is hereby granted, provided that the above copyright ! 11: * notice appear in all copies. The University of California ! 12: * makes no representations about the suitability of this ! 13: * software for any purpose. It is provided "as is" without ! 14: * express or implied warranty. ! 15: * ! 16: * $Header: /user6/ouster/wish/RCS/tkInt.h,v 1.65 92/08/21 11:42:27 ouster Exp $ SPRITE (Berkeley) ! 17: */ ! 18: ! 19: #ifndef _TKINT ! 20: #define _TKINT ! 21: ! 22: #ifndef _XLIB_H_ ! 23: #include <X11/Xlib.h> ! 24: #ifdef IS_LINUX ! 25: #include <X11/Xlibint.h> ! 26: #endif ! 27: #endif ! 28: #ifndef _XUTIL_H ! 29: #include <X11/Xutil.h> ! 30: #endif ! 31: #ifndef _TK ! 32: #include "tk.h" ! 33: #endif ! 34: #ifndef _TCL ! 35: #include "tcl.h" ! 36: #endif ! 37: #ifndef _TCLHASH ! 38: #include "tclhash.h" ! 39: #endif ! 40: ! 41: /* ! 42: * One of the following structures is maintained for each display ! 43: * containing a window managed by Tk: ! 44: */ ! 45: ! 46: typedef struct TkDisplay { ! 47: Display *display; /* Xlib's info about display. */ ! 48: struct TkDisplay *nextPtr; /* Next in list of all displays. */ ! 49: char *name; /* Name of display (with any screen ! 50: * identifier removed). Malloc-ed. */ ! 51: Time lastEventTime; /* Time of last event received for this ! 52: * display. */ ! 53: ! 54: /* ! 55: * Information used by tkEvent.c only: ! 56: */ ! 57: ! 58: struct TkWindow *mouseMainPtr; ! 59: /* Pointer to the main window of this ! 60: * display that currently contains the ! 61: * mouse pointer. NULL means the pointer ! 62: * isn't in a main window managed by ! 63: * this process. */ ! 64: ! 65: /* ! 66: * Information used by tkBind.c only: ! 67: */ ! 68: ! 69: int firstKeycode; /* First keycode supported by ! 70: * display. */ ! 71: int lastKeycode; /* Last keycode supported by ! 72: * display. */ ! 73: int symsPerCode; /* Number of KeySyms in "keySyms" ! 74: * for each keycode. 0 means the ! 75: * keysym information hasn't been ! 76: * retrieved from the server yet. */ ! 77: KeySym *keySyms; /* Array of KeySyms, returned by ! 78: * XGetKeyboardMapping. */ ! 79: ! 80: /* ! 81: * Information used by tkError.c only: ! 82: */ ! 83: ! 84: struct TkErrorHandler *errorPtr; ! 85: /* First in list of error handlers ! 86: * for this display. NULL means ! 87: * no handlers exist at present. */ ! 88: int deleteCount; /* Counts # of handlers deleted since ! 89: * last time inactive handlers were ! 90: * garbage-collected. When this number ! 91: * gets big, handlers get cleaned up. */ ! 92: ! 93: /* ! 94: * Information used by tkSend.c only: ! 95: */ ! 96: ! 97: Tk_Window commWindow; /* Window used for communication ! 98: * between interpreters during "send" ! 99: * commands. NULL means send info hasn't ! 100: * been initialized yet. */ ! 101: Atom commProperty; /* X's name for comm property. */ ! 102: Atom registryProperty; /* X's name for property containing ! 103: * registry of interpreter names. */ ! 104: ! 105: /* ! 106: * Information used by tkSelect.c only: ! 107: */ ! 108: ! 109: Tk_Window selectionOwner; /* Current owner of selection, or ! 110: * NULL if selection isn't owned by ! 111: * a window in this process. */ ! 112: int selectionSerial; /* Serial number of last XSelectionSetOwner ! 113: * request we made to server (used to ! 114: * filter out redundant SelectionClear ! 115: * events. */ ! 116: Time selectionTime; /* Timestamp used to acquire selection. */ ! 117: Atom multipleAtom; /* Atom for MULTIPLE. None means ! 118: * selection stuff isn't initialized. */ ! 119: Atom incrAtom; /* Atom for INCR. */ ! 120: Atom targetsAtom; /* Atom for TARGETS. */ ! 121: Atom timestampAtom; /* Atom for TIMESTAMP. */ ! 122: Atom textAtom; /* Atom for TEXT. */ ! 123: Atom compoundTextAtom; /* Atom for COMPOUND_TEXT. */ ! 124: ! 125: /* ! 126: * Information used by tkAtom.c only: ! 127: */ ! 128: ! 129: int atomInit; /* 0 means stuff below hasn't been ! 130: * initialized yet. */ ! 131: Tcl_HashTable nameTable; /* Maps from names to Atom's. */ ! 132: Tcl_HashTable atomTable; /* Maps from Atom's back to names. */ ! 133: ! 134: /* ! 135: * Information used by tkCursor.c only: ! 136: */ ! 137: ! 138: Font cursorFont; /* Font to use for standard cursors. ! 139: * None means font not loaded yet. */ ! 140: ! 141: /* ! 142: * Information used by tkGrab.c only: ! 143: */ ! 144: ! 145: struct TkWindow *grabWinPtr; ! 146: /* Window in which the pointer is currently ! 147: * grabbed, or NULL if none. */ ! 148: struct TkWindow *ungrabWinPtr; ! 149: /* Window to which pointer should be returned ! 150: * when the current grab ends (i.e. the ! 151: * window that the mouse is really on top ! 152: * of). */ ! 153: struct TkWindow *buttonWinPtr; ! 154: /* Window in which first mouse button was ! 155: * pressed while grab was in effect, or NULL ! 156: * if no such press in effect. */ ! 157: struct TkWindow *pointerWinPtr; ! 158: /* The window that officially contains the ! 159: * pointer, as far as this application is ! 160: * concerned. If a grab is in effect then ! 161: * this may not be the window that's underneath ! 162: * the pointer. NULL means the application ! 163: * doesn't consider the pointer to be in any ! 164: * window. */ ! 165: struct TkWindow *serverWinPtr; ! 166: /* The window that contains the pointer, as ! 167: * far as the X server is concerned. This ! 168: * field gets set on every Enter or Leave ! 169: * event even if the grab code eventually ! 170: * discards the event. NULL means the server ! 171: * thinks the pointer is outside any window ! 172: * of any application on this screen. */ ! 173: int grabFlags; /* Miscellaneous flag values. See definitions ! 174: * in tkGrab.c. */ ! 175: /* XXX: FOCUS */ ! 176: struct TkWindow *focusPtr; /* Identifies window that currently has the ! 177: * focus (or that will get the focus the next ! 178: * time the pointer enters any of the top-level ! 179: * windows associated with this display). ! 180: * NULL means nobody has the focus. ! 181: * Managed by tkEvent.c. */ ! 182: } TkDisplay; ! 183: ! 184: /* ! 185: * One of the following structures exists for each error handler ! 186: * created by a call to Tk_CreateErrorHandler. The structure ! 187: * is managed by tkError.c. ! 188: */ ! 189: ! 190: typedef struct TkErrorHandler { ! 191: TkDisplay *dispPtr; /* Display to which handler applies. */ ! 192: unsigned long firstRequest; /* Only errors with serial numbers ! 193: * >= to this are considered. */ ! 194: unsigned long lastRequest; /* Only errors with serial numbers ! 195: * <= to this are considered. This ! 196: * field is filled in when XUnhandle ! 197: * is called. -1 means XUnhandle ! 198: * hasn't been called yet. */ ! 199: int error; /* Consider only errors with this ! 200: * error_code (-1 means consider ! 201: * all errors). */ ! 202: int request; /* Consider only errors with this ! 203: * major request code (-1 means ! 204: * consider all major codes). */ ! 205: int minorCode; /* Consider only errors with this ! 206: * minor request code (-1 means ! 207: * consider all minor codes). */ ! 208: Tk_ErrorProc *errorProc; /* Procedure to invoke when a matching ! 209: * error occurs. NULL means just ignore ! 210: * errors. */ ! 211: ClientData clientData; /* Arbitrary value to pass to ! 212: * errorProc. */ ! 213: struct TkErrorHandler *nextPtr; ! 214: /* Pointer to next older handler for ! 215: * this display, or NULL for end of ! 216: * list. */ ! 217: } TkErrorHandler; ! 218: ! 219: /* ! 220: * One of the following structures exists for each event handler ! 221: * created by calling Tk_CreateEventHandler. This information ! 222: * is used by tkEvent.c only. ! 223: */ ! 224: ! 225: typedef struct TkEventHandler { ! 226: unsigned long mask; /* Events for which to invoke ! 227: * proc. */ ! 228: Tk_EventProc *proc; /* Procedure to invoke when an event ! 229: * in mask occurs. */ ! 230: ClientData clientData; /* Argument to pass to proc. */ ! 231: struct TkEventHandler *nextPtr; ! 232: /* Next in list of handlers ! 233: * associated with window (NULL means ! 234: * end of list). */ ! 235: } TkEventHandler; ! 236: ! 237: /* ! 238: * One of the following structures exists for each selection ! 239: * handler created by calling Tk_CreateSelHandler. This ! 240: * information is used by tkSelect.c only. ! 241: */ ! 242: ! 243: typedef struct TkSelHandler { ! 244: Atom target; /* Target type for selection ! 245: * conversion, such as TARGETS or ! 246: * STRING. */ ! 247: Atom format; /* Format in which selection ! 248: * info will be returned, such ! 249: * as STRING or ATOM. */ ! 250: Tk_SelectionProc *proc; /* Procedure to generate selection ! 251: * in this format. */ ! 252: ClientData clientData; /* Argument to pass to proc. */ ! 253: int size; /* Size of units returned by proc ! 254: * (8 for STRING, 32 for almost ! 255: * anything else). */ ! 256: struct TkSelHandler *nextPtr; ! 257: /* Next selection handler associated ! 258: * with same window (NULL for end of ! 259: * list). */ ! 260: } TkSelHandler; ! 261: ! 262: /* ! 263: * Tk keeps one of the following data structures for each main ! 264: * window (created by a call to Tk_CreateMainWindow). It stores ! 265: * information that is shared by all of the windows associated ! 266: * with a particular main window. ! 267: */ ! 268: ! 269: typedef struct TkMainInfo { ! 270: struct TkWindow *winPtr; /* Pointer to main window. */ ! 271: Tcl_Interp *interp; /* Interpreter associated with application. */ ! 272: Tcl_HashTable nameTable; /* Hash table mapping path names to TkWindow ! 273: * structs for all windows related to this ! 274: * main window. Managed by tkWindow.c. */ ! 275: Tk_BindingTable bindingTable; ! 276: /* Used in conjunction with "bind" command ! 277: * to bind events to Tcl commands. */ ! 278: /* XXX: FOCUS */ ! 279: /* struct TkWindow *focusPtr; */ /* Identifies window that currently has the ! 280: * focus (or that will get the focus the next ! 281: * time the pointer enters any of the top-level ! 282: * windows associated with this display). ! 283: * NULL means nobody has the focus. ! 284: * Managed by tkEvent.c. */ ! 285: struct ElArray *optionRootPtr; ! 286: /* Top level of option hierarchy for this ! 287: * main window. NULL means uninitialized. ! 288: * Managed by tkOption.c. */ ! 289: } TkMainInfo; ! 290: ! 291: /* ! 292: * Tk keeps one of the following structures for each window. ! 293: * Some of the information (like size and location) is a shadow ! 294: * of information managed by the X server, and some is special ! 295: * information used here, such as event and geometry management ! 296: * information. This information is (mostly) managed by tkWindow.c. ! 297: * WARNING: the declaration below must be kept consistent with the ! 298: * Tk_ClientWindow structure in tk.h. If you change one, be sure to ! 299: * change the other!! ! 300: */ ! 301: ! 302: typedef struct TkWindow { ! 303: ! 304: /* ! 305: * Structural information: ! 306: */ ! 307: ! 308: Display *display; /* Display containing window. */ ! 309: TkDisplay *dispPtr; /* Tk's information about display ! 310: * for window. */ ! 311: int screenNum; /* Index of screen for window, among all ! 312: * those for dispPtr. */ ! 313: Window window; /* X's id for window. NULL means window ! 314: * hasn't actually been created yet, or it's ! 315: * been deleted. */ ! 316: struct TkWindow *childList; /* First in list of child windows, ! 317: * or NULL if no children. */ ! 318: struct TkWindow *parentPtr; /* Pointer to parent window (logical ! 319: * parent, not necessarily X parent), or ! 320: * NULL if this is a main window. */ ! 321: struct TkWindow *nextPtr; /* Next in list of children with ! 322: * same parent (NULL if end of ! 323: * list). */ ! 324: TkMainInfo *mainPtr; /* Information shared by all windows ! 325: * associated with a particular main ! 326: * window. NULL means this window is ! 327: * a rogue that isn't associated with ! 328: * any application (at present, there ! 329: * should never be any rogues). */ ! 330: ! 331: /* ! 332: * Name and type information for the window: ! 333: */ ! 334: ! 335: char *pathName; /* Path name of window (concatenation ! 336: * of all names between this window and ! 337: * its top-level ancestor). This is a ! 338: * pointer into an entry in ! 339: * mainPtr->nameTable or NULL if mainPtr ! 340: * is NULL. */ ! 341: Tk_Uid nameUid; /* Name of the window within its parent ! 342: * (unique within the parent). */ ! 343: Tk_Uid classUid; /* Class of the window. NULL means window ! 344: * hasn't been given a class yet. */ ! 345: ! 346: /* ! 347: * Geometry and other attributes of window. This information ! 348: * may not be updated on the server immediately; stuff that ! 349: * hasn't been reflected in the server yet is called "dirty". ! 350: * At present, information can be dirty only if the window ! 351: * hasn't yet been created. ! 352: */ ! 353: ! 354: XWindowChanges changes; /* Geometry and other info about ! 355: * window. */ ! 356: unsigned int dirtyChanges; /* Bits indicate fields of "changes" ! 357: * that are dirty. */ ! 358: XSetWindowAttributes atts; /* Current attributes of window. */ ! 359: unsigned long dirtyAtts; /* Bits indicate fields of "atts" ! 360: * that are dirty. */ ! 361: ! 362: unsigned int flags; /* Various flag values: these are all ! 363: * defined in tk.h (confusing, but they're ! 364: * needed there for some query macros). */ ! 365: ! 366: /* ! 367: * Information kept by the event manager (tkEvent.c): ! 368: */ ! 369: ! 370: TkEventHandler *handlerList;/* First in list of event handlers ! 371: * declared for this window, or ! 372: * NULL if none. */ ! 373: /* ! 374: * Information related to input focussing (tkEvent.c): ! 375: */ ! 376: ! 377: Tk_FocusProc *focusProc; /* Procedure to invoke when this window ! 378: * gets or loses the input focus. NULL ! 379: * means this window is not prepared to ! 380: * receive the focus. */ ! 381: ClientData focusData; /* Arbitrary value to pass to focusProc. */ ! 382: ! 383: /* ! 384: * Information used by tkOption.c to manage options for the ! 385: * window. ! 386: */ ! 387: ! 388: int optionLevel; /* -1 means no option information is ! 389: * currently cached for this window. ! 390: * Otherwise this gives the level in ! 391: * the option stack at which info is ! 392: * cached. */ ! 393: /* ! 394: * Information used by tkSelect.c to manage the selection. ! 395: */ ! 396: ! 397: TkSelHandler *selHandlerList; ! 398: /* First in list of handlers for ! 399: * returning the selection in various ! 400: * forms. */ ! 401: Tk_LostSelProc *selClearProc; ! 402: ClientData selClearData; /* Info to pass to selClearProc. */ ! 403: ! 404: /* ! 405: * Information used by tkGeometry.c for geometry management. ! 406: */ ! 407: ! 408: Tk_GeometryProc *geomProc; /* Procedure to handle geometry ! 409: * requests (NULL means no window is ! 410: * unmanaged). */ ! 411: ClientData geomData; /* Argument for geomProc. */ ! 412: int reqWidth, reqHeight; /* Arguments from last call to ! 413: * Tk_GeometryRequest, or 0's if ! 414: * Tk_GeometryRequest hasn't been ! 415: * called. */ ! 416: int internalBorderWidth; /* Width of internal border of window ! 417: * (0 means no internal border). Geom. ! 418: * mgr. should not place children on top ! 419: * of the border. */ ! 420: ! 421: /* ! 422: * Information maintained by tkWm.c for window manager communication. ! 423: */ ! 424: ! 425: struct TkWmInfo *wmInfoPtr; /* For top-level windows, points to ! 426: * structure with wm-related info (see ! 427: * tkWm.c). For other windows, this ! 428: * is NULL. */ ! 429: } TkWindow; ! 430: ! 431: /* ! 432: * The context below is used to map from an X window id to ! 433: * the TkWindow structure associated with the window. ! 434: */ ! 435: ! 436: extern XContext tkWindowContext; ! 437: ! 438: /* ! 439: * Pointer to first entry in list of all displays currently known. ! 440: */ ! 441: ! 442: extern TkDisplay *tkDisplayList; ! 443: ! 444: /* ! 445: * Flags passed to TkMeasureChars: ! 446: */ ! 447: ! 448: #define TK_WHOLE_WORDS 1 ! 449: #define TK_AT_LEAST_ONE 2 ! 450: #define TK_PARTIAL_OK 4 ! 451: #define TK_NEWLINES_NOT_SPECIAL 8 ! 452: ! 453: /* ! 454: * Location of library directory containing Tk scripts. This value ! 455: * is put in the $tkLibrary variable for each application. ! 456: */ ! 457: ! 458: #ifndef TK_LIBRARY ! 459: #ifdef MSDOS ! 460: #define TK_LIBRARY "res/tk" ! 461: #else ! 462: #define TK_LIBRARY "/usr/local/lib/tk" ! 463: #endif ! 464: #endif ! 465: ! 466: /* ! 467: * See tkShare.c for explanation of following disgusting variable: ! 468: */ ! 469: ! 470: extern XEvent *tkShareEventPtr; ! 471: ! 472: /* ! 473: * Secret way to inhibit event collapsing. -deh ! 474: */ ! 475: ! 476: extern int tkCollapseMotion; ! 477: ! 478: /* ! 479: * Secret way to break out to Tk_MainLoop. -deh ! 480: */ ! 481: ! 482: extern int tkMustExit; ! 483: ! 484: /* ! 485: * Miscellaneous variables shared among Tk modules but not exported ! 486: * to the outside world: ! 487: */ ! 488: ! 489: extern Tk_Uid tkActiveUid; ! 490: extern Tk_Uid tkDisabledUid; ! 491: extern Tk_Uid tkNormalUid; ! 492: ! 493: /* ! 494: * Internal procedures shared among Tk modules but not exported ! 495: * to the outside world: ! 496: */ ! 497: ! 498: extern int TkAreaToPolygon _ANSI_ARGS_((double *polyPtr, ! 499: int numPoints, double *rectPtr)); ! 500: extern void TkBezierPoints _ANSI_ARGS_((double control[], ! 501: int numSteps, double *coordPtr)); ! 502: extern void TkBindError _ANSI_ARGS_((Tcl_Interp *interp)); ! 503: extern void TkBindEventProc _ANSI_ARGS_((TkWindow *winPtr, ! 504: XEvent *eventPtr)); ! 505: extern Time TkCurrentTime _ANSI_ARGS_((TkDisplay *dispPtr)); ! 506: extern int TkDeadAppCmd _ANSI_ARGS_((ClientData clientData, ! 507: Tcl_Interp *interp, int argc, char **argv)); ! 508: extern void TkDisplayChars _ANSI_ARGS_((Display *display, ! 509: Drawable drawable, GC gc, ! 510: XFontStruct *fontStructPtr, char *string, ! 511: int numChars, int x, int y, int flags)); ! 512: extern void TkEventDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 513: extern void TkFocusEventProc _ANSI_ARGS_((TkWindow *winPtr, ! 514: XEvent *eventPtr)); ! 515: extern void TkGetButtPoints _ANSI_ARGS_((double p1[], double p2[], ! 516: double width, int project, double m1[], ! 517: double m2[])); ! 518: extern int TkGetInterpNames _ANSI_ARGS_((Tcl_Interp *interp, ! 519: Tk_Window tkwin)); ! 520: extern int TkGetMiterPoints _ANSI_ARGS_((double p1[], double p2[], ! 521: double p3[], double width, double m1[], ! 522: double m2[])); ! 523: extern void TkGrabDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 524: extern int TkLineToArea _ANSI_ARGS_((double end1Ptr[2], ! 525: double end2Ptr[2], double rectPtr[4])); ! 526: extern double TkLineToPoint _ANSI_ARGS_((double end1Ptr[2], ! 527: double end2Ptr[2], double pointPtr[2])); ! 528: extern int TkMeasureChars _ANSI_ARGS_((XFontStruct *fontStructPtr, ! 529: char *source, int maxChars, int startX, int maxX, ! 530: int flags, int *nextXPtr)); ! 531: extern void TkOptionDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 532: extern int TkOvalToArea _ANSI_ARGS_((double *ovalPtr, ! 533: double *rectPtr)); ! 534: extern double TkOvalToPoint _ANSI_ARGS_((double ovalPtr[4], ! 535: double width, int filled, double pointPtr[2])); ! 536: extern int TkPointerEvent _ANSI_ARGS_((XEvent *eventPtr, ! 537: TkWindow *winPtr)); ! 538: extern int TkPolygonToArea _ANSI_ARGS_((double *polyPtr, ! 539: int numPoints, double *rectPtr)); ! 540: extern double TkPolygonToPoint _ANSI_ARGS_((double *polyPtr, ! 541: int numPoints, double *pointPtr)); ! 542: extern void TkSelDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 543: extern void TkSelEventProc _ANSI_ARGS_((Tk_Window tkwin, ! 544: XEvent *eventPtr)); ! 545: extern void TkSelPropProc _ANSI_ARGS_((XEvent *eventPtr)); ! 546: extern void TkUnderlineChars _ANSI_ARGS_((Display *display, ! 547: Drawable drawable, GC gc, ! 548: XFontStruct *fontStructPtr, char *string, ! 549: int x, int y, int flags, int firstChar, ! 550: int lastChar)); ! 551: extern void TkWmDeadWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 552: extern int TkWmMapWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 553: extern void TkWmSetClass _ANSI_ARGS_((TkWindow *winPtr)); ! 554: extern void TkWmNewWindow _ANSI_ARGS_((TkWindow *winPtr)); ! 555: ! 556: #endif /* _TKINT */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.