From ae2c6bbacc3d1ceb59fac768bc6659fe3cc1c08d Mon Sep 17 00:00:00 2001 From: "donal.k.fellows@manchester.ac.uk" Date: Tue, 15 Nov 2005 15:18:21 +0000 Subject: ANSIfy --- generic/tkError.c | 224 ++++++----- generic/tkFileFilter.h | 86 ++--- generic/tkImgBmap.c | 607 +++++++++++++++--------------- generic/tkImgUtil.c | 36 +- generic/tkInitScript.h | 31 +- generic/tkMenuDraw.c | 416 ++++++++++----------- generic/tkMenubutton.c | 458 ++++++++++++----------- generic/tkMenubutton.h | 178 +++++---- generic/tkPanedWindow.c | 972 +++++++++++++++++++++++++----------------------- generic/tkPlace.c | 639 ++++++++++++++++--------------- generic/tkPointer.c | 299 +++++++-------- generic/tkScale.h | 176 +++++---- generic/tkSelect.h | 180 +++++---- generic/tkSquare.c | 333 ++++++++--------- generic/tkStubImg.c | 44 ++- generic/tkStyle.c | 696 +++++++++++++++++----------------- generic/tkUndo.h | 151 ++++---- generic/tkVisual.c | 276 +++++++------- 18 files changed, 2885 insertions(+), 2917 deletions(-) diff --git a/generic/tkError.c b/generic/tkError.c index 648d440..fe84fe3 100644 --- a/generic/tkError.c +++ b/generic/tkError.c @@ -1,106 +1,96 @@ -/* +/* * tkError.c -- * - * This file provides a high-performance mechanism for - * selectively dealing with errors that occur in talking - * to the X server. This is useful, for example, when - * communicating with a window that may not exist. + * This file provides a high-performance mechanism for selectively + * dealing with errors that occur in talking to the X server. This is + * useful, for example, when communicating with a window that may not + * exist. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-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. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkError.c,v 1.3 2004/01/13 02:06:00 davygrvy Exp $ + * RCS: @(#) $Id: tkError.c,v 1.4 2005/11/15 15:18:21 dkf Exp $ */ #include "tkPort.h" #include "tkInt.h" /* - * The default X error handler gets saved here, so that it can - * be invoked if an error occurs that we can't handle. + * The default X error handler gets saved here, so that it can be invoked if + * an error occurs that we can't handle. */ -static int (*defaultHandler) _ANSI_ARGS_((Display *display, - XErrorEvent *eventPtr)) = NULL; - +typedef int (*TkXErrorHandler)(Display *display, XErrorEvent *eventPtr); +static TkXErrorHandler defaultHandler = NULL; /* * Forward references to procedures declared later in this file: */ -static int ErrorProc _ANSI_ARGS_((Display *display, - XErrorEvent *errEventPtr)); +static int ErrorProc(Display *display, XErrorEvent *errEventPtr); /* *-------------------------------------------------------------- * * Tk_CreateErrorHandler -- * - * Arrange for all a given procedure to be invoked whenever - * certain errors occur. + * Arrange for all a given procedure to be invoked whenever certain + * errors occur. * * Results: - * The return value is a token identifying the handler; - * it must be passed to Tk_DeleteErrorHandler to delete the - * handler. + * The return value is a token identifying the handler; it must be passed + * to Tk_DeleteErrorHandler to delete the handler. * * Side effects: - * If an X error occurs that matches the error, request, - * and minor arguments, then errorProc will be invoked. - * ErrorProc should have the following structure: + * If an X error occurs that matches the error, request, and minor + * arguments, then errorProc will be invoked. ErrorProc should have the + * following structure: * * int - * errorProc(clientData, errorEventPtr) - * caddr_t clientData; - * XErrorEvent *errorEventPtr; - * { + * errorProc(caddr_t clientData, XErrorEvent *errorEventPtr) { * } * - * The clientData argument will be the same as the clientData - * argument to this procedure, and errorEvent will describe - * the error. If errorProc returns 0, it means that it - * completely "handled" the error: no further processing - * should be done. If errorProc returns 1, it means that it - * didn't know how to deal with the error, so we should look - * for other error handlers, or invoke the default error - * handler if no other handler returns zero. Handlers are - * invoked in order of age: youngest handler first. + * The clientData argument will be the same as the clientData argument to + * this procedure, and errorEvent will describe the error. If errorProc + * returns 0, it means that it completely "handled" the error: no further + * processing should be done. If errorProc returns 1, it means that it + * didn't know how to deal with the error, so we should look for other + * error handlers, or invoke the default error handler if no other + * handler returns zero. Handlers are invoked in order of age: youngest + * handler first. * - * Note: errorProc will only be called for errors associated - * with X requests made AFTER this call, but BEFORE the handler - * is deleted by calling Tk_DeleteErrorHandler. + * Note: errorProc will only be called for errors associated with X + * requests made AFTER this call, but BEFORE the handler is deleted by + * calling Tk_DeleteErrorHandler. * *-------------------------------------------------------------- */ Tk_ErrorHandler -Tk_CreateErrorHandler(display, error, request, minorCode, errorProc, clientData) - Display *display; /* Display for which to handle +Tk_CreateErrorHandler( + Display *display, /* Display for which to handle errors. */ + int error, /* Consider only errors with this error_code + * (-1 means consider all errors). */ + int request, /* Consider only errors with this major + * request code (-1 means consider all major + * codes). */ + int minorCode, /* Consider only errors with this minor + * request code (-1 means consider all minor + * codes). */ + Tk_ErrorProc *errorProc, /* Procedure to invoke when a matching error + * occurs. NULL means just ignore matching * errors. */ - int error; /* Consider only errors with this - * error_code (-1 means consider - * all errors). */ - int request; /* Consider only errors with this - * major request code (-1 means - * consider all major codes). */ - int minorCode; /* Consider only errors with this - * minor request code (-1 means - * consider all minor codes). */ - Tk_ErrorProc *errorProc; /* Procedure to invoke when a - * matching error occurs. NULL means - * just ignore matching errors. */ - ClientData clientData; /* Arbitrary value to pass to - * errorProc. */ + ClientData clientData) /* Arbitrary value to pass to errorProc. */ { register TkErrorHandler *errorPtr; register TkDisplay *dispPtr; /* - * Find the display. If Tk doesn't know about this display then - * it's an error: panic. + * Find the display. If Tk doesn't know about this display then it's an + * error: panic. */ dispPtr = TkGetDisplay(display); @@ -146,22 +136,19 @@ Tk_CreateErrorHandler(display, error, request, minorCode, errorProc, clientData) * None. * * Side effects: - * The handler denoted by the "handler" argument will not - * be invoked for any X errors associated with requests - * made after this call. However, if errors arrive later - * for requests made BEFORE this call, then the handler - * will still be invoked. Call XSync if you want to be - * sure that all outstanding errors have been received - * and processed. + * The handler denoted by the "handler" argument will not be invoked for + * any X errors associated with requests made after this call. However, + * if errors arrive later for requests made BEFORE this call, then the + * handler will still be invoked. Call XSync if you want to be sure that + * all outstanding errors have been received and processed. * *-------------------------------------------------------------- */ void -Tk_DeleteErrorHandler(handler) - Tk_ErrorHandler handler; /* Token for handler to delete; - * was previous return value from - * Tk_CreateErrorHandler. */ +Tk_DeleteErrorHandler( + Tk_ErrorHandler handler) /* Token for handler to delete; was previous + * return value from Tk_CreateErrorHandler. */ { register TkErrorHandler *errorPtr = (TkErrorHandler *) handler; register TkDisplay *dispPtr = errorPtr->dispPtr; @@ -169,17 +156,15 @@ Tk_DeleteErrorHandler(handler) errorPtr->lastRequest = NextRequest(dispPtr->display) - 1; /* - * Every once-in-a-while, cleanup handlers that are no longer - * active. We probably won't be able to free the handler that - * was just deleted (need to wait for any outstanding requests to - * be processed by server), but there may be previously-deleted - * handlers that are now ready for garbage collection. To reduce - * the cost of the cleanup, let a few dead handlers pile up, then - * clean them all at once. This adds a bit of overhead to errors - * that might occur while the dead handlers are hanging around, - * but reduces the overhead of scanning the list to clean up - * (particularly if there are many handlers that stay around - * forever). + * Every once-in-a-while, cleanup handlers that are no longer active. We + * probably won't be able to free the handler that was just deleted (need + * to wait for any outstanding requests to be processed by server), but + * there may be previously-deleted handlers that are now ready for garbage + * collection. To reduce the cost of the cleanup, let a few dead handlers + * pile up, then clean them all at once. This adds a bit of overhead to + * errors that might occur while the dead handlers are hanging around, but + * reduces the overhead of scanning the list to clean up (particularly if + * there are many handlers that stay around forever). */ dispPtr->deleteCount += 1; @@ -213,35 +198,33 @@ Tk_DeleteErrorHandler(handler) * * ErrorProc -- * - * This procedure is invoked by the X system when error - * events arrive. + * This procedure is invoked by the X system when error events arrive. * * Results: - * If it returns, the return value is zero. However, - * it is possible that one of the error handlers may - * just exit. + * If it returns, the return value is zero. However, it is possible that + * one of the error handlers may just exit. * * Side effects: - * This procedure does two things. First, it uses the - * serial # in the error event to eliminate handlers whose - * expiration serials are now in the past. Second, it - * invokes any handlers that want to deal with the error. + * This procedure does two things. First, it uses the serial # in the + * error event to eliminate handlers whose expiration serials are now in + * the past. Second, it invokes any handlers that want to deal with the + * error. * *-------------------------------------------------------------- */ static int -ErrorProc(display, errEventPtr) - Display *display; /* Display for which error - * occurred. */ - register XErrorEvent *errEventPtr; /* Information about error. */ +ErrorProc( + Display *display, /* Display for which error occurred. */ + register XErrorEvent *errEventPtr) + /* Information about error. */ { register TkDisplay *dispPtr; register TkErrorHandler *errorPtr; /* - * See if we know anything about the display. If not, then - * invoke the default error handler. + * See if we know anything about the display. If not, then invoke the + * default error handler. */ dispPtr = TkGetDisplay(display); @@ -266,42 +249,47 @@ ErrorProc(display, errEventPtr) && (errorPtr->lastRequest < errEventPtr->serial))) { continue; } - if (errorPtr->errorProc == NULL) { + if (errorPtr->errorProc == NULL || (*errorPtr->errorProc)( + errorPtr->clientData, errEventPtr) == 0) { return 0; - } else { - if ((*errorPtr->errorProc)(errorPtr->clientData, - errEventPtr) == 0) { - return 0; - } } } /* - * See if the error is a BadWindow error. If so, and it refers - * to a window that still exists in our window table, then ignore - * the error. Errors like this can occur if a window owned by us - * is deleted by someone externally, like a window manager. We'll - * ignore the errors at least long enough to clean up internally and - * remove the entry from the window table. + * See if the error is a BadWindow error. If so, and it refers to a window + * that still exists in our window table, then ignore the error. Errors + * like this can occur if a window owned by us is deleted by someone + * externally, like a window manager. We'll ignore the errors at least + * long enough to clean up internally and remove the entry from the window + * table. * - * NOTE: For embedding, we must also check whether the window was - * recently deleted. If so, it may be that Tk generated operations on - * windows that were deleted by the container. Now we are getting - * the errors (BadWindow) after Tk already deleted the window itself. + * NOTE: For embedding, we must also check whether the window was recently + * deleted. If so, it may be that Tk generated operations on windows that + * were deleted by the container. Now we are getting the errors + * (BadWindow) after Tk already deleted the window itself. */ - if ((errEventPtr->error_code == BadWindow) && - ((Tk_IdToWindow(display, (Window) errEventPtr->resourceid) != - NULL) || - (TkpWindowWasRecentlyDeleted((Window) errEventPtr->resourceid, - dispPtr)))) { - return 0; + if (errEventPtr->error_code == BadWindow) { + Window w = (Window) errEventPtr->resourceid; + + if (Tk_IdToWindow(display, w) != NULL + || TkpWindowWasRecentlyDeleted(w, dispPtr)) { + return 0; + } } /* - * We couldn't handle the error. Use the default handler. + * We couldn't handle the error. Use the default handler. */ - couldntHandle: + couldntHandle: return (*defaultHandler)(display, errEventPtr); } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkFileFilter.h b/generic/tkFileFilter.h index edcf96a..dad9772 100644 --- a/generic/tkFileFilter.h +++ b/generic/tkFileFilter.h @@ -1,15 +1,15 @@ /* * tkFileFilter.h -- * - * Declarations for the file filter processing routines needed by - * the file selection dialogs. + * Declarations for the file filter processing routines needed by the + * file selection dialogs. * * Copyright (c) 1996 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkFileFilter.h,v 1.6 2004/12/20 10:34:20 vincentdarley Exp $ + * RCS: @(#) $Id: tkFileFilter.h,v 1.7 2005/11/15 15:18:21 dkf Exp $ * */ @@ -24,65 +24,65 @@ #endif typedef struct GlobPattern { - struct GlobPattern * next; /* Chains to the next glob pattern - * in a glob pattern list */ - char * pattern; /* String value of the pattern, such - * as "*.txt" or "*.*" - */ + struct GlobPattern *next; /* Chains to the next glob pattern in a glob + * pattern list */ + char *pattern; /* String value of the pattern, such as + * "*.txt" or "*.*" */ } GlobPattern; typedef struct MacFileType { - struct MacFileType * next; /* Chains to the next mac file type - * in a mac file type list */ - OSType type; /* Mac file type, such as 'TEXT' or - * 'GIFF' */ + struct MacFileType *next; /* Chains to the next mac file type in a mac + * file type list */ + OSType type; /* Mac file type, such as 'TEXT' or 'GIFF' */ } MacFileType; typedef struct FileFilterClause { - struct FileFilterClause * next; /* Chains to the next clause in - * a clause list */ - GlobPattern * patterns; /* Head of glob pattern type list */ - GlobPattern * patternsTail; /* Tail of glob pattern type list */ - MacFileType * macTypes; /* Head of mac file type list */ - MacFileType * macTypesTail; /* Tail of mac file type list */ + struct FileFilterClause *next; + /* Chains to the next clause in a clause + * list */ + GlobPattern *patterns; /* Head of glob pattern type list */ + GlobPattern *patternsTail; /* Tail of glob pattern type list */ + MacFileType *macTypes; /* Head of mac file type list */ + MacFileType *macTypesTail; /* Tail of mac file type list */ } FileFilterClause; typedef struct FileFilter { - struct FileFilter * next; /* Chains to the next filter - * in a filter list */ - char * name; /* Name of the file filter, - * such as "Text Documents" */ - FileFilterClause * clauses; /* Head of the clauses list */ - FileFilterClause * clausesTail; /* Tail of the clauses list */ + struct FileFilter *next; /* Chains to the next filter in a filter + * list */ + char *name; /* Name of the file filter, such as "Text + * Documents" */ + FileFilterClause *clauses; /* Head of the clauses list */ + FileFilterClause *clausesTail; + /* Tail of the clauses list */ } FileFilter; -/*---------------------------------------------------------------------- +/* + *---------------------------------------------------------------------- + * * FileFilterList -- * - * The routine TkGetFileFilters() translates the string value of the - * -filefilters option into a FileFilterList structure, which consists - * of a list of file filters. + * The routine TkGetFileFilters() translates the string value of the + * -filefilters option into a FileFilterList structure, which consists of + * a list of file filters. + * + * Each file filter consists of one or more clauses. Each clause has one + * or more glob patterns and/or one or more Mac file types * - * Each file filter consists of one or more clauses. Each clause has - * one or more glob patterns and/or one or more Mac file types *---------------------------------------------------------------------- */ typedef struct FileFilterList { - FileFilter * filters; /* Head of the filter list */ - FileFilter * filtersTail; /* Tail of the filter list */ - int numFilters; /* number of filters in the list */ + FileFilter *filters; /* Head of the filter list */ + FileFilter *filtersTail; /* Tail of the filter list */ + int numFilters; /* number of filters in the list */ } FileFilterList; -EXTERN void TkFreeFileFilters _ANSI_ARGS_(( - FileFilterList * flistPtr)); -EXTERN void TkInitFileFilters _ANSI_ARGS_(( - FileFilterList * flistPtr)); -EXTERN int TkGetFileFilters _ANSI_ARGS_ ((Tcl_Interp *interp, - FileFilterList * flistPtr, Tcl_Obj *valuePtr, - int isWindows)); +EXTERN void TkFreeFileFilters(FileFilterList *flistPtr); +EXTERN void TkInitFileFilters(FileFilterList *flistPtr); +EXTERN int TkGetFileFilters(Tcl_Interp *interp, + FileFilterList *flistPtr, Tcl_Obj *valuePtr, + int isWindows); # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLIMPORT - #endif diff --git a/generic/tkImgBmap.c b/generic/tkImgBmap.c index b5e77c0..26322c9 100644 --- a/generic/tkImgBmap.c +++ b/generic/tkImgBmap.c @@ -1,4 +1,4 @@ -/* +/* * tkImgBmap.c -- * * This procedure implements images of type "bitmap" for Tk. @@ -10,7 +10,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkImgBmap.c,v 1.16 2004/01/13 02:06:00 davygrvy Exp $ + * RCS: @(#) $Id: tkImgBmap.c,v 1.17 2005/11/15 15:18:21 dkf Exp $ */ #include "tkInt.h" @@ -22,21 +22,19 @@ */ typedef struct BitmapMaster { - Tk_ImageMaster tkMaster; /* Tk's token for image master. NULL means - * the image is being deleted. */ - Tcl_Interp *interp; /* Interpreter for application that is - * using image. */ - Tcl_Command imageCmd; /* Token for image command (used to delete - * it when the image goes away). NULL means - * the image command has already been - * deleted. */ + Tk_ImageMaster tkMaster; /* Tk's token for image master. NULL means the + * image is being deleted. */ + Tcl_Interp *interp; /* Interpreter for application that is using + * image. */ + Tcl_Command imageCmd; /* Token for image command (used to delete it + * when the image goes away). NULL means the + * image command has already been deleted. */ int width, height; /* Dimensions of image. */ - char *data; /* Data comprising bitmap (suitable for - * input to XCreateBitmapFromData). May - * be NULL if no data. Malloc'ed. */ - char *maskData; /* Data for bitmap's mask (suitable for - * input to XCreateBitmapFromData). - * Malloc'ed. */ + char *data; /* Data comprising bitmap (suitable for input + * to XCreateBitmapFromData). May be NULL if + * no data. Malloc'ed. */ + char *maskData; /* Data for bitmap's mask (suitable for input + * to XCreateBitmapFromData). Malloc'ed. */ Tk_Uid fgUid; /* Value of -foreground option (malloc'ed). */ Tk_Uid bgUid; /* Value of -background option (malloc'ed). */ char *fileString; /* Value of -file option (malloc'ed). */ @@ -49,13 +47,13 @@ typedef struct BitmapMaster { } BitmapMaster; /* - * The following data structure represents all of the instances of an - * image that lie within a particular window: + * The following data structure represents all of the instances of an image + * that lie within a particular window: */ typedef struct BitmapInstance { - int refCount; /* Number of instances that share this - * data structure. */ + int refCount; /* Number of instances that share this data + * structure. */ BitmapMaster *masterPtr; /* Pointer to master for image. */ Tk_Window tkwin; /* Window in which the instances will be * displayed. */ @@ -65,37 +63,35 @@ typedef struct BitmapInstance { Pixmap mask; /* Mask: only display bitmap pixels where * there are 1's here. */ GC gc; /* Graphics context for displaying bitmap. - * None means there was an error while - * setting up the instance, so it cannot - * be displayed. */ + * None means there was an error while setting + * up the instance, so it cannot be + * displayed. */ struct BitmapInstance *nextPtr; /* Next in list of all instance structures - * associated with masterPtr (NULL means - * end of list). */ + * associated with masterPtr (NULL means end + * of list). */ } BitmapInstance; /* * The type record for bitmap images: */ -static int GetByte _ANSI_ARGS_((Tcl_Channel chan)); -static int ImgBmapCreate _ANSI_ARGS_((Tcl_Interp *interp, +static int GetByte(Tcl_Channel chan); +static int ImgBmapCreate(Tcl_Interp *interp, char *name, int argc, Tcl_Obj *CONST objv[], Tk_ImageType *typePtr, Tk_ImageMaster master, - ClientData *clientDataPtr)); -static ClientData ImgBmapGet _ANSI_ARGS_((Tk_Window tkwin, - ClientData clientData)); -static void ImgBmapDisplay _ANSI_ARGS_((ClientData clientData, - Display *display, Drawable drawable, + ClientData *clientDataPtr); +static ClientData ImgBmapGet(Tk_Window tkwin, ClientData clientData); +static void ImgBmapDisplay(ClientData clientData, + Display *display, Drawable drawable, int imageX, int imageY, int width, int height, - int drawableX, int drawableY)); -static void ImgBmapFree _ANSI_ARGS_((ClientData clientData, - Display *display)); -static void ImgBmapDelete _ANSI_ARGS_((ClientData clientData)); -static int ImgBmapPostscript _ANSI_ARGS_((ClientData clientData, + int drawableX, int drawableY); +static void ImgBmapFree(ClientData clientData, Display *display); +static void ImgBmapDelete(ClientData clientData); +static int ImgBmapPostscript(ClientData clientData, Tcl_Interp *interp, Tk_Window tkwin, Tk_PostscriptInfo psinfo, int x, int y, - int width, int height, int prepass)); + int width, int height, int prepass); Tk_ImageType tkBitmapImageType = { "bitmap", /* name */ @@ -105,7 +101,7 @@ Tk_ImageType tkBitmapImageType = { ImgBmapFree, /* freeProc */ ImgBmapDelete, /* deleteProc */ ImgBmapPostscript, /* postscriptProc */ - (Tk_ImageType *) NULL /* nextPtr */ + NULL /* nextPtr */ }; /* @@ -113,28 +109,25 @@ Tk_ImageType tkBitmapImageType = { */ static Tk_ConfigSpec configSpecs[] = { - {TK_CONFIG_UID, "-background", (char *) NULL, (char *) NULL, + {TK_CONFIG_UID, "-background", NULL, NULL, "", Tk_Offset(BitmapMaster, bgUid), 0}, - {TK_CONFIG_STRING, "-data", (char *) NULL, (char *) NULL, - (char *) NULL, Tk_Offset(BitmapMaster, dataString), TK_CONFIG_NULL_OK}, - {TK_CONFIG_STRING, "-file", (char *) NULL, (char *) NULL, - (char *) NULL, Tk_Offset(BitmapMaster, fileString), TK_CONFIG_NULL_OK}, - {TK_CONFIG_UID, "-foreground", (char *) NULL, (char *) NULL, + {TK_CONFIG_STRING, "-data", NULL, NULL, + NULL, Tk_Offset(BitmapMaster, dataString), TK_CONFIG_NULL_OK}, + {TK_CONFIG_STRING, "-file", NULL, NULL, + NULL, Tk_Offset(BitmapMaster, fileString), TK_CONFIG_NULL_OK}, + {TK_CONFIG_UID, "-foreground", NULL, NULL, "#000000", Tk_Offset(BitmapMaster, fgUid), 0}, - {TK_CONFIG_STRING, "-maskdata", (char *) NULL, (char *) NULL, - (char *) NULL, Tk_Offset(BitmapMaster, maskDataString), - TK_CONFIG_NULL_OK}, - {TK_CONFIG_STRING, "-maskfile", (char *) NULL, (char *) NULL, - (char *) NULL, Tk_Offset(BitmapMaster, maskFileString), - TK_CONFIG_NULL_OK}, - {TK_CONFIG_END, (char *) NULL, (char *) NULL, (char *) NULL, - (char *) NULL, 0, 0} + {TK_CONFIG_STRING, "-maskdata", NULL, NULL, + NULL, Tk_Offset(BitmapMaster, maskDataString), TK_CONFIG_NULL_OK}, + {TK_CONFIG_STRING, "-maskfile", NULL, NULL, + NULL, Tk_Offset(BitmapMaster, maskFileString), TK_CONFIG_NULL_OK}, + {TK_CONFIG_END, NULL, NULL, NULL, NULL, 0, 0} }; /* - * The following data structure is used to describe the state of - * parsing a bitmap file or string. It is used for communication - * between TkGetBitmapData and NextBitmapWord. + * The following data structure is used to describe the state of parsing a + * bitmap file or string. It is used for communication between TkGetBitmapData + * and NextBitmapWord. */ #define MAX_WORD_LENGTH 100 @@ -142,8 +135,8 @@ typedef struct ParseInfo { char *string; /* Next character of string data for bitmap, * or NULL if bitmap is being read from * file. */ - Tcl_Channel chan; /* File containing bitmap data, or NULL - * if no file. */ + Tcl_Channel chan; /* File containing bitmap data, or NULL if no + * file. */ char word[MAX_WORD_LENGTH+1]; /* Current word of bitmap data, NULL * terminated. */ @@ -154,24 +147,20 @@ typedef struct ParseInfo { * Prototypes for procedures used only locally in this file: */ -static int ImgBmapCmd _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *interp, int argc, Tcl_Obj *CONST objv[])); -static void ImgBmapCmdDeletedProc _ANSI_ARGS_(( - ClientData clientData)); -static void ImgBmapConfigureInstance _ANSI_ARGS_(( - BitmapInstance *instancePtr)); -static int ImgBmapConfigureMaster _ANSI_ARGS_(( - BitmapMaster *masterPtr, int argc, Tcl_Obj *CONST objv[], - int flags)); -static int NextBitmapWord _ANSI_ARGS_((ParseInfo *parseInfoPtr)); +static int ImgBmapCmd(ClientData clientData, Tcl_Interp *interp, + int argc, Tcl_Obj *CONST objv[]); +static void ImgBmapCmdDeletedProc(ClientData clientData); +static void ImgBmapConfigureInstance(BitmapInstance *instancePtr); +static int ImgBmapConfigureMaster(BitmapMaster *masterPtr, + int argc, Tcl_Obj *CONST objv[], int flags); +static int NextBitmapWord(ParseInfo *parseInfoPtr); /* *---------------------------------------------------------------------- * * ImgBmapCreate -- * - * This procedure is called by the Tk image code to create "test" - * images. + * This procedure is called by the Tk image code to create "test" images. * * Results: * A standard Tcl result. @@ -184,18 +173,18 @@ static int NextBitmapWord _ANSI_ARGS_((ParseInfo *parseInfoPtr)); /* ARGSUSED */ static int -ImgBmapCreate(interp, name, argc, argv, typePtr, master, clientDataPtr) - Tcl_Interp *interp; /* Interpreter for application containing +ImgBmapCreate( + Tcl_Interp *interp, /* Interpreter for application containing * image. */ - char *name; /* Name to use for image. */ - int argc; /* Number of arguments. */ - Tcl_Obj *CONST argv[]; /* Argument objects for options (doesn't + char *name, /* Name to use for image. */ + int argc, /* Number of arguments. */ + Tcl_Obj *CONST argv[], /* Argument objects for options (doesn't * include image name or type). */ - Tk_ImageType *typePtr; /* Pointer to our type record (not used). */ - Tk_ImageMaster master; /* Token for image, to be used by us in - * later callbacks. */ - ClientData *clientDataPtr; /* Store manager's token for image here; - * it will be returned in later callbacks. */ + Tk_ImageType *typePtr, /* Pointer to our type record (not used). */ + Tk_ImageMaster master, /* Token for image, to be used by us in later + * callbacks. */ + ClientData *clientDataPtr) /* Store manager's token for image here; it + * will be returned in later callbacks. */ { BitmapMaster *masterPtr; @@ -228,28 +217,28 @@ ImgBmapCreate(interp, name, argc, argv, typePtr, master, clientDataPtr) * ImgBmapConfigureMaster -- * * This procedure is called when a bitmap image is created or - * reconfigured. It process configuration options and resets - * any instances of the image. + * reconfigured. It process configuration options and resets any + * instances of the image. * * Results: - * A standard Tcl return value. If TCL_ERROR is returned then - * an error message is left in the masterPtr->interp's result. + * A standard Tcl return value. If TCL_ERROR is returned then an error + * message is left in the masterPtr->interp's result. * * Side effects: - * Existing instances of the image will be redisplayed to match - * the new configuration options. + * Existing instances of the image will be redisplayed to match the new + * configuration options. * *---------------------------------------------------------------------- */ static int -ImgBmapConfigureMaster(masterPtr, objc, objv, flags) - BitmapMaster *masterPtr; /* Pointer to data structure describing +ImgBmapConfigureMaster( + BitmapMaster *masterPtr, /* Pointer to data structure describing * overall bitmap image to (reconfigure). */ - int objc; /* Number of entries in objv. */ - Tcl_Obj *CONST objv[]; /* Pairs of configuration options for image. */ - int flags; /* Flags to pass to Tk_ConfigureWidget, - * such as TK_CONFIG_ARGV_ONLY. */ + int objc, /* Number of entries in objv. */ + Tcl_Obj *CONST objv[], /* Pairs of configuration options for image. */ + int flags) /* Flags to pass to Tk_ConfigureWidget, such + * as TK_CONFIG_ARGV_ONLY. */ { BitmapInstance *instancePtr; int maskWidth, maskHeight, dummy1, dummy2; @@ -269,8 +258,8 @@ ImgBmapConfigureMaster(masterPtr, objc, objv, flags) ckfree((char *) argv); /* - * Parse the bitmap and/or mask to create binary data. Make sure that - * the bitmap and mask have the same dimensions. + * Parse the bitmap and/or mask to create binary data. Make sure that the + * bitmap and mask have the same dimensions. */ if (masterPtr->data != NULL) { @@ -313,9 +302,9 @@ ImgBmapConfigureMaster(masterPtr, objc, objv, flags) } /* - * Cycle through all of the instances of this image, regenerating - * the information for each instance. Then force the image to be - * redisplayed everywhere that it is used. + * Cycle through all of the instances of this image, regenerating the + * information for each instance. Then force the image to be redisplayed + * everywhere that it is used. */ for (instancePtr = masterPtr->instancePtr; instancePtr != NULL; @@ -332,24 +321,24 @@ ImgBmapConfigureMaster(masterPtr, objc, objv, flags) * * ImgBmapConfigureInstance -- * - * This procedure is called to create displaying information for - * a bitmap image instance based on the configuration information - * in the master. It is invoked both when new instances are - * created and when the master is reconfigured. + * This procedure is called to create displaying information for a bitmap + * image instance based on the configuration information in the master. + * It is invoked both when new instances are created and when the master + * is reconfigured. * * Results: * None. * * Side effects: - * Generates errors via Tcl_BackgroundError if there are problems - * in setting up the instance. + * Generates errors via Tcl_BackgroundError if there are problems in + * setting up the instance. * *---------------------------------------------------------------------- */ static void -ImgBmapConfigureInstance(instancePtr) - BitmapInstance *instancePtr; /* Instance to reconfigure. */ +ImgBmapConfigureInstance( + BitmapInstance *instancePtr)/* Instance to reconfigure. */ { BitmapMaster *masterPtr = instancePtr->masterPtr; XColor *colorPtr; @@ -359,8 +348,8 @@ ImgBmapConfigureInstance(instancePtr) Pixmap oldMask; /* - * For each of the options in masterPtr, translate the string - * form into an internal form appropriate for instancePtr. + * For each of the options in masterPtr, translate the string form into an + * internal form appropriate for instancePtr. */ if (*masterPtr->bgUid != 0) { @@ -400,11 +389,12 @@ ImgBmapConfigureInstance(instancePtr) } /* - * Careful: We have to allocate a new mask Pixmap before deleting - * the old one. Otherwise, The XID allocator will always return - * the same XID for the new Pixmap as was used for the old Pixmap. - * And that will prevent the mask from changing in the GC below. + * Careful: We have to allocate a new mask Pixmap before deleting the old + * one. Otherwise, The XID allocator will always return the same XID for + * the new Pixmap as was used for the old Pixmap. And that will prevent + * the mask from changing in the GC below. */ + oldMask = instancePtr->mask; instancePtr->mask = None; if (masterPtr->maskData != NULL) { @@ -415,7 +405,7 @@ ImgBmapConfigureInstance(instancePtr) (unsigned) masterPtr->height); } if (oldMask != None) { - Tk_FreePixmap(Tk_Display(instancePtr->tkwin), oldMask); + Tk_FreePixmap(Tk_Display(instancePtr->tkwin), oldMask); } if (masterPtr->data != NULL) { @@ -443,11 +433,10 @@ ImgBmapConfigureInstance(instancePtr) instancePtr->gc = gc; return; - error: + error: /* - * An error occurred: clear the graphics context in the instance to - * make it clear that this instance cannot be displayed. Then report - * the error. + * An error occurred: clear the graphics context in the instance to make + * it clear that this instance cannot be displayed. Then report the error. */ if (instancePtr->gc != None) { @@ -465,17 +454,16 @@ ImgBmapConfigureInstance(instancePtr) * * TkGetBitmapData -- * - * Given a file name or ASCII string, this procedure parses the - * file or string contents to produce binary data for a bitmap. + * Given a file name or ASCII string, this procedure parses the file or + * string contents to produce binary data for a bitmap. * * Results: - * If the bitmap description was parsed successfully then the - * return value is a malloc-ed array containing the bitmap data. - * The dimensions of the data are stored in *widthPtr and - * *heightPtr. *hotXPtr and *hotYPtr are set to the bitmap - * hotspot if one is defined, otherwise they are set to -1, -1. - * If an error occurred, NULL is returned and an error message is - * left in the interp's result. + * If the bitmap description was parsed successfully then the return + * value is a malloc-ed array containing the bitmap data. The dimensions + * of the data are stored in *widthPtr and *heightPtr. *hotXPtr and + * *hotYPtr are set to the bitmap hotspot if one is defined, otherwise + * they are set to -1, -1. If an error occurred, NULL is returned and an + * error message is left in the interp's result. * * Side effects: * A bitmap is created. @@ -484,18 +472,15 @@ ImgBmapConfigureInstance(instancePtr) */ char * -TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, - hotXPtr, hotYPtr) - Tcl_Interp *interp; /* For reporting errors, or NULL. */ - char *string; /* String describing bitmap. May - * be NULL. */ - char *fileName; /* Name of file containing bitmap - * description. Used only if string - * is NULL. Must not be NULL if - * string is NULL. */ - int *widthPtr, *heightPtr; /* Dimensions of bitmap get returned - * here. */ - int *hotXPtr, *hotYPtr; /* Position of hot spot or -1,-1. */ +TkGetBitmapData( + Tcl_Interp *interp, /* For reporting errors, or NULL. */ + char *string, /* String describing bitmap. May be NULL. */ + char *fileName, /* Name of file containing bitmap description. + * Used only if string is NULL. Must not be + * NULL if string is NULL. */ + int *widthPtr, int *heightPtr, + /* Dimensions of bitmap get returned here. */ + int *hotXPtr, int *hotYPtr) /* Position of hot spot or -1,-1. */ { int width, height, numBytes, hotX, hotY; CONST char *expandedFileName; @@ -506,11 +491,11 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, pi.string = string; if (string == NULL) { - if ((interp != NULL) && Tcl_IsSafe(interp)) { - Tcl_AppendResult(interp, "can't get bitmap data from a file in a", - " safe interpreter", (char *) NULL); - return NULL; - } + if ((interp != NULL) && Tcl_IsSafe(interp)) { + Tcl_AppendResult(interp, "can't get bitmap data from a file in a", + " safe interpreter", NULL); + return NULL; + } expandedFileName = Tcl_TranslateFileName(interp, fileName, &buffer); if (expandedFileName == NULL) { return NULL; @@ -521,29 +506,28 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, if (interp != NULL) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "couldn't read bitmap file \"", - fileName, "\": ", Tcl_PosixError(interp), - (char *) NULL); + fileName, "\": ", Tcl_PosixError(interp), NULL); } return NULL; } - - if (Tcl_SetChannelOption(interp, pi.chan, "-translation", "binary") + + if (Tcl_SetChannelOption(interp, pi.chan, "-translation", "binary") != TCL_OK) { - return NULL; - } - if (Tcl_SetChannelOption(interp, pi.chan, "-encoding", "binary") + return NULL; + } + if (Tcl_SetChannelOption(interp, pi.chan, "-encoding", "binary") != TCL_OK) { - return NULL; - } + return NULL; + } } else { pi.chan = NULL; } /* - * Parse the lines that define the dimensions of the bitmap, - * plus the first line that defines the bitmap data (it declares - * the name of a data variable but doesn't include any actual - * data). These lines look something like the following: + * Parse the lines that define the dimensions of the bitmap, plus the + * first line that defines the bitmap data (it declares the name of a data + * variable but doesn't include any actual data). These lines look + * something like the following: * * #define foo_width 16 * #define foo_height 16 @@ -551,9 +535,9 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, * #define foo_y_hot 3 * static char foo_bits[] = { * - * The x_hot and y_hot lines may or may not be present. It's - * important to check for "char" in the last line, in order to - * reject old X10-style bitmaps that used shorts. + * The x_hot and y_hot lines may or may not be present. It's important to + * check for "char" in the last line, in order to reject old X10-style + * bitmaps that used shorts. */ width = 0; @@ -612,19 +596,18 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, } else if ((pi.word[0] == '{') && (pi.word[1] == 0)) { if (interp != NULL) { Tcl_AppendResult(interp, "format error in bitmap data; ", - "looks like it's an obsolete X10 bitmap file", - (char *) NULL); + "looks like it's an obsolete X10 bitmap file", NULL); } goto errorCleanup; } } /* - * Now we've read everything but the data. Allocate an array - * and read in the data. + * Now we've read everything but the data. Allocate an array and read in + * the data. */ - getData: + getData: if ((width <= 0) || (height <= 0)) { goto error; } @@ -641,7 +624,7 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, } /* - * All done. Clean up and return. + * All done. Clean up and return. */ if (pi.chan != NULL) { @@ -653,12 +636,12 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, *hotYPtr = hotY; return data; - error: + error: if (interp != NULL) { Tcl_SetResult(interp, "format error in bitmap data", TCL_STATIC); } - - errorCleanup: + + errorCleanup: if (data != NULL) { ckfree(data); } @@ -673,13 +656,13 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, * * NextBitmapWord -- * - * This procedure retrieves the next word of information (stuff - * between commas or white space) from a bitmap description. + * This procedure retrieves the next word of information (stuff between + * commas or white space) from a bitmap description. * * Results: - * Returns TCL_OK if all went well. In this case the next word, - * and its length, will be availble in *parseInfoPtr. If the end - * of the bitmap description was reached then TCL_ERROR is returned. + * Returns TCL_OK if all went well. In this case the next word, and its + * length, will be availble in *parseInfoPtr. If the end of the bitmap + * description was reached then TCL_ERROR is returned. * * Side effects: * None. @@ -688,9 +671,9 @@ TkGetBitmapData(interp, string, fileName, widthPtr, heightPtr, */ static int -NextBitmapWord(parseInfoPtr) - ParseInfo *parseInfoPtr; /* Describes what we're reading - * and where we are in it. */ +NextBitmapWord( + ParseInfo *parseInfoPtr) /* Describes what we're reading and where we + * are in it. */ { char *src, *dst; int c; @@ -742,9 +725,9 @@ NextBitmapWord(parseInfoPtr) * * ImgBmapCmd -- * - * This procedure is invoked to process the Tcl command - * that corresponds to an image managed by this module. - * See the user documentation for details on what it does. + * This procedure is invoked to process the Tcl command that corresponds + * to an image managed by this module. See the user documentation for + * details on what it does. * * Results: * A standard Tcl result. @@ -756,15 +739,15 @@ NextBitmapWord(parseInfoPtr) */ static int -ImgBmapCmd(clientData, interp, objc, objv) - ClientData clientData; /* Information about the image master. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument objects. */ +ImgBmapCmd( + ClientData clientData, /* Information about the image master. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { - static CONST char *bmapOptions[] = {"cget", "configure", (char *) NULL}; + static CONST char *bmapOptions[] = {"cget", "configure", NULL}; BitmapMaster *masterPtr = (BitmapMaster *) clientData; - int code, index; + int index; if (objc < 2) { Tcl_WrongNumArgs(interp, 1, objv, "option ?arg arg ...?"); @@ -775,33 +758,29 @@ ImgBmapCmd(clientData, interp, objc, objv) return TCL_ERROR; } switch (index) { - case 0: { + case 0: /* cget */ if (objc != 3) { Tcl_WrongNumArgs(interp, 2, objv, "option"); return TCL_ERROR; } return Tk_ConfigureValue(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, Tcl_GetString(objv[2]), 0); - } - case 1: { + case 1: /* configure */ if (objc == 2) { - code = Tk_ConfigureInfo(interp, Tk_MainWindow(interp), - configSpecs, (char *) masterPtr, (char *) NULL, 0); + return Tk_ConfigureInfo(interp, Tk_MainWindow(interp), + configSpecs, (char *) masterPtr, NULL, 0); } else if (objc == 3) { - code = Tk_ConfigureInfo(interp, Tk_MainWindow(interp), + return Tk_ConfigureInfo(interp, Tk_MainWindow(interp), configSpecs, (char *) masterPtr, Tcl_GetString(objv[2]), 0); } else { - code = ImgBmapConfigureMaster(masterPtr, objc-2, objv+2, + return ImgBmapConfigureMaster(masterPtr, objc-2, objv+2, TK_CONFIG_ARGV_ONLY); } - return code; - } - default: { + default: Tcl_Panic("bad const entries to bmapOptions in ImgBmapCmd"); - } + return TCL_OK; } - return TCL_OK; } /* @@ -809,33 +788,32 @@ ImgBmapCmd(clientData, interp, objc, objv) * * ImgBmapGet -- * - * This procedure is called for each use of a bitmap image in a - * widget. + * This procedure is called for each use of a bitmap image in a widget. * * Results: - * The return value is a token for the instance, which is passed - * back to us in calls to ImgBmapDisplay and ImgBmapFree. + * The return value is a token for the instance, which is passed back to + * us in calls to ImgBmapDisplay and ImgBmapFree. * * Side effects: - * A data structure is set up for the instance (or, an existing - * instance is re-used for the new one). + * A data structure is set up for the instance (or, an existing instance + * is re-used for the new one). * *---------------------------------------------------------------------- */ static ClientData -ImgBmapGet(tkwin, masterData) - Tk_Window tkwin; /* Window in which the instance will be +ImgBmapGet( + Tk_Window tkwin, /* Window in which the instance will be * used. */ - ClientData masterData; /* Pointer to our master structure for the + ClientData masterData) /* Pointer to our master structure for the * image. */ { BitmapMaster *masterPtr = (BitmapMaster *) masterData; BitmapInstance *instancePtr; /* - * See if there is already an instance for this window. If so - * then just re-use it. + * See if there is already an instance for this window. If so then just + * re-use it. */ for (instancePtr = masterPtr->instancePtr; instancePtr != NULL; @@ -847,8 +825,8 @@ ImgBmapGet(tkwin, masterData) } /* - * The image isn't already in use in this window. Make a new - * instance of the image. + * The image isn't already in use in this window. Make a new instance of + * the image. */ instancePtr = (BitmapInstance *) ckalloc(sizeof(BitmapInstance)); @@ -893,24 +871,24 @@ ImgBmapGet(tkwin, masterData) */ static void -ImgBmapDisplay(clientData, display, drawable, imageX, imageY, width, - height, drawableX, drawableY) - ClientData clientData; /* Pointer to BitmapInstance structure for - * for instance to be displayed. */ - Display *display; /* Display on which to draw image. */ - Drawable drawable; /* Pixmap or window in which to draw image. */ - int imageX, imageY; /* Upper-left corner of region within image - * to draw. */ - int width, height; /* Dimensions of region within image to draw. */ - int drawableX, drawableY; /* Coordinates within drawable that - * correspond to imageX and imageY. */ +ImgBmapDisplay( + ClientData clientData, /* Pointer to BitmapInstance structure for + * instance to be displayed. */ + Display *display, /* Display on which to draw image. */ + Drawable drawable, /* Pixmap or window in which to draw image. */ + int imageX, int imageY, /* Upper-left corner of region within image to + * draw. */ + int width, int height, /* Dimensions of region within image to draw. */ + int drawableX, int drawableY) + /* Coordinates within drawable that correspond + * to imageX and imageY. */ { BitmapInstance *instancePtr = (BitmapInstance *) clientData; int masking; /* - * If there's no graphics context, it means that an error occurred - * while creating the image instance so it can't be displayed. + * If there's no graphics context, it means that an error occurred while + * creating the image instance so it can't be displayed. */ if (instancePtr->gc == None) { @@ -918,10 +896,9 @@ ImgBmapDisplay(clientData, display, drawable, imageX, imageY, width, } /* - * If masking is in effect, must modify the mask origin within - * the graphics context to line up with the image's origin. - * Then draw the image and reset the clip origin, if there's - * a mask. + * If masking is in effect, must modify the mask origin within the + * graphics context to line up with the image's origin. Then draw the + * image and reset the clip origin, if there's a mask. */ masking = (instancePtr->mask != None) || (instancePtr->bg == NULL); @@ -942,8 +919,8 @@ ImgBmapDisplay(clientData, display, drawable, imageX, imageY, width, * * ImgBmapFree -- * - * This procedure is called when a widget ceases to use a - * particular instance of an image. + * This procedure is called when a widget ceases to use a particular + * instance of an image. * * Results: * None. @@ -955,10 +932,10 @@ ImgBmapDisplay(clientData, display, drawable, imageX, imageY, width, */ static void -ImgBmapFree(clientData, display) - ClientData clientData; /* Pointer to BitmapInstance structure for - * for instance to be displayed. */ - Display *display; /* Display containing window that used image. */ +ImgBmapFree( + ClientData clientData, /* Pointer to BitmapInstance structure for + * instance to be displayed. */ + Display *display) /* Display containing window that used image. */ { BitmapInstance *instancePtr = (BitmapInstance *) clientData; BitmapInstance *prevPtr; @@ -969,8 +946,8 @@ ImgBmapFree(clientData, display) } /* - * There are no more uses of the image within this widget. Free - * the instance structure. + * There are no more uses of the image within this widget. Free the + * instance structure. */ if (instancePtr->fg != NULL) { @@ -1005,8 +982,8 @@ ImgBmapFree(clientData, display) * * ImgBmapDelete -- * - * This procedure is called by the image code to delete the - * master structure for an image. + * This procedure is called by the image code to delete the master + * structure for an image. * * Results: * None. @@ -1018,9 +995,9 @@ ImgBmapFree(clientData, display) */ static void -ImgBmapDelete(masterData) - ClientData masterData; /* Pointer to BitmapMaster structure for - * image. Must not have any more instances. */ +ImgBmapDelete( + ClientData masterData) /* Pointer to BitmapMaster structure for + * image. Must not have any more instances. */ { BitmapMaster *masterPtr = (BitmapMaster *) masterData; @@ -1037,7 +1014,7 @@ ImgBmapDelete(masterData) if (masterPtr->maskData != NULL) { ckfree(masterPtr->maskData); } - Tk_FreeOptions(configSpecs, (char *) masterPtr, (Display *) NULL, 0); + Tk_FreeOptions(configSpecs, (char *) masterPtr, NULL, 0); ckfree((char *) masterPtr); } @@ -1046,8 +1023,8 @@ ImgBmapDelete(masterData) * * ImgBmapCmdDeletedProc -- * - * This procedure is invoked when the image command for an image - * is deleted. It deletes the image. + * This procedure is invoked when the image command for an image is + * deleted. It deletes the image. * * Results: * None. @@ -1059,8 +1036,8 @@ ImgBmapDelete(masterData) */ static void -ImgBmapCmdDeletedProc(clientData) - ClientData clientData; /* Pointer to BitmapMaster structure for +ImgBmapCmdDeletedProc( + ClientData clientData) /* Pointer to BitmapMaster structure for * image. */ { BitmapMaster *masterPtr = (BitmapMaster *) clientData; @@ -1088,8 +1065,8 @@ ImgBmapCmdDeletedProc(clientData) */ static int -GetByte(chan) - Tcl_Channel chan; /* The channel we read from. */ +GetByte( + Tcl_Channel chan) /* The channel we read from. */ { char buffer; int size; @@ -1108,29 +1085,28 @@ GetByte(chan) * * ImgBmapPsImagemask -- * - * This procedure generates postscript suitable for rendering a - * single bitmap of an image. A single bitmap image might contain both - * a foreground and a background bitmap. This routine is called once - * for each such bitmap in a bitmap image. + * This procedure generates postscript suitable for rendering a single + * bitmap of an image. A single bitmap image might contain both a + * foreground and a background bitmap. This routine is called once for + * each such bitmap in a bitmap image. * - * Prior to invoking this routine, the following setup has occurred: + * Prior to invoking this routine, the following setup has occurred: * - * 1. The postscript foreground color has been set to the color - * used to render the bitmap. + * 1. The postscript foreground color has been set to the color used + * to render the bitmap. * - * 2. The origin of the postscript coordinate system is set to - * the lower left corner of the bitmap. + * 2. The origin of the postscript coordinate system is set to the + * lower left corner of the bitmap. * - * 3. The postscript coordinate system has been scaled so that - * the entire bitmap is one unit squared. + * 3. The postscript coordinate system has been scaled so that the + * entire bitmap is one unit squared. * - * Some postscript implementations cannot handle bitmap strings - * longer than about 60k characters. If the bitmap data is that big - * or bigger, then we render it by splitting it into several smaller - * bitmaps. + * Some postscript implementations cannot handle bitmap strings longer + * than about 60k characters. If the bitmap data is that big or bigger, + * then we render it by splitting it into several smaller bitmaps. * * Results: - * Returns TCL_OK on success. Returns TCL_ERROR and leaves and error + * Returns TCL_OK on success. Returns TCL_ERROR and leaves and error * message in interp->result if there is a problem. * * Side effects: @@ -1140,21 +1116,22 @@ GetByte(chan) */ static int -ImgBmapPsImagemask(interp, width, height, data) - Tcl_Interp *interp; /* Append postscript to this interpreter */ - int width, height; /* Width and height of the bitmap in pixels */ - char *data; /* Data for the bitmap */ +ImgBmapPsImagemask( + Tcl_Interp *interp, /* Append postscript to this interpreter */ + int width, int height, /* Width and height of the bitmap in pixels */ + char *data) /* Data for the bitmap */ { int i, j, nBytePerRow; char buffer[200]; - /* + /* * The bit order of bitmaps in Tk is the opposite of the bit order that - * postscript uses. (In Tk, the least significant bit is on the right - * side of the bitmap and in postscript the least significant bit is shown - * on the left.) The following array is used to reverse the order of bits + * postscript uses. (In Tk, the least significant bit is on the right side + * of the bitmap and in postscript the least significant bit is shown on + * the left.) The following array is used to reverse the order of bits * within a byte so that the bits will be in the order postscript expects. */ + static unsigned char bit_reverse[] = { 0, 128, 64, 192, 32, 160, 96, 224, 16, 144, 80, 208, 48, 176, 112, 240, 8, 136, 72, 200, 40, 168, 104, 232, 24, 152, 88, 216, 56, 184, 120, 248, @@ -1177,21 +1154,25 @@ ImgBmapPsImagemask(interp, width, height, data) if (width*height > 60000) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "unable to generate postscript for bitmaps " - "larger than 60000 pixels", 0); + "larger than 60000 pixels", NULL); return TCL_ERROR; } + sprintf(buffer, "0 0 moveto %d %d true [%d 0 0 %d 0 %d] {<\n", - width, height, width, -height, height); - Tcl_AppendResult(interp, buffer, 0); + width, height, width, -height, height); + Tcl_AppendResult(interp, buffer, NULL); + nBytePerRow = (width+7)/8; for(i=0; i} imagemask \n", 0); + + Tcl_AppendResult(interp, ">} imagemask \n", NULL); return TCL_OK; } @@ -1203,9 +1184,10 @@ ImgBmapPsImagemask(interp, width, height, data) * This procedure generates postscript for rendering a bitmap image. * * Results: + * On success, this routine writes postscript code into interp->result - * and returns TCL_OK TCL_ERROR is returned and an error - * message is left in interp->result if anything goes wrong. + * and returns TCL_OK TCL_ERROR is returned and an error message is left + * in interp->result if anything goes wrong. * * Side effects: * None. @@ -1214,13 +1196,13 @@ ImgBmapPsImagemask(interp, width, height, data) */ static int -ImgBmapPostscript(clientData, interp, tkwin, psinfo, x, y, width, height, - prepass) - ClientData clientData; - Tcl_Interp *interp; - Tk_Window tkwin; - Tk_PostscriptInfo psinfo; - int x, y, width, height, prepass; +ImgBmapPostscript( + ClientData clientData, + Tcl_Interp *interp, + Tk_Window tkwin, + Tk_PostscriptInfo psinfo, + int x, int y, int width, int height, + int prepass) { BitmapMaster *masterPtr = (BitmapMaster *) clientData; char buffer[200]; @@ -1230,38 +1212,42 @@ ImgBmapPostscript(clientData, interp, tkwin, psinfo, x, y, width, height, } /* - * There is nothing to do for bitmaps with zero width or height + * There is nothing to do for bitmaps with zero width or height. */ - if( width<=0 || height<=0 || masterPtr->width<=0 || masterPtr->height<=0 ){ + + if (width<=0 || height<=0 || masterPtr->width<=0 || masterPtr->height<= 0){ return TCL_OK; } /* * Translate the origin of the coordinate system to be the lower-left - * corner of the bitmap and adjust the scale of the coordinate system - * so that entire bitmap covers one square unit of the page. - * The calling function put a "gsave" into the postscript and - * will add a "grestore" at after this routine returns, so it is safe - * to make whatever changes are necessary here. + * corner of the bitmap and adjust the scale of the coordinate system so + * that entire bitmap covers one square unit of the page. The calling + * function put a "gsave" into the postscript and will add a "grestore" at + * after this routine returns, so it is safe to make whatever changes are + * necessary here. */ - if( x!=0 || y!=0 ){ + + if (x!=0 || y!=0) { sprintf(buffer, "%d %d moveto\n", x, y); Tcl_AppendResult(interp, buffer, 0); } - if( width!=1 || height!=1 ){ + if (width!=1 || height!=1) { sprintf(buffer, "%d %d scale\n", width, height); Tcl_AppendResult(interp, buffer, 0); } /* - * Color the background, if there is one. This step is skipped if the - * background is transparent. If the background is not transparent and + * Color the background, if there is one. This step is skipped if the + * background is transparent. If the background is not transparent and * there is no background mask, then color the complete rectangle that - * encloses the bitmap. If there is a background mask, then only apply + * encloses the bitmap. If there is a background mask, then only apply * color to the bits specified by the mask. */ + if ((masterPtr->bgUid != NULL) && (masterPtr->bgUid[0] != '\000')) { XColor color; + XParseColor(Tk_Display(tkwin), Tk_Colormap(tkwin), masterPtr->bgUid, &color); if (Tk_PostscriptColor(interp, psinfo, &color) != TCL_OK) { @@ -1269,11 +1255,10 @@ ImgBmapPostscript(clientData, interp, tkwin, psinfo, x, y, width, height, } if (masterPtr->maskData == NULL) { Tcl_AppendResult(interp, - "0 0 moveto 1 0 rlineto 0 1 rlineto -1 0 rlineto " - "closepath fill\n", 0 - ); + "0 0 moveto 1 0 rlineto 0 1 rlineto -1 0 rlineto ", + "closepath fill\n", NULL); } else if (ImgBmapPsImagemask(interp, masterPtr->width, - masterPtr->height, masterPtr->maskData) != TCL_OK) { + masterPtr->height, masterPtr->maskData) != TCL_OK) { return TCL_ERROR; } } @@ -1281,8 +1266,10 @@ ImgBmapPostscript(clientData, interp, tkwin, psinfo, x, y, width, height, /* * Draw the bitmap foreground, assuming there is one. */ - if ( (masterPtr->fgUid != NULL) && (masterPtr->data != NULL) ) { + + if ((masterPtr->fgUid != NULL) && (masterPtr->data != NULL)) { XColor color; + XParseColor(Tk_Display(tkwin), Tk_Colormap(tkwin), masterPtr->fgUid, &color); if (Tk_PostscriptColor(interp, psinfo, &color) != TCL_OK) { @@ -1295,3 +1282,11 @@ ImgBmapPostscript(clientData, interp, tkwin, psinfo, x, y, width, height, } return TCL_OK; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkImgUtil.c b/generic/tkImgUtil.c index d5635aa..708a374 100644 --- a/generic/tkImgUtil.c +++ b/generic/tkImgUtil.c @@ -1,14 +1,14 @@ -/* +/* * tkImgUtil.c -- * * This file contains image related utility functions. * * 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. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkImgUtil.c,v 1.3 2004/01/13 02:06:00 davygrvy Exp $ + * RCS: @(#) $Id: tkImgUtil.c,v 1.4 2005/11/15 15:18:21 dkf Exp $ */ #include "tkInt.h" @@ -21,12 +21,11 @@ * * TkAlignImageData -- * - * This function takes an image and copies the data into an - * aligned buffer, performing any necessary bit swapping. + * This function takes an image and copies the data into an aligned + * buffer, performing any necessary bit swapping. * * Results: - * Returns a newly allocated buffer that should be freed by the - * caller. + * Returns a newly allocated buffer that should be freed by the caller. * * Side effects: * None. @@ -35,18 +34,19 @@ */ char * -TkAlignImageData(image, alignment, bitOrder) - XImage *image; /* Image to be aligned. */ - int alignment; /* Number of bytes to which the data should - * be aligned (e.g. 2 or 4) */ - int bitOrder; /* Desired bit order: LSBFirst or MSBFirst. */ +TkAlignImageData( + XImage *image, /* Image to be aligned. */ + int alignment, /* Number of bytes to which the data should be + * aligned (e.g. 2 or 4) */ + int bitOrder) /* Desired bit order: LSBFirst or MSBFirst. */ { long dataWidth; char *data, *srcPtr, *destPtr; int i, j; if (image->bits_per_pixel != 1) { - Tcl_Panic("TkAlignImageData: Can't handle image depths greater than 1."); + Tcl_Panic( + "TkAlignImageData: Can't handle image depths greater than 1."); } /* @@ -76,3 +76,11 @@ TkAlignImageData(image, alignment, bitOrder) } return data; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkInitScript.h b/generic/tkInitScript.h index 02da882..ee86e1b 100644 --- a/generic/tkInitScript.h +++ b/generic/tkInitScript.h @@ -1,24 +1,22 @@ -/* +/* * tkInitScript.h -- * * This file contains Unix & Windows common init script * * Copyright (c) 1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkInitScript.h,v 1.9 2004/03/17 18:15:43 das Exp $ + * RCS: @(#) $Id: tkInitScript.h,v 1.10 2005/11/15 15:18:21 dkf Exp $ */ - - /* - * In order to find tk.tcl during initialization, the following script - * is invoked by Tk_Init(). It looks in several different directories: + * In order to find tk.tcl during initialization, the following script is + * invoked by Tk_Init(). It looks in several different directories: * - * $tk_library - can specify a primary location, if set - * no other locations will be checked + * $tk_library - can specify a primary location, if set no + * other locations will be checked * * $env(TK_LIBRARY) - highest priority so user can always override * the search path unless the application has @@ -29,18 +27,18 @@ * lib directory (e.g. /usr/local) * * /../lib/tk$tk_version - * - look for a lib/tk in a sibling of - * the bin directory (e.g. /usr/local) + * - look for a lib/tk in a sibling of the + * bin directory (e.g. /usr/local) * * /../library * - look in Tk build directory * * /../../tk$tk_patchLevel/library - * - look for Tk build directory relative - * to a parallel build directory + * - look for Tk build directory relative to a + * parallel build directory * - * The first directory on this path that contains a valid tk.tcl script - * will be set ast the value of tk_library. + * The first directory on this path that contains a valid tk.tcl script will + * be set ast the value of tk_library. * * Note that this entire search mechanism can be bypassed by defining an * alternate tkInit procedure before calling Tk_Init(). @@ -54,4 +52,3 @@ static char initScript[] = "if {[info proc tkInit]==\"\"} {\n\ }\n\ }\n\ tkInit"; - diff --git a/generic/tkMenuDraw.c b/generic/tkMenuDraw.c index ba34460..e64cce7 100644 --- a/generic/tkMenuDraw.c +++ b/generic/tkMenuDraw.c @@ -1,36 +1,35 @@ -/* +/* * tkMenuDraw.c -- * - * This module implements the platform-independent drawing and - * geometry calculations of menu widgets. + * This module implements the platform-independent drawing and geometry + * calculations of menu widgets. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenuDraw.c,v 1.7 2003/11/18 23:39:43 dkf Exp $ + * RCS: @(#) $Id: tkMenuDraw.c,v 1.8 2005/11/15 15:18:21 dkf Exp $ */ #include "tkMenu.h" /* - * Forward declarations for procedures defined later in this file: + * Forward declarations for functions defined later in this file: */ -static void AdjustMenuCoords _ANSI_ARGS_ ((TkMenu *menuPtr, - TkMenuEntry *mePtr, int *xPtr, int *yPtr)); -static void ComputeMenuGeometry _ANSI_ARGS_(( - ClientData clientData)); -static void DisplayMenu _ANSI_ARGS_((ClientData clientData)); +static void AdjustMenuCoords(TkMenu *menuPtr, TkMenuEntry *mePtr, + int *xPtr, int *yPtr); +static void ComputeMenuGeometry(ClientData clientData); +static void DisplayMenu(ClientData clientData); /* *---------------------------------------------------------------------- * * TkMenuInitializeDrawingFields -- * - * Fills in drawing fields of a new menu. Called when new menu is - * created by MenuCmd. + * Fills in drawing fields of a new menu. Called when new menu is created + * by MenuCmd. * * Results: * None. @@ -42,8 +41,8 @@ static void DisplayMenu _ANSI_ARGS_((ClientData clientData)); */ void -TkMenuInitializeDrawingFields(menuPtr) - TkMenu *menuPtr; /* The menu we are initializing. */ +TkMenuInitializeDrawingFields( + TkMenu *menuPtr) /* The menu we are initializing. */ { menuPtr->textGC = None; menuPtr->gray = None; @@ -59,8 +58,8 @@ TkMenuInitializeDrawingFields(menuPtr) * * TkMenuInitializeEntryDrawingFields -- * - * Fills in drawing fields of a new menu entry. Called when an - * entry is created. + * Fills in drawing fields of a new menu entry. Called when an entry is + * created. * * Results: * None. @@ -72,8 +71,8 @@ TkMenuInitializeDrawingFields(menuPtr) */ void -TkMenuInitializeEntryDrawingFields(mePtr) - TkMenuEntry *mePtr; /* The menu we are initializing. */ +TkMenuInitializeEntryDrawingFields( + TkMenuEntry *mePtr) /* The menu we are initializing. */ { mePtr->width = 0; mePtr->height = 0; @@ -92,8 +91,8 @@ TkMenuInitializeEntryDrawingFields(mePtr) * * TkMenuFreeDrawOptions -- * - * Frees up any structures allocated for the drawing of a menu. - * Called when menu is deleted. + * Frees up any structures allocated for the drawing of a menu. Called + * when menu is deleted. * * Results: * None. @@ -105,8 +104,8 @@ TkMenuInitializeEntryDrawingFields(mePtr) */ void -TkMenuFreeDrawOptions(menuPtr) - TkMenu *menuPtr; +TkMenuFreeDrawOptions( + TkMenu *menuPtr) { if (menuPtr->textGC != None) { Tk_FreeGC(menuPtr->display, menuPtr->textGC); @@ -133,8 +132,8 @@ TkMenuFreeDrawOptions(menuPtr) * * TkMenuEntryFreeDrawOptions -- * - * Frees up drawing structures for a menu entry. Called when - * menu entry is freed. + * Frees up drawing structures for a menu entry. Called when menu entry + * is freed. * * RESULTS: * None. @@ -146,8 +145,8 @@ TkMenuFreeDrawOptions(menuPtr) */ void -TkMenuEntryFreeDrawOptions(mePtr) - TkMenuEntry *mePtr; +TkMenuEntryFreeDrawOptions( + TkMenuEntry *mePtr) { if (mePtr->textGC != None) { Tk_FreeGC(mePtr->menuPtr->display, mePtr->textGC); @@ -168,8 +167,8 @@ TkMenuEntryFreeDrawOptions(mePtr) * * TkMenuConfigureDrawOptions -- * - * Sets the menu's drawing attributes in preparation for drawing - * the menu. + * Sets the menu's drawing attributes in preparation for drawing the + * menu. * * RESULTS: * None. @@ -181,8 +180,8 @@ TkMenuEntryFreeDrawOptions(mePtr) */ void -TkMenuConfigureDrawOptions(menuPtr) - TkMenu *menuPtr; /* The menu we are configuring. */ +TkMenuConfigureDrawOptions( + TkMenu *menuPtr) /* The menu we are configuring. */ { XGCValues gcValues; GC newGC; @@ -190,11 +189,11 @@ TkMenuConfigureDrawOptions(menuPtr) Tk_3DBorder border, activeBorder; Tk_Font tkfont; XColor *fg, *activeFg, *indicatorFg; - + /* - * A few options need special processing, such as setting the - * background from a 3-D border, or filling in complicated - * defaults that couldn't be specified to Tk_ConfigureWidget. + * A few options need special processing, such as setting the background + * from a 3-D border, or filling in complicated defaults that couldn't be + * specified to Tk_ConfigureWidget. */ border = Tk_Get3DBorderFromObj(menuPtr->tkwin, menuPtr->borderPtr); @@ -217,7 +216,7 @@ TkMenuConfigureDrawOptions(menuPtr) if (menuPtr->disabledFgPtr != NULL) { XColor *disabledFg; - disabledFg = Tk_GetColorFromObj(menuPtr->tkwin, + disabledFg = Tk_GetColorFromObj(menuPtr->tkwin, menuPtr->disabledFgPtr); gcValues.foreground = disabledFg->pixel; mask = GCForeground|GCBackground|GCFont; @@ -248,7 +247,7 @@ TkMenuConfigureDrawOptions(menuPtr) if (menuPtr->gray != None) { gcValues.fill_style = FillStippled; gcValues.stipple = menuPtr->gray; - newGC = Tk_GetGC(menuPtr->tkwin, + newGC = Tk_GetGC(menuPtr->tkwin, GCForeground|GCFillStyle|GCStipple, &gcValues); } if (menuPtr->disabledImageGC != None) { @@ -259,7 +258,7 @@ TkMenuConfigureDrawOptions(menuPtr) gcValues.font = Tk_FontId(tkfont); activeFg = Tk_GetColorFromObj(menuPtr->tkwin, menuPtr->activeFgPtr); gcValues.foreground = activeFg->pixel; - activeBorder = Tk_Get3DBorderFromObj(menuPtr->tkwin, + activeBorder = Tk_Get3DBorderFromObj(menuPtr->tkwin, menuPtr->activeBorderPtr); gcValues.background = Tk_3DBorderColor(activeBorder)->pixel; newGC = Tk_GetGC(menuPtr->tkwin, GCForeground|GCBackground|GCFont, @@ -269,7 +268,7 @@ TkMenuConfigureDrawOptions(menuPtr) } menuPtr->activeGC = newGC; - indicatorFg = Tk_GetColorFromObj(menuPtr->tkwin, + indicatorFg = Tk_GetColorFromObj(menuPtr->tkwin, menuPtr->indicatorFgPtr); gcValues.foreground = indicatorFg->pixel; gcValues.background = Tk_3DBorderColor(border)->pixel; @@ -286,8 +285,7 @@ TkMenuConfigureDrawOptions(menuPtr) * * TkMenuConfigureEntryDrawOptions -- * - * Calculates any entry-specific draw options for the given menu - * entry. + * Calculates any entry-specific draw options for the given menu entry. * * Results: * Returns a standard Tcl error. @@ -299,11 +297,10 @@ TkMenuConfigureDrawOptions(menuPtr) */ int -TkMenuConfigureEntryDrawOptions(mePtr, index) - TkMenuEntry *mePtr; - int index; +TkMenuConfigureEntryDrawOptions( + TkMenuEntry *mePtr, + int index) { - XGCValues gcValues; GC newGC, newActiveGC, newDisabledGC, newIndicatorGC; unsigned long mask; @@ -312,7 +309,7 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) tkfont = Tk_GetFontFromObj(menuPtr->tkwin, (mePtr->fontPtr != NULL) ? mePtr->fontPtr : menuPtr->fontPtr); - + if (mePtr->state == ENTRY_ACTIVE) { if (index != menuPtr->active) { TkActivateMenuEntry(menuPtr, index); @@ -331,21 +328,21 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) || (mePtr->indicatorFgPtr != NULL)) { XColor *fg, *indicatorFg, *activeFg; Tk_3DBorder border, activeBorder; - + fg = Tk_GetColorFromObj(menuPtr->tkwin, (mePtr->fgPtr != NULL) ? mePtr->fgPtr : menuPtr->fgPtr); gcValues.foreground = fg->pixel; - border = Tk_Get3DBorderFromObj(menuPtr->tkwin, - (mePtr->borderPtr != NULL) ? mePtr->borderPtr + border = Tk_Get3DBorderFromObj(menuPtr->tkwin, + (mePtr->borderPtr != NULL) ? mePtr->borderPtr : menuPtr->borderPtr); gcValues.background = Tk_3DBorderColor(border)->pixel; gcValues.font = Tk_FontId(tkfont); /* - * Note: disable GraphicsExpose events; we know there won't be - * obscured areas when copying from an off-screen pixmap to the - * screen and this gets rid of unnecessary events. + * Note: disable GraphicsExpose events; we know there won't be + * obscured areas when copying from an off-screen pixmap to the screen + * and this gets rid of unnecessary events. */ gcValues.graphics_exposures = False; @@ -353,7 +350,7 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) GCForeground|GCBackground|GCFont|GCGraphicsExposures, &gcValues); - indicatorFg = Tk_GetColorFromObj(menuPtr->tkwin, + indicatorFg = Tk_GetColorFromObj(menuPtr->tkwin, (mePtr->indicatorFgPtr != NULL) ? mePtr->indicatorFgPtr : menuPtr->indicatorFgPtr); gcValues.foreground = indicatorFg->pixel; @@ -364,7 +361,7 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) if ((menuPtr->disabledFgPtr != NULL) || (mePtr->image != NULL)) { XColor *disabledFg; - disabledFg = Tk_GetColorFromObj(menuPtr->tkwin, + disabledFg = Tk_GetColorFromObj(menuPtr->tkwin, menuPtr->disabledFgPtr); gcValues.foreground = disabledFg->pixel; mask = GCForeground|GCBackground|GCFont|GCGraphicsExposures; @@ -376,13 +373,13 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) } newDisabledGC = Tk_GetGC(menuPtr->tkwin, mask, &gcValues); - activeFg = Tk_GetColorFromObj(menuPtr->tkwin, + activeFg = Tk_GetColorFromObj(menuPtr->tkwin, (mePtr->activeFgPtr != NULL) ? mePtr->activeFgPtr : menuPtr->activeFgPtr); - activeBorder = Tk_Get3DBorderFromObj(menuPtr->tkwin, - (mePtr->activeBorderPtr != NULL) ? mePtr->activeBorderPtr + activeBorder = Tk_Get3DBorderFromObj(menuPtr->tkwin, + (mePtr->activeBorderPtr != NULL) ? mePtr->activeBorderPtr : menuPtr->activeBorderPtr); - + gcValues.foreground = activeFg->pixel; gcValues.background = Tk_3DBorderColor(activeBorder)->pixel; newActiveGC = Tk_GetGC(menuPtr->tkwin, @@ -395,15 +392,15 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) newIndicatorGC = None; } if (mePtr->textGC != None) { - Tk_FreeGC(menuPtr->display, mePtr->textGC); + Tk_FreeGC(menuPtr->display, mePtr->textGC); } mePtr->textGC = newGC; if (mePtr->activeGC != None) { - Tk_FreeGC(menuPtr->display, mePtr->activeGC); + Tk_FreeGC(menuPtr->display, mePtr->activeGC); } mePtr->activeGC = newActiveGC; if (mePtr->disabledGC != None) { - Tk_FreeGC(menuPtr->display, mePtr->disabledGC); + Tk_FreeGC(menuPtr->display, mePtr->disabledGC); } mePtr->disabledGC = newDisabledGC; if (mePtr->indicatorGC != None) { @@ -431,8 +428,8 @@ TkMenuConfigureEntryDrawOptions(mePtr, index) */ void -TkEventuallyRecomputeMenu(menuPtr) - TkMenu *menuPtr; +TkEventuallyRecomputeMenu( + TkMenu *menuPtr) { if (!(menuPtr->menuFlags & RESIZE_PENDING)) { menuPtr->menuFlags |= RESIZE_PENDING; @@ -445,8 +442,8 @@ TkEventuallyRecomputeMenu(menuPtr) * * TkRecomputeMenu -- * - * Tells Tcl to redo the geometry because this menu has changed. - * Does it now; removes any ComputeMenuGeometries from the idler. + * Tells Tcl to redo the geometry because this menu has changed. Does it + * now; removes any ComputeMenuGeometries from the idler. * * Results: * None. @@ -458,9 +455,9 @@ TkEventuallyRecomputeMenu(menuPtr) */ void -TkRecomputeMenu(menuPtr) - TkMenu *menuPtr; -{ +TkRecomputeMenu( + TkMenu *menuPtr) +{ if (menuPtr->menuFlags & RESIZE_PENDING) { Tcl_CancelIdleCall(ComputeMenuGeometry, (ClientData) menuPtr); ComputeMenuGeometry((ClientData) menuPtr); @@ -472,27 +469,27 @@ TkRecomputeMenu(menuPtr) * * TkEventuallyRedrawMenu -- * - * Arrange for an entry of a menu, or the whole menu, to be - * redisplayed at some point in the future. + * Arrange for an entry of a menu, or the whole menu, to be redisplayed + * at some point in the future. * * Results: * None. * * Side effects: - * A when-idle hander is scheduled to do the redisplay, if there - * isn't one already scheduled. + * A when-idle hander is scheduled to do the redisplay, if there isn't + * one already scheduled. * *---------------------------------------------------------------------- */ void -TkEventuallyRedrawMenu(menuPtr, mePtr) - register TkMenu *menuPtr; /* Information about menu to redraw. */ - register TkMenuEntry *mePtr;/* Entry to redraw. NULL means redraw - * all the entries in the menu. */ +TkEventuallyRedrawMenu( + register TkMenu *menuPtr, /* Information about menu to redraw. */ + register TkMenuEntry *mePtr)/* Entry to redraw. NULL means redraw all the + * entries in the menu. */ { int i; - + if (menuPtr->tkwin == NULL) { return; } @@ -516,25 +513,23 @@ TkEventuallyRedrawMenu(menuPtr, mePtr) * * ComputeMenuGeometry -- * - * This procedure is invoked to recompute the size and - * layout of a menu. It is called as a when-idle handler so - * that it only gets done once, even if a group of changes is - * made to the menu. + * This function is invoked to recompute the size and layout of a menu. + * It is called as a when-idle handler so that it only gets done once, + * even if a group of changes is made to the menu. * * Results: * None. * * Side effects: - * Fields of menu entries are changed to reflect their - * current positions, and the size of the menu window - * itself may be changed. + * Fields of menu entries are changed to reflect their current positions, + * and the size of the menu window itself may be changed. * *-------------------------------------------------------------- */ static void -ComputeMenuGeometry(clientData) - ClientData clientData; /* Structure describing menu. */ +ComputeMenuGeometry( + ClientData clientData) /* Structure describing menu. */ { TkMenu *menuPtr = (TkMenu *) clientData; @@ -553,16 +548,15 @@ ComputeMenuGeometry(clientData) Tk_GeometryRequest(menuPtr->tkwin, menuPtr->totalWidth, menuPtr->totalHeight); } - + /* - * Must always force a redisplay here if the window is mapped - * (even if the size didn't change, something else might have - * changed in the menu, such as a label or accelerator). The - * resize will force a redisplay above. + * Must always force a redisplay here if the window is mapped (even if the + * size didn't change, something else might have changed in the menu, such + * as a label or accelerator). The resize will force a redisplay above. */ - - TkEventuallyRedrawMenu(menuPtr, (TkMenuEntry *) NULL); - + + TkEventuallyRedrawMenu(menuPtr, NULL); + menuPtr->menuFlags &= ~RESIZE_PENDING; } @@ -571,9 +565,9 @@ ComputeMenuGeometry(clientData) * * TkMenuSelectImageProc -- * - * This procedure is invoked by the image code whenever the manager - * for an image does something that affects the size of contents - * of an image displayed in a menu entry when it is selected. + * This function is invoked by the image code whenever the manager for an + * image does something that affects the size of contents of an image + * displayed in a menu entry when it is selected. * * Results: * None. @@ -585,20 +579,18 @@ ComputeMenuGeometry(clientData) */ void -TkMenuSelectImageProc(clientData, x, y, width, height, imgWidth, - imgHeight) - ClientData clientData; /* Pointer to widget record. */ - int x, y; /* Upper left pixel (within image) - * that must be redisplayed. */ - int width, height; /* Dimensions of area to redisplay - * (may be <= 0). */ - int imgWidth, imgHeight; /* New dimensions of image. */ +TkMenuSelectImageProc( + ClientData clientData, /* Pointer to widget record. */ + int x, int y, /* Upper left pixel (within image) that must + * be redisplayed. */ + int width, int height, /* Dimensions of area to redisplay (may be + * <=0). */ + int imgWidth, int imgHeight)/* New dimensions of image. */ { register TkMenuEntry *mePtr = (TkMenuEntry *) clientData; if ((mePtr->entryFlags & ENTRY_SELECTED) - && !(mePtr->menuPtr->menuFlags & - REDRAW_PENDING)) { + && !(mePtr->menuPtr->menuFlags & REDRAW_PENDING)) { mePtr->menuPtr->menuFlags |= REDRAW_PENDING; Tcl_DoWhenIdle(DisplayMenu, (ClientData) mePtr->menuPtr); } @@ -609,21 +601,20 @@ TkMenuSelectImageProc(clientData, x, y, width, height, imgWidth, * * DisplayMenu -- * - * This procedure is invoked to display a menu widget. + * This function is invoked to display a menu widget. * * Results: * None. * * Side effects: - * Commands are output to X to display the menu in its - * current mode. + * Commands are output to X to display the menu in its current mode. * *---------------------------------------------------------------------- */ static void -DisplayMenu(clientData) - ClientData clientData; /* Information about widget. */ +DisplayMenu( + ClientData clientData) /* Information about widget. */ { register TkMenu *menuPtr = (TkMenu *) clientData; register TkMenuEntry *mePtr; @@ -650,8 +641,8 @@ DisplayMenu(clientData) menuPtr->activeBorderWidthPtr, &activeBorderWidth); if (menuPtr->menuType == MENUBAR) { - Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), border, borderWidth, - borderWidth, Tk_Width(tkwin) - 2 * borderWidth, + Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), border, borderWidth, + borderWidth, Tk_Width(tkwin) - 2 * borderWidth, Tk_Height(tkwin) - 2 * borderWidth, 0, TK_RELIEF_FLAT); } @@ -689,15 +680,15 @@ DisplayMenu(clientData) } } TkpDrawMenuEntry(mePtr, Tk_WindowId(menuPtr->tkwin), tkfont, - &menuMetrics, mePtr->x, mePtr->y, width, + &menuMetrics, mePtr->x, mePtr->y, width, mePtr->height, strictMotif, 1); if ((index > 0) && (menuPtr->menuType != MENUBAR) && mePtr->columnBreak) { mePtr = menuPtr->entries[index - 1]; Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), border, - mePtr->x, mePtr->y + mePtr->height, + mePtr->x, mePtr->y + mePtr->height, mePtr->width, - Tk_Height(tkwin) - mePtr->y - mePtr->height - + Tk_Height(tkwin) - mePtr->y - mePtr->height - activeBorderWidth, 0, TK_RELIEF_FLAT); } @@ -713,7 +704,7 @@ DisplayMenu(clientData) } else { mePtr = menuPtr->entries[menuPtr->numEntries - 1]; Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), - border, mePtr->x, mePtr->y + mePtr->height, mePtr->width, + border, mePtr->x, mePtr->y + mePtr->height, mePtr->width, Tk_Height(tkwin) - mePtr->y - mePtr->height - activeBorderWidth, 0, TK_RELIEF_FLAT); @@ -722,13 +713,13 @@ DisplayMenu(clientData) width = Tk_Width(tkwin) - x - activeBorderWidth; height = Tk_Height(tkwin) - y - activeBorderWidth; } - Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), border, x, y, + Tk_Fill3DRectangle(tkwin, Tk_WindowId(tkwin), border, x, y, width, height, 0, TK_RELIEF_FLAT); } Tk_GetReliefFromObj(NULL, menuPtr->reliefPtr, &relief); Tk_Draw3DRectangle(menuPtr->tkwin, Tk_WindowId(tkwin), - border, 0, 0, Tk_Width(tkwin), Tk_Height(tkwin), borderWidth, + border, 0, 0, Tk_Width(tkwin), Tk_Height(tkwin), borderWidth, relief); } @@ -737,31 +728,31 @@ DisplayMenu(clientData) * * TkMenuEventProc -- * - * This procedure is invoked by the Tk dispatcher for various - * events on menus. + * This function is invoked by the Tk dispatcher for various events on + * menus. * * Results: * None. * * Side effects: - * When the window gets deleted, internal structures get - * cleaned up. When it gets exposed, it is redisplayed. + * When the window gets deleted, internal structures get cleaned up. When + * it gets exposed, it is redisplayed. * *-------------------------------------------------------------- */ void -TkMenuEventProc(clientData, eventPtr) - ClientData clientData; /* Information about window. */ - XEvent *eventPtr; /* Information about event. */ +TkMenuEventProc( + ClientData clientData, /* Information about window. */ + XEvent *eventPtr) /* Information about event. */ { TkMenu *menuPtr = (TkMenu *) clientData; - + if ((eventPtr->type == Expose) && (eventPtr->xexpose.count == 0)) { - TkEventuallyRedrawMenu(menuPtr, (TkMenuEntry *) NULL); + TkEventuallyRedrawMenu(menuPtr, NULL); } else if (eventPtr->type == ConfigureNotify) { TkEventuallyRecomputeMenu(menuPtr); - TkEventuallyRedrawMenu(menuPtr, (TkMenuEntry *) NULL); + TkEventuallyRedrawMenu(menuPtr, NULL); } else if (eventPtr->type == ActivateNotify) { if (menuPtr->menuType == TEAROFF_MENU) { TkpSetMainMenubar(menuPtr->interp, menuPtr->tkwin, NULL); @@ -798,9 +789,9 @@ TkMenuEventProc(clientData, eventPtr) * * TkMenuImageProc -- * - * This procedure is invoked by the image code whenever the manager - * for an image does something that affects the size of contents - * of an image displayed in a menu entry. + * This function is invoked by the image code whenever the manager for an + * image does something that affects the size of contents of an image + * displayed in a menu entry. * * Results: * None. @@ -812,19 +803,17 @@ TkMenuEventProc(clientData, eventPtr) */ void -TkMenuImageProc(clientData, x, y, width, height, imgWidth, - imgHeight) - ClientData clientData; /* Pointer to widget record. */ - int x, y; /* Upper left pixel (within image) - * that must be redisplayed. */ - int width, height; /* Dimensions of area to redisplay - * (may be <= 0). */ - int imgWidth, imgHeight; /* New dimensions of image. */ +TkMenuImageProc( + ClientData clientData, /* Pointer to widget record. */ + int x, int y, /* Upper left pixel (within image) that must + * be redisplayed. */ + int width, int height, /* Dimensions of area to redisplay (may be + * <=0). */ + int imgWidth, int imgHeight)/* New dimensions of image. */ { register TkMenu *menuPtr = ((TkMenuEntry *)clientData)->menuPtr; - if ((menuPtr->tkwin != NULL) && !(menuPtr->menuFlags - & RESIZE_PENDING)) { + if ((menuPtr->tkwin != NULL) && !(menuPtr->menuFlags & RESIZE_PENDING)) { menuPtr->menuFlags |= RESIZE_PENDING; Tcl_DoWhenIdle(ComputeMenuGeometry, (ClientData) menuPtr); } @@ -835,9 +824,9 @@ TkMenuImageProc(clientData, x, y, width, height, imgWidth, * * TkPostTearoffMenu -- * - * Posts a menu on the screen. Used to post tearoff menus. On Unix, - * all menus are posted this way. Adjusts the menu's position - * so that it fits on the screen, and maps and raises the menu. + * Posts a menu on the screen. Used to post tearoff menus. On Unix, all + * menus are posted this way. Adjusts the menu's position so that it fits + * on the screen, and maps and raises the menu. * * Results: * Returns a standard Tcl Error. @@ -849,13 +838,11 @@ TkMenuImageProc(clientData, x, y, width, height, imgWidth, */ int -TkPostTearoffMenu(interp, menuPtr, x, y) - Tcl_Interp *interp; /* The interpreter of the menu */ - TkMenu *menuPtr; /* The menu we are posting */ - int x; /* The root X coordinate where we - * are posting */ - int y; /* The root Y coordinate where we - * are posting */ +TkPostTearoffMenu( + Tcl_Interp *interp, /* The interpreter of the menu */ + TkMenu *menuPtr, /* The menu we are posting */ + int x, int y) /* The root X,Y coordinates where we are + * posting */ { int vRootX, vRootY, vRootWidth, vRootHeight; int tmp, result; @@ -868,8 +855,8 @@ TkPostTearoffMenu(interp, menuPtr, x, y) } /* - * The post commands could have deleted the menu, which means - * we are dead and should go away. + * The post commands could have deleted the menu, which means we are dead + * and should go away. */ if (menuPtr->tkwin == NULL) { @@ -877,27 +864,24 @@ TkPostTearoffMenu(interp, menuPtr, x, y) } /* - * Adjust the position of the menu if necessary to keep it - * visible on the screen. There are two special tricks to - * make this work right: + * Adjust the position of the menu if necessary to keep it visible on the + * screen. There are two special tricks to make this work right: * - * 1. If a virtual root window manager is being used then - * the coordinates are in the virtual root window of - * menuPtr's parent; since the menu uses override-redirect - * mode it will be in the *real* root window for the screen, - * so we have to map the coordinates from the virtual root - * (if any) to the real root. Can't get the virtual root - * from the menu itself (it will never be seen by the wm) - * so use its parent instead (it would be better to have an - * an option that names a window to use for this...). - * 2. The menu may not have been mapped yet, so its current size - * might be the default 1x1. To compute how much space it - * needs, use its requested size, not its actual size. + * 1. If a virtual root window manager is being used then the coordinates + * are in the virtual root window of menuPtr's parent; since the menu + * uses override-redirect mode it will be in the *real* root window for + * the screen, so we have to map the coordinates from the virtual root + * (if any) to the real root. Can't get the virtual root from the menu + * itself (it will never be seen by the wm) so use its parent instead + * (it would be better to have an an option that names a window to use + * for this...). + * 2. The menu may not have been mapped yet, so its current size might be + * the default 1x1. To compute how much space it needs, use its + * requested size, not its actual size. * - * Note that this code assumes square screen regions and all - * positive coordinates. This does not work on a Mac with - * multiple monitors. But then again, Tk has other problems - * with this. + * Note that this code assumes square screen regions and all positive + * coordinates. This does not work on a Mac with multiple monitors. But + * then again, Tk has other problems with this. */ Tk_GetVRootGeometry(Tk_Parent(menuPtr->tkwin), &vRootX, &vRootY, @@ -933,29 +917,28 @@ TkPostTearoffMenu(interp, menuPtr, x, y) * * TkPostSubmenu -- * - * This procedure arranges for a particular submenu (i.e. the - * menu corresponding to a given cascade entry) to be - * posted. + * This function arranges for a particular submenu (i.e. the menu + * corresponding to a given cascade entry) to be posted. * * Results: - * A standard Tcl return result. Errors may occur in the - * Tcl commands generated to post and unpost submenus. + * A standard Tcl return result. Errors may occur in the Tcl commands + * generated to post and unpost submenus. * * Side effects: - * If there is already a submenu posted, it is unposted. - * The new submenu is then posted. + * If there is already a submenu posted, it is unposted. The new submenu + * is then posted. * *-------------------------------------------------------------- */ int -TkPostSubmenu(interp, menuPtr, mePtr) - Tcl_Interp *interp; /* Used for invoking sub-commands and +TkPostSubmenu( + Tcl_Interp *interp, /* Used for invoking sub-commands and * reporting errors. */ - register TkMenu *menuPtr; /* Information about menu as a whole. */ - register TkMenuEntry *mePtr; /* Info about submenu that is to be - * posted. NULL means make sure that - * no submenu is posted. */ + register TkMenu *menuPtr, /* Information about menu as a whole. */ + register TkMenuEntry *mePtr)/* Info about submenu that is to be posted. + * NULL means make sure that no submenu is + * posted. */ { int result, x, y; Tcl_Obj *subary[4]; @@ -966,26 +949,24 @@ TkPostSubmenu(interp, menuPtr, mePtr) if (menuPtr->postedCascade != NULL) { /* - * Note: when unposting a submenu, we have to redraw the entire - * parent menu. This is because of a combination of the following - * things: + * Note: when unposting a submenu, we have to redraw the entire parent + * menu. This is because of a combination of the following things: * (a) the submenu partially overlaps the parent. - * (b) the submenu specifies "save under", which causes the X - * server to make a copy of the information under it when it - * is posted. When the submenu is unposted, the X server - * copies this data back and doesn't generate any Expose - * events for the parent. - * (c) the parent may have redisplayed itself after the submenu - * was posted, in which case the saved information is no - * longer correct. - * The simplest solution is just force a complete redisplay of - * the parent. + * (b) the submenu specifies "save under", which causes the X server + * to make a copy of the information under it when it is posted. + * When the submenu is unposted, the X server copies this data + * back and doesn't generate any Expose events for the parent. + * (c) the parent may have redisplayed itself after the submenu was + * posted, in which case the saved information is no longer + * correct. + * The simplest solution is just force a complete redisplay of the + * parent. */ subary[0] = menuPtr->postedCascade->namePtr; subary[1] = Tcl_NewStringObj("unpost", -1); Tcl_IncrRefCount(subary[1]); - TkEventuallyRedrawMenu(menuPtr, (TkMenuEntry *) NULL); + TkEventuallyRedrawMenu(menuPtr, NULL); result = Tcl_EvalObjv(interp, 2, subary, 0); Tcl_DecrRefCount(subary[1]); menuPtr->postedCascade = NULL; @@ -997,9 +978,9 @@ TkPostSubmenu(interp, menuPtr, mePtr) if ((mePtr != NULL) && (mePtr->namePtr != NULL) && Tk_IsMapped(menuPtr->tkwin)) { /* - * Position the cascade with its upper left corner slightly - * below and to the left of the upper right corner of the - * menu entry (this is an attempt to match Motif behavior). + * Position the cascade with its upper left corner slightly below and + * to the left of the upper right corner of the menu entry (this is an + * attempt to match Motif behavior). * * The menu has to redrawn so that the entry can change relief. */ @@ -1032,8 +1013,7 @@ TkPostSubmenu(interp, menuPtr, mePtr) * * AdjustMenuCoords -- * - * Adjusts the given coordinates down and the left to give a Motif - * look. + * Adjusts the given coordinates down and the left to give a Motif look. * * Results: * None. @@ -1045,11 +1025,11 @@ TkPostSubmenu(interp, menuPtr, mePtr) */ static void -AdjustMenuCoords(menuPtr, mePtr, xPtr, yPtr) - TkMenu *menuPtr; - TkMenuEntry *mePtr; - int *xPtr; - int *yPtr; +AdjustMenuCoords( + TkMenu *menuPtr, + TkMenuEntry *mePtr, + int *xPtr, + int *yPtr) { if (menuPtr->menuType == MENUBAR) { *xPtr += mePtr->x; @@ -1059,10 +1039,18 @@ AdjustMenuCoords(menuPtr, mePtr, xPtr, yPtr) Tk_GetPixelsFromObj(NULL, menuPtr->tkwin, menuPtr->borderWidthPtr, &borderWidth); - Tk_GetPixelsFromObj(NULL, menuPtr->tkwin, + Tk_GetPixelsFromObj(NULL, menuPtr->tkwin, menuPtr->activeBorderWidthPtr, &activeBorderWidth); - *xPtr += Tk_Width(menuPtr->tkwin) - borderWidth - activeBorderWidth + *xPtr += Tk_Width(menuPtr->tkwin) - borderWidth - activeBorderWidth - 2; *yPtr += mePtr->y + activeBorderWidth + 2; } } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkMenubutton.c b/generic/tkMenubutton.c index 504495a..c720025 100644 --- a/generic/tkMenubutton.c +++ b/generic/tkMenubutton.c @@ -1,16 +1,16 @@ -/* +/* * tkMenubutton.c -- * - * This module implements button-like widgets that are used - * to invoke pull-down menus. + * This module implements button-like widgets that are used to invoke + * pull-down menus. * * Copyright (c) 1990-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenubutton.c,v 1.13 2003/11/17 23:12:44 hobbs Exp $ + * RCS: @(#) $Id: tkMenubutton.c,v 1.14 2005/11/15 15:18:22 dkf Exp $ */ #include "tkMenubutton.h" @@ -18,31 +18,30 @@ #include "default.h" /* - * The following table defines the legal values for the -direction - * option. It is used together with the "enum direction" declaration - * in tkMenubutton.h. + * The following table defines the legal values for the -direction option. It + * is used together with the "enum direction" declaration in tkMenubutton.h. */ static char *directionStrings[] = { - "above", "below", "flush", "left", "right", (char *) NULL + "above", "below", "flush", "left", "right", NULL }; /* - * The following table defines the legal values for the -state option. - * It is used together with the "enum state" declaration in tkMenubutton.h. + * The following table defines the legal values for the -state option. It is + * used together with the "enum state" declaration in tkMenubutton.h. */ static char *stateStrings[] = { - "active", "disabled", "normal", (char *) NULL + "active", "disabled", "normal", NULL }; /* - * The following table defines the legal values for the -compound option. - * It is used with the "enum compound" declaration in tkMenuButton.h + * The following table defines the legal values for the -compound option. It + * is used with the "enum compound" declaration in tkMenuButton.h */ static char *compoundStrings[] = { - "bottom", "center", "left", "none", "right", "top", (char *) NULL + "bottom", "center", "left", "none", "right", "top", NULL }; /* @@ -51,59 +50,59 @@ static char *compoundStrings[] = { static Tk_OptionSpec optionSpecs[] = { {TK_OPTION_BORDER, "-activebackground", "activeBackground", "Foreground", - DEF_MENUBUTTON_ACTIVE_BG_COLOR, -1, - Tk_Offset(TkMenuButton, activeBorder), 0, + DEF_MENUBUTTON_ACTIVE_BG_COLOR, -1, + Tk_Offset(TkMenuButton, activeBorder), 0, (ClientData) DEF_MENUBUTTON_ACTIVE_BG_MONO, 0}, {TK_OPTION_COLOR, "-activeforeground", "activeForeground", "Background", - DEF_MENUBUTTON_ACTIVE_FG_COLOR, -1, + DEF_MENUBUTTON_ACTIVE_FG_COLOR, -1, Tk_Offset(TkMenuButton, activeFg), 0, (ClientData) DEF_MENUBUTTON_ACTIVE_FG_MONO, 0}, {TK_OPTION_ANCHOR, "-anchor", "anchor", "Anchor", - DEF_MENUBUTTON_ANCHOR, -1, + DEF_MENUBUTTON_ANCHOR, -1, Tk_Offset(TkMenuButton, anchor), 0, 0, 0}, {TK_OPTION_BORDER, "-background", "background", "Background", DEF_MENUBUTTON_BG_COLOR, -1, Tk_Offset(TkMenuButton, normalBorder), 0, (ClientData) DEF_MENUBUTTON_BG_MONO, 0}, - {TK_OPTION_SYNONYM, "-bd", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-borderwidth", 0}, - {TK_OPTION_SYNONYM, "-bg", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-background", 0}, + {TK_OPTION_SYNONYM, "-bd", NULL, NULL, NULL, 0, -1, 0, + (ClientData) "-borderwidth", 0}, + {TK_OPTION_SYNONYM, "-bg", NULL, NULL, NULL, 0, -1, 0, + (ClientData) "-background", 0}, {TK_OPTION_BITMAP, "-bitmap", "bitmap", "Bitmap", DEF_MENUBUTTON_BITMAP, -1, Tk_Offset(TkMenuButton, bitmap), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_PIXELS, "-borderwidth", "borderWidth", "BorderWidth", - DEF_MENUBUTTON_BORDER_WIDTH, -1, + DEF_MENUBUTTON_BORDER_WIDTH, -1, Tk_Offset(TkMenuButton, borderWidth), 0, 0, 0}, {TK_OPTION_CURSOR, "-cursor", "cursor", "Cursor", DEF_MENUBUTTON_CURSOR, -1, Tk_Offset(TkMenuButton, cursor), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_STRING_TABLE, "-direction", "direction", "Direction", - DEF_MENUBUTTON_DIRECTION, -1, Tk_Offset(TkMenuButton, direction), + DEF_MENUBUTTON_DIRECTION, -1, Tk_Offset(TkMenuButton, direction), 0, (ClientData) directionStrings, 0}, {TK_OPTION_COLOR, "-disabledforeground", "disabledForeground", "DisabledForeground", DEF_MENUBUTTON_DISABLED_FG_COLOR, -1, Tk_Offset(TkMenuButton, disabledFg), TK_OPTION_NULL_OK, (ClientData) DEF_MENUBUTTON_DISABLED_FG_MONO, 0}, - {TK_OPTION_SYNONYM, "-fg", "foreground", (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-foreground", 0}, + {TK_OPTION_SYNONYM, "-fg", "foreground", NULL, NULL, 0, -1, 0, + (ClientData) "-foreground", 0}, {TK_OPTION_FONT, "-font", "font", "Font", DEF_MENUBUTTON_FONT, -1, Tk_Offset(TkMenuButton, tkfont), 0, 0, 0}, {TK_OPTION_COLOR, "-foreground", "foreground", "Foreground", DEF_MENUBUTTON_FG, -1, Tk_Offset(TkMenuButton, normalFg), 0, 0, 0}, {TK_OPTION_STRING, "-height", "height", "Height", - DEF_MENUBUTTON_HEIGHT, -1, Tk_Offset(TkMenuButton, heightString), + DEF_MENUBUTTON_HEIGHT, -1, Tk_Offset(TkMenuButton, heightString), 0, 0, 0}, {TK_OPTION_COLOR, "-highlightbackground", "highlightBackground", "HighlightBackground", DEF_MENUBUTTON_HIGHLIGHT_BG_COLOR, -1, Tk_Offset(TkMenuButton, highlightBgColorPtr), 0, 0, 0}, {TK_OPTION_COLOR, "-highlightcolor", "highlightColor", "HighlightColor", - DEF_MENUBUTTON_HIGHLIGHT, -1, + DEF_MENUBUTTON_HIGHLIGHT, -1, Tk_Offset(TkMenuButton, highlightColorPtr), 0, 0, 0}, {TK_OPTION_PIXELS, "-highlightthickness", "highlightThickness", "HighlightThickness", DEF_MENUBUTTON_HIGHLIGHT_WIDTH, -1, Tk_Offset(TkMenuButton, highlightWidth), 0, 0, 0}, {TK_OPTION_STRING, "-image", "image", "Image", - DEF_MENUBUTTON_IMAGE, -1, Tk_Offset(TkMenuButton, imageString), + DEF_MENUBUTTON_IMAGE, -1, Tk_Offset(TkMenuButton, imageString), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_BOOLEAN, "-indicatoron", "indicatorOn", "IndicatorOn", DEF_MENUBUTTON_INDICATOR, -1, Tk_Offset(TkMenuButton, indicatorOn), @@ -111,7 +110,7 @@ static Tk_OptionSpec optionSpecs[] = { {TK_OPTION_JUSTIFY, "-justify", "justify", "Justify", DEF_BUTTON_JUSTIFY, -1, Tk_Offset(TkMenuButton, justify), 0, 0, 0}, {TK_OPTION_STRING, "-menu", "menu", "Menu", - DEF_MENUBUTTON_MENU, -1, Tk_Offset(TkMenuButton, menuName), + DEF_MENUBUTTON_MENU, -1, Tk_Offset(TkMenuButton, menuName), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_PIXELS, "-padx", "padX", "Pad", DEF_MENUBUTTON_PADX, -1, Tk_Offset(TkMenuButton, padX), @@ -120,7 +119,7 @@ static Tk_OptionSpec optionSpecs[] = { DEF_MENUBUTTON_PADY, -1, Tk_Offset(TkMenuButton, padY), 0, 0, 0}, {TK_OPTION_RELIEF, "-relief", "relief", "Relief", - DEF_MENUBUTTON_RELIEF, -1, Tk_Offset(TkMenuButton, relief), + DEF_MENUBUTTON_RELIEF, -1, Tk_Offset(TkMenuButton, relief), 0, 0, 0}, {TK_OPTION_STRING_TABLE, "-compound", "compound", "Compound", DEF_BUTTON_COMPOUND, -1, Tk_Offset(TkMenuButton, compound), 0, @@ -129,34 +128,33 @@ static Tk_OptionSpec optionSpecs[] = { DEF_MENUBUTTON_STATE, -1, Tk_Offset(TkMenuButton, state), 0, (ClientData) stateStrings, 0}, {TK_OPTION_STRING, "-takefocus", "takeFocus", "TakeFocus", - DEF_MENUBUTTON_TAKE_FOCUS, -1, + DEF_MENUBUTTON_TAKE_FOCUS, -1, Tk_Offset(TkMenuButton, takeFocus), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_STRING, "-text", "text", "Text", DEF_MENUBUTTON_TEXT, -1, Tk_Offset(TkMenuButton, text), 0, 0, 0}, {TK_OPTION_STRING, "-textvariable", "textVariable", "Variable", - DEF_MENUBUTTON_TEXT_VARIABLE, -1, + DEF_MENUBUTTON_TEXT_VARIABLE, -1, Tk_Offset(TkMenuButton, textVarName), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_INT, "-underline", "underline", "Underline", DEF_MENUBUTTON_UNDERLINE, -1, Tk_Offset(TkMenuButton, underline), 0, 0, 0}, {TK_OPTION_STRING, "-width", "width", "Width", - DEF_MENUBUTTON_WIDTH, -1, Tk_Offset(TkMenuButton, widthString), + DEF_MENUBUTTON_WIDTH, -1, Tk_Offset(TkMenuButton, widthString), 0, 0, 0}, {TK_OPTION_PIXELS, "-wraplength", "wrapLength", "WrapLength", DEF_MENUBUTTON_WRAP_LENGTH, -1, Tk_Offset(TkMenuButton, wrapLength), 0, 0, 0}, - {TK_OPTION_END, (char *) NULL, (char *) NULL, (char *) NULL, - (char *) NULL, 0, 0} + {TK_OPTION_END, NULL, NULL, NULL, NULL, 0, 0} }; /* - * The following tables define the menubutton widget commands and map the - * indexes into the string tables into a single enumerated type used - * to dispatch the scale widget command. + * The following tables define the menubutton widget commands and map the + * indexes into the string tables into a single enumerated type used to + * dispatch the scale widget command. */ static CONST char *commandNames[] = { - "cget", "configure", (char *) NULL + "cget", "configure", NULL }; enum command { @@ -164,35 +162,34 @@ enum command { }; /* - * Forward declarations for procedures defined later in this file: + * Forward declarations for functions defined later in this file: */ -static void MenuButtonCmdDeletedProc _ANSI_ARGS_(( - ClientData clientData)); -static void MenuButtonEventProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static void MenuButtonImageProc _ANSI_ARGS_((ClientData clientData, +static void MenuButtonCmdDeletedProc(ClientData clientData); +static void MenuButtonEventProc(ClientData clientData, + XEvent *eventPtr); +static void MenuButtonImageProc(ClientData clientData, int x, int y, int width, int height, int imgWidth, - int imgHeight)); -static char * MenuButtonTextVarProc _ANSI_ARGS_(( - ClientData clientData, Tcl_Interp *interp, - CONST char *name1, CONST char *name2, int flags)); -static int MenuButtonWidgetObjCmd _ANSI_ARGS_(( - ClientData clientData, Tcl_Interp *interp, - int objc, Tcl_Obj *CONST objv[])); -static int ConfigureMenuButton _ANSI_ARGS_((Tcl_Interp *interp, - TkMenuButton *mbPtr, int objc, - Tcl_Obj *CONST objv[])); -static void DestroyMenuButton _ANSI_ARGS_((char *memPtr)); + int imgHeight); +static char * MenuButtonTextVarProc(ClientData clientData, + Tcl_Interp *interp, CONST char *name1, + CONST char *name2, int flags); +static int MenuButtonWidgetObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *CONST objv[]); +static int ConfigureMenuButton(Tcl_Interp *interp, + TkMenuButton *mbPtr, int objc, + Tcl_Obj *CONST objv[]); +static void DestroyMenuButton(char *memPtr); /* *-------------------------------------------------------------- * * Tk_MenubuttonObjCmd -- * - * This procedure is invoked to process the "button", "label", - * "radiobutton", and "checkbutton" Tcl commands. See the - * user documentation for details on what it does. + * This function is invoked to process the "button", "label", + * "radiobutton", and "checkbutton" Tcl commands. See the user + * documentation for details on what it does. * * Results: * A standard Tcl result. @@ -204,11 +201,11 @@ static void DestroyMenuButton _ANSI_ARGS_((char *memPtr)); */ int -Tk_MenubuttonObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* NULL. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument objects. */ +Tk_MenubuttonObjCmd( + ClientData clientData, /* NULL. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { register TkMenuButton *mbPtr; Tk_OptionTable optionTable; @@ -224,14 +221,14 @@ Tk_MenubuttonObjCmd(clientData, interp, objc, objv) */ tkwin = Tk_CreateWindowFromPath(interp, Tk_MainWindow(interp), - Tcl_GetString(objv[1]), (char *) NULL); + Tcl_GetString(objv[1]), NULL); if (tkwin == NULL) { return TCL_ERROR; } /* - * Create the option table for this widget class. If it has already - * been created, the cached pointer will be returned. + * Create the option table for this widget class. If it has already been + * created, the cached pointer will be returned. */ optionTable = Tk_CreateOptionTable(interp, optionSpecs); @@ -248,8 +245,8 @@ Tk_MenubuttonObjCmd(clientData, interp, objc, objv) mbPtr->tkwin = tkwin; mbPtr->display = Tk_Display (tkwin); mbPtr->interp = interp; - mbPtr->widgetCmd = Tcl_CreateObjCommand(interp, - Tk_PathName(mbPtr->tkwin), MenuButtonWidgetObjCmd, + mbPtr->widgetCmd = Tcl_CreateObjCommand(interp, + Tk_PathName(mbPtr->tkwin), MenuButtonWidgetObjCmd, (ClientData) mbPtr, MenuButtonCmdDeletedProc); mbPtr->optionTable = optionTable; mbPtr->menuName = NULL; @@ -320,9 +317,9 @@ Tk_MenubuttonObjCmd(clientData, interp, objc, objv) * * MenuButtonWidgetObjCmd -- * - * This procedure is invoked to process the Tcl command - * that corresponds to a widget managed by this module. - * See the user documentation for details on what it does. + * This function is invoked to process the Tcl command that corresponds + * to a widget managed by this module. See the user documentation for + * details on what it does. * * Results: * A standard Tcl result. @@ -334,11 +331,11 @@ Tk_MenubuttonObjCmd(clientData, interp, objc, objv) */ static int -MenuButtonWidgetObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* Information about button widget. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument objects. */ +MenuButtonWidgetObjCmd( + ClientData clientData, /* Information about button widget. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { register TkMenuButton *mbPtr = (TkMenuButton *) clientData; int result, index; @@ -348,52 +345,48 @@ MenuButtonWidgetObjCmd(clientData, interp, objc, objv) Tcl_WrongNumArgs(interp, 1, objv, "option ?arg arg ...?"); return TCL_ERROR; } - result = Tcl_GetIndexFromObj(interp, objv[1], - commandNames, "option", 0, &index); + result = Tcl_GetIndexFromObj(interp, objv[1], commandNames, "option", 0, + &index); if (result != TCL_OK) { return result; } Tcl_Preserve((ClientData) mbPtr); switch (index) { - case COMMAND_CGET: { - if (objc != 3) { - Tcl_WrongNumArgs(interp, 1, objv, "cget option"); + case COMMAND_CGET: + if (objc != 3) { + Tcl_WrongNumArgs(interp, 1, objv, "cget option"); goto error; - } + } - objPtr = Tk_GetOptionValue(interp, (char *) mbPtr, - mbPtr->optionTable, objv[2], mbPtr->tkwin); - if (objPtr == NULL) { - goto error; - } else { - Tcl_SetObjResult(interp, objPtr); - } - break; + objPtr = Tk_GetOptionValue(interp, (char *) mbPtr, + mbPtr->optionTable, objv[2], mbPtr->tkwin); + if (objPtr == NULL) { + goto error; + } else { + Tcl_SetObjResult(interp, objPtr); } + break; - case COMMAND_CONFIGURE: { - if (objc <= 3) { - objPtr = Tk_GetOptionInfo(interp, (char *) mbPtr, - mbPtr->optionTable, - (objc == 3) ? objv[2] : (Tcl_Obj *) NULL, - mbPtr->tkwin); - if (objPtr == NULL) { - goto error; - } else { - Tcl_SetObjResult(interp, objPtr); - } + case COMMAND_CONFIGURE: + if (objc <= 3) { + objPtr = Tk_GetOptionInfo(interp, (char *) mbPtr, + mbPtr->optionTable, (objc == 3) ? objv[2] : NULL, + mbPtr->tkwin); + if (objPtr == NULL) { + goto error; } else { - result = ConfigureMenuButton(interp, mbPtr, objc-2, - objv+2); + Tcl_SetObjResult(interp, objPtr); } - break; + } else { + result = ConfigureMenuButton(interp, mbPtr, objc-2, objv+2); } + break; } Tcl_Release((ClientData) mbPtr); return result; - error: + error: Tcl_Release((ClientData) mbPtr); return TCL_ERROR; } @@ -403,10 +396,10 @@ MenuButtonWidgetObjCmd(clientData, interp, objc, objv) * * DestroyMenuButton -- * - * This procedure is invoked to recycle all of the resources - * associated with a menubutton widget. It is invoked as a - * when-idle handler in order to make sure that there is no - * other use of the menubutton pending at the time of the deletion. + * This function is invoked to recycle all of the resources associated + * with a menubutton widget. It is invoked as a when-idle handler in + * order to make sure that there is no other use of the menubutton + * pending at the time of the deletion. * * Results: * None. @@ -418,8 +411,8 @@ MenuButtonWidgetObjCmd(clientData, interp, objc, objv) */ static void -DestroyMenuButton(memPtr) - char *memPtr; /* Info about button widget. */ +DestroyMenuButton( + char *memPtr) /* Info about button widget. */ { register TkMenuButton *mbPtr = (TkMenuButton *) memPtr; TkpDestroyMenuButton(mbPtr); @@ -429,9 +422,8 @@ DestroyMenuButton(memPtr) } /* - * Free up all the stuff that requires special handling, then - * let Tk_FreeOptions handle all the standard option-related - * stuff. + * Free up all the stuff that requires special handling, then let + * Tk_FreeOptions handle all the standard option-related stuff. */ Tcl_DeleteCommandFromToken(mbPtr->interp, mbPtr->widgetCmd); @@ -471,31 +463,30 @@ DestroyMenuButton(memPtr) * * ConfigureMenuButton -- * - * This procedure is called to process an argv/argc list, plus - * the Tk option database, in order to configure (or - * reconfigure) a menubutton widget. + * This function is called to process an argv/argc list, plus the Tk + * option database, in order to configure (or reconfigure) a menubutton + * widget. * * Results: - * The return value is a standard Tcl result. If TCL_ERROR is - * returned, then the interp's result contains an error message. + * The return value is a standard Tcl result. If TCL_ERROR is returned, + * then the interp's result contains an error message. * * Side effects: - * Configuration information, such as text string, colors, font, - * etc. get set for mbPtr; old resources get freed, if there - * were any. The menubutton is redisplayed. + * Configuration information, such as text string, colors, font, etc. get + * set for mbPtr; old resources get freed, if there were any. The + * menubutton is redisplayed. * *---------------------------------------------------------------------- */ static int -ConfigureMenuButton(interp, mbPtr, objc, objv) - Tcl_Interp *interp; /* Used for error reporting. */ - register TkMenuButton *mbPtr; - /* Information about widget; may or may - * not already have values for some - * fields. */ - int objc; /* Number of valid entries in objv. */ - Tcl_Obj *CONST objv[]; /* Arguments. */ +ConfigureMenuButton( + Tcl_Interp *interp, /* Used for error reporting. */ + register TkMenuButton *mbPtr, + /* Information about widget; may or may not + * already have values for some fields. */ + int objc, /* Number of valid entries in objv. */ + Tcl_Obj *CONST objv[]) /* Arguments. */ { Tk_SavedOptions savedOptions; Tcl_Obj *errorResult = NULL; @@ -503,21 +494,20 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) Tk_Image image; /* - * Eliminate any existing trace on variables monitored by the - * menubutton. + * Eliminate any existing trace on variables monitored by the menubutton. */ if (mbPtr->textVarName != NULL) { - Tcl_UntraceVar(interp, mbPtr->textVarName, + Tcl_UntraceVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuButtonTextVarProc, (ClientData) mbPtr); } /* - * The following loop is potentially executed twice. During the - * first pass configuration options get set to their new values. - * If there is an error in this pass, we execute a second pass - * to restore all the options to their previous values. + * The following loop is potentially executed twice. During the first pass + * configuration options get set to their new values. If there is an error + * in this pass, we execute a second pass to restore all the options to + * their previous values. */ for (error = 0; error <= 1; error++) { @@ -528,7 +518,7 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) if (Tk_SetOptions(interp, (char *) mbPtr, mbPtr->optionTable, objc, objv, - mbPtr->tkwin, &savedOptions, (int *) NULL) != TCL_OK) { + mbPtr->tkwin, &savedOptions, NULL) != TCL_OK) { continue; } } else { @@ -543,8 +533,8 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) /* * A few options need special processing, such as setting the - * background from a 3-D border, or filling in complicated - * defaults that couldn't be specified to Tk_SetOptions. + * background from a 3-D border, or filling in complicated defaults + * that couldn't be specified to Tk_SetOptions. */ if ((mbPtr->state == STATE_ACTIVE) @@ -566,14 +556,14 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) } /* - * Get the image for the widget, if there is one. Allocate the - * new image before freeing the old one, so that the reference - * count doesn't go to zero and cause image data to be discarded. + * Get the image for the widget, if there is one. Allocate the new + * image before freeing the old one, so that the reference count + * doesn't go to zero and cause image data to be discarded. */ if (mbPtr->imageString != NULL) { image = Tk_GetImage(mbPtr->interp, mbPtr->tkwin, - mbPtr->imageString, MenuButtonImageProc, + mbPtr->imageString, MenuButtonImageProc, (ClientData) mbPtr); if (image == NULL) { return TCL_ERROR; @@ -593,13 +583,13 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) if ((mbPtr->bitmap != None) || (mbPtr->image != NULL)) { if (Tk_GetPixels(interp, mbPtr->tkwin, mbPtr->widthString, &mbPtr->width) != TCL_OK) { - widthError: + widthError: Tcl_AddErrorInfo(interp, "\n (processing -width option)"); continue; } if (Tk_GetPixels(interp, mbPtr->tkwin, mbPtr->heightString, &mbPtr->height) != TCL_OK) { - heightError: + heightError: Tcl_AddErrorInfo(interp, "\n (processing -height option)"); continue; } @@ -617,35 +607,34 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) } if (!error) { - Tk_FreeSavedOptions(&savedOptions); + Tk_FreeSavedOptions(&savedOptions); } if ((mbPtr->image == NULL) && (mbPtr->bitmap == None) && (mbPtr->textVarName != NULL)) { - /* - * The menubutton displays the value of a variable. - * Set up a trace to watch for any changes in it, create - * the variable if it doesn't exist, and fetch its - * current value. - */ - - CONST char *value; - - value = Tcl_GetVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY); - if (value == NULL) { - Tcl_SetVar(interp, mbPtr->textVarName, mbPtr->text, - TCL_GLOBAL_ONLY); - } else { - if (mbPtr->text != NULL) { - ckfree(mbPtr->text); - } - mbPtr->text = (char *) ckalloc((unsigned) (strlen(value) + 1)); - strcpy(mbPtr->text, value); - } - Tcl_TraceVar(interp, mbPtr->textVarName, - TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, - MenuButtonTextVarProc, (ClientData) mbPtr); + /* + * The menubutton displays the value of a variable. Set up a trace to + * watch for any changes in it, create the variable if it doesn't + * exist, and fetch its current value. + */ + + CONST char *value; + + value = Tcl_GetVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY); + if (value == NULL) { + Tcl_SetVar(interp, mbPtr->textVarName, mbPtr->text, + TCL_GLOBAL_ONLY); + } else { + if (mbPtr->text != NULL) { + ckfree(mbPtr->text); + } + mbPtr->text = (char *) ckalloc((unsigned) (strlen(value) + 1)); + strcpy(mbPtr->text, value); + } + Tcl_TraceVar(interp, mbPtr->textVarName, + TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, + MenuButtonTextVarProc, (ClientData) mbPtr); } TkMenuButtonWorldChanged((ClientData) mbPtr); @@ -653,9 +642,8 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) Tcl_SetObjResult(interp, errorResult); Tcl_DecrRefCount(errorResult); return TCL_ERROR; - } else { - return TCL_OK; } + return TCL_OK; } /* @@ -663,9 +651,9 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) * * TkMenuButtonWorldChanged -- * - * This procedure is called when the world has changed in some - * way and the widget needs to recompute all its graphics contexts - * and determine its new geometry. + * This function is called when the world has changed in some way and the + * widget needs to recompute all its graphics contexts and determine its + * new geometry. * * Results: * None. @@ -675,10 +663,10 @@ ConfigureMenuButton(interp, mbPtr, objc, objv) * *--------------------------------------------------------------------------- */ - + void -TkMenuButtonWorldChanged(instanceData) - ClientData instanceData; /* Information about widget. */ +TkMenuButtonWorldChanged( + ClientData instanceData) /* Information about widget. */ { XGCValues gcValues; GC gc; @@ -692,9 +680,9 @@ TkMenuButtonWorldChanged(instanceData) gcValues.background = Tk_3DBorderColor(mbPtr->normalBorder)->pixel; /* - * Note: GraphicsExpose events are disabled in GC's because they're - * used to copy stuff from an off-screen pixmap onto the screen (we know - * that there's no problem with obscured areas). + * Note: GraphicsExpose events are disabled in GC's because they're used + * to copy stuff from an off-screen pixmap onto the screen (we know that + * there's no problem with obscured areas). */ gcValues.graphics_exposures = False; @@ -735,8 +723,8 @@ TkMenuButtonWorldChanged(instanceData) } /* - * Allocate the disabled graphics context, for drawing text in - * its disabled state. + * Allocate the disabled graphics context, for drawing text in its + * disabled state. */ mask = GCForeground | GCBackground | GCFont; @@ -768,31 +756,31 @@ TkMenuButtonWorldChanged(instanceData) * * MenuButtonEventProc -- * - * This procedure is invoked by the Tk dispatcher for various - * events on buttons. + * This function is invoked by the Tk dispatcher for various events on + * buttons. * * Results: * None. * * Side effects: - * When the window gets deleted, internal structures get - * cleaned up. When it gets exposed, it is redisplayed. + * When the window gets deleted, internal structures get cleaned up. + * When it gets exposed, it is redisplayed. * *-------------------------------------------------------------- */ static void -MenuButtonEventProc(clientData, eventPtr) - ClientData clientData; /* Information about window. */ - XEvent *eventPtr; /* Information about event. */ +MenuButtonEventProc( + ClientData clientData, /* Information about window. */ + XEvent *eventPtr) /* Information about event. */ { TkMenuButton *mbPtr = (TkMenuButton *) clientData; if ((eventPtr->type == Expose) && (eventPtr->xexpose.count == 0)) { goto redraw; } else if (eventPtr->type == ConfigureNotify) { /* - * Must redraw after size changes, since layout could have changed - * and borders will need to be redrawn. + * Must redraw after size changes, since layout could have changed and + * borders will need to be redrawn. */ goto redraw; @@ -815,7 +803,7 @@ MenuButtonEventProc(clientData, eventPtr) } return; - redraw: + redraw: if ((mbPtr->tkwin != NULL) && !(mbPtr->flags & REDRAW_PENDING)) { Tcl_DoWhenIdle(TkpDisplayMenuButton, (ClientData) mbPtr); mbPtr->flags |= REDRAW_PENDING; @@ -827,9 +815,9 @@ MenuButtonEventProc(clientData, eventPtr) * * MenuButtonCmdDeletedProc -- * - * This procedure is invoked when a widget command is deleted. If - * the widget isn't already in the process of being destroyed, - * this command destroys it. + * This function is invoked when a widget command is deleted. If the + * widget isn't already in the process of being destroyed, this command + * destroys it. * * Results: * None. @@ -841,17 +829,17 @@ MenuButtonEventProc(clientData, eventPtr) */ static void -MenuButtonCmdDeletedProc(clientData) - ClientData clientData; /* Pointer to widget record for widget. */ +MenuButtonCmdDeletedProc( + ClientData clientData) /* Pointer to widget record for widget. */ { TkMenuButton *mbPtr = (TkMenuButton *) clientData; Tk_Window tkwin = mbPtr->tkwin; /* - * This procedure could be invoked either because the window was - * destroyed and the command was then deleted (in which case tkwin - * is NULL) or because the command was deleted, and then this procedure - * destroys the widget. + * This function could be invoked either because the window was destroyed + * and the command was then deleted (in which case tkwin is NULL) or + * because the command was deleted, and then this function destroys the + * widget. */ if (tkwin != NULL) { @@ -864,8 +852,8 @@ MenuButtonCmdDeletedProc(clientData) * * MenuButtonTextVarProc -- * - * This procedure is invoked when someone changes the variable - * whose contents are to be displayed in a menu button. + * This function is invoked when someone changes the variable whose + * contents are to be displayed in a menu button. * * Results: * NULL is always returned. @@ -879,19 +867,20 @@ MenuButtonCmdDeletedProc(clientData) /* ARGSUSED */ static char * -MenuButtonTextVarProc(clientData, interp, name1, name2, flags) - ClientData clientData; /* Information about button. */ - Tcl_Interp *interp; /* Interpreter containing variable. */ - CONST char *name1; /* Name of variable. */ - CONST char *name2; /* Second part of variable name. */ - int flags; /* Information about what happened. */ +MenuButtonTextVarProc( + ClientData clientData, /* Information about button. */ + Tcl_Interp *interp, /* Interpreter containing variable. */ + CONST char *name1, /* Name of variable. */ + CONST char *name2, /* Second part of variable name. */ + int flags) /* Information about what happened. */ { register TkMenuButton *mbPtr = (TkMenuButton *) clientData; CONST char *value; + unsigned len; /* - * If the variable is unset, then immediately recreate it unless - * the whole interpreter is going away. + * If the variable is unset, then immediately recreate it unless the whole + * interpreter is going away. */ if (flags & TCL_TRACE_UNSETS) { @@ -902,7 +891,7 @@ MenuButtonTextVarProc(clientData, interp, name1, name2, flags) TCL_GLOBAL_ONLY|TCL_TRACE_WRITES|TCL_TRACE_UNSETS, MenuButtonTextVarProc, clientData); } - return (char *) NULL; + return NULL; } value = Tcl_GetVar(interp, mbPtr->textVarName, TCL_GLOBAL_ONLY); @@ -912,8 +901,9 @@ MenuButtonTextVarProc(clientData, interp, name1, name2, flags) if (mbPtr->text != NULL) { ckfree(mbPtr->text); } - mbPtr->text = (char *) ckalloc((unsigned) (strlen(value) + 1)); - strcpy(mbPtr->text, value); + len = 1 + (unsigned) strlen(value); + mbPtr->text = (char *) ckalloc(len); + memcpy(mbPtr->text, value, len); TkpComputeMenuButtonGeometry(mbPtr); if ((mbPtr->tkwin != NULL) && Tk_IsMapped(mbPtr->tkwin) @@ -921,7 +911,7 @@ MenuButtonTextVarProc(clientData, interp, name1, name2, flags) Tcl_DoWhenIdle(TkpDisplayMenuButton, (ClientData) mbPtr); mbPtr->flags |= REDRAW_PENDING; } - return (char *) NULL; + return NULL; } /* @@ -929,9 +919,9 @@ MenuButtonTextVarProc(clientData, interp, name1, name2, flags) * * MenuButtonImageProc -- * - * This procedure is invoked by the image code whenever the manager - * for an image does something that affects the size of contents - * of an image displayed in a button. + * This function is invoked by the image code whenever the manager for an + * image does something that affects the size of contents of an image + * displayed in a button. * * Results: * None. @@ -943,13 +933,13 @@ MenuButtonTextVarProc(clientData, interp, name1, name2, flags) */ static void -MenuButtonImageProc(clientData, x, y, width, height, imgWidth, imgHeight) - ClientData clientData; /* Pointer to widget record. */ - int x, y; /* Upper left pixel (within image) - * that must be redisplayed. */ - int width, height; /* Dimensions of area to redisplay - * (may be <= 0). */ - int imgWidth, imgHeight; /* New dimensions of image. */ +MenuButtonImageProc( + ClientData clientData, /* Pointer to widget record. */ + int x, int y, /* Upper left pixel (within image) that must + * be redisplayed. */ + int width, int height, /* Dimensions of area to redisplay (may be <= + * 0). */ + int imgWidth, int imgHeight)/* New dimensions of image. */ { register TkMenuButton *mbPtr = (TkMenuButton *) clientData; @@ -961,3 +951,11 @@ MenuButtonImageProc(clientData, x, y, width, height, imgWidth, imgHeight) } } } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkMenubutton.h b/generic/tkMenubutton.h index d41e64e..4a7d340 100644 --- a/generic/tkMenubutton.h +++ b/generic/tkMenubutton.h @@ -1,15 +1,15 @@ /* * tkMenubutton.h -- * - * Declarations of types and functions used to implement - * the menubutton widget. + * Declarations of types and functions used to implement the menubutton + * widget. * * Copyright (c) 1996-1997 by Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMenubutton.h,v 1.9 2003/11/17 23:12:44 hobbs Exp $ + * RCS: @(#) $Id: tkMenubutton.h,v 1.10 2005/11/15 15:18:22 dkf Exp $ */ #ifndef _TKMENUBUTTON @@ -33,7 +33,7 @@ */ enum direction { - DIRECTION_ABOVE, DIRECTION_BELOW, DIRECTION_FLUSH, + DIRECTION_ABOVE, DIRECTION_BELOW, DIRECTION_FLUSH, DIRECTION_LEFT, DIRECTION_RIGHT }; @@ -46,16 +46,16 @@ enum state { }; /* - * A data structure of the following type is kept for each - * widget managed by this file: + * A data structure of the following type is kept for each widget managed by + * this file: */ typedef struct { - Tk_Window tkwin; /* Window that embodies the widget. NULL - * means that the window has been destroyed - * but the data structures haven't yet been - * cleaned up.*/ - Display *display; /* Display containing widget. Needed, among + Tk_Window tkwin; /* Window that embodies the widget. NULL means + * that the window has been destroyed but the + * data structures haven't yet been cleaned + * up. */ + Display *display; /* Display containing widget. Needed, among * other things, so that resources can bee * freed up even after tkwin has gone away. */ Tcl_Interp *interp; /* Interpreter associated with menubutton. */ @@ -69,17 +69,17 @@ typedef struct { * Information about what's displayed in the menu button: */ - char *text; /* Text to display in button (malloc'ed) - * or NULL. */ + char *text; /* Text to display in button (malloc'ed) or + * NULL. */ int underline; /* Index of character to underline. */ - char *textVarName; /* Name of variable (malloc'ed) or NULL. - * If non-NULL, button displays the contents - * of this variable. */ - Pixmap bitmap; /* Bitmap to display or None. If not None - * then text and textVar and underline - * are ignored. */ + char *textVarName; /* Name of variable (malloc'ed) or NULL. If + * non-NULL, button displays the contents of + * this variable. */ + Pixmap bitmap; /* Bitmap to display or None. If not None then + * text and textVar and underline are + * ignored. */ char *imageString; /* Name of image to display (malloc'ed), or - * NULL. If non-NULL, bitmap, text, and + * NULL. If non-NULL, bitmap, text, and * textVarName are ignored. */ Tk_Image image; /* Image to display in window, or NULL if * none. */ @@ -90,113 +90,106 @@ typedef struct { enum state state; /* State of button for display purposes: * normal, active, or disabled. */ - Tk_3DBorder normalBorder; /* Structure used to draw 3-D - * border and background when window - * isn't active. NULL means no such - * border exists. */ - Tk_3DBorder activeBorder; /* Structure used to draw 3-D - * border and background when window - * is active. NULL means no such - * border exists. */ + Tk_3DBorder normalBorder; /* Structure used to draw 3-D border and + * background when window isn't active. NULL + * means no such border exists. */ + Tk_3DBorder activeBorder; /* Structure used to draw 3-D border and + * background when window is active. NULL + * means no such border exists. */ int borderWidth; /* Width of border. */ int relief; /* 3-d effect: TK_RELIEF_RAISED, etc. */ - int highlightWidth; /* Width in pixels of highlight to draw - * around widget when it has the focus. - * <= 0 means don't draw a highlight. */ - XColor *highlightBgColorPtr; - /* Color for drawing traversal highlight - * area when highlight is off. */ + int highlightWidth; /* Width in pixels of highlight to draw around + * widget when it has the focus. <= 0 means + * don't draw a highlight. */ + XColor *highlightBgColorPtr;/* Color for drawing traversal highlight area + * when highlight is off. */ XColor *highlightColorPtr; /* Color for drawing traversal highlight. */ int inset; /* Total width of all borders, including * traversal highlight and 3-D border. - * Indicates how much interior stuff must - * be offset from outside edges to leave - * room for borders. */ + * Indicates how much interior stuff must be + * offset from outside edges to leave room for + * borders. */ Tk_Font tkfont; /* Information about text font, or NULL. */ XColor *normalFg; /* Foreground color in normal mode. */ XColor *activeFg; /* Foreground color in active mode. NULL * means use normalFg instead. */ - XColor *disabledFg; /* Foreground color when disabled. NULL - * means use normalFg with a 50% stipple - * instead. */ + XColor *disabledFg; /* Foreground color when disabled. NULL means + * use normalFg with a 50% stipple instead. */ GC normalTextGC; /* GC for drawing text in normal mode. */ GC activeTextGC; /* GC for drawing text in active mode (NULL * means use normalTextGC). */ Pixmap gray; /* Pixmap for displaying disabled text/icon if * disabledFg is NULL. */ - GC disabledGC; /* Used to produce disabled effect for text. */ - GC stippleGC; /* Used to produce disabled stipple effect - * for images when disabled. */ + GC disabledGC; /* Used to produce disabled effect for text */ + GC stippleGC; /* Used to produce disabled stipple effect for + * images when disabled. */ int leftBearing; /* Distance from text origin to leftmost drawn * pixel (positive means to right). */ - int rightBearing; /* Amount text sticks right from its origin. */ + int rightBearing; /* Amount text sticks right from its origin */ char *widthString; /* Value of -width option. Malloc'ed. */ char *heightString; /* Value of -height option. Malloc'ed. */ int width, height; /* If > 0, these specify dimensions to request * for window, in characters for text and in - * pixels for bitmaps. In this case the actual + * pixels for bitmaps. In this case the actual * size of the text string or bitmap is - * ignored in computing desired window size. */ + * ignored in computing desired window size */ int wrapLength; /* Line length (in pixels) at which to wrap - * onto next line. <= 0 means don't wrap + * onto next line. <= 0 means don't wrap * except at newlines. */ int padX, padY; /* Extra space around text or bitmap (pixels * on each side). */ Tk_Anchor anchor; /* Where text/bitmap should be displayed * inside window region. */ - Tk_Justify justify; /* Justification to use for multi-line text. */ + Tk_Justify justify; /* Justification to use for multi-line text */ int textWidth; /* Width needed to display text as requested, * in pixels. */ int textHeight; /* Height needed to display text as requested, * in pixels. */ Tk_TextLayout textLayout; /* Saved text layout information. */ - int indicatorOn; /* Non-zero means display indicator; 0 means + int indicatorOn; /* Non-zero means display indicator; 0 means * don't display. */ - int indicatorHeight; /* Height of indicator in pixels. This same + int indicatorHeight; /* Height of indicator in pixels. This same * amount of extra space is also left on each - * side of the indicator. 0 if no indicator. */ + * side of the indicator. 0 if no indicator */ int indicatorWidth; /* Width of indicator in pixels, including - * indicatorHeight in padding on each side. - * 0 if no indicator. */ + * indicatorHeight in padding on each side. 0 + * if no indicator. */ /* * Miscellaneous information: */ - int compound; /* Value of -compound option; specifies whether - * the menubutton should show both an image and - * text, and, if so, how. */ - - enum direction direction; /* Direction for where to pop the menu. - * Valid directions are "above", "below", - * "left", "right", and "flush". "flush" - * means that the upper left corner of the - * menubutton is where the menu pops up. - * "above" and "below" will attempt to pop - * the menu compleletly above or below - * the menu respectively. - * "left" and "right" will pop the menu - * left or right, and the active item - * will be next to the button. */ + int compound; /* Value of -compound option; specifies + * whether the menubutton should show both an + * image and text, and, if so, how. */ + + enum direction direction; /* Direction for where to pop the menu. Valid + * directions are "above", "below", "left", + * "right", and "flush". "flush" means that + * the upper left corner of the menubutton is + * where the menu pops up. "above" and "below" + * will attempt to pop the menu compleletly + * above or below the menu respectively. + * "left" and "right" will pop the menu left + * or right, and the active item will be next + * to the button. */ Tk_Cursor cursor; /* Current cursor for window, or None. */ - char *takeFocus; /* Value of -takefocus option; not used in - * the C code, but used by keyboard traversal - * scripts. Malloc'ed, but may be NULL. */ - int flags; /* Various flags; see below for - * definitions. */ + char *takeFocus; /* Value of -takefocus option; not used in the + * C code, but used by keyboard traversal + * scripts. Malloc'ed, but may be NULL. */ + int flags; /* Various flags; see below for definitions */ } TkMenuButton; /* * Flag bits for buttons: * - * REDRAW_PENDING: Non-zero means a DoWhenIdle handler - * has already been queued to redraw - * this window. - * POSTED: Non-zero means that the menu associated - * with this button has been posted (typically - * because of an active button press). - * GOT_FOCUS: Non-zero means this button currently - * has the input focus. + * REDRAW_PENDING: Non-zero means a DoWhenIdle handler has + * already been queued to redraw this window. + * POSTED: Non-zero means that the menu associated with + * this button has been posted (typically because + * of an active button press). + * GOT_FOCUS: Non-zero means this button currently has the + * input focus. */ #define REDRAW_PENDING 1 @@ -205,7 +198,7 @@ typedef struct { /* * The following constants define the dimensions of the cascade indicator, - * which is displayed if the "-indicatoron" option is true. The units for + * which is displayed if the "-indicatoron" option is true. The units for * these options are 1/10 millimeters. */ @@ -219,19 +212,14 @@ typedef struct { extern Tk_ClassProcs tkpMenubuttonClass; /* - * Declaration of procedures used in the implementation of the button - * widget. + * Declaration of procedures used in the implementation of the button widget. */ -EXTERN void TkpComputeMenuButtonGeometry _ANSI_ARGS_(( - TkMenuButton *mbPtr)); -EXTERN TkMenuButton * TkpCreateMenuButton _ANSI_ARGS_((Tk_Window tkwin)); -EXTERN void TkpDisplayMenuButton _ANSI_ARGS_(( - ClientData clientData)); -EXTERN void TkpDestroyMenuButton _ANSI_ARGS_(( - TkMenuButton *mbPtr)); -EXTERN void TkMenuButtonWorldChanged _ANSI_ARGS_(( - ClientData instanceData)); +EXTERN void TkpComputeMenuButtonGeometry(TkMenuButton *mbPtr); +EXTERN TkMenuButton * TkpCreateMenuButton(Tk_Window tkwin); +EXTERN void TkpDisplayMenuButton(ClientData clientData); +EXTERN void TkpDestroyMenuButton(TkMenuButton *mbPtr); +EXTERN void TkMenuButtonWorldChanged(ClientData instanceData); # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLIMPORT diff --git a/generic/tkPanedWindow.c b/generic/tkPanedWindow.c index e4a6625..36002b4 100644 --- a/generic/tkPanedWindow.c +++ b/generic/tkPanedWindow.c @@ -1,25 +1,26 @@ /* * tkPanedWindow.c -- * - * This module implements "paned window" widgets that are object - * based. A "paned window" is a widget that manages the geometry for - * some number of other widgets, placing a movable "sash" between them, - * which can be used to alter the relative sizes of adjacent widgets. + * This module implements "paned window" widgets that are object based. A + * "paned window" is a widget that manages the geometry for some number + * of other widgets, placing a movable "sash" between them, which can be + * used to alter the relative sizes of adjacent widgets. * * Copyright (c) 1997 Sun Microsystems, Inc. * Copyright (c) 2000 Ajuba Solutions. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPanedWindow.c,v 1.23 2005/05/31 05:23:44 hobbs Exp $ + * RCS: @(#) $Id: tkPanedWindow.c,v 1.24 2005/11/15 15:18:22 dkf Exp $ */ #include "tkPort.h" #include "default.h" #include "tkInt.h" -/* Flag values for "sticky"ness The 16 combinations subsume the packer's +/* + * Flag values for "sticky"ness. The 16 combinations subsume the packer's * notion of anchor and fill. * * STICK_NORTH This window sticks to the top of its cavity. @@ -38,7 +39,7 @@ */ static char *orientStrings[] = { - "horizontal", "vertical", (char *) NULL + "horizontal", "vertical", NULL }; enum orient { ORIENT_HORIZONTAL, ORIENT_VERTICAL }; @@ -48,7 +49,7 @@ enum orient { ORIENT_HORIZONTAL, ORIENT_VERTICAL }; */ static char *stretchStrings[] = { - "always", "first", "last", "middle", "never", (char *) NULL + "always", "first", "last", "middle", "never", NULL }; enum stretch { @@ -81,37 +82,38 @@ typedef struct { */ typedef struct Slave { - Tk_Window tkwin; /* Window being managed. */ - - int minSize; /* Minimum size of this pane, on the - * relevant axis, in pixels. */ - int padx; /* Additional padding requested for - * slave, in the x dimension. */ - int pady; /* Additional padding requested for - * slave, in the y dimension. */ - Tcl_Obj *widthPtr, *heightPtr; /* Tcl_Obj rep's of slave width/height, - * to allow for null values. */ - int width; /* Slave width. */ - int height; /* Slave height. */ - int sticky; /* Sticky string. */ - int x, y; /* Coordinates of the widget. */ - int paneWidth, paneHeight; /* Pane dimensions (may be different - * from slave width/height). */ - int sashx, sashy; /* Coordinates of the sash of the - * right or bottom of this pane. */ - int markx, marky; /* Coordinates of the last mark set - * for the sash. */ - int handlex, handley; /* Coordinates of the sash handle. */ - enum stretch stretch; /* Controls how slave grows/shrinks */ - int hide; /* Controls visibility of pane */ - struct PanedWindow *masterPtr; /* Paned window managing the window. */ - Tk_Window after; /* Placeholder for parsing options. */ - Tk_Window before; /* Placeholder for parsing options. */ + Tk_Window tkwin; /* Window being managed. */ + int minSize; /* Minimum size of this pane, on the relevant + * axis, in pixels. */ + int padx; /* Additional padding requested for slave, in + * the x dimension. */ + int pady; /* Additional padding requested for slave, in + * the y dimension. */ + Tcl_Obj *widthPtr, *heightPtr; + /* Tcl_Obj rep's of slave width/height, to + * allow for null values. */ + int width; /* Slave width. */ + int height; /* Slave height. */ + int sticky; /* Sticky string. */ + int x, y; /* Coordinates of the widget. */ + int paneWidth, paneHeight; /* Pane dimensions (may be different from + * slave width/height). */ + int sashx, sashy; /* Coordinates of the sash of the right or + * bottom of this pane. */ + int markx, marky; /* Coordinates of the last mark set for the + * sash. */ + int handlex, handley; /* Coordinates of the sash handle. */ + enum stretch stretch; /* Controls how slave grows/shrinks */ + int hide; /* Controls visibility of pane */ + struct PanedWindow *masterPtr; + /* Paned window managing the window. */ + Tk_Window after; /* Placeholder for parsing options. */ + Tk_Window before; /* Placeholder for parsing options. */ } Slave; /* - * A data structure of the following type is kept for each paned window - * widget managed by this file: + * A data structure of the following type is kept for each paned window widget + * managed by this file: */ typedef struct PanedWindow { @@ -133,7 +135,6 @@ typedef struct PanedWindow { Tk_Cursor cursor; /* Current cursor for window, or None. */ int resizeOpaque; /* Boolean indicating whether resize should be * opaque or rubberband style. */ - int sashRelief; /* Relief used to draw sash. */ int sashWidth; /* Width of each sash, in pixels. */ Tcl_Obj *sashWidthPtr; /* Tcl_Obj rep for sash width. */ @@ -146,7 +147,6 @@ typedef struct PanedWindow { int handlePad; /* Distance from border to draw handle. */ Tcl_Obj *handleSizePtr; /* Tcl_Obj rep for handle size. */ Tk_Cursor sashCursor; /* Cursor used when mouse is above a sash. */ - GC gc; /* Graphics context for copying from * off-screen pixmap onto screen. */ int proxyx, proxyy; /* Proxy x,y coordinates. */ @@ -159,11 +159,11 @@ typedef struct PanedWindow { /* * Flags used for paned windows: * - * REDRAW_PENDING: Non-zero means a DoWhenIdle handler has - * been queued to redraw this window. + * REDRAW_PENDING: Non-zero means a DoWhenIdle handler has been + * queued to redraw this window. * - * WIDGET_DELETED: Non-zero means that the paned window has - * been, or is in the process of being, deleted. + * WIDGET_DELETED: Non-zero means that the paned window has been, + * or is in the process of being, deleted. * * RESIZE_PENDING: Non-zero means that the window might need to * change its size (or the size of its panes) @@ -179,59 +179,63 @@ typedef struct PanedWindow { #define RESIZE_PENDING 0x0020 /* - * Forward declarations for procedures defined later in this file: + * Forward declarations for functions defined later in this file: */ -int Tk_PanedWindowObjCmd _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[])); -static void PanedWindowCmdDeletedProc _ANSI_ARGS_((ClientData clientData)); -static int ConfigurePanedWindow _ANSI_ARGS_((Tcl_Interp *interp, - PanedWindow *pwPtr, int objc, Tcl_Obj *CONST objv[])); -static void DestroyPanedWindow _ANSI_ARGS_((PanedWindow *pwPtr)); -static void DisplayPanedWindow _ANSI_ARGS_((ClientData clientData)); -static void PanedWindowEventProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static void ProxyWindowEventProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static void DisplayProxyWindow _ANSI_ARGS_((ClientData clientData)); -static void PanedWindowWorldChanged _ANSI_ARGS_((ClientData instanceData)); -static int PanedWindowWidgetObjCmd _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *, int objc, Tcl_Obj * CONST objv[])); -static void PanedWindowLostSlaveProc _ANSI_ARGS_((ClientData clientData, - Tk_Window tkwin)); -static void PanedWindowReqProc _ANSI_ARGS_((ClientData clientData, - Tk_Window tkwin)); -static void ArrangePanes _ANSI_ARGS_((ClientData clientData)); -static void Unlink _ANSI_ARGS_((Slave *slavePtr)); -static Slave * GetPane _ANSI_ARGS_((PanedWindow *pwPtr, Tk_Window tkwin)); -static void SlaveStructureProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static int PanedWindowSashCommand _ANSI_ARGS_((PanedWindow *pwPtr, - Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[])); -static int PanedWindowProxyCommand _ANSI_ARGS_((PanedWindow *pwPtr, - Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[])); -static void ComputeGeometry _ANSI_ARGS_((PanedWindow *pwPtr)); -static int ConfigureSlaves _ANSI_ARGS_((PanedWindow *pwPtr, - Tcl_Interp *interp, int objc, Tcl_Obj * CONST objv[])); -static void DestroyOptionTables _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *interp)); -static int SetSticky _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *interp, Tk_Window tkwin, - Tcl_Obj **value, char *recordPtr, int internalOffset, - char *oldInternalPtr, int flags)); -static Tcl_Obj *GetSticky _ANSI_ARGS_((ClientData clientData, Tk_Window tkwin, - char *recordPtr, int internalOffset)); -static void RestoreSticky _ANSI_ARGS_((ClientData clientData, - Tk_Window tkwin, char *internalPtr, - char *oldInternalPtr)); -static void AdjustForSticky _ANSI_ARGS_((int sticky, int cavityWidth, - int cavityHeight, int *xPtr, int *yPtr, - int *slaveWidthPtr, int *slaveHeightPtr)); -static void MoveSash _ANSI_ARGS_((PanedWindow *pwPtr, int sash, int diff)); -static int ObjectIsEmpty _ANSI_ARGS_((Tcl_Obj *objPtr)); -static char * ComputeSlotAddress _ANSI_ARGS_((char *recordPtr, int offset)); -static int PanedWindowIdentifyCoords _ANSI_ARGS_((PanedWindow *pwPtr, - Tcl_Interp *interp, int x, int y)); +int Tk_PanedWindowObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj *CONST objv[]); +static void PanedWindowCmdDeletedProc(ClientData clientData); +static int ConfigurePanedWindow(Tcl_Interp *interp, + PanedWindow *pwPtr, int objc, + Tcl_Obj *CONST objv[]); +static void DestroyPanedWindow(PanedWindow *pwPtr); +static void DisplayPanedWindow(ClientData clientData); +static void PanedWindowEventProc(ClientData clientData, + XEvent *eventPtr); +static void ProxyWindowEventProc(ClientData clientData, + XEvent *eventPtr); +static void DisplayProxyWindow(ClientData clientData); +static void PanedWindowWorldChanged(ClientData instanceData); +static int PanedWindowWidgetObjCmd(ClientData clientData, + Tcl_Interp *, int objc, Tcl_Obj * CONST objv[]); +static void PanedWindowLostSlaveProc(ClientData clientData, + Tk_Window tkwin); +static void PanedWindowReqProc(ClientData clientData, + Tk_Window tkwin); +static void ArrangePanes(ClientData clientData); +static void Unlink(Slave *slavePtr); +static Slave * GetPane(PanedWindow *pwPtr, Tk_Window tkwin); +static void SlaveStructureProc(ClientData clientData, + XEvent *eventPtr); +static int PanedWindowSashCommand(PanedWindow *pwPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj * CONST objv[]); +static int PanedWindowProxyCommand(PanedWindow *pwPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj * CONST objv[]); +static void ComputeGeometry(PanedWindow *pwPtr); +static int ConfigureSlaves(PanedWindow *pwPtr, + Tcl_Interp *interp, int objc, + Tcl_Obj * CONST objv[]); +static void DestroyOptionTables(ClientData clientData, + Tcl_Interp *interp); +static int SetSticky(ClientData clientData, Tcl_Interp *interp, + Tk_Window tkwin, Tcl_Obj **value, char *recordPtr, + int internalOffset, char *oldInternalPtr, + int flags); +static Tcl_Obj * GetSticky(ClientData clientData, Tk_Window tkwin, + char *recordPtr, int internalOffset); +static void RestoreSticky(ClientData clientData, Tk_Window tkwin, + char *internalPtr, char *oldInternalPtr); +static void AdjustForSticky(int sticky, int cavityWidth, + int cavityHeight, int *xPtr, int *yPtr, + int *slaveWidthPtr, int *slaveHeightPtr); +static void MoveSash(PanedWindow *pwPtr, int sash, int diff); +static int ObjectIsEmpty(Tcl_Obj *objPtr); +static char * ComputeSlotAddress(char *recordPtr, int offset); +static int PanedWindowIdentifyCoords(PanedWindow *pwPtr, + Tcl_Interp *interp, int x, int y); /* * Sashes are between panes only, so there is one less sash than slaves @@ -258,11 +262,11 @@ static Tk_GeomMgr panedWindowMgrType = { */ static Tk_ObjCustomOption stickyOption = { - "sticky", /* name */ - SetSticky, /* setProc */ - GetSticky, /* getProc */ - RestoreSticky, /* restoreProc */ - (Tk_CustomOptionFreeProc *)NULL, /* freeProc */ + "sticky", /* name */ + SetSticky, /* setProc */ + GetSticky, /* getProc */ + RestoreSticky, /* restoreProc */ + NULL, /* freeProc */ 0 }; @@ -270,10 +274,10 @@ static Tk_OptionSpec optionSpecs[] = { {TK_OPTION_BORDER, "-background", "background", "Background", DEF_PANEDWINDOW_BG_COLOR, -1, Tk_Offset(PanedWindow, background), 0, (ClientData) DEF_PANEDWINDOW_BG_MONO}, - {TK_OPTION_SYNONYM, "-bd", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-borderwidth"}, - {TK_OPTION_SYNONYM, "-bg", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-background"}, + {TK_OPTION_SYNONYM, "-bd", NULL, NULL, + NULL, 0, -1, 0, (ClientData) "-borderwidth"}, + {TK_OPTION_SYNONYM, "-bg", NULL, NULL, + NULL, 0, -1, 0, (ClientData) "-background"}, {TK_OPTION_PIXELS, "-borderwidth", "borderWidth", "BorderWidth", DEF_PANEDWINDOW_BORDERWIDTH, -1, Tk_Offset(PanedWindow, borderWidth), 0, 0, GEOMETRY}, @@ -319,43 +323,42 @@ static Tk_OptionSpec optionSpecs[] = { }; static Tk_OptionSpec slaveOptionSpecs[] = { - {TK_OPTION_WINDOW, "-after", (char *) NULL, (char *) NULL, + {TK_OPTION_WINDOW, "-after", NULL, NULL, DEF_PANEDWINDOW_PANE_AFTER, -1, Tk_Offset(Slave, after), TK_OPTION_NULL_OK, 0, 0}, - {TK_OPTION_WINDOW, "-before", (char *) NULL, (char *) NULL, + {TK_OPTION_WINDOW, "-before", NULL, NULL, DEF_PANEDWINDOW_PANE_BEFORE, -1, Tk_Offset(Slave, before), TK_OPTION_NULL_OK, 0, 0}, - {TK_OPTION_PIXELS, "-height", (char *) NULL, (char *) NULL, + {TK_OPTION_PIXELS, "-height", NULL, NULL, DEF_PANEDWINDOW_PANE_HEIGHT, Tk_Offset(Slave, heightPtr), Tk_Offset(Slave, height), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_BOOLEAN, "-hide", "hide", "Hide", DEF_PANEDWINDOW_PANE_HIDE, -1, Tk_Offset(Slave, hide), 0,0,GEOMETRY}, - {TK_OPTION_PIXELS, "-minsize", (char *) NULL, (char *) NULL, + {TK_OPTION_PIXELS, "-minsize", NULL, NULL, DEF_PANEDWINDOW_PANE_MINSIZE, -1, Tk_Offset(Slave, minSize), 0, 0, 0}, - {TK_OPTION_PIXELS, "-padx", (char *) NULL, (char *) NULL, + {TK_OPTION_PIXELS, "-padx", NULL, NULL, DEF_PANEDWINDOW_PANE_PADX, -1, Tk_Offset(Slave, padx), 0, 0, 0}, - {TK_OPTION_PIXELS, "-pady", (char *) NULL, (char *) NULL, + {TK_OPTION_PIXELS, "-pady", NULL, NULL, DEF_PANEDWINDOW_PANE_PADY, -1, Tk_Offset(Slave, pady), 0, 0, 0}, - {TK_OPTION_CUSTOM, "-sticky", (char *) NULL, (char *) NULL, + {TK_OPTION_CUSTOM, "-sticky", NULL, NULL, DEF_PANEDWINDOW_PANE_STICKY, -1, Tk_Offset(Slave, sticky), 0, (ClientData) &stickyOption, 0}, {TK_OPTION_STRING_TABLE, "-stretch", "stretch", "Stretch", DEF_PANEDWINDOW_PANE_STRETCH, -1, Tk_Offset(Slave, stretch), 0, (ClientData) stretchStrings, 0}, - {TK_OPTION_PIXELS, "-width", (char *) NULL, (char *) NULL, + {TK_OPTION_PIXELS, "-width", NULL, NULL, DEF_PANEDWINDOW_PANE_WIDTH, Tk_Offset(Slave, widthPtr), Tk_Offset(Slave, width), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_END} }; - /* *-------------------------------------------------------------- * * Tk_PanedWindowObjCmd -- * - * This procedure is invoked to process the "panedwindow" Tcl - * command. It creates a new "panedwindow" widget. + * This function is invoked to process the "panedwindow" Tcl command. It + * creates a new "panedwindow" widget. * * Results: * A standard Tcl result. @@ -367,11 +370,11 @@ static Tk_OptionSpec slaveOptionSpecs[] = { */ int -Tk_PanedWindowObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* NULL. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +Tk_PanedWindowObjCmd( + ClientData clientData, /* NULL. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj * CONST objv[]) /* Argument objects. */ { PanedWindow *pwPtr; Tk_Window tkwin, parent; @@ -384,7 +387,7 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) } tkwin = Tk_CreateWindowFromPath(interp, Tk_MainWindow(interp), - Tcl_GetStringFromObj(objv[1], NULL), (char *) NULL); + Tcl_GetStringFromObj(objv[1], NULL), NULL); if (tkwin == NULL) { return TCL_ERROR; } @@ -393,17 +396,25 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) Tcl_GetAssocData(interp, "PanedWindowOptionTables", NULL); if (pwOpts == NULL) { /* - * The first time this procedure is invoked, the option tables will - * be NULL. We then create the option tables from the templates - * and store a pointer to the tables as the command's clinical so - * we'll have easy access to it in the future. + * The first time this function is invoked, the option tables will be + * NULL. We then create the option tables from the templates and store + * a pointer to the tables as the command's clinical so we'll have + * easy access to it in the future. */ + pwOpts = (OptionTables *) ckalloc(sizeof(OptionTables)); - /* Set up an exit handler to free the optionTables struct */ + + /* + * Set up an exit handler to free the optionTables struct. + */ + Tcl_SetAssocData(interp, "PanedWindowOptionTables", DestroyOptionTables, (ClientData) pwOpts); - /* Create the paned window option tables. */ + /* + * Create the paned window option tables. + */ + pwOpts->pwOptions = Tk_CreateOptionTable(interp, optionSpecs); pwOpts->slaveOpts = Tk_CreateOptionTable(interp, slaveOptionSpecs); } @@ -416,18 +427,18 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) pwPtr = (PanedWindow *) ckalloc(sizeof(PanedWindow)); memset((void *)pwPtr, 0, (sizeof(PanedWindow))); - pwPtr->tkwin = tkwin; - pwPtr->display = Tk_Display(tkwin); - pwPtr->interp = interp; - pwPtr->widgetCmd = Tcl_CreateObjCommand(interp, + pwPtr->tkwin = tkwin; + pwPtr->display = Tk_Display(tkwin); + pwPtr->interp = interp; + pwPtr->widgetCmd = Tcl_CreateObjCommand(interp, Tk_PathName(pwPtr->tkwin), PanedWindowWidgetObjCmd, (ClientData) pwPtr, PanedWindowCmdDeletedProc); - pwPtr->optionTable = pwOpts->pwOptions; - pwPtr->slaveOpts = pwOpts->slaveOpts; - pwPtr->relief = TK_RELIEF_RAISED; - pwPtr->gc = None; - pwPtr->cursor = None; - pwPtr->sashCursor = None; + pwPtr->optionTable = pwOpts->pwOptions; + pwPtr->slaveOpts = pwOpts->slaveOpts; + pwPtr->relief = TK_RELIEF_RAISED; + pwPtr->gc = None; + pwPtr->cursor = None; + pwPtr->sashCursor = None; /* * Keep a hold of the associated tkwin until we destroy the widget, @@ -446,10 +457,11 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) PanedWindowEventProc, (ClientData) pwPtr); /* - * Find the toplevel ancestor of the panedwindow, and make a proxy - * win as a child of that window; this way the proxy can always float - * above slaves in the panedwindow. + * Find the toplevel ancestor of the panedwindow, and make a proxy win as + * a child of that window; this way the proxy can always float above + * slaves in the panedwindow. */ + parent = Tk_Parent(pwPtr->tkwin); while (!(Tk_IsTopLevel(parent))) { parent = Tk_Parent(parent); @@ -459,15 +471,16 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) } } - pwPtr->proxywin = Tk_CreateAnonymousWindow(interp, parent, (char *) NULL); + pwPtr->proxywin = Tk_CreateAnonymousWindow(interp, parent, NULL); + /* - * The proxy window has to be able to share GCs with the main - * panedwindow despite being children of windows with potentially - * different characteristics, and it looks better that way too. - * [Bug 702230] - * Also Set the X window save under attribute to avoid expose events as - * the proxy sash is dragged across the panes. [Bug 1036963] + * The proxy window has to be able to share GCs with the main panedwindow + * despite being children of windows with potentially different + * characteristics, and it looks better that way too. [Bug 702230] Also + * set the X window save under attribute to avoid expose events as the + * proxy sash is dragged across the panes. [Bug 1036963] */ + Tk_SetWindowVisual(pwPtr->proxywin, Tk_Visual(tkwin), Tk_Depth(tkwin), Tk_Colormap(tkwin)); Tk_CreateEventHandler(pwPtr->proxywin, ExposureMask, ProxyWindowEventProc, @@ -490,9 +503,9 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) * * PanedWindowWidgetObjCmd -- * - * This procedure is invoked to process the Tcl command - * that corresponds to a widget managed by this module. - * See the user documentation for details on what it does. + * This function is invoked to process the Tcl command that corresponds + * to a widget managed by this module. See the user documentation for + * details on what it does. * * Results: * A standard Tcl result. @@ -504,17 +517,17 @@ Tk_PanedWindowObjCmd(clientData, interp, objc, objv) */ static int -PanedWindowWidgetObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* Information about square widget. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +PanedWindowWidgetObjCmd( + ClientData clientData, /* Information about square widget. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj * CONST objv[]) /* Argument objects. */ { PanedWindow *pwPtr = (PanedWindow *) clientData; int result = TCL_OK; static CONST char *optionStrings[] = { "add", "cget", "configure", "forget", "identify", "panecget", - "paneconfigure", "panes", "proxy", "sash", (char *) NULL + "paneconfigure", "panes", "proxy", "sash", NULL }; enum options { PW_ADD, PW_CGET, PW_CONFIGURE, PW_FORGET, PW_IDENTIFY, PW_PANECGET, @@ -567,7 +580,7 @@ PanedWindowWidgetObjCmd(clientData, interp, objc, objv) if (objc <= 3) { resultObj = Tk_GetOptionInfo(interp, (char *) pwPtr, pwPtr->optionTable, - (objc == 3) ? objv[2] : (Tcl_Obj *) NULL, pwPtr->tkwin); + (objc == 3) ? objv[2] : NULL, pwPtr->tkwin); if (resultObj == NULL) { result = TCL_ERROR; } else { @@ -599,7 +612,7 @@ PanedWindowWidgetObjCmd(clientData, interp, objc, objv) slavePtr = GetPane(pwPtr, slave); if ((slavePtr != NULL) && (slavePtr->masterPtr != NULL)) { count++; - Tk_ManageGeometry(slave, (Tk_GeomMgr *)NULL, (ClientData)NULL); + Tk_ManageGeometry(slave, NULL, (ClientData)NULL); Tk_UnmaintainGeometry(slavePtr->tkwin, pwPtr->tkwin); Tk_DeleteEventHandler(slavePtr->tkwin, StructureNotifyMask, SlaveStructureProc, (ClientData) slavePtr); @@ -672,7 +685,7 @@ PanedWindowWidgetObjCmd(clientData, interp, objc, objv) if (pwPtr->slaves[i]->tkwin == tkwin) { resultObj = Tk_GetOptionInfo(interp, (char *) pwPtr->slaves[i], pwPtr->slaveOpts, - (objc == 4) ? objv[3] : (Tcl_Obj *) NULL, + (objc == 4) ? objv[3] : NULL, pwPtr->tkwin); if (resultObj == NULL) { result = TCL_ERROR; @@ -717,25 +730,24 @@ PanedWindowWidgetObjCmd(clientData, interp, objc, objv) * * ConfigureSlaves -- * - * Add or alter the configuration options of a slave in a paned - * window. + * Add or alter the configuration options of a slave in a paned window. * * Results: * Standard Tcl result. * * Side effects: - * Depends on options; may add a slave to the paned window, may - * alter the geometry management options of a slave. + * Depends on options; may add a slave to the paned window, may alter the + * geometry management options of a slave. * *---------------------------------------------------------------------- */ static int -ConfigureSlaves(pwPtr, interp, objc, objv) - PanedWindow *pwPtr; /* Information about paned window. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +ConfigureSlaves( + PanedWindow *pwPtr, /* Information about paned window. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { int i, firstOptionArg, j, found, doubleBw, index, numNewSlaves, haveLoc; int insertIndex; @@ -745,11 +757,11 @@ ConfigureSlaves(pwPtr, interp, objc, objv) char *arg; /* - * Find the non-window name arguments; these are the configure options - * for the slaves. Also validate that the window names given are - * legitimate (ie, they are real windows, they are not the panedwindow - * itself, etc.). + * Find the non-window name arguments; these are the configure options for + * the slaves. Also validate that the window names given are legitimate + * (ie, they are real windows, they are not the panedwindow itself, etc.). */ + for (i = 2; i < objc; i++) { arg = Tcl_GetString(objv[i]); if (arg[0] == '-') { @@ -761,28 +773,32 @@ ConfigureSlaves(pwPtr, interp, objc, objv) * Just a plain old bad window; Tk_NameToWindow filled in an * error message for us. */ + return TCL_ERROR; } else if (tkwin == pwPtr->tkwin) { /* * A panedwindow cannot manage itself. */ + Tcl_ResetResult(interp); Tcl_AppendResult(interp, "can't add ", arg, " to itself", - (char *) NULL); + NULL); return TCL_ERROR; } else if (Tk_IsTopLevel(tkwin)) { /* * A panedwindow cannot manage a toplevel. */ + Tcl_ResetResult(interp); Tcl_AppendResult(interp, "can't add toplevel ", arg, " to ", - Tk_PathName(pwPtr->tkwin), (char *) NULL); + Tk_PathName(pwPtr->tkwin), NULL); return TCL_ERROR; } else { /* * Make sure the panedwindow is the parent of the slave, * or a descendant of the slave's parent. */ + parent = Tk_Parent(tkwin); for (ancestor = pwPtr->tkwin;;ancestor = Tk_Parent(ancestor)) { if (ancestor == parent) { @@ -790,9 +806,8 @@ ConfigureSlaves(pwPtr, interp, objc, objv) } if (Tk_IsTopLevel(ancestor)) { Tcl_ResetResult(interp); - Tcl_AppendResult(interp, "can't add ", arg, - " to ", Tk_PathName(pwPtr->tkwin), - (char *) NULL); + Tcl_AppendResult(interp, "can't add ", arg, " to ", + Tk_PathName(pwPtr->tkwin), NULL); return TCL_ERROR; } } @@ -803,10 +818,11 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * Pre-parse the configuration options, to get the before/after specifiers - * into an easy-to-find location (a local variable). Also, check the + * into an easy-to-find location (a local variable). Also, check the * return from Tk_SetOptions once, here, so we can save a little bit of * extra testing in the for loop below. */ + memset((void *)&options, 0, sizeof(Slave)); if (Tk_SetOptions(interp, (char *) &options, pwPtr->slaveOpts, objc - firstOptionArg, objv + firstOptionArg, @@ -816,9 +832,10 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * If either -after or -before was given, find the numerical index that - * corresponds to the given window. If both -after and -before are - * given, the option precedence is: -after, then -before. + * corresponds to the given window. If both -after and -before are given, + * the option precedence is: -after, then -before. */ + index = -1; haveLoc = 0; if (options.after != None) { @@ -842,14 +859,14 @@ ConfigureSlaves(pwPtr, interp, objc, objv) } /* - * If a window was given for -after/-before, but it's not a window - * managed by the panedwindow, throw an error + * If a window was given for -after/-before, but it's not a window managed + * by the panedwindow, throw an error */ + if (haveLoc && index == -1) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "window \"", Tk_PathName(tkwin), - "\" is not managed by ", Tk_PathName(pwPtr->tkwin), - (char *) NULL); + "\" is not managed by ", Tk_PathName(pwPtr->tkwin), NULL); Tk_FreeConfigOptions((char *) &options, pwPtr->slaveOpts, pwPtr->tkwin); return TCL_ERROR; @@ -857,23 +874,26 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * Allocate an array to hold, in order, the pointers to the slave - * structures corresponding to the windows specified. Some of those + * structures corresponding to the windows specified. Some of those * structures may already have existed, some may be new. */ + inserts = (Slave **)ckalloc(sizeof(Slave *) * (firstOptionArg - 2)); insertIndex = 0; /* * Populate the inserts array, creating new slave structures as necessary, * applying the options to each structure as we go, and, if necessary, - * marking the spot in the original slaves array as empty (for pre-existing - * slave structures). + * marking the spot in the original slaves array as empty (for + * pre-existing slave structures). */ + for (i = 0, numNewSlaves = 0; i < firstOptionArg - 2; i++) { /* * We don't check that tkwin is NULL here, because the pre-pass above * guarantees that the input at this stage is good. */ + tkwin = Tk_NameToWindow(interp, Tcl_GetString(objv[i + 2]), pwPtr->tkwin); @@ -907,8 +927,8 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * Make sure this slave wasn't already put into the inserts array, - * ie, when the user specifies the same window multiple times in - * a single add commaned. + * i.e., when the user specifies the same window multiple times in a + * single add commaned. */ for (j = 0; j < insertIndex; j++) { if (inserts[j]->tkwin == tkwin) { @@ -921,8 +941,8 @@ ConfigureSlaves(pwPtr, interp, objc, objv) } /* - * Create a new slave structure and initialize it. All slaves - * start out with their "natural" dimensions. + * Create a new slave structure and initialize it. All slaves start + * out with their "natural" dimensions. */ slavePtr = (Slave *) ckalloc(sizeof(Slave)); @@ -932,8 +952,8 @@ ConfigureSlaves(pwPtr, interp, objc, objv) Tk_SetOptions(interp, (char *)slavePtr, pwPtr->slaveOpts, objc - firstOptionArg, objv + firstOptionArg, pwPtr->tkwin, NULL, NULL); - slavePtr->tkwin = tkwin; - slavePtr->masterPtr = pwPtr; + slavePtr->tkwin = tkwin; + slavePtr->masterPtr = pwPtr; doubleBw = 2 * Tk_Changes(slavePtr->tkwin)->border_width; if (slavePtr->width > 0) { slavePtr->paneWidth = slavePtr->width; @@ -962,9 +982,9 @@ ConfigureSlaves(pwPtr, interp, objc, objv) } /* - * Allocate the new slaves array, then copy the slaves into it, in - * order. + * Allocate the new slaves array, then copy the slaves into it, in order. */ + i = sizeof(Slave *) * (pwPtr->numSlaves+numNewSlaves); new = (Slave **)ckalloc((unsigned) i); memset(new, 0, (size_t) i); @@ -981,11 +1001,12 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * If some of the existing slaves were moved, the old slaves array * will be partially populated, with some valid and some invalid - * entries. Walk through it, copying valid entries to the new slaves + * entries. Walk through it, copying valid entries to the new slaves * array as we go; when we get to the insert location for the new * slaves, copy the inserts array over, then finish off the old slaves * array. */ + for (i = 0, j = 0; i < index; i++) { if (pwPtr->slaves[i] != NULL) { new[j] = pwPtr->slaves[i]; @@ -1007,6 +1028,7 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * Make the new slaves array the paned window's slave array, and clean up. */ + ckfree((void *)pwPtr->slaves); ckfree((void *)inserts); pwPtr->slaves = new; @@ -1014,6 +1036,7 @@ ConfigureSlaves(pwPtr, interp, objc, objv) /* * Set the paned window's slave count to the new value. */ + pwPtr->numSlaves += numNewSlaves; Tk_FreeConfigOptions((char *) &options, pwPtr->slaveOpts, pwPtr->tkwin); @@ -1027,7 +1050,7 @@ ConfigureSlaves(pwPtr, interp, objc, objv) * * PanedWindowSashCommand -- * - * Implementation of the panedwindow sash subcommand. See the user + * Implementation of the panedwindow sash subcommand. See the user * documentation for details on what it does. * * Results: @@ -1040,14 +1063,14 @@ ConfigureSlaves(pwPtr, interp, objc, objv) */ static int -PanedWindowSashCommand(pwPtr, interp, objc, objv) - PanedWindow *pwPtr; /* Pointer to paned window information. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +PanedWindowSashCommand( + PanedWindow *pwPtr, /* Pointer to paned window information. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { static CONST char *sashOptionStrings[] = { - "coord", "dragto", "mark", "place", (char *) NULL + "coord", "dragto", "mark", "place", NULL }; enum sashOptions { SASH_COORD, SASH_DRAGTO, SASH_MARK, SASH_PLACE @@ -1061,8 +1084,8 @@ PanedWindowSashCommand(pwPtr, interp, objc, objv) return TCL_ERROR; } - if (Tcl_GetIndexFromObj(interp, objv[2], sashOptionStrings, - "option", 0, &index) != TCL_OK) { + if (Tcl_GetIndexFromObj(interp, objv[2], sashOptionStrings, "option", 0, + &index) != TCL_OK) { return TCL_ERROR; } @@ -1175,28 +1198,27 @@ PanedWindowSashCommand(pwPtr, interp, objc, objv) * * ConfigurePanedWindow -- * - * This procedure is called to process an argv/argc list in - * conjunction with the Tk option database to configure (or - * reconfigure) a paned window widget. + * This function is called to process an argv/argc list in conjunction + * with the Tk option database to configure (or reconfigure) a paned + * window widget. * * Results: - * The return value is a standard Tcl result. If TCL_ERROR is - * returned, then the interp's result contains an error message. + * The return value is a standard Tcl result. If TCL_ERROR is returned, + * then the interp's result contains an error message. * * Side effects: - * Configuration information, such as colors, border width, - * etc. get set for pwPtr; old resources get freed, - * if there were any. + * Configuration information, such as colors, border width, etc. get set + * for pwPtr; old resources get freed, if there were any. * *---------------------------------------------------------------------- */ static int -ConfigurePanedWindow(interp, pwPtr, objc, objv) - Tcl_Interp *interp; /* Used for error reporting. */ - PanedWindow *pwPtr; /* Information about widget. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument values. */ +ConfigurePanedWindow( + Tcl_Interp *interp, /* Used for error reporting. */ + PanedWindow *pwPtr, /* Information about widget. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument values. */ { Tk_SavedOptions savedOptions; int typemask = 0; @@ -1212,7 +1234,7 @@ ConfigurePanedWindow(interp, pwPtr, objc, objv) PanedWindowWorldChanged((ClientData) pwPtr); /* - * If an option that affects geometry has changed, make a relayout + * If an option that affects geometry has changed, make a re-layout * request. */ @@ -1228,9 +1250,9 @@ ConfigurePanedWindow(interp, pwPtr, objc, objv) * * PanedWindowWorldChanged -- * - * This procedure is invoked anytime a paned window's world has - * changed in some way that causes the widget to have to recompute - * graphics contexts and geometry. + * This function is invoked anytime a paned window's world has changed in + * some way that causes the widget to have to recompute graphics contexts + * and geometry. * * Results: * None. @@ -1242,8 +1264,8 @@ ConfigurePanedWindow(interp, pwPtr, objc, objv) */ static void -PanedWindowWorldChanged(instanceData) - ClientData instanceData; /* Information about the paned window. */ +PanedWindowWorldChanged( + ClientData instanceData) /* Information about the paned window. */ { XGCValues gcValues; GC newGC; @@ -1286,23 +1308,23 @@ PanedWindowWorldChanged(instanceData) * * PanedWindowEventProc -- * - * This procedure is invoked by the Tk dispatcher for various - * events on paned windows. + * This function is invoked by the Tk dispatcher for various events on + * paned windows. * * Results: * None. * * Side effects: - * When the window gets deleted, internal structures get - * cleaned up. When it gets exposed, it is redisplayed. + * When the window gets deleted, internal structures get cleaned up. When + * it gets exposed, it is redisplayed. * *-------------------------------------------------------------- */ static void -PanedWindowEventProc(clientData, eventPtr) - ClientData clientData; /* Information about window. */ - XEvent *eventPtr; /* Information about event. */ +PanedWindowEventProc( + ClientData clientData, /* Information about window. */ + XEvent *eventPtr) /* Information about event. */ { PanedWindow *pwPtr = (PanedWindow *) clientData; @@ -1327,9 +1349,9 @@ PanedWindowEventProc(clientData, eventPtr) * * PanedWindowCmdDeletedProc -- * - * This procedure is invoked when a widget command is deleted. If - * the widget isn't already in the process of being destroyed, - * this command destroys it. + * This function is invoked when a widget command is deleted. If the + * widget isn't already in the process of being destroyed, this command + * destroys it. * * Results: * None. @@ -1341,16 +1363,16 @@ PanedWindowEventProc(clientData, eventPtr) */ static void -PanedWindowCmdDeletedProc(clientData) - ClientData clientData; /* Pointer to widget record for widget. */ +PanedWindowCmdDeletedProc( + ClientData clientData) /* Pointer to widget record for widget. */ { PanedWindow *pwPtr = (PanedWindow *) clientData; /* - * This procedure could be invoked either because the window was - * destroyed and the command was then deleted or because the command was - * deleted, and then this procedure destroys the widget. The - * WIDGET_DELETED flag distinguishes these cases. + * This function could be invoked either because the window was destroyed + * and the command was then deleted or because the command was deleted, + * and then this function destroys the widget. The WIDGET_DELETED flag + * distinguishes these cases. */ if (!(pwPtr->flags & WIDGET_DELETED)) { @@ -1364,9 +1386,9 @@ PanedWindowCmdDeletedProc(clientData) * * DisplayPanedWindow -- * - * This procedure redraws the contents of a paned window widget. - * It is invoked as a do-when-idle handler, so it only runs - * when there's nothing else for the application to do. + * This function redraws the contents of a paned window widget. It is + * invoked as a do-when-idle handler, so it only runs when there's + * nothing else for the application to do. * * Results: * None. @@ -1378,8 +1400,8 @@ PanedWindowCmdDeletedProc(clientData) */ static void -DisplayPanedWindow(clientData) - ClientData clientData; /* Information about window. */ +DisplayPanedWindow( + ClientData clientData) /* Information about window. */ { PanedWindow *pwPtr = (PanedWindow *) clientData; Slave *slavePtr; @@ -1446,13 +1468,12 @@ DisplayPanedWindow(clientData) } /* - * Copy the information from the off-screen pixmap onto the screen, - * then delete the pixmap. + * Copy the information from the off-screen pixmap onto the screen, then + * delete the pixmap. */ - XCopyArea(Tk_Display(tkwin), pixmap, Tk_WindowId(tkwin), pwPtr->gc, - 0, 0, (unsigned) Tk_Width(tkwin), (unsigned) Tk_Height(tkwin), - 0, 0); + XCopyArea(Tk_Display(tkwin), pixmap, Tk_WindowId(tkwin), pwPtr->gc, 0, 0, + (unsigned) Tk_Width(tkwin), (unsigned) Tk_Height(tkwin), 0, 0); Tk_FreePixmap(Tk_Display(tkwin), pixmap); } @@ -1461,8 +1482,8 @@ DisplayPanedWindow(clientData) * * DestroyPanedWindow -- * - * This procedure is invoked by PanedWindowEventProc to free the - * internal structure of a paned window. + * This function is invoked by PanedWindowEventProc to free the internal + * structure of a paned window. * * Results: * None. @@ -1474,23 +1495,23 @@ DisplayPanedWindow(clientData) */ static void -DestroyPanedWindow(pwPtr) - PanedWindow *pwPtr; /* Info about paned window widget. */ +DestroyPanedWindow( + PanedWindow *pwPtr) /* Info about paned window widget. */ { int i; /* - * First mark the widget as in the process of being deleted, - * so that any code that causes calls to other paned window procedures - * will abort. + * First mark the widget as in the process of being deleted, so that any + * code that causes calls to other paned window functions will abort. */ pwPtr->flags |= WIDGET_DELETED; /* - * Cancel idle callbacks for redrawing the widget and for rearranging - * the panes. + * Cancel idle callbacks for redrawing the widget and for rearranging the + * panes. */ + if (pwPtr->flags & REDRAW_PENDING) { Tcl_CancelIdleCall(DisplayPanedWindow, (ClientData) pwPtr); } @@ -1540,26 +1561,25 @@ DestroyPanedWindow(pwPtr) * * PanedWindowReqProc -- * - * This procedure is invoked by Tk_GeometryRequest for - * windows managed by a paned window. + * This function is invoked by Tk_GeometryRequest for windows managed by + * a paned window. * * Results: * None. * * Side effects: - * Arranges for tkwin, and all its managed siblings, to - * be re-arranged at the next idle point. + * Arranges for tkwin, and all its managed siblings, to be re-arranged at + * the next idle point. * *-------------------------------------------------------------- */ static void -PanedWindowReqProc(clientData, tkwin) - ClientData clientData; /* Paned window's information about - * window that got new preferred - * geometry. */ - Tk_Window tkwin; /* Other Tk-related information - * about the window. */ +PanedWindowReqProc( + ClientData clientData, /* Paned window's information about window + * that got new preferred geometry. */ + Tk_Window tkwin) /* Other Tk-related information about the + * window. */ { Slave *slavePtr = (Slave *) clientData; PanedWindow *pwPtr = (PanedWindow *) (slavePtr->masterPtr); @@ -1570,6 +1590,7 @@ PanedWindowReqProc(clientData, tkwin) } } else { int doubleBw = 2 * Tk_Changes(slavePtr->tkwin)->border_width; + if (slavePtr->width <= 0) { slavePtr->paneWidth = Tk_ReqWidth(slavePtr->tkwin) + doubleBw; } @@ -1585,27 +1606,28 @@ PanedWindowReqProc(clientData, tkwin) * * PanedWindowLostSlaveProc -- * - * This procedure is invoked by Tk whenever some other geometry - * claims control over a slave that used to be managed by us. + * This function is invoked by Tk whenever some other geometry claims + * control over a slave that used to be managed by us. * * Results: * None. * * Side effects: - * Forgets all information about the slave. Causes geometry to - * be recomputed for the panedwindow. + * Forgets all information about the slave. Causes geometry to be + * recomputed for the panedwindow. * *-------------------------------------------------------------- */ static void -PanedWindowLostSlaveProc(clientData, tkwin) - ClientData clientData; /* Grid structure for slave window that - * was stolen away. */ - Tk_Window tkwin; /* Tk's handle for the slave window. */ +PanedWindowLostSlaveProc( + ClientData clientData, /* Grid structure for slave window that was + * stolen away. */ + Tk_Window tkwin) /* Tk's handle for the slave window. */ { register Slave *slavePtr = (Slave *) clientData; PanedWindow *pwPtr = (PanedWindow *) (slavePtr->masterPtr); + if (pwPtr->tkwin != Tk_Parent(slavePtr->tkwin)) { Tk_UnmaintainGeometry(slavePtr->tkwin, pwPtr->tkwin); } @@ -1623,11 +1645,10 @@ PanedWindowLostSlaveProc(clientData, tkwin) * * ArrangePanes -- * - * This procedure is invoked (using the Tcl_DoWhenIdle - * mechanism) to re-layout a set of windows managed by - * a paned window. It is invoked at idle time so that a - * series of pane requests can be merged into a single - * layout operation. + * This function is invoked (using the Tcl_DoWhenIdle mechanism) to + * re-layout a set of windows managed by a paned window. It is invoked at + * idle time so that a series of pane requests can be merged into a + * single layout operation. * * Results: * None. @@ -1639,8 +1660,8 @@ PanedWindowLostSlaveProc(clientData, tkwin) */ static void -ArrangePanes(clientData) - ClientData clientData; /* Structure describing parent whose slaves +ArrangePanes( + ClientData clientData) /* Structure describing parent whose slaves * are to be re-layed out. */ { register PanedWindow *pwPtr = (PanedWindow *) clientData; @@ -1660,10 +1681,10 @@ ArrangePanes(clientData) pwPtr->flags &= ~(REQUESTED_RELAYOUT|RESIZE_PENDING); /* - * If the parent has no slaves anymore, then don't do anything - * at all: just leave the parent's size as-is. Otherwise there is - * no way to "relinquish" control over the parent so another geometry - * manager can take over. + * If the parent has no slaves anymore, then don't do anything at all: + * just leave the parent's size as-is. Otherwise there is no way to + * "relinquish" control over the parent so another geometry manager can + * take over. */ if (pwPtr->numSlaves == 0) { @@ -1697,8 +1718,8 @@ ArrangePanes(clientData) stretchReserve = (horizontal ? pwWidth : pwHeight); /* - * Calculate the sash width, including handle and padding, - * and the sash and handle offsets. + * Calculate the sash width, including handle and padding, and the sash + * and handle offsets. */ sashOffset = handleOffset = pwPtr->sashPad; @@ -1720,8 +1741,8 @@ ArrangePanes(clientData) } /* - * Compute the total size needed by all the slaves and the - * left-over, or shortage of space available. + * Compute the total size needed by all the slaves and the left-over, + * or shortage of space available. */ if (horizontal) { @@ -1756,15 +1777,14 @@ ArrangePanes(clientData) } /* - * Compute the size of this slave. The algorithm (assuming a + * Compute the size of this slave. The algorithm (assuming a * horizontal paned window) is: * - * 1. Get "base" dimensions. If a width or height is specified - * for this slave, use those values; else use the - * ReqWidth/ReqHeight. + * 1. Get "base" dimensions. If a width or height is specified for + * this slave, use those values; else use the ReqWidth/ReqHeight. * 2. Using base dimensions, pane dimensions, and sticky values, - * determine the x and y, and actual width and height of the - * widget. + * determine the x and y, and actual width and height of the + * widget. */ doubleBw = 2 * Tk_Changes(slavePtr->tkwin)->border_width; @@ -1787,11 +1807,13 @@ ArrangePanes(clientData) } if (IsStretchable(slavePtr->stretch, i, first, last)) { double frac; + if (paneDynSize > 0) { frac = (double)paneSize / (double)paneDynSize; } else { frac = (double)paneSize / (double)pwSize; } + paneDynSize -= paneSize; paneDynMinSize -= slavePtr->minSize; stretchAmount = (int) (frac * stretchReserve); @@ -1868,8 +1890,8 @@ ArrangePanes(clientData) if (x < internalBW) { x = internalBW; } - slavePtr->sashx = x + sashOffset; - slavePtr->sashy = y; + slavePtr->sashx = x + sashOffset; + slavePtr->sashy = y; slavePtr->handlex = x + handleOffset; slavePtr->handley = y + pwPtr->handlePad; x += sashWidth; @@ -1878,8 +1900,8 @@ ArrangePanes(clientData) if (y < internalBW) { y = internalBW; } - slavePtr->sashx = x; - slavePtr->sashy = y + sashOffset; + slavePtr->sashx = x; + slavePtr->sashy = y + sashOffset; slavePtr->handlex = x + pwPtr->handlePad; slavePtr->handley = y + handleOffset; y += sashWidth; @@ -1932,8 +1954,8 @@ ArrangePanes(clientData) */ static void -Unlink(slavePtr) - register Slave *slavePtr; /* Window to unlink. */ +Unlink( + register Slave *slavePtr) /* Window to unlink. */ { register PanedWindow *masterPtr; int i, j; @@ -1960,6 +1982,7 @@ Unlink(slavePtr) /* * Clean out any -after or -before references to this slave */ + for (i = 0; i < masterPtr->numSlaves; i++) { if (masterPtr->slaves[i]->before == slavePtr->tkwin) { masterPtr->slaves[i]->before = None; @@ -1976,9 +1999,10 @@ Unlink(slavePtr) } /* - * Set the slave's masterPtr to NULL, so that we can tell that the - * slave is no longer attached to any panedwindow. + * Set the slave's masterPtr to NULL, so that we can tell that the slave + * is no longer attached to any panedwindow. */ + slavePtr->masterPtr = NULL; masterPtr->numSlaves--; @@ -1989,12 +2013,12 @@ Unlink(slavePtr) * * GetPane -- * - * Given a token to a Tk window, find the pane that corresponds to - * that token in a given paned window. + * Given a token to a Tk window, find the pane that corresponds to that + * token in a given paned window. * * Results: - * Pointer to the slave structure, or NULL if the window is not - * managed by this paned window. + * Pointer to the slave structure, or NULL if the window is not managed + * by this paned window. * * Side effects: * None. @@ -2003,11 +2027,12 @@ Unlink(slavePtr) */ static Slave * -GetPane(pwPtr, tkwin) - PanedWindow *pwPtr; /* Pointer to the paned window info. */ - Tk_Window tkwin; /* Window to search for. */ +GetPane( + PanedWindow *pwPtr, /* Pointer to the paned window info. */ + Tk_Window tkwin) /* Window to search for. */ { int i; + for (i = 0; i < pwPtr->numSlaves; i++) { if (pwPtr->slaves[i]->tkwin == tkwin) { return pwPtr->slaves[i]; @@ -2021,10 +2046,9 @@ GetPane(pwPtr, tkwin) * * SlaveStructureProc -- * - * This procedure is invoked whenever StructureNotify events - * occur for a window that's managed by a paned window. This - * procedure's only purpose is to clean up when windows are - * deleted. + * This function is invoked whenever StructureNotify events occur for a + * window that's managed by a paned window. This function's only purpose + * is to clean up when windows are deleted. * * Results: * None. @@ -2038,9 +2062,9 @@ GetPane(pwPtr, tkwin) */ static void -SlaveStructureProc(clientData, eventPtr) - ClientData clientData; /* Pointer to record describing window item. */ - XEvent *eventPtr; /* Describes what just happened. */ +SlaveStructureProc( + ClientData clientData, /* Pointer to record describing window item. */ + XEvent *eventPtr) /* Describes what just happened. */ { Slave *slavePtr = (Slave *) clientData; PanedWindow *pwPtr = slavePtr->masterPtr; @@ -2058,8 +2082,8 @@ SlaveStructureProc(clientData, eventPtr) * * ComputeGeometry -- * - * Compute geometry for the paned window, including coordinates of - * all slave windows and each sash. + * Compute geometry for the paned window, including coordinates of all + * slave windows and each sash. * * Results: * None. @@ -2071,8 +2095,8 @@ SlaveStructureProc(clientData, eventPtr) */ static void -ComputeGeometry(pwPtr) - PanedWindow *pwPtr; /* Pointer to the Paned Window structure. */ +ComputeGeometry( + PanedWindow *pwPtr) /* Pointer to the Paned Window structure. */ { int i, x, y, doubleBw, internalBw; int sashWidth, sashOffset, handleOffset; @@ -2086,10 +2110,10 @@ ComputeGeometry(pwPtr) reqWidth = reqHeight = 0; /* - * Sashes and handles share space on the display. To simplify - * processing below, precompute the x and y offsets of the handles and - * sashes within the space occupied by their combination; later, just add - * those offsets blindly (avoiding the extra showHandle, etc, checks). + * Sashes and handles share space on the display. To simplify processing + * below, precompute the x and y offsets of the handles and sashes within + * the space occupied by their combination; later, just add those offsets + * blindly (avoiding the extra showHandle, etc, checks). */ sashOffset = handleOffset = pwPtr->sashPad; @@ -2119,9 +2143,9 @@ ComputeGeometry(pwPtr) slavePtr->y = y; /* - * Make sure the pane's paned dimension is at least minsize. - * This check may be redundant, since the only way to change a pane's - * size is by moving a sash, and that code checks the minsize. + * Make sure the pane's paned dimension is at least minsize. This + * check may be redundant, since the only way to change a pane's size + * is by moving a sash, and that code checks the minsize. */ if (horizontal) { @@ -2141,15 +2165,15 @@ ComputeGeometry(pwPtr) if (horizontal) { x += slavePtr->paneWidth + (2 * slavePtr->padx); - slavePtr->sashx = x + sashOffset; - slavePtr->sashy = y; + slavePtr->sashx = x + sashOffset; + slavePtr->sashy = y; slavePtr->handlex = x + handleOffset; slavePtr->handley = y + pwPtr->handlePad; x += sashWidth; } else { y += slavePtr->paneHeight + (2 * slavePtr->pady); - slavePtr->sashx = x; - slavePtr->sashy = y + sashOffset; + slavePtr->sashx = x; + slavePtr->sashy = y + sashOffset; slavePtr->handlex = x + pwPtr->handlePad; slavePtr->handley = y + handleOffset; y += sashWidth; @@ -2161,7 +2185,6 @@ ComputeGeometry(pwPtr) */ if (horizontal) { - /* * If the slave has an explicit height set, use that; otherwise, * use the slave's requested height. @@ -2178,10 +2201,9 @@ ComputeGeometry(pwPtr) reqHeight = dim; } } else { - /* - * If the slave has an explicit width set use that; otherwise, - * use the slave's requested width. + * If the slave has an explicit width set use that; otherwise, use + * the slave's requested width. */ if (slavePtr->width > 0) { @@ -2198,21 +2220,21 @@ ComputeGeometry(pwPtr) } /* - * The loop above should have left x (or y) equal to the sum of the - * widths (or heights) of the widgets, plus the size of one sash and - * the sash padding for each widget, plus the width of the left (or top) - * border of the paned window. + * The loop above should have left x (or y) equal to the sum of the widths + * (or heights) of the widgets, plus the size of one sash and the sash + * padding for each widget, plus the width of the left (or top) border of + * the paned window. * * The requested width (or height) is therefore x (or y) minus the size of - * one sash and padding, plus the width of the right (or bottom) border - * of the paned window. + * one sash and padding, plus the width of the right (or bottom) border of + * the paned window. * - * The height (or width) is equal to the maximum height (or width) of - * the slaves, plus the width of the border of the top and bottom (or left - * and right) of the paned window. + * The height (or width) is equal to the maximum height (or width) of the + * slaves, plus the width of the border of the top and bottom (or left and + * right) of the paned window. * - * If the panedwindow has an explicit width/height set use that; otherwise, - * use the requested width/height. + * If the panedwindow has an explicit width/height set use that; + * otherwise, use the requested width/height. */ if (horizontal) { @@ -2238,8 +2260,8 @@ ComputeGeometry(pwPtr) * * DestroyOptionTables -- * - * This procedure is registered as an exit callback when the paned window - * command is first called. It cleans up the OptionTables structure + * This function is registered as an exit callback when the paned window + * command is first called. It cleans up the OptionTables structure * allocated by that command. * * Results: @@ -2252,9 +2274,9 @@ ComputeGeometry(pwPtr) */ static void -DestroyOptionTables(clientData, interp) - ClientData clientData; /* Pointer to the OptionTables struct */ - Tcl_Interp *interp; /* Pointer to the calling interp */ +DestroyOptionTables( + ClientData clientData, /* Pointer to the OptionTables struct */ + Tcl_Interp *interp) /* Pointer to the calling interp */ { ckfree((char *)clientData); return; @@ -2265,8 +2287,8 @@ DestroyOptionTables(clientData, interp) * * GetSticky - * - * Converts an internal boolean combination of "sticky" bits into a - * a Tcl string obj containing zero or mor of n, s, e, or w. + * Converts an internal boolean combination of "sticky" bits into a Tcl + * string obj containing zero or more of n, s, e, or w. * * Results: * Tcl_Obj containing the string representation of the sticky value. @@ -2278,11 +2300,11 @@ DestroyOptionTables(clientData, interp) */ static Tcl_Obj * -GetSticky(clientData, tkwin, recordPtr, internalOffset) - ClientData clientData; - Tk_Window tkwin; - char *recordPtr; /* Pointer to widget record. */ - int internalOffset; /* Offset within *recordPtr containing the +GetSticky( + ClientData clientData, + Tk_Window tkwin, + char *recordPtr, /* Pointer to widget record. */ + int internalOffset) /* Offset within *recordPtr containing the * sticky value. */ { int sticky = *(int *)(recordPtr + internalOffset); @@ -2311,34 +2333,33 @@ GetSticky(clientData, tkwin, recordPtr, internalOffset) * * SetSticky -- * - * Converts a Tcl_Obj representing a widgets stickyness into an - * integer value. + * Converts a Tcl_Obj representing a widgets stickyness into an integer + * value. * * Results: * Standard Tcl result. * * Side effects: - * May store the integer value into the internal representation - * pointer. May change the pointer to the Tcl_Obj to NULL to indicate - * that the specified string was empty and that is acceptable. + * May store the integer value into the internal representation pointer. + * May change the pointer to the Tcl_Obj to NULL to indicate that the + * specified string was empty and that is acceptable. * *---------------------------------------------------------------------- */ static int -SetSticky(clientData, interp, tkwin, value, recordPtr, internalOffset, - oldInternalPtr, flags) - ClientData clientData; - Tcl_Interp *interp; /* Current interp; may be used for errors. */ - Tk_Window tkwin; /* Window for which option is being set. */ - Tcl_Obj **value; /* Pointer to the pointer to the value object. - * We use a pointer to the pointer because - * we may need to return a value (NULL). */ - char *recordPtr; /* Pointer to storage for the widget record. */ - int internalOffset; /* Offset within *recordPtr at which the - internal value is to be stored. */ - char *oldInternalPtr; /* Pointer to storage for the old value. */ - int flags; /* Flags for the option, set Tk_SetOptions. */ +SetSticky( + ClientData clientData, + Tcl_Interp *interp, /* Current interp; may be used for errors. */ + Tk_Window tkwin, /* Window for which option is being set. */ + Tcl_Obj **value, /* Pointer to the pointer to the value object. + * We use a pointer to the pointer because we + * may need to return a value (NULL). */ + char *recordPtr, /* Pointer to storage for the widget record. */ + int internalOffset, /* Offset within *recordPtr at which the + * internal value is to be stored. */ + char *oldInternalPtr, /* Pointer to storage for the old value. */ + int flags) /* Flags for the option, set Tk_SetOptions. */ { int sticky = 0; char c, *string, *internalPtr; @@ -2374,8 +2395,7 @@ SetSticky(clientData, interp, tkwin, value, recordPtr, internalOffset, Tcl_ResetResult(interp); Tcl_AppendResult(interp, "bad stickyness value \"", Tcl_GetString(*value), "\": must be a string ", - "containing zero or more of n, e, s, and w", - (char *)NULL); + "containing zero or more of n, e, s, and w", NULL); return TCL_ERROR; } } @@ -2405,11 +2425,11 @@ SetSticky(clientData, interp, tkwin, value, recordPtr, internalOffset, */ static void -RestoreSticky(clientData, tkwin, internalPtr, oldInternalPtr) - ClientData clientData; - Tk_Window tkwin; - char *internalPtr; /* Pointer to storage for value. */ - char *oldInternalPtr; /* Pointer to old value. */ +RestoreSticky( + ClientData clientData, + Tk_Window tkwin, + char *internalPtr, /* Pointer to storage for value. */ + char *oldInternalPtr) /* Pointer to old value. */ { *(int *)internalPtr = *(int *)oldInternalPtr; } @@ -2419,14 +2439,13 @@ RestoreSticky(clientData, tkwin, internalPtr, oldInternalPtr) * * AdjustForSticky -- * - * Given the x,y coords of the top-left corner of a pane, the - * dimensions of that pane, and the dimensions of a slave, compute - * the x,y coords and actual dimensions of the slave based on the slave's - * sticky value. + * Given the x,y coords of the top-left corner of a pane, the dimensions + * of that pane, and the dimensions of a slave, compute the x,y coords + * and actual dimensions of the slave based on the slave's sticky value. * * Results: - * No direct return; sets the x, y, slaveWidth and slaveHeight to - * correct values. + * No direct return; sets the x, y, slaveWidth and slaveHeight to correct + * values. * * Side effects: * None. @@ -2435,17 +2454,16 @@ RestoreSticky(clientData, tkwin, internalPtr, oldInternalPtr) */ static void -AdjustForSticky(sticky, cavityWidth, cavityHeight, xPtr, yPtr, - slaveWidthPtr, slaveHeightPtr) - int sticky; /* Sticky value; see top of file for +AdjustForSticky( + int sticky, /* Sticky value; see top of file for * definition. */ - int cavityWidth; /* Width of the cavity. */ - int cavityHeight; /* Height of the cavity. */ - int *xPtr, *yPtr; /* Initially, coordinates of the top-left + int cavityWidth, /* Width of the cavity. */ + int cavityHeight, /* Height of the cavity. */ + int *xPtr, int *yPtr, /* Initially, coordinates of the top-left * corner of cavity; also return values for * actual x, y coords of slave. */ - int *slaveWidthPtr; /* Slave width. */ - int *slaveHeightPtr; /* Slave height. */ + int *slaveWidthPtr, /* Slave width. */ + int *slaveHeightPtr) /* Slave height. */ { int diffx = 0; /* Cavity width - slave width. */ int diffy = 0; /* Cavity hight - slave height. */ @@ -2489,10 +2507,10 @@ AdjustForSticky(sticky, cavityWidth, cavityHeight, xPtr, yPtr, */ static void -MoveSash(pwPtr, sash, diff) - PanedWindow *pwPtr; - int sash; - int diff; +MoveSash( + PanedWindow *pwPtr, + int sash, + int diff) { int i; int expandPane, reduceFirst, reduceLast, reduceIncr, slaveSize, sashOffset; @@ -2529,12 +2547,12 @@ MoveSash(pwPtr, sash, diff) } /* - * There must be a next sash since it is only possible to enter - * this routine when moving an actual sash which implies there - * exists a visible pane to either side of the sash. + * There must be a next sash since it is only possible to enter this + * routine when moving an actual sash which implies there exists a visible + * pane to either side of the sash. */ - while (nextSash < (pwPtr->numSlaves - 1) && pwPtr->slaves[nextSash]->hide) { + while (nextSash < pwPtr->numSlaves-1 && pwPtr->slaves[nextSash]->hide) { nextSash++; } @@ -2556,8 +2574,8 @@ MoveSash(pwPtr, sash, diff) } /* - * Calculate how much room we have to stretch in - * and adjust diff value accordingly. + * Calculate how much room we have to stretch in and adjust diff value + * accordingly. */ for (i = reduceFirst; i != reduceLast; i += reduceIncr) { @@ -2623,23 +2641,23 @@ MoveSash(pwPtr, sash, diff) * * ProxyWindowEventProc -- * - * This procedure is invoked by the Tk dispatcher for various - * events on paned window proxy windows. + * This function is invoked by the Tk dispatcher for various events on + * paned window proxy windows. * * Results: * None. * * Side effects: - * When the window gets deleted, internal structures get - * cleaned up. When it gets exposed, it is redisplayed. + * When the window gets deleted, internal structures get cleaned up. Whena + * it gets exposed, it is redisplayed. * *-------------------------------------------------------------- */ static void -ProxyWindowEventProc(clientData, eventPtr) - ClientData clientData; /* Information about window. */ - XEvent *eventPtr; /* Information about event. */ +ProxyWindowEventProc( + ClientData clientData, /* Information about window. */ + XEvent *eventPtr) /* Information about event. */ { PanedWindow *pwPtr = (PanedWindow *) clientData; @@ -2656,9 +2674,9 @@ ProxyWindowEventProc(clientData, eventPtr) * * DisplayProxyWindow -- * - * This procedure redraws a paned window proxy window. - * It is invoked as a do-when-idle handler, so it only runs - * when there's nothing else for the application to do. + * This function redraws a paned window proxy window. It is invoked as a + * do-when-idle handler, so it only runs when there's nothing else for + * the application to do. * * Results: * None. @@ -2670,8 +2688,8 @@ ProxyWindowEventProc(clientData, eventPtr) */ static void -DisplayProxyWindow(clientData) - ClientData clientData; /* Information about window. */ +DisplayProxyWindow( + ClientData clientData) /* Information about window. */ { PanedWindow *pwPtr = (PanedWindow *) clientData; Pixmap pixmap; @@ -2691,15 +2709,16 @@ DisplayProxyWindow(clientData) /* * Redraw the widget's background and border. */ + Tk_Fill3DRectangle(tkwin, pixmap, pwPtr->background, 0, 0, Tk_Width(tkwin), Tk_Height(tkwin), 2, pwPtr->sashRelief); /* * Copy the pixmap to the display. */ - XCopyArea(Tk_Display(tkwin), pixmap, Tk_WindowId(tkwin), pwPtr->gc, - 0, 0, (unsigned) Tk_Width(tkwin), (unsigned) Tk_Height(tkwin), - 0, 0); + + XCopyArea(Tk_Display(tkwin), pixmap, Tk_WindowId(tkwin), pwPtr->gc, 0, 0, + (unsigned) Tk_Width(tkwin), (unsigned) Tk_Height(tkwin), 0, 0); Tk_FreePixmap(Tk_Display(tkwin), pixmap); } @@ -2708,8 +2727,8 @@ DisplayProxyWindow(clientData) * * PanedWindowProxyCommand -- * - * Handles the panedwindow proxy subcommand. See the user - * documentation for details. + * Handles the panedwindow proxy subcommand. See the user documentation + * for details. * * Results: * Standard Tcl result. @@ -2721,14 +2740,14 @@ DisplayProxyWindow(clientData) */ static int -PanedWindowProxyCommand(pwPtr, interp, objc, objv) - PanedWindow *pwPtr; /* Pointer to paned window information. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +PanedWindowProxyCommand( + PanedWindow *pwPtr, /* Pointer to paned window information. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { static CONST char *optionStrings[] = { - "coord", "forget", "place", (char *) NULL + "coord", "forget", "place", NULL }; enum options { PROXY_COORD, PROXY_FORGET, PROXY_PLACE @@ -2809,21 +2828,22 @@ PanedWindowProxyCommand(pwPtr, interp, objc, objv) pwPtr->proxyy = y; /* - * Make sure the proxy window is higher in the stacking order - * than the slaves, so that it will be visible when drawn. - * It would be more correct to push the proxy window just high - * enough to appear above the highest slave, but it's much easier - * to just force it all the way to the top of the stacking order. + * Make sure the proxy window is higher in the stacking order than the + * slaves, so that it will be visible when drawn. It would be more + * correct to push the proxy window just high enough to appear above + * the highest slave, but it's much easier to just force it all the + * way to the top of the stacking order. */ Tk_RestackWindow(pwPtr->proxywin, Above, NULL); /* - * Let Tk_MaintainGeometry take care of placing the window at - * the right coordinates. + * Let Tk_MaintainGeometry take care of placing the window at the + * right coordinates. */ - Tk_MaintainGeometry(pwPtr->proxywin, pwPtr->tkwin, - x, y, sashWidth, sashHeight); + + Tk_MaintainGeometry(pwPtr->proxywin, pwPtr->tkwin, x, y, + sashWidth, sashHeight); break; } @@ -2835,12 +2855,11 @@ PanedWindowProxyCommand(pwPtr, interp, objc, objv) * * ObjectIsEmpty -- * - * This procedure tests whether the string value of an object is - * empty. + * This function tests whether the string value of an object is empty. * * Results: - * The return value is 1 if the string value of objPtr has length - * zero, and 0 otherwise. + * The return value is 1 if the string value of objPtr has length zero, + * and 0 otherwise. * * Side effects: * May cause object shimmering, since this function can force a @@ -2850,8 +2869,8 @@ PanedWindowProxyCommand(pwPtr, interp, objc, objv) */ static int -ObjectIsEmpty(objPtr) - Tcl_Obj *objPtr; /* Object to test. May be NULL. */ +ObjectIsEmpty( + Tcl_Obj *objPtr) /* Object to test. May be NULL. */ { int length; @@ -2874,8 +2893,8 @@ ObjectIsEmpty(objPtr) * within that record, compute the address of that slot. * * Results: - * If offset is non-negative, returns the computed address; else, - * returns NULL. + * If offset is non-negative, returns the computed address; else, returns + * NULL. * * Side effects: * None. @@ -2884,9 +2903,9 @@ ObjectIsEmpty(objPtr) */ static char * -ComputeSlotAddress(recordPtr, offset) - char *recordPtr; /* Pointer to the start of a record. */ - int offset; /* Offset of a slot within that record; may be < 0. */ +ComputeSlotAddress( + char *recordPtr, /* Pointer to the start of a record. */ + int offset) /* Offset of a slot within that record; may be < 0. */ { if (offset >= 0) { return recordPtr + offset; @@ -2900,25 +2919,25 @@ ComputeSlotAddress(recordPtr, offset) * * PanedWindowIdentifyCoords -- * - * Given a pair of x,y coordinates, identify the panedwindow component - * at that point, if any. + * Given a pair of x,y coordinates, identify the panedwindow component at + * that point, if any. * * Results: * Standard Tcl result. * * Side effects: - * Modifies the interpreter's result to contain either an empty list, - * or a two element list of the form {sash n} or {handle n} to indicate - * that the point lies within the n'th sash or handle. + * Modifies the interpreter's result to contain either an empty list, or + * a two element list of the form {sash n} or {handle n} to indicate that + * the point lies within the n'th sash or handle. * *---------------------------------------------------------------------- */ static int -PanedWindowIdentifyCoords(pwPtr, interp, x, y) - PanedWindow *pwPtr; /* Information about the widget. */ - Tcl_Interp *interp; /* Interpreter in which to store result. */ - int x, y; /* Coordinates of the point to identify. */ +PanedWindowIdentifyCoords( + PanedWindow *pwPtr, /* Information about the widget. */ + Tcl_Interp *interp, /* Interpreter in which to store result. */ + int x, int y) /* Coordinates of the point to identify. */ { Tcl_Obj *list; int i, sashHeight, sashWidth, thisx, thisy; @@ -2934,8 +2953,8 @@ PanedWindowIdentifyCoords(pwPtr, interp, x, y) sashHeight -= 2 * Tk_InternalBorderWidth(pwPtr->tkwin); if (pwPtr->showHandle && pwPtr->handleSize > pwPtr->sashWidth) { sashWidth = pwPtr->handleSize; - lpad = (pwPtr->handleSize - pwPtr->sashWidth) / 2; - rpad = pwPtr->handleSize - lpad; + lpad = (pwPtr->handleSize - pwPtr->sashWidth) / 2; + rpad = pwPtr->handleSize - lpad; lpad += pwPtr->sashPad; rpad += pwPtr->sashPad; } else { @@ -2946,8 +2965,8 @@ PanedWindowIdentifyCoords(pwPtr, interp, x, y) } else { if (pwPtr->showHandle && pwPtr->handleSize > pwPtr->sashWidth) { sashHeight = pwPtr->handleSize; - tpad = (pwPtr->handleSize - pwPtr->sashWidth) / 2; - bpad = pwPtr->handleSize - tpad; + tpad = (pwPtr->handleSize - pwPtr->sashWidth) / 2; + bpad = pwPtr->handleSize - tpad; tpad += pwPtr->sashPad; bpad += pwPtr->sashPad; } else { @@ -2979,6 +2998,7 @@ PanedWindowIdentifyCoords(pwPtr, interp, x, y) /* * Determine if the point is over the handle or the sash. */ + if (pwPtr->showHandle) { thisx = pwPtr->slaves[i]->handlex; thisy = pwPtr->slaves[i]->handley; @@ -2999,17 +3019,21 @@ PanedWindowIdentifyCoords(pwPtr, interp, x, y) /* * Set results. */ + if (found != -1) { Tcl_ListObjAppendElement(interp, list, Tcl_NewIntObj(found)); - if (isHandle) { - Tcl_ListObjAppendElement(interp, list, - Tcl_NewStringObj("handle", -1)); - } else { - Tcl_ListObjAppendElement(interp, list, - Tcl_NewStringObj("sash", -1)); - } + Tcl_ListObjAppendElement(interp, list, Tcl_NewStringObj( + (isHandle ? "handle" : "sash"), -1)); } Tcl_SetObjResult(interp, list); return TCL_OK; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkPlace.c b/generic/tkPlace.c index bdd0a7d..5024344 100644 --- a/generic/tkPlace.c +++ b/generic/tkPlace.c @@ -1,65 +1,64 @@ -/* +/* * tkPlace.c -- * - * This file contains code to implement a simple geometry manager - * for Tk based on absolute placement or "rubber-sheet" placement. + * This file contains code to implement a simple geometry manager for Tk + * based on absolute placement or "rubber-sheet" placement. * * Copyright (c) 1992-1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPlace.c,v 1.16 2004/09/16 18:01:20 pspjuth Exp $ + * RCS: @(#) $Id: tkPlace.c,v 1.17 2005/11/15 15:18:22 dkf Exp $ */ #include "tkPort.h" #include "tkInt.h" - /* * Border modes for relative placement: * - * BM_INSIDE: relative distances computed using area inside - * all borders of master window. - * BM_OUTSIDE: relative distances computed using outside area - * that includes all borders of master. - * BM_IGNORE: border issues are ignored: place relative to - * master's actual window size. + * BM_INSIDE: relative distances computed using area inside all + * borders of master window. + * BM_OUTSIDE: relative distances computed using outside area that + * includes all borders of master. + * BM_IGNORE: border issues are ignored: place relative to master's + * actual window size. */ static char *borderModeStrings[] = { - "inside", "outside", "ignore", (char *) NULL + "inside", "outside", "ignore", NULL }; typedef enum {BM_INSIDE, BM_OUTSIDE, BM_IGNORE} BorderMode; /* - * For each window whose geometry is managed by the placer there is - * a structure of the following type: + * For each window whose geometry is managed by the placer there is a + * structure of the following type: */ typedef struct Slave { Tk_Window tkwin; /* Tk's token for window. */ Tk_Window inTkwin; /* Token for the -in window. */ - struct Master *masterPtr; /* Pointer to information for window - * relative to which tkwin is placed. - * This isn't necessarily the logical - * parent of tkwin. NULL means the - * master was deleted or never assigned. */ - struct Slave *nextPtr; /* Next in list of windows placed relative - * to same master (NULL for end of list). */ + struct Master *masterPtr; /* Pointer to information for window relative + * to which tkwin is placed. This isn't + * necessarily the logical parent of tkwin. + * NULL means the master was deleted or never + * assigned. */ + struct Slave *nextPtr; /* Next in list of windows placed relative to + * same master (NULL for end of list). */ Tk_OptionTable optionTable; /* Table that defines configuration options * available for this command. */ /* - * Geometry information for window; where there are both relative - * and absolute values for the same attribute (e.g. x and relX) only - * one of them is actually used, depending on flags. + * Geometry information for window; where there are both relative and + * absolute values for the same attribute (e.g. x and relX) only one of + * them is actually used, depending on flags. */ int x, y; /* X and Y pixel coordinates for tkwin. */ - Tcl_Obj *xPtr, *yPtr; /* Tcl_Obj rep's of x, y coords, to keep - * pixel spec. information */ + Tcl_Obj *xPtr, *yPtr; /* Tcl_Obj rep's of x, y coords, to keep pixel + * spec. information */ double relX, relY; /* X and Y coordinates relative to size of * master. */ int width, height; /* Absolute dimensions for tkwin. */ @@ -69,16 +68,17 @@ typedef struct Slave { * master. */ Tcl_Obj *relWidthPtr; Tcl_Obj *relHeightPtr; - Tk_Anchor anchor; /* Which point on tkwin is placed at the - * given position. */ + Tk_Anchor anchor; /* Which point on tkwin is placed at the given + * position. */ BorderMode borderMode; /* How to treat borders of master window. */ - int flags; /* Various flags; see below for bit + int flags; /* Various flags; see below for bit * definitions. */ } Slave; /* * Type masks for options: */ + #define IN_MASK 1 static Tk_OptionSpec optionSpecs[] = { @@ -106,10 +106,9 @@ static Tk_OptionSpec optionSpecs[] = { Tk_Offset(Slave, x), TK_OPTION_NULL_OK, 0, 0}, {TK_OPTION_PIXELS, "-y", NULL, NULL, "0", Tk_Offset(Slave, yPtr), Tk_Offset(Slave, y), TK_OPTION_NULL_OK, 0, 0}, - {TK_OPTION_END, (char *) NULL, (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, 0, 0} + {TK_OPTION_END, NULL, NULL, NULL, NULL, 0, -1, 0, 0, 0} }; - + /* * Flag definitions for Slave structures: * @@ -125,35 +124,34 @@ static Tk_OptionSpec optionSpecs[] = { #define CHILD_REL_HEIGHT 8 /* - * For each master window that has a slave managed by the placer there - * is a structure of the following form: + * For each master window that has a slave managed by the placer there is a + * structure of the following form: */ typedef struct Master { Tk_Window tkwin; /* Tk's token for master window. */ - struct Slave *slavePtr; /* First in linked list of slaves - * placed relative to this master. */ + struct Slave *slavePtr; /* First in linked list of slaves placed + * relative to this master. */ int flags; /* See below for bit definitions. */ } Master; /* * Flag definitions for masters: * - * PARENT_RECONFIG_PENDING - 1 means that a call to RecomputePlacement - * is already pending via a Do_When_Idle handler. + * PARENT_RECONFIG_PENDING - 1 means that a call to RecomputePlacement is + * already pending via a Do_When_Idle handler. */ #define PARENT_RECONFIG_PENDING 1 /* - * The following structure is the official type record for the - * placer: + * The following structure is the official type record for the placer: */ -static void PlaceRequestProc _ANSI_ARGS_((ClientData clientData, - Tk_Window tkwin)); -static void PlaceLostSlaveProc _ANSI_ARGS_((ClientData clientData, - Tk_Window tkwin)); +static void PlaceRequestProc(ClientData clientData, + Tk_Window tkwin); +static void PlaceLostSlaveProc(ClientData clientData, + Tk_Window tkwin); static Tk_GeomMgr placerType = { "place", /* name */ @@ -162,35 +160,32 @@ static Tk_GeomMgr placerType = { }; /* - * Forward declarations for procedures defined later in this file: + * Forward declarations for functions defined later in this file: */ -static void SlaveStructureProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static int ConfigureSlave _ANSI_ARGS_((Tcl_Interp *interp, - Tk_Window tkwin, Tk_OptionTable table, - int objc, Tcl_Obj *CONST objv[])); -static int PlaceInfoCommand _ANSI_ARGS_((Tcl_Interp *interp, - Tk_Window tkwin)); -static Slave * CreateSlave _ANSI_ARGS_((Tk_Window tkwin, - Tk_OptionTable table)); -static void FreeSlave _ANSI_ARGS_((Slave *slavePtr)); -static Slave * FindSlave _ANSI_ARGS_((Tk_Window tkwin)); -static Master * CreateMaster _ANSI_ARGS_((Tk_Window tkwin)); -static Master * FindMaster _ANSI_ARGS_((Tk_Window tkwin)); -static void MasterStructureProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static void RecomputePlacement _ANSI_ARGS_((ClientData clientData)); -static void UnlinkSlave _ANSI_ARGS_((Slave *slavePtr)); +static void SlaveStructureProc(ClientData clientData, + XEvent *eventPtr); +static int ConfigureSlave(Tcl_Interp *interp, Tk_Window tkwin, + Tk_OptionTable table, int objc, + Tcl_Obj *CONST objv[]); +static int PlaceInfoCommand(Tcl_Interp *interp, Tk_Window tkwin); +static Slave * CreateSlave(Tk_Window tkwin, Tk_OptionTable table); +static void FreeSlave(Slave *slavePtr); +static Slave * FindSlave(Tk_Window tkwin); +static Master * CreateMaster(Tk_Window tkwin); +static Master * FindMaster(Tk_Window tkwin); +static void MasterStructureProc(ClientData clientData, + XEvent *eventPtr); +static void RecomputePlacement(ClientData clientData); +static void UnlinkSlave(Slave *slavePtr); /* *-------------------------------------------------------------- * * Tk_PlaceObjCmd -- * - * This procedure is invoked to process the "place" Tcl - * commands. See the user documentation for details on - * what it does. + * This function is invoked to process the "place" Tcl commands. See the + * user documentation for details on what it does. * * Results: * A standard Tcl result. @@ -202,11 +197,11 @@ static void UnlinkSlave _ANSI_ARGS_((Slave *slavePtr)); */ int -Tk_PlaceObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* NULL. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj *CONST objv[]; /* Argument objects. */ +Tk_PlaceObjCmd( + ClientData clientData, /* NULL. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Tk_Window tkwin; Slave *slavePtr; @@ -214,20 +209,19 @@ Tk_PlaceObjCmd(clientData, interp, objc, objv) TkDisplay *dispPtr; Tk_OptionTable optionTable; static CONST char *optionStrings[] = { - "configure", "forget", "info", "slaves", (char *) NULL + "configure", "forget", "info", "slaves", NULL }; enum options { PLACE_CONFIGURE, PLACE_FORGET, PLACE_INFO, PLACE_SLAVES }; int index; - - + if (objc < 3) { Tcl_WrongNumArgs(interp, 1, objv, "option|pathName args"); return TCL_ERROR; } /* - * Create the option table for this widget class. If it has already - * been created, the cached pointer will be returned. + * Create the option table for this widget class. If it has already been + * created, the cached pointer will be returned. */ optionTable = Tk_CreateOptionTable(interp, optionSpecs); @@ -258,8 +252,8 @@ Tk_PlaceObjCmd(clientData, interp, objc, objv) } /* - * Handle more general case of option followed by window name followed - * by possible additional arguments. + * Handle more general case of option followed by window name followed by + * possible additional arguments. */ tkwin = Tk_NameToWindow(interp, Tcl_GetString(objv[2]), @@ -285,81 +279,74 @@ Tk_PlaceObjCmd(clientData, interp, objc, objv) } switch ((enum options) index) { - case PLACE_CONFIGURE: { + case PLACE_CONFIGURE: + if (objc == 3 || objc == 4) { Tcl_Obj *objPtr; - if (objc == 3 || objc == 4) { - slavePtr = FindSlave(tkwin); - if (slavePtr == NULL) { - return TCL_OK; - } - objPtr = Tk_GetOptionInfo(interp, (char *) slavePtr, - optionTable, - (objc == 4) ? objv[3] : (Tcl_Obj *) NULL, tkwin); - if (objPtr == NULL) { - return TCL_ERROR; - } else { - Tcl_SetObjResult(interp, objPtr); - return TCL_OK; - } - } else { - return ConfigureSlave(interp, tkwin, optionTable, objc-3, - objv+3); - } - } - - case PLACE_FORGET: { - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "pathName"); - return TCL_ERROR; - } + slavePtr = FindSlave(tkwin); if (slavePtr == NULL) { return TCL_OK; } - if ((slavePtr->masterPtr != NULL) && - (slavePtr->masterPtr->tkwin != - Tk_Parent(slavePtr->tkwin))) { - Tk_UnmaintainGeometry(slavePtr->tkwin, - slavePtr->masterPtr->tkwin); - } - UnlinkSlave(slavePtr); - Tcl_DeleteHashEntry(Tcl_FindHashEntry(&dispPtr->slaveTable, - (char *) tkwin)); - Tk_DeleteEventHandler(tkwin, StructureNotifyMask, - SlaveStructureProc, (ClientData) slavePtr); - Tk_ManageGeometry(tkwin, (Tk_GeomMgr *) NULL, (ClientData) NULL); - Tk_UnmapWindow(tkwin); - FreeSlave(slavePtr); - break; - } - - case PLACE_INFO: { - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "pathName"); + objPtr = Tk_GetOptionInfo(interp, (char *) slavePtr, optionTable, + (objc == 4) ? objv[3] : NULL, tkwin); + if (objPtr == NULL) { return TCL_ERROR; } - return PlaceInfoCommand(interp, tkwin); + Tcl_SetObjResult(interp, objPtr); + return TCL_OK; } + return ConfigureSlave(interp, tkwin, optionTable, objc-3, objv+3); - case PLACE_SLAVES: { - Master *masterPtr; - Tcl_Obj *listPtr; - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "pathName"); - return TCL_ERROR; - } - masterPtr = FindMaster(tkwin); - if (masterPtr != NULL) { - listPtr = Tcl_NewObj(); - for (slavePtr = masterPtr->slavePtr; slavePtr != NULL; - slavePtr = slavePtr->nextPtr) { - Tcl_ListObjAppendElement(interp, listPtr, - Tcl_NewStringObj(Tk_PathName(slavePtr->tkwin),-1)); - } - Tcl_SetObjResult(interp, listPtr); + case PLACE_FORGET: + if (objc != 3) { + Tcl_WrongNumArgs(interp, 2, objv, "pathName"); + return TCL_ERROR; + } + slavePtr = FindSlave(tkwin); + if (slavePtr == NULL) { + return TCL_OK; + } + if ((slavePtr->masterPtr != NULL) && + (slavePtr->masterPtr->tkwin != Tk_Parent(slavePtr->tkwin))) { + Tk_UnmaintainGeometry(slavePtr->tkwin, slavePtr->masterPtr->tkwin); + } + UnlinkSlave(slavePtr); + Tcl_DeleteHashEntry(Tcl_FindHashEntry(&dispPtr->slaveTable, + (char *) tkwin)); + Tk_DeleteEventHandler(tkwin, StructureNotifyMask, SlaveStructureProc, + (ClientData) slavePtr); + Tk_ManageGeometry(tkwin, NULL, (ClientData) NULL); + Tk_UnmapWindow(tkwin); + FreeSlave(slavePtr); + break; + + case PLACE_INFO: + if (objc != 3) { + Tcl_WrongNumArgs(interp, 2, objv, "pathName"); + return TCL_ERROR; + } + return PlaceInfoCommand(interp, tkwin); + + case PLACE_SLAVES: { + Master *masterPtr; + + if (objc != 3) { + Tcl_WrongNumArgs(interp, 2, objv, "pathName"); + return TCL_ERROR; + } + masterPtr = FindMaster(tkwin); + if (masterPtr != NULL) { + Tcl_Obj *listPtr = Tcl_NewObj(); + + for (slavePtr = masterPtr->slavePtr; slavePtr != NULL; + slavePtr = slavePtr->nextPtr) { + Tcl_ListObjAppendElement(interp, listPtr, + Tcl_NewStringObj(Tk_PathName(slavePtr->tkwin),-1)); } - break; + Tcl_SetObjResult(interp, listPtr); } + break; + } } return TCL_OK; @@ -370,8 +357,8 @@ Tk_PlaceObjCmd(clientData, interp, objc, objv) * * CreateSlave -- * - * Given a Tk_Window token, find the Slave structure corresponding - * to that token, creating a new one if necessary. + * Given a Tk_Window token, find the Slave structure corresponding to + * that token, creating a new one if necessary. * * Results: * Pointer to the Slave structure. @@ -383,24 +370,24 @@ Tk_PlaceObjCmd(clientData, interp, objc, objv) */ static Slave * -CreateSlave(tkwin, table) - Tk_Window tkwin; /* Token for desired slave. */ - Tk_OptionTable table; +CreateSlave( + Tk_Window tkwin, /* Token for desired slave. */ + Tk_OptionTable table) { Tcl_HashEntry *hPtr; register Slave *slavePtr; int new; - TkDisplay * dispPtr = ((TkWindow *) tkwin)->dispPtr; + TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; hPtr = Tcl_CreateHashEntry(&dispPtr->slaveTable, (char *) tkwin, &new); if (new) { slavePtr = (Slave *) ckalloc(sizeof(Slave)); memset(slavePtr, 0, sizeof(Slave)); - slavePtr->tkwin = tkwin; - slavePtr->inTkwin = None; - slavePtr->anchor = TK_ANCHOR_NW; - slavePtr->borderMode = BM_INSIDE; - slavePtr->optionTable = table; + slavePtr->tkwin = tkwin; + slavePtr->inTkwin = None; + slavePtr->anchor = TK_ANCHOR_NW; + slavePtr->borderMode = BM_INSIDE; + slavePtr->optionTable = table; Tcl_SetHashValue(hPtr, slavePtr); Tk_CreateEventHandler(tkwin, StructureNotifyMask, SlaveStructureProc, (ClientData) slavePtr); @@ -409,7 +396,6 @@ CreateSlave(tkwin, table) } return slavePtr; } - /* *---------------------------------------------------------------------- @@ -428,22 +414,22 @@ CreateSlave(tkwin, table) */ static void -FreeSlave(Slave *slavePtr) +FreeSlave( + Slave *slavePtr) { Tk_FreeConfigOptions((char *) slavePtr, slavePtr->optionTable, slavePtr->tkwin); ckfree((char *) slavePtr); } - /* *---------------------------------------------------------------------- * * FindSlave -- * - * Given a Tk_Window token, find the Slave structure corresponding - * to that token. This is purely a lookup function; it will not - * create a record if one does not yet exist. + * Given a Tk_Window token, find the Slave structure corresponding to + * that token. This is purely a lookup function; it will not create a + * record if one does not yet exist. * * Results: * Pointer to Slave structure; NULL if none exists. @@ -455,8 +441,8 @@ FreeSlave(Slave *slavePtr) */ static Slave * -FindSlave(tkwin) - Tk_Window tkwin; /* Token for desired slave. */ +FindSlave( + Tk_Window tkwin) /* Token for desired slave. */ { Tcl_HashEntry *hPtr; register Slave *slavePtr; @@ -475,8 +461,8 @@ FindSlave(tkwin) * * UnlinkSlave -- * - * This procedure removes a slave window from the chain of slaves - * in its master. + * This function removes a slave window from the chain of slaves in its + * master. * * Results: * None. @@ -488,8 +474,8 @@ FindSlave(tkwin) */ static void -UnlinkSlave(slavePtr) - Slave *slavePtr; /* Slave structure to be unlinked. */ +UnlinkSlave( + Slave *slavePtr) /* Slave structure to be unlinked. */ { register Master *masterPtr; register Slave *prevPtr; @@ -501,8 +487,7 @@ UnlinkSlave(slavePtr) if (masterPtr->slavePtr == slavePtr) { masterPtr->slavePtr = slavePtr->nextPtr; } else { - for (prevPtr = masterPtr->slavePtr; ; - prevPtr = prevPtr->nextPtr) { + for (prevPtr = masterPtr->slavePtr; ; prevPtr = prevPtr->nextPtr) { if (prevPtr == NULL) { Tcl_Panic("UnlinkSlave couldn't find slave to unlink"); } @@ -520,8 +505,8 @@ UnlinkSlave(slavePtr) * * CreateMaster -- * - * Given a Tk_Window token, find the Master structure corresponding - * to that token, creating a new one if necessary. + * Given a Tk_Window token, find the Master structure corresponding to + * that token, creating a new one if necessary. * * Results: * Pointer to the Master structure. @@ -533,8 +518,8 @@ UnlinkSlave(slavePtr) */ static Master * -CreateMaster(tkwin) - Tk_Window tkwin; /* Token for desired master. */ +CreateMaster( + Tk_Window tkwin) /* Token for desired master. */ { Tcl_HashEntry *hPtr; register Master *masterPtr; @@ -544,9 +529,9 @@ CreateMaster(tkwin) hPtr = Tcl_CreateHashEntry(&dispPtr->masterTable, (char *) tkwin, &new); if (new) { masterPtr = (Master *) ckalloc(sizeof(Master)); - masterPtr->tkwin = tkwin; - masterPtr->slavePtr = NULL; - masterPtr->flags = 0; + masterPtr->tkwin = tkwin; + masterPtr->slavePtr = NULL; + masterPtr->flags = 0; Tcl_SetHashValue(hPtr, masterPtr); Tk_CreateEventHandler(masterPtr->tkwin, StructureNotifyMask, MasterStructureProc, (ClientData) masterPtr); @@ -561,13 +546,13 @@ CreateMaster(tkwin) * * FindMaster -- * - * Given a Tk_Window token, find the Master structure corresponding - * to that token. This is simply a lookup procedure; a new record - * will not be created if one does not already exist. + * Given a Tk_Window token, find the Master structure corresponding to + * that token. This is simply a lookup function; a new record will not be + * created if one does not already exist. * * Results: - * Pointer to the Master structure; NULL if one does not exist for - * the given Tk_Window token. + * Pointer to the Master structure; NULL if one does not exist for the + * given Tk_Window token. * * Side effects: * None. @@ -576,8 +561,8 @@ CreateMaster(tkwin) */ static Master * -FindMaster(tkwin) - Tk_Window tkwin; /* Token for desired master. */ +FindMaster( + Tk_Window tkwin) /* Token for desired master. */ { Tcl_HashEntry *hPtr; register Master *masterPtr; @@ -596,27 +581,27 @@ FindMaster(tkwin) * * ConfigureSlave -- * - * This procedure is called to process an argv/argc list to - * reconfigure the placement of a window. + * This function is called to process an argv/argc list to reconfigure + * the placement of a window. * * Results: - * A standard Tcl result. If an error occurs then a message is - * left in the interp's result. + * A standard Tcl result. If an error occurs then a message is left in + * the interp's result. * * Side effects: - * Information in slavePtr may change, and slavePtr's master is - * scheduled for reconfiguration. + * Information in slavePtr may change, and slavePtr's master is scheduled + * for reconfiguration. * *---------------------------------------------------------------------- */ static int -ConfigureSlave(interp, tkwin, table, objc, objv) - Tcl_Interp *interp; /* Used for error reporting. */ - Tk_Window tkwin; /* Token for the window to manipulate. */ - Tk_OptionTable table; /* Token for option table. */ - int objc; /* Number of config arguments. */ - Tcl_Obj *CONST objv[]; /* Object values for arguments. */ +ConfigureSlave( + Tcl_Interp *interp, /* Used for error reporting. */ + Tk_Window tkwin, /* Token for the window to manipulate. */ + Tk_OptionTable table, /* Token for option table. */ + int objc, /* Number of config arguments. */ + Tcl_Obj *CONST objv[]) /* Object values for arguments. */ { register Master *masterPtr; Tk_SavedOptions savedOptions; @@ -626,8 +611,7 @@ ConfigureSlave(interp, tkwin, table, objc, objv) if (Tk_TopWinHierarchy(tkwin)) { Tcl_AppendResult(interp, "can't use placer on top-level window \"", - Tk_PathName(tkwin), "\"; use wm command instead", - (char *) NULL); + Tk_PathName(tkwin), "\"; use wm command instead", NULL); return TCL_ERROR; } @@ -639,7 +623,7 @@ ConfigureSlave(interp, tkwin, table, objc, objv) } /* - * Set slave flags. First clear the field, then add bits as needed. + * Set slave flags. First clear the field, then add bits as needed. */ slavePtr->flags = 0; @@ -661,8 +645,8 @@ ConfigureSlave(interp, tkwin, table, objc, objv) if (((mask & IN_MASK) == 0) && (slavePtr->masterPtr != NULL)) { /* - * If no -in option was passed and the slave is already placed - * then just recompute the placement. + * If no -in option was passed and the slave is already placed then + * just recompute the placement. */ masterPtr = slavePtr->masterPtr; @@ -675,9 +659,9 @@ ConfigureSlave(interp, tkwin, table, objc, objv) tkwin = slavePtr->inTkwin; /* - * Make sure that the new master is either the logical parent - * of the slave or a descendant of that window, and that the - * master and slave aren't the same. + * Make sure that the new master is either the logical parent of the + * slave or a descendant of that window, and that the master and slave + * aren't the same. */ for (ancestor = tkwin; ; ancestor = Tk_Parent(ancestor)) { @@ -687,33 +671,31 @@ ConfigureSlave(interp, tkwin, table, objc, objv) if (Tk_TopWinHierarchy(ancestor)) { Tcl_AppendResult(interp, "can't place ", Tk_PathName(slavePtr->tkwin), " relative to ", - Tk_PathName(tkwin), (char *) NULL); + Tk_PathName(tkwin), NULL); goto error; } } if (slavePtr->tkwin == tkwin) { Tcl_AppendResult(interp, "can't place ", Tk_PathName(slavePtr->tkwin), " relative to itself", - (char *) NULL); + NULL); goto error; } if ((slavePtr->masterPtr != NULL) && (slavePtr->masterPtr->tkwin == tkwin)) { /* - * Re-using same old master. Nothing to do. + * Re-using same old master. Nothing to do. */ + masterPtr = slavePtr->masterPtr; goto scheduleLayout; - } else { - if ((slavePtr->masterPtr != NULL) - && (slavePtr->masterPtr->tkwin - != Tk_Parent(slavePtr->tkwin))) { - Tk_UnmaintainGeometry(slavePtr->tkwin, - slavePtr->masterPtr->tkwin); - } - UnlinkSlave(slavePtr); - masterWin = tkwin; } + if ((slavePtr->masterPtr != NULL) && + (slavePtr->masterPtr->tkwin != Tk_Parent(slavePtr->tkwin))) { + Tk_UnmaintainGeometry(slavePtr->tkwin, slavePtr->masterPtr->tkwin); + } + UnlinkSlave(slavePtr); + masterWin = tkwin; } /* @@ -736,11 +718,10 @@ ConfigureSlave(interp, tkwin, table, objc, objv) Tk_ManageGeometry(slavePtr->tkwin, &placerType, (ClientData) slavePtr); /* - * Arrange for the master to be re-arranged at the first - * idle moment. + * Arrange for the master to be re-arranged at the first idle moment. */ - scheduleLayout: + scheduleLayout: Tk_FreeSavedOptions(&savedOptions); if (!(masterPtr->flags & PARENT_RECONFIG_PENDING)) { @@ -753,7 +734,7 @@ ConfigureSlave(interp, tkwin, table, objc, objv) * Error while processing some option, cleanup and return. */ - error: + error: Tk_RestoreSavedOptions(&savedOptions); return TCL_ERROR; } @@ -763,27 +744,27 @@ ConfigureSlave(interp, tkwin, table, objc, objv) * * PlaceInfoCommand -- * - * Implementation of the [place info] subcommand. See the user + * Implementation of the [place info] subcommand. See the user * documentation for information on what it does. * * Results: * Standard Tcl result. * * Side effects: - * If the given tkwin is managed by the placer, this function will - * put information about that placement in the interp's result. + * If the given tkwin is managed by the placer, this function will put + * information about that placement in the interp's result. * *---------------------------------------------------------------------- */ static int -PlaceInfoCommand(interp, tkwin) - Tcl_Interp *interp; /* Interp into which to place result. */ - Tk_Window tkwin; /* Token for the window to get info on. */ +PlaceInfoCommand( + Tcl_Interp *interp, /* Interp into which to place result. */ + Tk_Window tkwin) /* Token for the window to get info on. */ { char buffer[32 + TCL_INTEGER_SPACE]; Slave *slavePtr; - + slavePtr = FindSlave(tkwin); if (slavePtr == NULL) { return TCL_OK; @@ -793,38 +774,38 @@ PlaceInfoCommand(interp, tkwin) Tcl_AppendElement(interp, Tk_PathName(slavePtr->masterPtr->tkwin)); } sprintf(buffer, " -x %d", slavePtr->x); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); sprintf(buffer, " -relx %.4g", slavePtr->relX); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); sprintf(buffer, " -y %d", slavePtr->y); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); sprintf(buffer, " -rely %.4g", slavePtr->relY); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); if (slavePtr->flags & CHILD_WIDTH) { sprintf(buffer, " -width %d", slavePtr->width); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); } else { - Tcl_AppendResult(interp, " -width {}", (char *) NULL); + Tcl_AppendResult(interp, " -width {}", NULL); } if (slavePtr->flags & CHILD_REL_WIDTH) { sprintf(buffer, " -relwidth %.4g", slavePtr->relWidth); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); } else { - Tcl_AppendResult(interp, " -relwidth {}", (char *) NULL); + Tcl_AppendResult(interp, " -relwidth {}", NULL); } if (slavePtr->flags & CHILD_HEIGHT) { sprintf(buffer, " -height %d", slavePtr->height); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); } else { - Tcl_AppendResult(interp, " -height {}", (char *) NULL); + Tcl_AppendResult(interp, " -height {}", NULL); } if (slavePtr->flags & CHILD_REL_HEIGHT) { sprintf(buffer, " -relheight %.4g", slavePtr->relHeight); - Tcl_AppendResult(interp, buffer, (char *) NULL); + Tcl_AppendResult(interp, buffer, NULL); } else { - Tcl_AppendResult(interp, " -relheight {}", (char *) NULL); + Tcl_AppendResult(interp, " -relheight {}", NULL); } - + Tcl_AppendElement(interp, "-anchor"); Tcl_AppendElement(interp, Tk_NameOfAnchor(slavePtr->anchor)); Tcl_AppendElement(interp, "-bordermode"); @@ -837,8 +818,8 @@ PlaceInfoCommand(interp, tkwin) * * RecomputePlacement -- * - * This procedure is called as a when-idle handler. It recomputes - * the geometries of all the slaves of a given master. + * This function is called as a when-idle handler. It recomputes the + * geometries of all the slaves of a given master. * * Results: * None. @@ -850,8 +831,8 @@ PlaceInfoCommand(interp, tkwin) */ static void -RecomputePlacement(clientData) - ClientData clientData; /* Pointer to Master record. */ +RecomputePlacement( + ClientData clientData) /* Pointer to Master record. */ { register Master *masterPtr = (Master *) clientData; register Slave *slavePtr; @@ -862,15 +843,15 @@ RecomputePlacement(clientData) masterPtr->flags &= ~PARENT_RECONFIG_PENDING; /* - * Iterate over all the slaves for the master. Each slave's - * geometry can be computed independently of the other slaves. + * Iterate over all the slaves for the master. Each slave's geometry can + * be computed independently of the other slaves. */ for (slavePtr = masterPtr->slavePtr; slavePtr != NULL; slavePtr = slavePtr->nextPtr) { /* - * Step 1: compute size and borderwidth of master, taking into - * account desired border mode. + * Step 1: compute size and borderwidth of master, taking into account + * desired border mode. */ masterX = masterY = 0; @@ -889,8 +870,8 @@ RecomputePlacement(clientData) } /* - * Step 2: compute size of slave (outside dimensions including - * border) and location of anchor point within master. + * Step 2: compute size of slave (outside dimensions including border) + * and location of anchor point within master. */ x1 = slavePtr->x + masterX + (slavePtr->relX*masterWidth); @@ -904,11 +885,11 @@ RecomputePlacement(clientData) } if (slavePtr->flags & CHILD_REL_WIDTH) { /* - * The code below is a bit tricky. In order to round - * correctly when both relX and relWidth are specified, - * compute the location of the right edge and round that, - * then compute width. If we compute the width and round - * it, rounding errors in relX and relWidth accumulate. + * The code below is a bit tricky. In order to round correctly + * when both relX and relWidth are specified, compute the + * location of the right edge and round that, then compute + * width. If we compute the width and round it, rounding + * errors in relX and relWidth accumulate. */ x2 = x1 + (slavePtr->relWidth*masterWidth); @@ -925,7 +906,7 @@ RecomputePlacement(clientData) height += slavePtr->height; } if (slavePtr->flags & CHILD_REL_HEIGHT) { - /* + /* * See note above for rounding errors in width computation. */ @@ -939,47 +920,47 @@ RecomputePlacement(clientData) } /* - * Step 3: adjust the x and y positions so that the desired - * anchor point on the slave appears at that position. Also - * adjust for the border mode and master's border. + * Step 3: adjust the x and y positions so that the desired anchor + * point on the slave appears at that position. Also adjust for the + * border mode and master's border. */ switch (slavePtr->anchor) { - case TK_ANCHOR_N: - x -= width/2; - break; - case TK_ANCHOR_NE: - x -= width; - break; - case TK_ANCHOR_E: - x -= width; - y -= height/2; - break; - case TK_ANCHOR_SE: - x -= width; - y -= height; - break; - case TK_ANCHOR_S: - x -= width/2; - y -= height; - break; - case TK_ANCHOR_SW: - y -= height; - break; - case TK_ANCHOR_W: - y -= height/2; - break; - case TK_ANCHOR_NW: - break; - case TK_ANCHOR_CENTER: - x -= width/2; - y -= height/2; - break; + case TK_ANCHOR_N: + x -= width/2; + break; + case TK_ANCHOR_NE: + x -= width; + break; + case TK_ANCHOR_E: + x -= width; + y -= height/2; + break; + case TK_ANCHOR_SE: + x -= width; + y -= height; + break; + case TK_ANCHOR_S: + x -= width/2; + y -= height; + break; + case TK_ANCHOR_SW: + y -= height; + break; + case TK_ANCHOR_W: + y -= height/2; + break; + case TK_ANCHOR_NW: + break; + case TK_ANCHOR_CENTER: + x -= width/2; + y -= height/2; + break; } /* * Step 4: adjust width and height again to reflect inside dimensions - * of window rather than outside. Also make sure that the width and + * of window rather than outside. Also make sure that the width and * height aren't zero. */ @@ -993,11 +974,10 @@ RecomputePlacement(clientData) } /* - * Step 5: reconfigure the window and map it if needed. If the - * slave is a child of the master, we do this ourselves. If the - * slave isn't a child of the master, let Tk_MaintainGeometry do - * the work (it will re-adjust things as relevant windows map, - * unmap, and move). + * Step 5: reconfigure the window and map it if needed. If the slave + * is a child of the master, we do this ourselves. If the slave isn't + * a child of the master, let Tk_MaintainGeometry do the work (it will + * re-adjust things as relevant windows map, unmap, and move). */ if (masterPtr->tkwin == Tk_Parent(slavePtr->tkwin)) { @@ -1009,8 +989,8 @@ RecomputePlacement(clientData) } /* - * Don't map the slave unless the master is mapped: the slave - * will get mapped later, when the master is mapped. + * Don't map the slave unless the master is mapped: the slave will + * get mapped later, when the master is mapped. */ if (Tk_IsMapped(masterPtr->tkwin)) { @@ -1033,24 +1013,24 @@ RecomputePlacement(clientData) * * MasterStructureProc -- * - * This procedure is invoked by the Tk event handler when - * StructureNotify events occur for a master window. + * This function is invoked by the Tk event handler when StructureNotify + * events occur for a master window. * * Results: * None. * * Side effects: - * Structures get cleaned up if the window was deleted. If the - * window was resized then slave geometries get recomputed. + * Structures get cleaned up if the window was deleted. If the window was + * resized then slave geometries get recomputed. * *---------------------------------------------------------------------- */ static void -MasterStructureProc(clientData, eventPtr) - ClientData clientData; /* Pointer to Master structure for window +MasterStructureProc( + ClientData clientData, /* Pointer to Master structure for window * referred to by eventPtr. */ - XEvent *eventPtr; /* Describes what just happened. */ + XEvent *eventPtr) /* Describes what just happened. */ { register Master *masterPtr = (Master *) clientData; register Slave *slavePtr, *nextPtr; @@ -1078,8 +1058,8 @@ MasterStructureProc(clientData, eventPtr) ckfree((char *) masterPtr); } else if (eventPtr->type == MapNotify) { /* - * When a master gets mapped, must redo the geometry computation - * so that all of its slaves get remapped. + * When a master gets mapped, must redo the geometry computation so + * that all of its slaves get remapped. */ if ((masterPtr->slavePtr != NULL) @@ -1089,8 +1069,8 @@ MasterStructureProc(clientData, eventPtr) } } else if (eventPtr->type == UnmapNotify) { /* - * Unmap all of the slaves when the master gets unmapped, - * so that they don't keep redisplaying themselves. + * Unmap all of the slaves when the master gets unmapped, so that they + * don't keep redisplaying themselves. */ for (slavePtr = masterPtr->slavePtr; slavePtr != NULL; @@ -1105,8 +1085,8 @@ MasterStructureProc(clientData, eventPtr) * * SlaveStructureProc -- * - * This procedure is invoked by the Tk event handler when - * StructureNotify events occur for a slave window. + * This function is invoked by the Tk event handler when StructureNotify + * events occur for a slave window. * * Results: * None. @@ -1118,10 +1098,10 @@ MasterStructureProc(clientData, eventPtr) */ static void -SlaveStructureProc(clientData, eventPtr) - ClientData clientData; /* Pointer to Slave structure for window +SlaveStructureProc( + ClientData clientData, /* Pointer to Slave structure for window * referred to by eventPtr. */ - XEvent *eventPtr; /* Describes what just happened. */ + XEvent *eventPtr) /* Describes what just happened. */ { register Slave *slavePtr = (Slave *) clientData; TkDisplay * dispPtr = ((TkWindow *) slavePtr->tkwin)->dispPtr; @@ -1141,25 +1121,24 @@ SlaveStructureProc(clientData, eventPtr) * * PlaceRequestProc -- * - * This procedure is invoked by Tk whenever a slave managed by us - * changes its requested geometry. + * This function is invoked by Tk whenever a slave managed by us changes + * its requested geometry. * * Results: * None. * * Side effects: - * The window will get relayed out, if its requested size has - * anything to do with its actual size. + * The window will get relayed out, if its requested size has anything to + * do with its actual size. * *---------------------------------------------------------------------- */ /* ARGSUSED */ static void -PlaceRequestProc(clientData, tkwin) - ClientData clientData; /* Pointer to our record for slave. */ - Tk_Window tkwin; /* Window that changed its desired - * size. */ +PlaceRequestProc( + ClientData clientData, /* Pointer to our record for slave. */ + Tk_Window tkwin) /* Window that changed its desired size. */ { Slave *slavePtr = (Slave *) clientData; Master *masterPtr; @@ -1183,8 +1162,8 @@ PlaceRequestProc(clientData, tkwin) * * PlaceLostSlaveProc -- * - * This procedure is invoked by Tk whenever some other geometry - * claims control over a slave that used to be managed by us. + * This function is invoked by Tk whenever some other geometry claims + * control over a slave that used to be managed by us. * * Results: * None. @@ -1197,10 +1176,10 @@ PlaceRequestProc(clientData, tkwin) /* ARGSUSED */ static void -PlaceLostSlaveProc(clientData, tkwin) - ClientData clientData; /* Slave structure for slave window that - * was stolen away. */ - Tk_Window tkwin; /* Tk's handle for the slave window. */ +PlaceLostSlaveProc( + ClientData clientData, /* Slave structure for slave window that was + * stolen away. */ + Tk_Window tkwin) /* Tk's handle for the slave window. */ { register Slave *slavePtr = (Slave *) clientData; TkDisplay * dispPtr = ((TkWindow *) slavePtr->tkwin)->dispPtr; @@ -1210,9 +1189,17 @@ PlaceLostSlaveProc(clientData, tkwin) } Tk_UnmapWindow(tkwin); UnlinkSlave(slavePtr); - Tcl_DeleteHashEntry(Tcl_FindHashEntry(&dispPtr->slaveTable, + Tcl_DeleteHashEntry(Tcl_FindHashEntry(&dispPtr->slaveTable, (char *) tkwin)); Tk_DeleteEventHandler(tkwin, StructureNotifyMask, SlaveStructureProc, (ClientData) slavePtr); FreeSlave(slavePtr); } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkPointer.c b/generic/tkPointer.c index 917020f..3b38cbe 100644 --- a/generic/tkPointer.c +++ b/generic/tkPointer.c @@ -1,17 +1,17 @@ -/* +/* * tkPointer.c -- * - * This file contains functions for emulating the X server - * pointer and grab state machine. This file is used by the - * Mac and Windows platforms to generate appropriate enter/leave - * events, and to update the global grab window information. + * This file contains functions for emulating the X server pointer and + * grab state machine. This file is used by the Mac and Windows platforms + * to generate appropriate enter/leave events, and to update the global + * grab window information. * * Copyright (c) 1996 by Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkPointer.c,v 1.9 2004/03/17 18:15:43 das Exp $ + * RCS: @(#) $Id: tkPointer.c,v 1.10 2005/11/15 15:18:22 dkf Exp $ */ #include "tkInt.h" @@ -26,8 +26,8 @@ #endif /* - * Mask that selects any of the state bits corresponding to buttons, - * plus masks that select individual buttons' bits: + * Mask that selects any of the state bits corresponding to buttons, plus + * masks that select individual buttons' bits: */ #define ALL_BUTTONS \ @@ -38,15 +38,15 @@ static unsigned int buttonMasks[] = { #define ButtonMask(b) (buttonMasks[(b)-Button1]) typedef struct ThreadSpecificData { - TkWindow *grabWinPtr; /* Window that defines the top of the - * grab tree in a global grab. */ - int lastState; /* Last known state flags. */ - XPoint lastPos; /* Last reported mouse position. */ - TkWindow *lastWinPtr; /* Last reported mouse window. */ - TkWindow *restrictWinPtr; /* Window to which all mouse events - * will be reported. */ - TkWindow *cursorWinPtr; /* Window that is currently - * controlling the global cursor. */ + TkWindow *grabWinPtr; /* Window that defines the top of the grab + * tree in a global grab. */ + int lastState; /* Last known state flags. */ + XPoint lastPos; /* Last reported mouse position. */ + TkWindow *lastWinPtr; /* Last reported mouse window. */ + TkWindow *restrictWinPtr; /* Window to which all mouse events will be + * reported. */ + TkWindow *cursorWinPtr; /* Window that is currently controlling the + * global cursor. */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; @@ -54,12 +54,11 @@ static Tcl_ThreadDataKey dataKey; * Forward declarations of procedures used in this file. */ -static int GenerateEnterLeave _ANSI_ARGS_((TkWindow *winPtr, - int x, int y, int state)); -static void InitializeEvent _ANSI_ARGS_((XEvent* eventPtr, - TkWindow *winPtr, int type, int x, int y, - int state, int detail)); -static void UpdateCursor _ANSI_ARGS_((TkWindow *winPtr)); +static int GenerateEnterLeave(TkWindow *winPtr, int x, int y, + int state); +static void InitializeEvent(XEvent* eventPtr, TkWindow *winPtr, + int type, int x, int y, int state, int detail); +static void UpdateCursor(TkWindow *winPtr); /* *---------------------------------------------------------------------- @@ -78,13 +77,13 @@ static void UpdateCursor _ANSI_ARGS_((TkWindow *winPtr)); */ static void -InitializeEvent(eventPtr, winPtr, type, x, y, state, detail) - XEvent* eventPtr; /* Event structure to initialize. */ - TkWindow *winPtr; /* Window to make event relative to. */ - int type; /* Message type. */ - int x, y; /* Root coords of event. */ - int state; /* State flags. */ - int detail; /* Detail value. */ +InitializeEvent( + XEvent *eventPtr, /* Event structure to initialize. */ + TkWindow *winPtr, /* Window to make event relative to. */ + int type, /* Message type. */ + int x, int y, /* Root coords of event. */ + int state, /* State flags. */ + int detail) /* Detail value. */ { eventPtr->type = type; eventPtr->xany.serial = LastKnownRequestProcessed(winPtr->display); @@ -97,22 +96,22 @@ InitializeEvent(eventPtr, winPtr, type, x, y, state, detail) eventPtr->xcrossing.y_root = y; switch (type) { - case EnterNotify: - case LeaveNotify: - eventPtr->xcrossing.mode = NotifyNormal; - eventPtr->xcrossing.state = state; - eventPtr->xcrossing.detail = detail; - eventPtr->xcrossing.focus = False; - break; - case MotionNotify: - eventPtr->xmotion.state = state; - eventPtr->xmotion.is_hint = detail; - break; - case ButtonPress: - case ButtonRelease: - eventPtr->xbutton.state = state; - eventPtr->xbutton.button = detail; - break; + case EnterNotify: + case LeaveNotify: + eventPtr->xcrossing.mode = NotifyNormal; + eventPtr->xcrossing.state = state; + eventPtr->xcrossing.detail = detail; + eventPtr->xcrossing.focus = False; + break; + case MotionNotify: + eventPtr->xmotion.state = state; + eventPtr->xmotion.is_hint = detail; + break; + case ButtonPress: + case ButtonRelease: + eventPtr->xbutton.state = state; + eventPtr->xbutton.button = detail; + break; } TkChangeEventWindow(eventPtr, winPtr); } @@ -122,8 +121,8 @@ InitializeEvent(eventPtr, winPtr, type, x, y, state, detail) * * GenerateEnterLeave -- * - * Update the current mouse window and position, and generate - * any enter/leave events that are needed. + * Update the current mouse window and position, and generate any + * enter/leave events that are needed. * * Results: * Returns 1 if enter/leave events were generated. @@ -135,14 +134,14 @@ InitializeEvent(eventPtr, winPtr, type, x, y, state, detail) */ static int -GenerateEnterLeave(winPtr, x, y, state) - TkWindow *winPtr; /* Current Tk window (or NULL). */ - int x,y; /* Current mouse position in root coords. */ - int state; /* State flags. */ +GenerateEnterLeave( + TkWindow *winPtr, /* Current Tk window (or NULL). */ + int x, int y, /* Current mouse position in root coords. */ + int state) /* State flags. */ { int crossed = 0; /* 1 if mouse crossed a window boundary */ - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); TkWindow *restrictWinPtr = tsdPtr->restrictWinPtr; TkWindow *lastWinPtr = tsdPtr->lastWinPtr; @@ -154,8 +153,8 @@ GenerateEnterLeave(winPtr, x, y, state) oldPos = TkPositionInTree(lastWinPtr, restrictWinPtr); /* - * Check if the mouse crossed into or out of the restrict - * window. If so, we need to generate an Enter or Leave event. + * Check if the mouse crossed into or out of the restrict window. + * If so, we need to generate an Enter or Leave event. */ if ((newPos != oldPos) && ((newPos == TK_GRAB_IN_TREE) @@ -215,8 +214,8 @@ GenerateEnterLeave(winPtr, x, y, state) * * Tk_UpdatePointer -- * - * This function updates the pointer state machine given an - * the current window, position and modifier state. + * This function updates the pointer state machine given an the current + * window, position and modifier state. * * Results: * None. @@ -228,14 +227,14 @@ GenerateEnterLeave(winPtr, x, y, state) */ void -Tk_UpdatePointer(tkwin, x, y, state) - Tk_Window tkwin; /* Window to which pointer event - * is reported. May be NULL. */ - int x, y; /* Pointer location in root coords. */ - int state; /* Modifier state mask. */ +Tk_UpdatePointer( + Tk_Window tkwin, /* Window to which pointer event is reported. + * May be NULL. */ + int x, int y, /* Pointer location in root coords. */ + int state) /* Modifier state mask. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); TkWindow *winPtr = (TkWindow *)tkwin; TkWindow *targetWinPtr; XPoint pos; @@ -247,15 +246,15 @@ Tk_UpdatePointer(tkwin, x, y, state) pos.y = y; /* - * Use the current keyboard state, but the old mouse button - * state since we haven't generated the button events yet. + * Use the current keyboard state, but the old mouse button state since we + * haven't generated the button events yet. */ tsdPtr->lastState = (state & ~ALL_BUTTONS) | (tsdPtr->lastState & ALL_BUTTONS); /* - * Generate Enter/Leave events. If the pointer has crossed window + * Generate Enter/Leave events. If the pointer has crossed window * boundaries, update the current mouse position so we don't generate * redundant motion events. */ @@ -272,17 +271,16 @@ Tk_UpdatePointer(tkwin, x, y, state) for (b = Button1; b <= Button3; b++) { mask = ButtonMask(b); if (changes & mask) { - if (state & mask) { + if (state & mask) { type = ButtonPress; - /* + /* * ButtonPress - Set restrict window if we aren't grabbed, or * if this is the first button down. */ if (!tsdPtr->restrictWinPtr) { if (!tsdPtr->grabWinPtr) { - /* * Mouse is not grabbed, so set a button grab. */ @@ -291,10 +289,9 @@ Tk_UpdatePointer(tkwin, x, y, state) TkpSetCapture(tsdPtr->restrictWinPtr); } else if ((tsdPtr->lastState & ALL_BUTTONS) == 0) { - /* - * Mouse is in a non-button grab, so ensure - * the button grab is inside the grab tree. + * Mouse is in a non-button grab, so ensure the button + * grab is inside the grab tree. */ if (TkPositionInTree(winPtr, tsdPtr->grabWinPtr) @@ -310,7 +307,7 @@ Tk_UpdatePointer(tkwin, x, y, state) } else { type = ButtonRelease; - /* + /* * ButtonRelease - Release the mouse capture and clear the * restrict window when the last button is released and we * aren't in a global grab. @@ -323,9 +320,9 @@ Tk_UpdatePointer(tkwin, x, y, state) } /* - * If we are releasing a restrict window, then we need - * to send the button event followed by mouse motion from - * the restrict window to the current mouse position. + * If we are releasing a restrict window, then we need to send + * the button event followed by mouse motion from the restrict + * window to the current mouse position. */ if (tsdPtr->restrictWinPtr) { @@ -339,14 +336,14 @@ Tk_UpdatePointer(tkwin, x, y, state) GenerateEnterLeave(winPtr, x, y, tsdPtr->lastState); tsdPtr->lastPos = pos; continue; - } + } } /* - * If a restrict window is set, make sure the pointer event - * is reported relative to that window. Otherwise, if a - * global grab is in effect then events outside of windows - * managed by Tk should be reported to the grab window. + * If a restrict window is set, make sure the pointer event is + * reported relative to that window. Otherwise, if a global grab + * is in effect then events outside of windows managed by Tk + * should be reported to the grab window. */ if (tsdPtr->restrictWinPtr) { @@ -372,7 +369,7 @@ Tk_UpdatePointer(tkwin, x, y, state) */ tsdPtr->lastState = (type == ButtonPress) - ? (tsdPtr->lastState | mask) : (tsdPtr->lastState & ~mask); + ? (tsdPtr->lastState | mask) : (tsdPtr->lastState & ~mask); tsdPtr->lastPos = pos; } } @@ -392,8 +389,8 @@ Tk_UpdatePointer(tkwin, x, y, state) UpdateCursor(targetWinPtr); /* - * If no other events caused the position to be updated, - * generate a motion event. + * If no other events caused the position to be updated, generate a motion + * event. */ if (tsdPtr->lastPos.x != pos.x || tsdPtr->lastPos.y != pos.y) { @@ -417,42 +414,41 @@ Tk_UpdatePointer(tkwin, x, y, state) * * XGrabPointer -- * - * Capture the mouse so event are reported outside of toplevels. - * Note that this is a very limited implementation that only - * supports GrabModeAsync and owner_events True. + * Capture the mouse so event are reported outside of toplevels. Note + * that this is a very limited implementation that only supports + * GrabModeAsync and owner_events True. * * Results: * Always returns GrabSuccess. * * Side effects: - * Turns on mouse capture, sets the global grab pointer, and - * clears any window restrictions. + * Turns on mouse capture, sets the global grab pointer, and clears any + * window restrictions. * *---------------------------------------------------------------------- */ int -XGrabPointer(display, grab_window, owner_events, event_mask, pointer_mode, - keyboard_mode, confine_to, cursor, time) - Display* display; - Window grab_window; - Bool owner_events; - unsigned int event_mask; - int pointer_mode; - int keyboard_mode; - Window confine_to; - Cursor cursor; - Time time; +XGrabPointer( + Display *display, + Window grab_window, + Bool owner_events, + unsigned int event_mask, + int pointer_mode, + int keyboard_mode, + Window confine_to, + Cursor cursor, + Time time) { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); display->request++; tsdPtr->grabWinPtr = (TkWindow *) Tk_IdToWindow(display, grab_window); tsdPtr->restrictWinPtr = NULL; TkpSetCapture(tsdPtr->grabWinPtr); - if (TkPositionInTree(tsdPtr->lastWinPtr, tsdPtr->grabWinPtr) - != TK_GRAB_IN_TREE) { + if (TkPositionInTree(tsdPtr->lastWinPtr, tsdPtr->grabWinPtr) + != TK_GRAB_IN_TREE) { UpdateCursor(tsdPtr->grabWinPtr); } return GrabSuccess; @@ -475,12 +471,12 @@ XGrabPointer(display, grab_window, owner_events, event_mask, pointer_mode, */ void -XUngrabPointer(display, time) - Display* display; - Time time; +XUngrabPointer( + Display *display, + Time time) { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); display->request++; tsdPtr->grabWinPtr = NULL; @@ -506,11 +502,11 @@ XUngrabPointer(display, time) */ void -TkPointerDeadWindow(winPtr) - TkWindow *winPtr; +TkPointerDeadWindow( + TkWindow *winPtr) { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (winPtr == tsdPtr->lastWinPtr) { tsdPtr->lastWinPtr = NULL; @@ -531,8 +527,8 @@ TkPointerDeadWindow(winPtr) * * UpdateCursor -- * - * Set the windows global cursor to the cursor associated with - * the given Tk window. + * Set the windows global cursor to the cursor associated with the given + * Tk window. * * Results: * None. @@ -544,17 +540,16 @@ TkPointerDeadWindow(winPtr) */ static void -UpdateCursor(winPtr) - TkWindow *winPtr; +UpdateCursor( + TkWindow *winPtr) { Cursor cursor = None; - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); /* - * A window inherits its cursor from its parent if it doesn't - * have one of its own. Top level windows inherit the default - * cursor. + * A window inherits its cursor from its parent if it doesn't have one of + * its own. Top level windows inherit the default cursor. */ tsdPtr->cursorWinPtr = winPtr; @@ -575,10 +570,9 @@ UpdateCursor(winPtr) * * XDefineCursor -- * - * This function is called to update the cursor on a window. - * Since the mouse might be in the specified window, we need to - * check the specified window against the current mouse position - * and grab state. + * This function is called to update the cursor on a window. Since the + * mouse might be in the specified window, we need to check the specified + * window against the current mouse position and grab state. * * Results: * None. @@ -590,14 +584,14 @@ UpdateCursor(winPtr) */ void -XDefineCursor(display, w, cursor) - Display* display; - Window w; - Cursor cursor; +XDefineCursor( + Display *display, + Window w, + Cursor cursor) { TkWindow *winPtr = (TkWindow *)Tk_IdToWindow(display, w); - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); if (tsdPtr->cursorWinPtr == winPtr) { UpdateCursor(winPtr); @@ -610,10 +604,10 @@ XDefineCursor(display, w, cursor) * * TkGenerateActivateEvents -- * - * This function is called by the Mac and Windows window manager - * routines when a toplevel window is activated or deactivated. - * Activate/Deactivate events will be sent to every subwindow of - * the toplevel followed by a FocusIn/FocusOut message. + * This function is called by the Mac and Windows window manager routines + * when a toplevel window is activated or deactivated. + * Activate/Deactivate events will be sent to every subwindow of the + * toplevel followed by a FocusIn/FocusOut message. * * Results: * None. @@ -625,16 +619,16 @@ XDefineCursor(display, w, cursor) */ void -TkGenerateActivateEvents(winPtr, active) - TkWindow *winPtr; /* Toplevel to activate. */ - int active; /* Non-zero if the window is being - * activated, else 0.*/ +TkGenerateActivateEvents( + TkWindow *winPtr, /* Toplevel to activate. */ + int active) /* Non-zero if the window is being activated, + * else 0.*/ { XEvent event; - - /* - * Generate Activate and Deactivate events. This event - * is sent to every subwindow in a toplevel window. + + /* + * Generate Activate and Deactivate events. This event is sent to every + * subwindow in a toplevel window. */ event.xany.serial = winPtr->display->request++; @@ -644,5 +638,12 @@ TkGenerateActivateEvents(winPtr, active) event.xany.type = active ? ActivateNotify : DeactivateNotify; TkQueueEventForAllChildren(winPtr, &event); - } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkScale.h b/generic/tkScale.h index 723a40b..200ac08 100644 --- a/generic/tkScale.h +++ b/generic/tkScale.h @@ -1,16 +1,16 @@ /* * tkScale.h -- * - * Declarations of types and functions used to implement - * the scale widget. + * Declarations of types and functions used to implement the scale + * widget. * * Copyright (c) 1996 by Sun Microsystems, Inc. * Copyright (c) 1999-2000 by Scriptics Corporation. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkScale.h,v 1.8 2000/04/14 08:33:16 hobbs Exp $ + * RCS: @(#) $Id: tkScale.h,v 1.9 2005/11/15 15:18:22 dkf Exp $ */ #ifndef _TKSCALE @@ -42,16 +42,16 @@ enum state { }; /* - * A data structure of the following type is kept for each scale - * widget managed by this file: + * A data structure of the following type is kept for each scale widget + * managed by this file: */ typedef struct TkScale { - Tk_Window tkwin; /* Window that embodies the scale. NULL - * means that the window has been destroyed - * but the data structures haven't yet been - * cleaned up.*/ - Display *display; /* Display containing widget. Used, among + Tk_Window tkwin; /* Window that embodies the scale. NULL means + * that the window has been destroyed but the + * data structures haven't yet been cleaned + * up.*/ + Display *display; /* Display containing widget. Used, among * other things, so that resources can be * freed even after tkwin has gone away. */ Tcl_Interp *interp; /* Interpreter associated with scale. */ @@ -60,42 +60,41 @@ typedef struct TkScale { * available for this widget. */ enum orient orient; /* Orientation for window (vertical or * horizontal). */ - int width; /* Desired narrow dimension of scale, - * in pixels. */ - int length; /* Desired long dimension of scale, - * in pixels. */ + int width; /* Desired narrow dimension of scale, in + * pixels. */ + int length; /* Desired long dimension of scale, in + * pixels. */ double value; /* Current value of scale. */ - Tcl_Obj *varNamePtr; /* Name of variable or NULL. - * If non-NULL, scale's value tracks - * the contents of this variable and - * vice versa. */ + Tcl_Obj *varNamePtr; /* Name of variable or NULL. If non-NULL, + * scale's value tracks the contents of this + * variable and vice versa. */ double fromValue; /* Value corresponding to left or top of * scale. */ - double toValue; /* Value corresponding to right or bottom - * of scale. */ - double tickInterval; /* Distance between tick marks; - * 0 means don't display any tick marks. */ - double resolution; /* If > 0, all values are rounded to an - * even multiple of this value. */ - int digits; /* Number of significant digits to print - * in values. 0 means we get to choose the - * number based on resolution and/or the - * range of the scale. */ + double toValue; /* Value corresponding to right or bottom of + * scale. */ + double tickInterval; /* Distance between tick marks; 0 means don't + * display any tick marks. */ + double resolution; /* If > 0, all values are rounded to an even + * multiple of this value. */ + int digits; /* Number of significant digits to print in + * values. 0 means we get to choose the number + * based on resolution and/or the range of the + * scale. */ char format[10]; /* Sprintf conversion specifier computed from * digits and other information. */ - double bigIncrement; /* Amount to use for large increments to - * scale value. (0 means we pick a value). */ + double bigIncrement; /* Amount to use for large increments to scale + * value. (0 means we pick a value). */ char *command; /* Command prefix to use when invoking Tcl * commands because the scale value changed. * NULL means don't invoke commands. */ - int repeatDelay; /* How long to wait before auto-repeating - * on scrolling actions (in ms). */ + int repeatDelay; /* How long to wait before auto-repeating on + * scrolling actions (in ms). */ int repeatInterval; /* Interval between autorepeats (in ms). */ char *label; /* Label to display above or to right of - * scale; NULL means don't display a label. */ + * scale; NULL means don't display a label. */ int labelLength; /* Number of non-NULL chars. in label. */ enum state state; /* Values are active, normal, or disabled. - * Value of scale cannot be changed when + * Value of scale cannot be changed when * disabled. */ /* @@ -106,19 +105,19 @@ typedef struct TkScale { Tk_3DBorder bgBorder; /* Used for drawing slider and other * background areas. */ Tk_3DBorder activeBorder; /* For drawing the slider when active. */ - int sliderRelief; /* Is slider to be drawn raised, sunken, + int sliderRelief; /* Is slider to be drawn raised, sunken, * etc. */ XColor *troughColorPtr; /* Color for drawing trough. */ GC troughGC; /* For drawing trough. */ - GC copyGC; /* Used for copying from pixmap onto screen. */ + GC copyGC; /* Used for copying from pixmap onto screen */ Tk_Font tkfont; /* Information about text font, or NULL. */ XColor *textColorPtr; /* Color for drawing text. */ GC textGC; /* GC for drawing text in normal mode. */ int relief; /* Indicates whether window as a whole is * raised, sunken, or flat. */ - int highlightWidth; /* Width in pixels of highlight to draw - * around widget when it has the focus. - * <= 0 means don't draw a highlight. */ + int highlightWidth; /* Width in pixels of highlight to draw around + * widget when it has the focus. <= 0 means + * don't draw a highlight. */ Tk_3DBorder highlightBorder;/* Value of -highlightbackground option: * specifies background with which to draw 3-D * default ring and focus highlight area when @@ -126,18 +125,18 @@ typedef struct TkScale { XColor *highlightColorPtr; /* Color for drawing traversal highlight. */ int inset; /* Total width of all borders, including * traversal highlight and 3-D border. - * Indicates how much interior stuff must - * be offset from outside edges to leave - * room for borders. */ + * Indicates how much interior stuff must be + * offset from outside edges to leave room for + * borders. */ int sliderLength; /* Length of slider, measured in pixels along * long dimension of scale. */ int showValue; /* Non-zero means to display the scale value - * below or to the left of the slider; zero + * below or to the left of the slider; zero * means don't display the value. */ /* - * Layout information for horizontal scales, assuming that window - * gets the size it requested: + * Layout information for horizontal scales, assuming that window gets the + * size it requested: */ int horizLabelY; /* Y-coord at which to draw label. */ @@ -145,8 +144,8 @@ typedef struct TkScale { int horizTroughY; /* Y-coord of top of slider trough. */ int horizTickY; /* Y-coord at which to draw tick text. */ /* - * Layout information for vertical scales, assuming that window - * gets the size it requested: + * Layout information for vertical scales, assuming that window gets the + * size it requested: */ int vertTickRightX; /* X-location of right side of tick-marks. */ @@ -160,37 +159,37 @@ typedef struct TkScale { int fontHeight; /* Height of scale font. */ Tk_Cursor cursor; /* Current cursor for window, or None. */ - Tcl_Obj *takeFocusPtr; /* Value of -takefocus option; not used in - * the C code, but used by keyboard traversal - * scripts. May be NULL. */ - int flags; /* Various flags; see below for + Tcl_Obj *takeFocusPtr; /* Value of -takefocus option; not used in the + * C code, but used by keyboard traversal + * scripts. May be NULL. */ + int flags; /* Various flags; see below for * definitions. */ } TkScale; /* * Flag bits for scales: * - * REDRAW_SLIDER - 1 means slider (and numerical readout) need - * to be redrawn. + * REDRAW_SLIDER - 1 means slider (and numerical readout) need to + * be redrawn. * REDRAW_OTHER - 1 means other stuff besides slider and value * need to be redrawn. * REDRAW_ALL - 1 means the entire widget needs to be redrawn. * REDRAW_PENDING - 1 means any sort of redraw is pending - * ACTIVE - 1 means the widget is active (the mouse is - * in its window). + * ACTIVE - 1 means the widget is active (the mouse is in + * its window). * INVOKE_COMMAND - 1 means the scale's command needs to be - * invoked during the next redisplay (the - * value of the scale has changed since the - * last time the command was invoked). - * SETTING_VAR - 1 means that the associated variable is - * being set by us, so there's no need for - * ScaleVarProc to do anything. - * NEVER_SET - 1 means that the scale's value has never - * been set before (so must invoke -command and - * set associated variable even if the value - * doesn't appear to have changed). - * GOT_FOCUS - 1 means that the focus is currently in - * this widget. + * invoked during the next redisplay (the value + * of the scale has changed since the last time + * the command was invoked). + * SETTING_VAR - 1 means that the associated variable is being + * set by us, so there's no need for ScaleVarProc + * to do anything. + * NEVER_SET - 1 means that the scale's value has never been + * set before (so must invoke -command and set + * associated variable even if the value doesn't + * appear to have changed). + * GOT_FOCUS - 1 means that the focus is currently in this + * widget. * SCALE_DELETED - 1 means the scale widget is being deleted */ @@ -206,8 +205,8 @@ typedef struct TkScale { #define SCALE_DELETED (1<<8) /* - * Symbolic values for the active parts of a slider. These are - * the values that may be returned by the ScaleElement procedure. + * Symbolic values for the active parts of a slider. These are the values that + * may be returned by the ScaleElement procedure. */ #define OTHER 0 @@ -216,39 +215,32 @@ typedef struct TkScale { #define TROUGH2 3 /* - * Space to leave between scale area and text, and between text and - * edge of window. + * Space to leave between scale area and text, and between text and edge of + * window. */ #define SPACING 2 /* - * How many characters of space to provide when formatting the - * scale's value: + * How many characters of space to provide when formatting the scale's value: */ #define PRINT_CHARS 150 /* - * Declaration of procedures used in the implementation of the scale - * widget. + * Declaration of procedures used in the implementation of the scale widget. */ -EXTERN void TkEventuallyRedrawScale _ANSI_ARGS_((TkScale *scalePtr, - int what)); -EXTERN double TkRoundToResolution _ANSI_ARGS_((TkScale *scalePtr, - double value)); -EXTERN TkScale * TkpCreateScale _ANSI_ARGS_((Tk_Window tkwin)); -EXTERN void TkpDestroyScale _ANSI_ARGS_((TkScale *scalePtr)); -EXTERN void TkpDisplayScale _ANSI_ARGS_((ClientData clientData)); -EXTERN int TkpScaleElement _ANSI_ARGS_((TkScale *scalePtr, - int x, int y)); -EXTERN void TkScaleSetValue _ANSI_ARGS_((TkScale *scalePtr, - double value, int setVar, int invokeCommand)); -EXTERN double TkScalePixelToValue _ANSI_ARGS_((TkScale *scalePtr, - int x, int y)); -EXTERN int TkScaleValueToPixel _ANSI_ARGS_((TkScale *scalePtr, - double value)); +EXTERN void TkEventuallyRedrawScale(TkScale *scalePtr, int what); +EXTERN double TkRoundToResolution(TkScale *scalePtr, double value); +EXTERN TkScale * TkpCreateScale(Tk_Window tkwin); +EXTERN void TkpDestroyScale(TkScale *scalePtr); +EXTERN void TkpDisplayScale(ClientData clientData); +EXTERN int TkpScaleElement(TkScale *scalePtr, int x, int y); +EXTERN void TkScaleSetValue(TkScale *scalePtr, double value, + int setVar, int invokeCommand); +EXTERN double TkScalePixelToValue(TkScale *scalePtr, int x, int y); +EXTERN int TkScaleValueToPixel(TkScale *scalePtr, double value); # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLIMPORT diff --git a/generic/tkSelect.h b/generic/tkSelect.h index 72fdad6..c2ab33f 100644 --- a/generic/tkSelect.h +++ b/generic/tkSelect.h @@ -1,15 +1,15 @@ /* * tkSelect.h -- * - * Declarations of types shared among the files that implement - * selection support. + * Declarations of types shared among the files that implement selection + * support. * * 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. + * 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.4 1999/05/25 20:40:54 stanton Exp $ + * RCS: @(#) $Id: tkSelect.h,v 1.5 2005/11/15 15:18:22 dkf Exp $ */ #ifndef _TKSELECT @@ -18,142 +18,134 @@ /* * 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. + * 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 + * 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 * selection. */ ClientData clearData; /* Info to pass to clearProc. */ struct TkSelectionInfo *nextPtr; - /* Next in list of current selections on - * this display. NULL means end of list */ + /* Next in list of current selections on this + * display. NULL means end of list */ } TkSelectionInfo; /* - * 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. + * 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 - * STRING. */ - Atom format; /* Format in which selection - * info will be returned, such - * as STRING or ATOM. */ - Tk_SelectionProc *proc; /* Procedure to generate selection - * in this format. */ + Atom target; /* Target type for selection conversion, such + * as TARGETS or STRING. */ + Atom format; /* Format in which selection info will be + * returned, such as STRING or ATOM. */ + Tk_SelectionProc *proc; /* Procedure to generate selection in this + * format. */ ClientData clientData; /* Argument to pass to proc. */ - int size; /* Size of units returned by proc - * (8 for STRING, 32 for almost - * anything else). */ + int size; /* Size of units returned by proc (8 for + * STRING, 32 for almost anything else). */ struct TkSelHandler *nextPtr; - /* Next selection handler associated - * with same window (NULL for end of - * list). */ + /* Next selection handler associated with same + * window (NULL for end of list). */ } TkSelHandler; /* - * 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 - * different displays). + * 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 different displays). */ typedef struct TkSelRetrievalInfo { Tcl_Interp *interp; /* Interpreter for error reporting. */ - TkWindow *winPtr; /* Window used as requestor for - * selection. */ + TkWindow *winPtr; /* Window used as requestor for selection. */ Atom selection; /* Selection being requested. */ Atom property; /* Property where selection will appear. */ Atom target; /* Desired form for selection. */ int (*proc) _ANSI_ARGS_((ClientData clientData, Tcl_Interp *interp, - char *portion)); /* Procedure to call to handle pieces - * of selection. */ + char *portion)); /* Procedure to call to handle pieces of + * selection. */ ClientData clientData; /* Argument for proc. */ - int result; /* Initially -1. Set to a Tcl - * return value once the selection - * has been retrieved. */ + int result; /* Initially -1. Set to a Tcl return value + * once the selection has been retrieved. */ Tcl_TimerToken timeout; /* Token for current timeout procedure. */ - int idleTime; /* Number of seconds that have gone by - * without hearing anything from the - * selection owner. */ + int idleTime; /* Number of seconds that have gone by without + * hearing anything from the selection + * owner. */ Tcl_EncodingState encState; /* Holds intermediate state during translations * of data that cross buffer boundaries. */ int encFlags; /* Encoding translation state flags. */ Tcl_DString buf; /* Buffer to hold translation data. */ struct TkSelRetrievalInfo *nextPtr; - /* Next in list of all pending - * selection retrievals. NULL means - * end of list. */ + /* Next in list of all pending selection + * retrievals. NULL means end of list. */ } TkSelRetrievalInfo; /* - * 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 - * type. + * 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 type. */ 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 - * means end of list . */ + char *buffer; /* Null terminated data buffer. */ + long length; /* Length of string in buffer. */ + struct TkClipboardBuffer *nextPtr; + /* Next in list of buffers. NULL means end of + * list . */ } TkClipboardBuffer; 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 - * list. */ + 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 list. */ } TkClipboardTarget; /* * 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. + * 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. */ + TkSelHandler *selPtr; /* Handler being executed. If this handler is + * deleted, the field is set to NULL. */ struct TkSelInProgress *nextPtr; /* Next higher nested search. */ } TkSelInProgress; /* - * 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. + * 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 @@ -164,22 +156,18 @@ typedef struct TkSelInProgress { * but shouldn't be used anywhere else in Tk (or by Tk clients): */ -extern TkSelInProgress * - TkSelGetInProgress _ANSI_ARGS_((void)); -extern void TkSelSetInProgress _ANSI_ARGS_(( - TkSelInProgress *pendingPtr)); - -extern void TkSelClearSelection _ANSI_ARGS_((Tk_Window tkwin, - XEvent *eventPtr)); -extern int TkSelDefaultSelection _ANSI_ARGS_(( - TkSelectionInfo *infoPtr, Atom target, - char *buffer, int maxBytes, Atom *typePtr)); -extern int TkSelGetSelection _ANSI_ARGS_((Tcl_Interp *interp, - Tk_Window tkwin, Atom selection, Atom target, - Tk_GetSelProc *proc, ClientData clientData)); +extern TkSelInProgress *TkSelGetInProgress(void); +extern void TkSelSetInProgress(TkSelInProgress *pendingPtr); +extern void TkSelClearSelection(Tk_Window tkwin, XEvent *eventPtr); +extern int TkSelDefaultSelection(TkSelectionInfo *infoPtr, + Atom target, char *buffer, int maxBytes, + Atom *typePtr); +extern int TkSelGetSelection(Tcl_Interp *interp, Tk_Window tkwin, + Atom selection, Atom target, Tk_GetSelProc *proc, + ClientData clientData); #ifndef TkSelUpdateClipboard -extern void TkSelUpdateClipboard _ANSI_ARGS_((TkWindow *winPtr, - TkClipboardTarget *targetPtr)); +extern void TkSelUpdateClipboard(TkWindow *winPtr, + TkClipboardTarget *targetPtr); #endif #endif /* _TKSELECT */ diff --git a/generic/tkSquare.c b/generic/tkSquare.c index d3b6f04..0b984dd 100644 --- a/generic/tkSquare.c +++ b/generic/tkSquare.c @@ -1,18 +1,18 @@ -/* +/* * tkSquare.c -- * - * This module implements "square" widgets that are object - * based. A "square" is a widget that displays a single square that can - * be moved around and resized. This file is intended as an example - * of how to build a widget; it isn't included in the - * normal wish, but it is included in "tktest". + * This module implements "square" widgets that are object based. A + * "square" is a widget that displays a single square that can be moved + * around and resized. This file is intended as an example of how to + * build a widget; it isn't included in the normal wish, but it is + * included in "tktest". * * Copyright (c) 1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkSquare.c,v 1.5 2002/01/17 23:33:53 dgp Exp $ + * RCS: @(#) $Id: tkSquare.c,v 1.6 2005/11/15 15:18:22 dkf Exp $ */ #include "tkPort.h" @@ -21,14 +21,14 @@ #include "tkInt.h" /* - * A data structure of the following type is kept for each square - * widget managed by this file: + * A data structure of the following type is kept for each square widget + * managed by this file: */ typedef struct { - Tk_Window tkwin; /* Window that embodies the square. NULL - * means window has been deleted but - * widget record hasn't been cleaned up yet. */ + Tk_Window tkwin; /* Window that embodies the square. NULL means + * window has been deleted but widget record + * hasn't been cleaned up yet. */ Display *display; /* X's token for the window's display. */ Tcl_Interp *interp; /* Interpreter associated with widget. */ Tcl_Command widgetCmd; /* Token for square's widget command. */ @@ -49,11 +49,11 @@ typedef struct { Tcl_Obj *reliefPtr; GC gc; /* Graphics context for copying from * off-screen pixmap onto screen. */ - Tcl_Obj *doubleBufferPtr; /* Non-zero means double-buffer redisplay - * with pixmap; zero means draw straight - * onto the display. */ - int updatePending; /* Non-zero means a call to SquareDisplay - * has already been scheduled. */ + Tcl_Obj *doubleBufferPtr; /* Non-zero means double-buffer redisplay with + * pixmap; zero means draw straight onto the + * display. */ + int updatePending; /* Non-zero means a call to SquareDisplay has + * already been scheduled. */ } Square; /* @@ -64,16 +64,16 @@ static Tk_OptionSpec optionSpecs[] = { {TK_OPTION_BORDER, "-background", "background", "Background", "#d9d9d9", Tk_Offset(Square, bgBorderPtr), -1, 0, (ClientData) "white"}, - {TK_OPTION_SYNONYM, "-bd", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-borderwidth"}, - {TK_OPTION_SYNONYM, "-bg", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-background"}, + {TK_OPTION_SYNONYM, "-bd", NULL, NULL, NULL, 0, -1, 0, + (ClientData) "-borderwidth"}, + {TK_OPTION_SYNONYM, "-bg", NULL, NULL, NULL, 0, -1, 0, + (ClientData) "-background"}, {TK_OPTION_PIXELS, "-borderwidth", "borderWidth", "BorderWidth", "2", Tk_Offset(Square, borderWidthPtr), -1}, {TK_OPTION_BOOLEAN, "-dbl", "doubleBuffer", "DoubleBuffer", "1", Tk_Offset(Square, doubleBufferPtr), -1}, - {TK_OPTION_SYNONYM, "-fg", (char *) NULL, (char *) NULL, - (char *) NULL, 0, -1, 0, (ClientData) "-foreground"}, + {TK_OPTION_SYNONYM, "-fg", NULL, NULL, NULL, 0, -1, 0, + (ClientData) "-foreground"}, {TK_OPTION_BORDER, "-foreground", "foreground", "Foreground", "#b03060", Tk_Offset(Square, fgBorderPtr), -1, 0, (ClientData) "black"}, @@ -92,28 +92,26 @@ static Tk_OptionSpec optionSpecs[] = { * Forward declarations for procedures defined later in this file: */ -int SquareObjCmd _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *interp, int objc, - Tcl_Obj * CONST objv[])); -static void SquareDeletedProc _ANSI_ARGS_(( - ClientData clientData)); -static int SquareConfigure _ANSI_ARGS_((Tcl_Interp *interp, - Square *squarePtr)); -static void SquareDestroy _ANSI_ARGS_((char *memPtr)); -static void SquareDisplay _ANSI_ARGS_((ClientData clientData)); -static void KeepInWindow _ANSI_ARGS_((Square *squarePtr)); -static void SquareObjEventProc _ANSI_ARGS_((ClientData clientData, - XEvent *eventPtr)); -static int SquareWidgetObjCmd _ANSI_ARGS_((ClientData clientData, - Tcl_Interp *, int objc, Tcl_Obj * CONST objv[])); +int SquareObjCmd(ClientData clientData, + Tcl_Interp *interp, int objc, + Tcl_Obj * CONST objv[]); +static void SquareDeletedProc(ClientData clientData); +static int SquareConfigure(Tcl_Interp *interp, Square *squarePtr); +static void SquareDestroy(char *memPtr); +static void SquareDisplay(ClientData clientData); +static void KeepInWindow(Square *squarePtr); +static void SquareObjEventProc(ClientData clientData, + XEvent *eventPtr); +static int SquareWidgetObjCmd(ClientData clientData, + Tcl_Interp *, int objc, Tcl_Obj * CONST objv[]); /* *-------------------------------------------------------------- * * SquareCmd -- * - * This procedure is invoked to process the "square" Tcl - * command. It creates a new "square" widget. + * This procedure is invoked to process the "square" Tcl command. It + * creates a new "square" widget. * * Results: * A standard Tcl result. @@ -125,11 +123,11 @@ static int SquareWidgetObjCmd _ANSI_ARGS_((ClientData clientData, */ int -SquareObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* NULL. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +SquareObjCmd( + ClientData clientData, /* NULL. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj *CONST objv[]) /* Argument objects. */ { Square *squarePtr; Tk_Window tkwin; @@ -140,39 +138,38 @@ SquareObjCmd(clientData, interp, objc, objv) return TCL_ERROR; } - tkwin = Tk_CreateWindowFromPath(interp, Tk_MainWindow(interp), - Tcl_GetStringFromObj(objv[1], NULL), (char *) NULL); + tkwin = Tk_CreateWindowFromPath(interp, Tk_MainWindow(interp), + Tcl_GetString(objv[1]), NULL); if (tkwin == NULL) { return TCL_ERROR; } Tk_SetClass(tkwin, "Square"); /* - * Create the option table for this widget class. If it has - * already been created, the refcount will get bumped and just - * the pointer will be returned. The refcount getting bumped - * does not concern us, because Tk will ensure the table is - * deleted when the interpreter is destroyed. + * Create the option table for this widget class. If it has already been + * created, the refcount will get bumped and just the pointer will be + * returned. The refcount getting bumped does not concern us, because Tk + * will ensure the table is deleted when the interpreter is destroyed. */ optionTable = Tk_CreateOptionTable(interp, optionSpecs); /* - * Allocate and initialize the widget record. The memset allows - * us to set just the non-NULL/0 items. + * Allocate and initialize the widget record. The memset allows us to set + * just the non-NULL/0 items. */ - squarePtr = (Square *) ckalloc(sizeof(Square)); + squarePtr = (Square *) ckalloc(sizeof(Square)); memset((void *) squarePtr, 0, (sizeof(Square))); - squarePtr->tkwin = tkwin; - squarePtr->display = Tk_Display(tkwin); - squarePtr->interp = interp; - squarePtr->widgetCmd = Tcl_CreateObjCommand(interp, + squarePtr->tkwin = tkwin; + squarePtr->display = Tk_Display(tkwin); + squarePtr->interp = interp; + squarePtr->widgetCmd = Tcl_CreateObjCommand(interp, Tk_PathName(squarePtr->tkwin), SquareWidgetObjCmd, (ClientData) squarePtr, SquareDeletedProc); - squarePtr->gc = None; - squarePtr->optionTable = optionTable; + squarePtr->gc = None; + squarePtr->optionTable = optionTable; if (Tk_InitOptions(interp, (char *) squarePtr, optionTable, tkwin) != TCL_OK) { @@ -184,7 +181,7 @@ SquareObjCmd(clientData, interp, objc, objv) Tk_CreateEventHandler(squarePtr->tkwin, ExposureMask|StructureNotifyMask, SquareObjEventProc, (ClientData) squarePtr); if (Tk_SetOptions(interp, (char *) squarePtr, optionTable, objc - 2, - objv + 2, tkwin, NULL, (int *) NULL) != TCL_OK) { + objv + 2, tkwin, NULL, NULL) != TCL_OK) { goto error; } if (SquareConfigure(interp, squarePtr) != TCL_OK) { @@ -195,7 +192,7 @@ SquareObjCmd(clientData, interp, objc, objv) Tcl_NewStringObj(Tk_PathName(squarePtr->tkwin), -1)); return TCL_OK; -error: + error: Tk_DestroyWindow(squarePtr->tkwin); return TCL_ERROR; } @@ -205,9 +202,9 @@ error: * * SquareWidgetObjCmd -- * - * This procedure is invoked to process the Tcl command - * that corresponds to a widget managed by this module. - * See the user documentation for details on what it does. + * This procedure is invoked to process the Tcl command that corresponds + * to a widget managed by this module. See the user documentation for + * details on what it does. * * Results: * A standard Tcl result. @@ -219,15 +216,15 @@ error: */ static int -SquareWidgetObjCmd(clientData, interp, objc, objv) - ClientData clientData; /* Information about square widget. */ - Tcl_Interp *interp; /* Current interpreter. */ - int objc; /* Number of arguments. */ - Tcl_Obj * CONST objv[]; /* Argument objects. */ +SquareWidgetObjCmd( + ClientData clientData, /* Information about square widget. */ + Tcl_Interp *interp, /* Current interpreter. */ + int objc, /* Number of arguments. */ + Tcl_Obj * CONST objv[]) /* Argument objects. */ { Square *squarePtr = (Square *) clientData; int result = TCL_OK; - static CONST char *squareOptions[] = {"cget", "configure", (char *) NULL}; + static CONST char *squareOptions[] = {"cget", "configure", NULL}; enum { SQUARE_CGET, SQUARE_CONFIGURE }; @@ -245,58 +242,55 @@ SquareWidgetObjCmd(clientData, interp, objc, objv) } Tcl_Preserve((ClientData) squarePtr); - + switch (index) { - case SQUARE_CGET: { - if (objc != 3) { - Tcl_WrongNumArgs(interp, 2, objv, "option"); - goto error; + case SQUARE_CGET: + if (objc != 3) { + Tcl_WrongNumArgs(interp, 2, objv, "option"); + goto error; + } + resultObjPtr = Tk_GetOptionValue(interp, (char *) squarePtr, + squarePtr->optionTable, objv[2], squarePtr->tkwin); + if (resultObjPtr == NULL) { + result = TCL_ERROR; + } else { + Tcl_SetObjResult(interp, resultObjPtr); + } + break; + case SQUARE_CONFIGURE: + resultObjPtr = NULL; + if (objc == 2) { + resultObjPtr = Tk_GetOptionInfo(interp, (char *) squarePtr, + squarePtr->optionTable, NULL, squarePtr->tkwin); + if (resultObjPtr == NULL) { + result = TCL_ERROR; } - resultObjPtr = Tk_GetOptionValue(interp, (char *) squarePtr, + } else if (objc == 3) { + resultObjPtr = Tk_GetOptionInfo(interp, (char *) squarePtr, squarePtr->optionTable, objv[2], squarePtr->tkwin); if (resultObjPtr == NULL) { result = TCL_ERROR; - } else { - Tcl_SetObjResult(interp, resultObjPtr); } - break; - } - case SQUARE_CONFIGURE: { - resultObjPtr = NULL; - if (objc == 2) { - resultObjPtr = Tk_GetOptionInfo(interp, (char *) squarePtr, - squarePtr->optionTable, (Tcl_Obj *) NULL, - squarePtr->tkwin); - if (resultObjPtr == NULL) { - result = TCL_ERROR; - } - } else if (objc == 3) { - resultObjPtr = Tk_GetOptionInfo(interp, (char *) squarePtr, - squarePtr->optionTable, objv[2], squarePtr->tkwin); - if (resultObjPtr == NULL) { - result = TCL_ERROR; - } - } else { - result = Tk_SetOptions(interp, (char *) squarePtr, - squarePtr->optionTable, objc - 2, objv + 2, - squarePtr->tkwin, NULL, (int *) NULL); - if (result == TCL_OK) { - result = SquareConfigure(interp, squarePtr); - } - if (!squarePtr->updatePending) { - Tcl_DoWhenIdle(SquareDisplay, (ClientData) squarePtr); - squarePtr->updatePending = 1; - } + } else { + result = Tk_SetOptions(interp, (char *) squarePtr, + squarePtr->optionTable, objc - 2, objv + 2, + squarePtr->tkwin, NULL, NULL); + if (result == TCL_OK) { + result = SquareConfigure(interp, squarePtr); } - if (resultObjPtr != NULL) { - Tcl_SetObjResult(interp, resultObjPtr); + if (!squarePtr->updatePending) { + Tcl_DoWhenIdle(SquareDisplay, (ClientData) squarePtr); + squarePtr->updatePending = 1; } } + if (resultObjPtr != NULL) { + Tcl_SetObjResult(interp, resultObjPtr); + } } Tcl_Release((ClientData) squarePtr); return result; - error: + error: Tcl_Release((ClientData) squarePtr); return TCL_ERROR; } @@ -306,37 +300,36 @@ SquareWidgetObjCmd(clientData, interp, objc, objv) * * SquareConfigure -- * - * This procedure is called to process an argv/argc list in - * conjunction with the Tk option database to configure (or - * reconfigure) a square widget. + * This procedure is called to process an argv/argc list in conjunction + * with the Tk option database to configure (or reconfigure) a square + * widget. * * Results: - * The return value is a standard Tcl result. If TCL_ERROR is - * returned, then the interp's result contains an error message. + * The return value is a standard Tcl result. If TCL_ERROR is returned, + * then the interp's result contains an error message. * * Side effects: - * Configuration information, such as colors, border width, - * etc. get set for squarePtr; old resources get freed, - * if there were any. + * Configuration information, such as colors, border width, etc. get set + * for squarePtr; old resources get freed, if there were any. * *---------------------------------------------------------------------- */ static int -SquareConfigure(interp, squarePtr) - Tcl_Interp *interp; /* Used for error reporting. */ - Square *squarePtr; /* Information about widget. */ +SquareConfigure( + Tcl_Interp *interp, /* Used for error reporting. */ + Square *squarePtr) /* Information about widget. */ { int borderWidth; Tk_3DBorder bgBorder; int doubleBuffer; /* - * Set the background for the window and create a graphics context - * for use during redisplay. + * Set the background for the window and create a graphics context for use + * during redisplay. */ - bgBorder = Tk_Get3DBorderFromObj(squarePtr->tkwin, + bgBorder = Tk_Get3DBorderFromObj(squarePtr->tkwin, squarePtr->bgBorderPtr); Tk_SetWindowBackground(squarePtr->tkwin, Tk_3DBorderColor(bgBorder)->pixel); @@ -350,8 +343,8 @@ SquareConfigure(interp, squarePtr) } /* - * Register the desired geometry for the window. Then arrange for - * the window to be redisplayed. + * Register the desired geometry for the window. Then arrange for the + * window to be redisplayed. */ Tk_GeometryRequest(squarePtr->tkwin, 200, 150); @@ -371,23 +364,23 @@ SquareConfigure(interp, squarePtr) * * SquareObjEventProc -- * - * This procedure is invoked by the Tk dispatcher for various - * events on squares. + * This procedure is invoked by the Tk dispatcher for various events on + * squares. * * Results: * None. * * Side effects: - * When the window gets deleted, internal structures get - * cleaned up. When it gets exposed, it is redisplayed. + * When the window gets deleted, internal structures get cleaned up. When + * it gets exposed, it is redisplayed. * *-------------------------------------------------------------- */ static void -SquareObjEventProc(clientData, eventPtr) - ClientData clientData; /* Information about window. */ - XEvent *eventPtr; /* Information about event. */ +SquareObjEventProc( + ClientData clientData, /* Information about window. */ + XEvent *eventPtr) /* Information about event. */ { Square *squarePtr = (Square *) clientData; @@ -425,9 +418,9 @@ SquareObjEventProc(clientData, eventPtr) * * SquareDeletedProc -- * - * This procedure is invoked when a widget command is deleted. If - * the widget isn't already in the process of being destroyed, - * this command destroys it. + * This procedure is invoked when a widget command is deleted. If the + * widget isn't already in the process of being destroyed, this command + * destroys it. * * Results: * None. @@ -439,17 +432,17 @@ SquareObjEventProc(clientData, eventPtr) */ static void -SquareDeletedProc(clientData) - ClientData clientData; /* Pointer to widget record for widget. */ +SquareDeletedProc( + ClientData clientData) /* Pointer to widget record for widget. */ { Square *squarePtr = (Square *) clientData; Tk_Window tkwin = squarePtr->tkwin; /* - * This procedure could be invoked either because the window was - * destroyed and the command was then deleted (in which case tkwin - * is NULL) or because the command was deleted, and then this procedure - * destroys the widget. + * This procedure could be invoked either because the window was destroyed + * and the command was then deleted (in which case tkwin is NULL) or + * because the command was deleted, and then this procedure destroys the + * widget. */ if (tkwin != NULL) { @@ -462,9 +455,9 @@ SquareDeletedProc(clientData) * * SquareDisplay -- * - * This procedure redraws the contents of a square window. - * It is invoked as a do-when-idle handler, so it only runs - * when there's nothing else for the application to do. + * This procedure redraws the contents of a square window. It is invoked + * as a do-when-idle handler, so it only runs when there's nothing else + * for the application to do. * * Results: * None. @@ -476,8 +469,8 @@ SquareDeletedProc(clientData) */ static void -SquareDisplay(clientData) - ClientData clientData; /* Information about window. */ +SquareDisplay( + ClientData clientData) /* Information about window. */ { Square *squarePtr = (Square *) clientData; Tk_Window tkwin = squarePtr->tkwin; @@ -512,7 +505,7 @@ SquareDisplay(clientData) Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->borderWidthPtr, &borderWidth); - bgBorder = Tk_Get3DBorderFromObj(squarePtr->tkwin, + bgBorder = Tk_Get3DBorderFromObj(squarePtr->tkwin, squarePtr->bgBorderPtr); Tk_GetReliefFromObj(NULL, squarePtr->reliefPtr, &relief); Tk_Fill3DRectangle(tkwin, d, bgBorder, 0, 0, Tk_Width(tkwin), @@ -523,9 +516,9 @@ SquareDisplay(clientData) */ Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->sizeObjPtr, &size); - fgBorder = Tk_Get3DBorderFromObj(squarePtr->tkwin, + fgBorder = Tk_Get3DBorderFromObj(squarePtr->tkwin, squarePtr->fgBorderPtr); - Tk_Fill3DRectangle(tkwin, d, fgBorder, squarePtr->x, squarePtr->y, size, + Tk_Fill3DRectangle(tkwin, d, fgBorder, squarePtr->x, squarePtr->y, size, size, borderWidth, TK_RELIEF_RAISED); /* @@ -545,9 +538,9 @@ SquareDisplay(clientData) * * SquareDestroy -- * - * This procedure is invoked by Tcl_EventuallyFree or Tcl_Release - * to clean up the internal structure of a square at a safe time - * (when no-one is using it anymore). + * This procedure is invoked by Tcl_EventuallyFree or Tcl_Release to + * clean up the internal structure of a square at a safe time (when + * no-one is using it anymore). * * Results: * None. @@ -559,11 +552,11 @@ SquareDisplay(clientData) */ static void -SquareDestroy(memPtr) - char *memPtr; /* Info about square widget. */ +SquareDestroy( + char *memPtr) /* Info about square widget. */ { Square *squarePtr = (Square *) memPtr; - + ckfree((char *) squarePtr); } @@ -572,31 +565,31 @@ SquareDestroy(memPtr) * * KeepInWindow -- * - * Adjust the position of the square if necessary to keep it in - * the widget's window. + * Adjust the position of the square if necessary to keep it in the + * widget's window. * * Results: * None. * * Side effects: - * The x and y position of the square are adjusted if necessary - * to keep the square in the window. + * The x and y position of the square are adjusted if necessary to keep + * the square in the window. * *---------------------------------------------------------------------- */ static void -KeepInWindow(squarePtr) - register Square *squarePtr; /* Pointer to widget record. */ +KeepInWindow( + register Square *squarePtr) /* Pointer to widget record. */ { int i, bd, relief; int borderWidth, size; Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->borderWidthPtr, &borderWidth); - Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->xPtr, + Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->xPtr, &squarePtr->x); - Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->yPtr, + Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->yPtr, &squarePtr->y); Tk_GetPixelsFromObj(NULL, squarePtr->tkwin, squarePtr->sizeObjPtr, &size); Tk_GetReliefFromObj(NULL, squarePtr->reliefPtr, &relief); @@ -619,3 +612,11 @@ KeepInWindow(squarePtr) squarePtr->y = bd; } } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkStubImg.c b/generic/tkStubImg.c index 627f302..88b7efe 100644 --- a/generic/tkStubImg.c +++ b/generic/tkStubImg.c @@ -1,4 +1,4 @@ -/* +/* * tkStubImg.c -- * * Stub object that will be statically linked into extensions that wish @@ -7,10 +7,10 @@ * Copyright (c) 1999 Jan Nijtmans. * Copyright (c) 1998-1999 by Scriptics Corporation. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkStubImg.c,v 1.3 2003/01/09 01:00:36 dgp Exp $ + * RCS: @(#) $Id: tkStubImg.c,v 1.4 2005/11/15 15:18:22 dkf Exp $ */ #include "tcl.h" @@ -21,14 +21,13 @@ * * Tk_InitImageArgs -- * - * Performs the necessary conversion from Tcl_Obj's to strings - * in the createProc for Tcl_CreateImageType. If running under - * Tk 8.2 or earlier without the Img-patch, this function has - * no effect. + * Performs the necessary conversion from Tcl_Obj's to strings in the + * createProc for Tcl_CreateImageType. If running under Tk 8.2 or earlier + * without the Img-patch, this function has no effect. * * Results: - * argvPtr will point to an argument list which is guaranteed to - * contain strings, no matter what Tk version is running. + * argvPtr will point to an argument list which is guaranteed to contain + * strings, no matter what Tk version is running. * * Side effects: * None @@ -41,10 +40,10 @@ #endif void -Tk_InitImageArgs(interp, argc, argvPtr) - Tcl_Interp *interp; - int argc; - char ***argvPtr; +Tk_InitImageArgs( + Tcl_Interp *interp, + int argc, + char ***argvPtr) { static int useNewImage = -1; static char **argv = NULL; @@ -56,7 +55,13 @@ Tk_InitImageArgs(interp, argc, argvPtr) if (useNewImage < 0) { Tcl_CmdInfo cmdInfo; - if (!tclStubsPtr->tcl_GetCommandInfo(interp,"image", &cmdInfo)) { + + /* + * Note that this is *not* safe; users are free to rename the [image] + * command. Sometime should fix to use assocData instead? + */ + + if (!tclStubsPtr->tcl_GetCommandInfo(interp, "image", &cmdInfo)) { tclStubsPtr->tcl_Panic("cannot find the \"image\" command"); } if (cmdInfo.isNativeObjectProc == 1) { @@ -67,6 +72,7 @@ Tk_InitImageArgs(interp, argc, argvPtr) } if (useNewImage && (argc > 0)) { int i; + argv = (char **) tclStubsPtr->tcl_Alloc(argc * sizeof(char *)); for (i = 0; i < argc; i++) { argv[i] = tclStubsPtr->tcl_GetString((Tcl_Obj *)(*argvPtr)[i]); @@ -74,3 +80,11 @@ Tk_InitImageArgs(interp, argc, argvPtr) *argvPtr = (char **) argv; } } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkStyle.c b/generic/tkStyle.c index ccbb9a5..e38abfa 100644 --- a/generic/tkStyle.c +++ b/generic/tkStyle.c @@ -1,4 +1,4 @@ -/* +/* * tkStyle.c -- * * This file implements the widget styles and themes support. @@ -6,93 +6,93 @@ * Copyright (c) 1990-1993 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkStyle.c,v 1.4 2003/10/06 21:19:30 jenglish Exp $ + * RCS: @(#) $Id: tkStyle.c,v 1.5 2005/11/15 15:18:22 dkf Exp $ */ #include "tkInt.h" /* - * The following structure is used to cache widget option specs matching an + * The following structure is used to cache widget option specs matching an * element's required options defined by Tk_ElementOptionSpecs. It also holds * information behind Tk_StyledElement opaque tokens. */ typedef struct StyledWidgetSpec { - struct StyledElement *elementPtr; /* Pointer to the element holding this - * structure. */ - Tk_OptionTable optionTable; /* Option table for the widget class - * using the element. */ - CONST Tk_OptionSpec **optionsPtr; /* Table of option spec pointers, - * matching the option list provided - * during element registration. - * Malloc'd. */ + struct StyledElement *elementPtr; + /* Pointer to the element holding this + * structure. */ + Tk_OptionTable optionTable; /* Option table for the widget class using the + * element. */ + CONST Tk_OptionSpec **optionsPtr; + /* Table of option spec pointers, matching the + * option list provided during element + * registration. Malloc'd. */ } StyledWidgetSpec; /* - * Elements are declared using static templates. But static - * information must be completed by dynamic information only - * accessible at runtime. For each registered element, an instance of - * the following structure is stored in each style engine and used to - * cache information about the widget types (identified by their - * optionTable) that use the given element. + * Elements are declared using static templates. But static information must + * be completed by dynamic information only accessible at runtime. For each + * registered element, an instance of the following structure is stored in + * each style engine and used to cache information about the widget types + * (identified by their optionTable) that use the given element. */ typedef struct StyledElement { - struct Tk_ElementSpec *specPtr; - /* Filled with template provided during - * registration. NULL means no implementation - * is available for the current engine. */ - int nbWidgetSpecs; /* Size of the array below. Number of distinct - * widget classes (actually, distinct option + struct Tk_ElementSpec *specPtr; + /* Filled with template provided during + * registration. NULL means no implementation + * is available for the current engine. */ + int nbWidgetSpecs; /* Size of the array below. Number of distinct + * widget classes (actually, distinct option * tables) that used the element so far. */ - StyledWidgetSpec *widgetSpecs; + StyledWidgetSpec *widgetSpecs; /* See above for the structure definition. - * Table grows dynamically as new widgets - * use the element. Malloc'd. */ + * Table grows dynamically as new widgets use + * the element. Malloc'd. */ } StyledElement; /* - * The following structure holds information behind Tk_StyleEngine opaque + * The following structure holds information behind Tk_StyleEngine opaque * tokens. */ typedef struct StyleEngine { CONST char *name; /* Name of engine. Points to a hash key. */ - StyledElement *elements; /* Table of widget element descriptors. Each - * element is indexed by a unique system-wide - * ID. Table grows dynamically as new elements + StyledElement *elements; /* Table of widget element descriptors. Each + * element is indexed by a unique system-wide + * ID. Table grows dynamically as new elements * are registered. Malloc'd*/ - struct StyleEngine *parentPtr; - /* Parent engine. Engines may be layered to form - * a fallback chain, terminated by the default - * system engine. */ + struct StyleEngine *parentPtr; + /* Parent engine. Engines may be layered to + * form a fallback chain, terminated by the + * default system engine. */ } StyleEngine; /* - * Styles are instances of style engines. The following structure holds + * Styles are instances of style engines. The following structure holds * information behind Tk_Style opaque tokens. */ typedef struct Style { CONST char *name; /* Name of style. Points to a hash key. */ - StyleEngine *enginePtr; /* Style engine of which the style is an + StyleEngine *enginePtr; /* Style engine of which the style is an * instance. */ ClientData clientData; /* Data provided during registration. */ } Style; /* - * Each registered element uses an instance of the following structure. + * Each registered element uses an instance of the following structure. */ typedef struct Element { CONST char *name; /* Name of element. Points to a hash key. */ int id; /* Id of element. */ int genericId; /* Id of generic element. */ - int created; /* Boolean, whether the element was created - * explicitly (was registered) or implicitly + int created; /* Boolean, whether the element was created + * explicitly (was registered) or implicitly * (by a derived element). */ } Element; @@ -102,65 +102,54 @@ typedef struct Element { typedef struct ThreadSpecificData { int nbInit; /* Number of calls to the init proc. */ - Tcl_HashTable engineTable; /* Map a name to a style engine. Keys are - * strings, values are Tk_StyleEngine + Tcl_HashTable engineTable; /* Map a name to a style engine. Keys are + * strings, values are Tk_StyleEngine * pointers. */ - StyleEngine *defaultEnginePtr; - /* Default, core-defined style engine. Global + StyleEngine *defaultEnginePtr; + /* Default, core-defined style engine. Global * fallback for all engines. */ - Tcl_HashTable styleTable; /* Map a name to a style. Keys are strings, + Tcl_HashTable styleTable; /* Map a name to a style. Keys are strings, * values are Tk_Style pointers.*/ int nbElements; /* Size of the below tables. */ - Tcl_HashTable elementTable; /* Map a name to an element Id. Keys are + Tcl_HashTable elementTable; /* Map a name to an element Id. Keys are * strings, values are integer element IDs. */ - Element *elements; /* Array of Elements. */ + Element *elements; /* Array of Elements. */ } ThreadSpecificData; static Tcl_ThreadDataKey dataKey; /* - * Forward declarations for procedures defined later in this file: + * Forward declarations for functions defined later in this file: */ -/* TODO: sort alpha. */ -static int CreateElement _ANSI_ARGS_((CONST char *name, - int create)); -static void DupStyleObjProc _ANSI_ARGS_((Tcl_Obj *srcObjPtr, - Tcl_Obj *dupObjPtr)); -static void FreeElement _ANSI_ARGS_((Element *elementPtr)); -static void FreeStyledElement _ANSI_ARGS_(( - StyledElement *elementPtr)); -static void FreeStyleEngine _ANSI_ARGS_(( - StyleEngine *enginePtr)); -static void FreeStyleObjProc _ANSI_ARGS_((Tcl_Obj *objPtr)); -static void FreeWidgetSpec _ANSI_ARGS_(( - StyledWidgetSpec *widgetSpecPtr)); -static StyledElement * GetStyledElement _ANSI_ARGS_(( - StyleEngine *enginePtr, int elementId)); -static StyledWidgetSpec * GetWidgetSpec _ANSI_ARGS_((StyledElement *elementPtr, - Tk_OptionTable optionTable)); -static void InitElement _ANSI_ARGS_((Element *elementPtr, - CONST char *name, int id, int genericId, - int created)); -static void InitStyle _ANSI_ARGS_((Style *stylePtr, - CONST char *name, - StyleEngine *enginePtr, ClientData clientData)); -static void InitStyledElement _ANSI_ARGS_(( - StyledElement *elementPtr)); -static void InitStyleEngine _ANSI_ARGS_((StyleEngine *enginePtr, - CONST char *name, StyleEngine *parentPtr)); -static void InitWidgetSpec _ANSI_ARGS_(( - StyledWidgetSpec *widgetSpecPtr, - StyledElement *elementPtr, - Tk_OptionTable optionTable)); -static int SetStyleFromAny _ANSI_ARGS_((Tcl_Interp *interp, - Tcl_Obj *objPtr)); +static int CreateElement(CONST char *name, int create); +static void DupStyleObjProc(Tcl_Obj *srcObjPtr, + Tcl_Obj *dupObjPtr); +static void FreeElement(Element *elementPtr); +static void FreeStyledElement(StyledElement *elementPtr); +static void FreeStyleEngine(StyleEngine *enginePtr); +static void FreeStyleObjProc(Tcl_Obj *objPtr); +static void FreeWidgetSpec(StyledWidgetSpec *widgetSpecPtr); +static StyledElement * GetStyledElement(StyleEngine *enginePtr, + int elementId); +static StyledWidgetSpec*GetWidgetSpec(StyledElement *elementPtr, + Tk_OptionTable optionTable); +static void InitElement(Element *elementPtr, CONST char *name, + int id, int genericId, int created); +static void InitStyle(Style *stylePtr, CONST char *name, + StyleEngine *enginePtr, ClientData clientData); +static void InitStyledElement(StyledElement *elementPtr); +static void InitStyleEngine(StyleEngine *enginePtr, + CONST char *name, StyleEngine *parentPtr); +static void InitWidgetSpec(StyledWidgetSpec *widgetSpecPtr, + StyledElement *elementPtr, + Tk_OptionTable optionTable); +static int SetStyleFromAny(Tcl_Interp *interp, Tcl_Obj *objPtr); /* * The following structure defines the implementation of the "style" Tcl - * object, used for drawing. The internalRep.otherValuePtr field of - * each style object points to the Style structure for the stylefont, or - * NULL. + * object, used for drawing. The internalRep.otherValuePtr field of each style + * object points to the Style structure for the stylefont, or NULL. */ static Tcl_ObjType styleObjType = { @@ -176,9 +165,9 @@ static Tcl_ObjType styleObjType = { * * TkStylePkgInit -- * - * This procedure is called when an application is created. It - * initializes all the structures that are used by the style - * package on a per application basis. + * This function is called when an application is created. It initializes + * all the structures that are used by the style package on a per + * application basis. * * Results: * Stores data in thread-local storage. @@ -190,13 +179,15 @@ static Tcl_ObjType styleObjType = { */ void -TkStylePkgInit(mainPtr) - TkMainInfo *mainPtr; /* The application being created. */ +TkStylePkgInit( + TkMainInfo *mainPtr) /* The application being created. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); - if (tsdPtr->nbInit != 0) return; + if (tsdPtr->nbInit != 0) { + return; + } /* * Initialize tables. @@ -211,15 +202,15 @@ TkStylePkgInit(mainPtr) /* * Create the default system engine. */ - - tsdPtr->defaultEnginePtr = - (StyleEngine *) Tk_RegisterStyleEngine(NULL, NULL); + + tsdPtr->defaultEnginePtr = (StyleEngine *) + Tk_RegisterStyleEngine(NULL, NULL); /* * Create the default system style. */ - Tk_CreateStyle(NULL, (Tk_StyleEngine) tsdPtr->defaultEnginePtr, + Tk_CreateStyle(NULL, (Tk_StyleEngine) tsdPtr->defaultEnginePtr, (ClientData) 0); tsdPtr->nbInit++; @@ -230,9 +221,9 @@ TkStylePkgInit(mainPtr) * * TkStylePkgFree -- * - * This procedure is called when an application is deleted. It - * deletes all the structures that were used by the style package - * for this application. + * This function is called when an application is deleted. It deletes all + * the structures that were used by the style package for this + * application. * * Results: * None. @@ -244,18 +235,20 @@ TkStylePkgInit(mainPtr) */ void -TkStylePkgFree(mainPtr) - TkMainInfo *mainPtr; /* The application being deleted. */ +TkStylePkgFree( + TkMainInfo *mainPtr) /* The application being deleted. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashSearch search; Tcl_HashEntry *entryPtr; StyleEngine *enginePtr; int i; tsdPtr->nbInit--; - if (tsdPtr->nbInit != 0) return; + if (tsdPtr->nbInit != 0) { + return; + } /* * Free styles. @@ -297,11 +290,12 @@ TkStylePkgFree(mainPtr) * * Tk_RegisterStyleEngine -- * - * This procedure is called to register a new style engine. Style engines + * This function is called to register a new style engine. Style engines * are stored in thread-local space. * * Results: - * The newly allocated engine. + * The newly allocated engine, or NULL if an engine with the same name + * exists. * * Side effects: * Memory allocated. Data added to thread-local table. @@ -310,24 +304,24 @@ TkStylePkgFree(mainPtr) */ Tk_StyleEngine -Tk_RegisterStyleEngine(name, parent) - CONST char *name; /* Name of the engine to create. NULL or empty +Tk_RegisterStyleEngine( + CONST char *name, /* Name of the engine to create. NULL or empty * means the default system engine. */ - Tk_StyleEngine parent; /* The engine's parent. NULL means the default + Tk_StyleEngine parent) /* The engine's parent. NULL means the default * system engine. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; int newEntry; StyleEngine *enginePtr; /* - * Attempt to create a new entry in the engine table. + * Attempt to create a new entry in the engine table. */ - entryPtr = Tcl_CreateHashEntry(&tsdPtr->engineTable, (name?name:""), - &newEntry); + entryPtr = Tcl_CreateHashEntry(&tsdPtr->engineTable, + (name != NULL ? name : ""), &newEntry); if (!newEntry) { /* * An engine was already registered by that name. @@ -365,16 +359,16 @@ Tk_RegisterStyleEngine(name, parent) */ static void -InitStyleEngine(enginePtr, name, parentPtr) - StyleEngine *enginePtr; /* Points to an uninitialized engine. */ - CONST char *name; /* Name of the registered engine. NULL or empty +InitStyleEngine( + StyleEngine *enginePtr, /* Points to an uninitialized engine. */ + CONST char *name, /* Name of the registered engine. NULL or empty * means the default system engine. Usually * points to the hash key. */ - StyleEngine *parentPtr; /* The engine's parent. NULL means the default + StyleEngine *parentPtr) /* The engine's parent. NULL means the default * system engine. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); int elementId; if (name == NULL || *name == '\0') { @@ -395,8 +389,8 @@ InitStyleEngine(enginePtr, name, parentPtr) enginePtr->parentPtr = parentPtr; } - /* - * Allocate and initialize elements array. + /* + * Allocate and initialize elements array. */ if (tsdPtr->nbElements > 0) { @@ -427,11 +421,11 @@ InitStyleEngine(enginePtr, name, parentPtr) */ static void -FreeStyleEngine(enginePtr) - StyleEngine *enginePtr; /* The style engine to free. */ +FreeStyleEngine( + StyleEngine *enginePtr) /* The style engine to free. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); int elementId; /* @@ -461,19 +455,19 @@ FreeStyleEngine(enginePtr) */ Tk_StyleEngine -Tk_GetStyleEngine(name) - CONST char *name; /* Name of the engine to retrieve. NULL or +Tk_GetStyleEngine( + CONST char *name) /* Name of the engine to retrieve. NULL or * empty means the default system engine. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; if (name == NULL) { return (Tk_StyleEngine) tsdPtr->defaultEnginePtr; } - entryPtr = Tcl_FindHashEntry(&tsdPtr->engineTable, (name?name:"")); + entryPtr = Tcl_FindHashEntry(&tsdPtr->engineTable, (name!=NULL?name:"")); if (!entryPtr) { return NULL; } @@ -498,14 +492,14 @@ Tk_GetStyleEngine(name) */ static void -InitElement(elementPtr, name, id, genericId, created) - Element *elementPtr; /* Points to an uninitialized element.*/ - CONST char *name; /* Name of the registered element. Usually +InitElement( + Element *elementPtr, /* Points to an uninitialized element.*/ + CONST char *name, /* Name of the registered element. Usually * points to the hash key. */ - int id; /* Unique element ID. */ - int genericId; /* ID of generic element. -1 means none. */ - int created; /* Boolean, whether the element was created - * explicitly (was registered) or implicitly + int id, /* Unique element ID. */ + int genericId, /* ID of generic element. -1 means none. */ + int created) /* Boolean, whether the element was created + * explicitly (was registered) or implicitly * (by a derived element). */ { elementPtr->name = name; @@ -531,8 +525,8 @@ InitElement(elementPtr, name, id, genericId, created) */ static void -FreeElement(elementPtr) - Element *elementPtr; /* The element to free. */ +FreeElement( + Element *elementPtr) /* The element to free. */ { /* Nothing to do. */ } @@ -554,8 +548,8 @@ FreeElement(elementPtr) */ static void -InitStyledElement(elementPtr) - StyledElement *elementPtr; /* Points to an uninitialized element.*/ +InitStyledElement( + StyledElement *elementPtr) /* Points to an uninitialized element.*/ { memset(elementPtr, 0, sizeof(StyledElement)); } @@ -577,8 +571,8 @@ InitStyledElement(elementPtr) */ static void -FreeStyledElement(elementPtr) - StyledElement *elementPtr; /* The styled element to free. */ +FreeStyledElement( + StyledElement *elementPtr) /* The styled element to free. */ { int i; @@ -609,14 +603,14 @@ FreeStyledElement(elementPtr) */ static int -CreateElement(name, create) - CONST char *name; /* Name of the element. */ - int create; /* Boolean, whether the element is being created - * explicitly (being registered) or implicitly (by a +CreateElement( + CONST char *name, /* Name of the element. */ + int create) /* Boolean, whether the element is being created + * explicitly (being registered) or implicitly (by a * derived element). */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr, *engineEntryPtr; Tcl_HashSearch search; int newEntry; @@ -638,8 +632,8 @@ CreateElement(name, create) } /* - * The element didn't exist. If it's a derived element, find or - * create its generic element ID. + * The element didn't exist. If it's a derived element, find or create its + * generic element ID. */ dot = strchr(name, '.'); @@ -654,9 +648,9 @@ CreateElement(name, create) * Reallocate element table. */ - tsdPtr->elements = (Element *) ckrealloc((char *) tsdPtr->elements, + tsdPtr->elements = (Element *) ckrealloc((char *) tsdPtr->elements, sizeof(Element) * tsdPtr->nbElements); - InitElement(tsdPtr->elements+elementId, + InitElement(tsdPtr->elements+elementId, Tcl_GetHashKey(&tsdPtr->elementTable, entryPtr), elementId, genericId, create); @@ -669,7 +663,7 @@ CreateElement(name, create) enginePtr = (StyleEngine *) Tcl_GetHashValue(engineEntryPtr); enginePtr->elements = (StyledElement *) ckrealloc( - (char *) enginePtr->elements, + (char *) enginePtr->elements, sizeof(StyledElement) * tsdPtr->nbElements); InitStyledElement(enginePtr->elements+elementId); @@ -696,11 +690,11 @@ CreateElement(name, create) */ int -Tk_GetElementId(name) - CONST char *name; /* Name of the element. */ +Tk_GetElementId( + CONST char *name) /* Name of the element. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; int genericId = -1; char *dot; @@ -715,7 +709,7 @@ Tk_GetElementId(name) } /* - * Element not found. If the given name was derived, then first search for + * Element not found. If the given name was derived, then first search for * the generic element. If found, create the new derived element. */ @@ -728,7 +722,7 @@ Tk_GetElementId(name) return -1; } if (!tsdPtr->elements[genericId].created) { - /* + /* * The generic element was created implicitly and thus has no real * existence. */ @@ -749,8 +743,8 @@ Tk_GetElementId(name) * * Tk_RegisterStyledElement -- * - * Register an implementation of a new or existing element for the - * given style engine. + * Register an implementation of a new or existing element for the given + * style engine. * * Results: * The unique ID for the created or found element. @@ -762,11 +756,11 @@ Tk_GetElementId(name) */ int -Tk_RegisterStyledElement(engine, templatePtr) - Tk_StyleEngine engine; /* Style engine providing the - * implementation. */ - Tk_ElementSpec *templatePtr; /* Static template information about - * the element. */ +Tk_RegisterStyledElement( + Tk_StyleEngine engine, /* Style engine providing the + * implementation. */ + Tk_ElementSpec *templatePtr)/* Static template information about the + * element. */ { int elementId; StyledElement *elementPtr; @@ -787,7 +781,7 @@ Tk_RegisterStyledElement(engine, templatePtr) } /* - * Register the element, allocating storage in the various engines if + * Register the element, allocating storage in the various engines if * necessary. */ @@ -805,13 +799,13 @@ Tk_RegisterStyledElement(engine, templatePtr) strcpy(specPtr->name, templatePtr->name); nbOptions = 0; for (nbOptions = 0, srcOptions = templatePtr->options; - srcOptions->name != NULL; - nbOptions++, srcOptions++); - specPtr->options = (Tk_ElementOptionSpec *) ckalloc( - sizeof(Tk_ElementOptionSpec) * (nbOptions+1)); + srcOptions->name != NULL; nbOptions++, srcOptions++) { + /* empty body */ + } + specPtr->options = (Tk_ElementOptionSpec *) + ckalloc(sizeof(Tk_ElementOptionSpec) * (nbOptions+1)); for (srcOptions = templatePtr->options, dstOptions = specPtr->options; - /* End condition within loop */; - srcOptions++, dstOptions++) { + /* End condition within loop */; srcOptions++, dstOptions++) { if (srcOptions->name == NULL) { dstOptions->name = NULL; break; @@ -838,8 +832,8 @@ Tk_RegisterStyledElement(engine, templatePtr) * * GetStyledElement -- * - * Get a registered implementation of an existing element for the - * given style engine. + * Get a registered implementation of an existing element for the given + * style engine. * * Results: * The styled element descriptor, or NULL if not found. @@ -851,12 +845,13 @@ Tk_RegisterStyledElement(engine, templatePtr) */ static StyledElement * -GetStyledElement(enginePtr, elementId) - StyleEngine *enginePtr; /* Style engine providing the implementation. +GetStyledElement( + StyleEngine *enginePtr, /* Style engine providing the implementation. * NULL means the default system engine. */ - int elementId; /* Unique element ID */{ + int elementId) /* Unique element ID */ +{ StyledElement *elementPtr; - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); StyleEngine *enginePtr2; @@ -909,11 +904,11 @@ GetStyledElement(enginePtr, elementId) */ static void -InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable) - StyledWidgetSpec *widgetSpecPtr; /* Points to an uninitialized widget - * spec. */ - StyledElement *elementPtr; /* Styled element descriptor. */ - Tk_OptionTable optionTable; /* The widget's option table. */ +InitWidgetSpec( + StyledWidgetSpec *widgetSpecPtr, + /* Points to an uninitialized widget spec. */ + StyledElement *elementPtr, /* Styled element descriptor. */ + Tk_OptionTable optionTable) /* The widget's option table. */ { int i, nbOptions; Tk_ElementOptionSpec *elementOptionPtr; @@ -921,33 +916,32 @@ InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable) widgetSpecPtr->elementPtr = elementPtr; widgetSpecPtr->optionTable = optionTable; - + /* * Count the number of options. */ - for (nbOptions = 0, elementOptionPtr = elementPtr->specPtr->options; - elementOptionPtr->name != NULL; - nbOptions++, elementOptionPtr++) { + for (nbOptions = 0, elementOptionPtr = elementPtr->specPtr->options; + elementOptionPtr->name != NULL; nbOptions++, elementOptionPtr++) { + /* empty body */ } /* * Build the widget option list. */ - widgetSpecPtr->optionsPtr = (CONST Tk_OptionSpec **) ckalloc( - sizeof(Tk_OptionSpec *) * nbOptions); - for (i = 0, elementOptionPtr = elementPtr->specPtr->options; - i < nbOptions; - i++, elementOptionPtr++) { + widgetSpecPtr->optionsPtr = (CONST Tk_OptionSpec **) + ckalloc(sizeof(Tk_OptionSpec *) * nbOptions); + for (i = 0, elementOptionPtr = elementPtr->specPtr->options; + i < nbOptions; i++, elementOptionPtr++) { widgetOptionPtr = TkGetOptionSpec(elementOptionPtr->name, optionTable); /* - * Check that the widget option type is compatible with one of the + * Check that the widget option type is compatible with one of the * element's required types. */ - if ( elementOptionPtr->type == TK_OPTION_END + if (elementOptionPtr->type == TK_OPTION_END || elementOptionPtr->type == widgetOptionPtr->type) { widgetSpecPtr->optionsPtr[i] = widgetOptionPtr; } else { @@ -973,8 +967,9 @@ InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable) */ static void -FreeWidgetSpec(widgetSpecPtr) - StyledWidgetSpec *widgetSpecPtr; /* The widget spec to free. */ +FreeWidgetSpec( + StyledWidgetSpec *widgetSpecPtr) + /* The widget spec to free. */ { ckfree((char *) widgetSpecPtr->optionsPtr); } @@ -984,8 +979,8 @@ FreeWidgetSpec(widgetSpecPtr) * * GetWidgetSpec -- * - * Return a new or existing widget spec for the given element and - * widget type (identified by its option table). + * Return a new or existing widget spec for the given element and widget + * type (identified by its option table). * * Results: * A pointer to the matching widget spec. @@ -997,9 +992,9 @@ FreeWidgetSpec(widgetSpecPtr) */ static StyledWidgetSpec * -GetWidgetSpec(elementPtr, optionTable) - StyledElement *elementPtr; /* Styled element descriptor. */ - Tk_OptionTable optionTable; /* The widget's option table. */ +GetWidgetSpec( + StyledElement *elementPtr, /* Styled element descriptor. */ + Tk_OptionTable optionTable) /* The widget's option table. */ { StyledWidgetSpec *widgetSpecPtr; int i; @@ -1021,7 +1016,7 @@ GetWidgetSpec(elementPtr, optionTable) i = elementPtr->nbWidgetSpecs++; elementPtr->widgetSpecs = (StyledWidgetSpec *) ckrealloc( - (char *) elementPtr->widgetSpecs, + (char *) elementPtr->widgetSpecs, sizeof(StyledWidgetSpec) * elementPtr->nbWidgetSpecs); widgetSpecPtr = elementPtr->widgetSpecs+i; InitWidgetSpec(widgetSpecPtr, elementPtr, optionTable); @@ -1034,7 +1029,7 @@ GetWidgetSpec(elementPtr, optionTable) * * Tk_GetStyledElement -- * - * This procedure returns a styled instance of the given element. + * This function returns a styled instance of the given element. * * Results: * None. @@ -1046,10 +1041,10 @@ GetWidgetSpec(elementPtr, optionTable) */ Tk_StyledElement -Tk_GetStyledElement(style, elementId, optionTable) - Tk_Style style; /* The widget style. */ - int elementId; /* Unique element ID. */ - Tk_OptionTable optionTable; /* Option table for the widget. */ +Tk_GetStyledElement( + Tk_Style style, /* The widget style. */ + int elementId, /* Unique element ID. */ + Tk_OptionTable optionTable) /* Option table for the widget. */ { Style *stylePtr = (Style *) style; StyledElement *elementPtr; @@ -1058,7 +1053,7 @@ Tk_GetStyledElement(style, elementId, optionTable) * Get an element implementation and call corresponding hook. */ - elementPtr = GetStyledElement((stylePtr?stylePtr->enginePtr:NULL), + elementPtr = GetStyledElement((stylePtr?stylePtr->enginePtr:NULL), elementId); if (!elementPtr) { return NULL; @@ -1072,7 +1067,7 @@ Tk_GetStyledElement(style, elementId, optionTable) * * Tk_GetElementSize -- * - * This procedure computes the size of the given widget element according + * This function computes the size of the given widget element according * to its style. * * Results: @@ -1085,26 +1080,25 @@ Tk_GetStyledElement(style, elementId, optionTable) */ void -Tk_GetElementSize(style, element, recordPtr, tkwin, width, height, inner, widthPtr, - heightPtr) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ - int width, height; /* Requested size. */ - int inner; /* Boolean. If TRUE, compute the outer - * size according to the requested - * minimum inner size. If FALSE, compute - * the inner size according to the - * requested maximum outer size. */ - int *widthPtr, *heightPtr; /* Returned size. */ +Tk_GetElementSize( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin, /* The widget window. */ + int width, int height, /* Requested size. */ + int inner, /* If TRUE, compute the outer size according + * to the requested minimum inner size. If + * FALSE, compute the inner size according to + * the requested maximum outer size. */ + int *widthPtr, int *heightPtr) + /* Returned size. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; - widgetSpecPtr->elementPtr->specPtr->getSize(stylePtr->clientData, - recordPtr, widgetSpecPtr->optionsPtr, tkwin, width, height, inner, + widgetSpecPtr->elementPtr->specPtr->getSize(stylePtr->clientData, + recordPtr, widgetSpecPtr->optionsPtr, tkwin, width, height, inner, widthPtr, heightPtr); } @@ -1113,9 +1107,9 @@ Tk_GetElementSize(style, element, recordPtr, tkwin, width, height, inner, widthP * * Tk_GetElementBox -- * - * This procedure computes the bounding or inscribed box coordinates - * of the given widget element according to its style and within the - * given limits. + * This function computes the bounding or inscribed box coordinates of + * the given widget element according to its style and within the given + * limits. * * Results: * None. @@ -1127,29 +1121,27 @@ Tk_GetElementSize(style, element, recordPtr, tkwin, width, height, inner, widthP */ void -Tk_GetElementBox(style, element, recordPtr, tkwin, x, y, width, height, inner, - xPtr, yPtr, widthPtr, heightPtr) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ - int x, y; /* Top left corner of available area. */ - int width, height; /* Size of available area. */ - int inner; /* Boolean. If TRUE, compute the - * bounding box according to the - * requested inscribed box size. If - * FALSE, compute the inscribed box - * according to the requested bounding - * box. */ - int *xPtr, *yPtr; /* Returned top left corner. */ - int *widthPtr, *heightPtr; /* Returned size. */ +Tk_GetElementBox( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin, /* The widget window. */ + int x, int y, /* Top left corner of available area. */ + int width, int height, /* Size of available area. */ + int inner, /* Boolean. If TRUE, compute the bounding box + * according to the requested inscribed box + * size. If FALSE, compute the inscribed box + * according to the requested bounding box. */ + int *xPtr, int *yPtr, /* Returned top left corner. */ + int *widthPtr, int *heightPtr) + /* Returned size. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; - widgetSpecPtr->elementPtr->specPtr->getBox(stylePtr->clientData, - recordPtr, widgetSpecPtr->optionsPtr, tkwin, x, y, width, height, + widgetSpecPtr->elementPtr->specPtr->getBox(stylePtr->clientData, + recordPtr, widgetSpecPtr->optionsPtr, tkwin, x, y, width, height, inner, xPtr, yPtr, widthPtr, heightPtr); } @@ -1158,7 +1150,7 @@ Tk_GetElementBox(style, element, recordPtr, tkwin, x, y, width, height, inner, * * Tk_GetElementBorderWidth -- * - * This procedure computes the border widthof the given widget element + * This function computes the border widthof the given widget element * according to its style and within the given limits. * * Results: @@ -1171,12 +1163,12 @@ Tk_GetElementBox(style, element, recordPtr, tkwin, x, y, width, height, inner, */ int -Tk_GetElementBorderWidth(style, element, recordPtr, tkwin) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ +Tk_GetElementBorderWidth( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin) /* The widget window. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; @@ -1190,7 +1182,7 @@ Tk_GetElementBorderWidth(style, element, recordPtr, tkwin) * * Tk_DrawElement -- * - * This procedure draw the given widget element in a given drawable area. + * This function draw the given widget element in a given drawable area. * * Results: * None @@ -1202,22 +1194,22 @@ Tk_GetElementBorderWidth(style, element, recordPtr, tkwin) */ void -Tk_DrawElement(style, element, recordPtr, tkwin, d, x, y, width, height, state) - Tk_Style style; /* The widget style. */ - Tk_StyledElement element; /* The styled element, previously - * returned by Tk_GetStyledElement. */ - char *recordPtr; /* The widget record. */ - Tk_Window tkwin; /* The widget window. */ - Drawable d; /* Where to draw element. */ - int x, y; /* Top left corner of element. */ - int width, height; /* Size of element. */ - int state; /* Drawing state flags. */ +Tk_DrawElement( + Tk_Style style, /* The widget style. */ + Tk_StyledElement element, /* The styled element, previously returned by + * Tk_GetStyledElement. */ + char *recordPtr, /* The widget record. */ + Tk_Window tkwin, /* The widget window. */ + Drawable d, /* Where to draw element. */ + int x, int y, /* Top left corner of element. */ + int width, int height, /* Size of element. */ + int state) /* Drawing state flags. */ { Style *stylePtr = (Style *) style; StyledWidgetSpec *widgetSpecPtr = (StyledWidgetSpec *) element; - widgetSpecPtr->elementPtr->specPtr->draw(stylePtr->clientData, - recordPtr, widgetSpecPtr->optionsPtr, tkwin, d, x, y, width, + widgetSpecPtr->elementPtr->specPtr->draw(stylePtr->clientData, + recordPtr, widgetSpecPtr->optionsPtr, tkwin, d, x, y, width, height, state); } @@ -1226,11 +1218,11 @@ Tk_DrawElement(style, element, recordPtr, tkwin, d, x, y, width, height, state) * * Tk_CreateStyle -- * - * This procedure is called to create a new style as an instance of the + * This function is called to create a new style as an instance of the * given engine. Styles are stored in thread-local space. * * Results: - * The newly allocated style. + * The newly allocated style, or NULL if the style already exists. * * Side effects: * Memory allocated. Data added to thread-local table. @@ -1239,23 +1231,23 @@ Tk_DrawElement(style, element, recordPtr, tkwin, d, x, y, width, height, state) */ Tk_Style -Tk_CreateStyle(name, engine, clientData) - CONST char *name; /* Name of the style to create. NULL or empty +Tk_CreateStyle( + CONST char *name, /* Name of the style to create. NULL or empty * means the default system style. */ - Tk_StyleEngine engine; /* The style engine. */ - ClientData clientData; /* Private data passed as is to engine code. */ + Tk_StyleEngine engine, /* The style engine. */ + ClientData clientData) /* Private data passed as is to engine code. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; int newEntry; Style *stylePtr; /* - * Attempt to create a new entry in the style table. + * Attempt to create a new entry in the style table. */ - entryPtr = Tcl_CreateHashEntry(&tsdPtr->styleTable, (name?name:""), + entryPtr = Tcl_CreateHashEntry(&tsdPtr->styleTable, (name?name:""), &newEntry); if (!newEntry) { /* @@ -1271,7 +1263,9 @@ Tk_CreateStyle(name, engine, clientData) stylePtr = (Style *) ckalloc(sizeof(Style)); InitStyle(stylePtr, Tcl_GetHashKey(&tsdPtr->styleTable, entryPtr), - (engine?(StyleEngine *) engine:tsdPtr->defaultEnginePtr), clientData); + (engine != NULL ? (StyleEngine *) engine : + tsdPtr->defaultEnginePtr), + clientData); Tcl_SetHashValue(entryPtr, (ClientData) stylePtr); return (Tk_Style) stylePtr; @@ -1285,9 +1279,9 @@ Tk_CreateStyle(name, engine, clientData) * Given a style, return its registered name. * * Results: - * The return value is the name that was passed to Tk_CreateStyle() to - * create the style. The storage for the returned string is private - * (it points to the corresponding hash key) The caller should not modify + * The return value is the name that was passed to Tk_CreateStyle() to + * create the style. The storage for the returned string is private (it + * points to the corresponding hash key) The caller should not modify * this string. * * Side effects: @@ -1297,8 +1291,8 @@ Tk_CreateStyle(name, engine, clientData) */ CONST char * -Tk_NameOfStyle(style) - Tk_Style style; /* Style whose name is desired. */ +Tk_NameOfStyle( + Tk_Style style) /* Style whose name is desired. */ { Style *stylePtr = (Style *) style; @@ -1322,13 +1316,13 @@ Tk_NameOfStyle(style) */ static void -InitStyle(stylePtr, name, enginePtr, clientData) - Style *stylePtr; /* Points to an uninitialized style. */ - CONST char *name; /* Name of the registered style. NULL or empty +InitStyle( + Style *stylePtr, /* Points to an uninitialized style. */ + CONST char *name, /* Name of the registered style. NULL or empty * means the default system style. Usually * points to the hash key. */ - StyleEngine *enginePtr; /* The style engine. */ - ClientData clientData; /* Private data passed as is to engine code. */ + StyleEngine *enginePtr, /* The style engine. */ + ClientData clientData) /* Private data passed as is to engine code. */ { stylePtr->name = name; stylePtr->enginePtr = enginePtr; @@ -1343,8 +1337,8 @@ InitStyle(stylePtr, name, enginePtr, clientData) * Retrieve a registered style by its name. * * Results: - * A pointer to the style engine, or NULL if none found. In the latter - * case and if the interp is not NULL, an error message is left in the + * A pointer to the style engine, or NULL if none found. In the latter + * case and if the interp is not NULL, an error message is left in the * interp's result. * * Side effects: @@ -1354,24 +1348,25 @@ InitStyle(stylePtr, name, enginePtr, clientData) */ Tk_Style -Tk_GetStyle(interp, name) - Tcl_Interp *interp; /* Interp for error return. */ - CONST char *name; /* Name of the style to retrieve. NULL or empty +Tk_GetStyle( + Tcl_Interp *interp, /* Interp for error return. */ + CONST char *name) /* Name of the style to retrieve. NULL or empty * means the default system style. */ { - ThreadSpecificData *tsdPtr = (ThreadSpecificData *) - Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); + ThreadSpecificData *tsdPtr = (ThreadSpecificData *) + Tcl_GetThreadData(&dataKey, sizeof(ThreadSpecificData)); Tcl_HashEntry *entryPtr; Style *stylePtr; /* - * Search for a corresponding entry in the style table. + * Search for a corresponding entry in the style table. */ - entryPtr = Tcl_FindHashEntry(&tsdPtr->styleTable, (name?name:"")); + entryPtr = Tcl_FindHashEntry(&tsdPtr->styleTable, (name!=NULL?name:"")); if (entryPtr == NULL) { if (interp != NULL) { - Tcl_AppendResult(interp, "style \"", name, "\" doesn't exist", NULL); + Tcl_AppendResult(interp, "style \"", name, "\" doesn't exist", + NULL); } return (Tk_Style) NULL; } @@ -1385,37 +1380,37 @@ Tk_GetStyle(interp, name) * * Tk_FreeStyle -- * - * No-op. Present only for stubs compatibility. + * No-op. Present only for stubs compatibility. * *--------------------------------------------------------------------------- */ -void -Tk_FreeStyle(style) - Tk_Style style; +void +Tk_FreeStyle( + Tk_Style style) { } /* *--------------------------------------------------------------------------- * - * Tk_AllocStyleFromObj -- + * Tk_AllocStyleFromObj -- * - * Map the string name of a style to a corresponding Tk_Style. The style + * Map the string name of a style to a corresponding Tk_Style. The style * must have already been created by Tk_CreateStyle. * * Results: - * The return value is a token for the style that matches objPtr, or - * NULL if none found. If NULL is returned, an error message will be - * left in interp's result object. + * The return value is a token for the style that matches objPtr, or NULL + * if none found. If NULL is returned, an error message will be left in + * interp's result object. * *--------------------------------------------------------------------------- */ Tk_Style -Tk_AllocStyleFromObj(interp, objPtr) - Tcl_Interp *interp; /* Interp for error return. */ - Tcl_Obj *objPtr; /* Object containing name of the style to +Tk_AllocStyleFromObj( + Tcl_Interp *interp, /* Interp for error return. */ + Tcl_Obj *objPtr) /* Object containing name of the style to * retrieve. */ { Style *stylePtr; @@ -1435,26 +1430,26 @@ Tk_AllocStyleFromObj(interp, objPtr) * * Tk_GetStyleFromObj -- * - * Find the style that corresponds to a given object. The style must - * have already been created by Tk_CreateStyle. + * Find the style that corresponds to a given object. The style must have + * already been created by Tk_CreateStyle. * * Results: - * The return value is a token for the style that matches objPtr, or - * NULL if none found. + * The return value is a token for the style that matches objPtr, or NULL + * if none found. * * Side effects: - * If the object is not already a style ref, the conversion will free - * any old internal representation. + * If the object is not already a style ref, the conversion will free any + * old internal representation. * *---------------------------------------------------------------------- */ Tk_Style -Tk_GetStyleFromObj(objPtr) - Tcl_Obj *objPtr; /* The object from which to get the style. */ +Tk_GetStyleFromObj( + Tcl_Obj *objPtr) /* The object from which to get the style. */ { if (objPtr->typePtr != &styleObjType) { - SetStyleFromAny((Tcl_Interp *) NULL, objPtr); + SetStyleFromAny(NULL, objPtr); } return (Tk_Style) objPtr->internalRep.otherValuePtr; @@ -1463,15 +1458,15 @@ Tk_GetStyleFromObj(objPtr) /* *--------------------------------------------------------------------------- * - * Tk_FreeStyleFromObj -- + * Tk_FreeStyleFromObj -- * - * No-op. Present only for stubs compatibility. + * No-op. Present only for stubs compatibility. * *--------------------------------------------------------------------------- */ void -Tk_FreeStyleFromObj(objPtr) - Tcl_Obj *objPtr; +Tk_FreeStyleFromObj( + Tcl_Obj *objPtr) { } @@ -1480,13 +1475,12 @@ Tk_FreeStyleFromObj(objPtr) * * SetStyleFromAny -- * - * Convert the internal representation of a Tcl object to the - * style internal form. + * Convert the internal representation of a Tcl object to the style + * internal form. * * Results: - * Always returns TCL_OK. If an error occurs is returned (e.g. the - * style doesn't exist), an error message will be left in interp's - * result. + * Always returns TCL_OK. If an error occurs is returned (e.g. the style + * doesn't exist), an error message will be left in interp's result. * * Side effects: * The object is left with its typePtr pointing to styleObjType. @@ -1495,15 +1489,15 @@ Tk_FreeStyleFromObj(objPtr) */ static int -SetStyleFromAny(interp, objPtr) - Tcl_Interp *interp; /* Used for error reporting if not NULL. */ - Tcl_Obj *objPtr; /* The object to convert. */ +SetStyleFromAny( + Tcl_Interp *interp, /* Used for error reporting if not NULL. */ + Tcl_Obj *objPtr) /* The object to convert. */ { Tcl_ObjType *typePtr; char *name; /* - * Free the old internalRep before setting the new one. + * Free the old internalRep before setting the new one. */ name = Tcl_GetString(objPtr); @@ -1521,10 +1515,10 @@ SetStyleFromAny(interp, objPtr) /* *--------------------------------------------------------------------------- * - * FreeStyleObjProc -- + * FreeStyleObjProc -- * - * This proc is called to release an object reference to a style. - * Called when the object's internal rep is released. + * This proc is called to release an object reference to a style. Called + * when the object's internal rep is released. * * Results: * None. @@ -1533,8 +1527,8 @@ SetStyleFromAny(interp, objPtr) */ static void -FreeStyleObjProc(objPtr) - Tcl_Obj *objPtr; /* The object we are releasing. */ +FreeStyleObjProc( + Tcl_Obj *objPtr) /* The object we are releasing. */ { objPtr->internalRep.otherValuePtr = NULL; objPtr->typePtr = NULL; @@ -1543,19 +1537,27 @@ FreeStyleObjProc(objPtr) /* *--------------------------------------------------------------------------- * - * DupStyleObjProc -- + * DupStyleObjProc -- * - * When a cached style object is duplicated, this is called to - * update the internal reps. + * When a cached style object is duplicated, this is called to update the + * internal reps. * *--------------------------------------------------------------------------- */ static void -DupStyleObjProc(srcObjPtr, dupObjPtr) - Tcl_Obj *srcObjPtr; /* The object we are copying from. */ - Tcl_Obj *dupObjPtr; /* The object we are copying to. */ +DupStyleObjProc( + Tcl_Obj *srcObjPtr, /* The object we are copying from. */ + Tcl_Obj *dupObjPtr) /* The object we are copying to. */ { dupObjPtr->typePtr = srcObjPtr->typePtr; dupObjPtr->internalRep.otherValuePtr=srcObjPtr->internalRep.otherValuePtr; } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ diff --git a/generic/tkUndo.h b/generic/tkUndo.h index 3c34a0f..a8b053e 100644 --- a/generic/tkUndo.h +++ b/generic/tkUndo.h @@ -1,15 +1,14 @@ /* * tkUndo.h -- * - * Declarations shared among the files that implement an undo - * stack. + * Declarations shared among the files that implement an undo stack. * * Copyright (c) 2002 Ludwig Callewaert. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkUndo.h,v 1.3 2004/09/10 12:13:42 vincentdarley Exp $ + * RCS: @(#) $Id: tkUndo.h,v 1.4 2005/11/15 15:18:22 dkf Exp $ */ #ifndef _TKUNDO @@ -24,104 +23,98 @@ # define TCL_STORAGE_CLASS DLLEXPORT #endif -/* Enum definining the types used in an undo stack */ +/* + * Enum definining the types used in an undo stack. + */ typedef enum { - TK_UNDO_SEPARATOR, /* Marker */ - TK_UNDO_ACTION /* Command */ + TK_UNDO_SEPARATOR, /* Marker */ + TK_UNDO_ACTION /* Command */ } TkUndoAtomType; -/* - * Callback proc type to carry out an undo or redo action - * via C code. (Actions can also be defined by Tcl scripts). +/* + * Callback proc type to carry out an undo or redo action via C code. (Actions + * can also be defined by Tcl scripts). */ -typedef int (TkUndoProc) _ANSI_ARGS_((Tcl_Interp *interp, - ClientData clientData, - Tcl_Obj *objPtr)); +typedef int (TkUndoProc)(Tcl_Interp *interp, ClientData clientData, + Tcl_Obj *objPtr); -/* - * Struct defining a single action, one or more of which may - * be defined (and stored in a linked list) separately for each - * undo and redo action of an undo atom. +/* + * Struct defining a single action, one or more of which may be defined (and + * stored in a linked list) separately for each undo and redo action of an + * undo atom. */ typedef struct TkUndoSubAtom { - Tcl_Command command; /* Tcl token used to get the current - * Tcl command name which will be used - * to execute apply/revert scripts. If - * NULL then it is assumed the - * apply/revert scripts already contain - * everything. */ - TkUndoProc *funcPtr; /* Function pointer for callback to - * perform undo/redo actions. */ + Tcl_Command command; /* Tcl token used to get the current Tcl + * command name which will be used to execute + * apply/revert scripts. If NULL then it is + * assumed the apply/revert scripts already + * contain everything. */ + TkUndoProc *funcPtr; /* Function pointer for callback to perform + * undo/redo actions. */ ClientData clientData; /* data for 'funcPtr' */ - Tcl_Obj *action; /* Command to apply the action that - * was taken */ - struct TkUndoSubAtom *next; /* Pointer to the next element in the - * linked list */ + Tcl_Obj *action; /* Command to apply the action that was + * taken */ + struct TkUndoSubAtom *next; /* Pointer to the next element in the linked + * list */ } TkUndoSubAtom; -/* - * Struct representing a single undo+redo atom to be placed in - * the stack. +/* + * Struct representing a single undo+redo atom to be placed in the stack. */ typedef struct TkUndoAtom { - TkUndoAtomType type; /* The type that will trigger the - * required action*/ - TkUndoSubAtom *apply; /* Linked list of 'apply' actions to - * perform for this operation */ - TkUndoSubAtom *revert; /* Linked list of 'revert' actions to - * perform for this operation */ - struct TkUndoAtom *next; /* Pointer to the next element in the - * stack */ + TkUndoAtomType type; /* The type that will trigger the required + * action. */ + TkUndoSubAtom *apply; /* Linked list of 'apply' actions to perform + * for this operation. */ + TkUndoSubAtom *revert; /* Linked list of 'revert' actions to perform + * for this operation. */ + struct TkUndoAtom *next; /* Pointer to the next element in the stack */ } TkUndoAtom; -/* +/* * Struct defining a single undo+redo stack. */ typedef struct TkUndoRedoStack { - TkUndoAtom * undoStack; /* The undo stack */ - TkUndoAtom * redoStack; /* The redo stack */ - Tcl_Interp * interp ; /* The interpreter in which to execute - * the revert and apply scripts */ - int maxdepth; - int depth; + TkUndoAtom *undoStack; /* The undo stack */ + TkUndoAtom *redoStack; /* The redo stack */ + Tcl_Interp *interp; /* The interpreter in which to execute the + * revert and apply scripts */ + int maxdepth; + int depth; } TkUndoRedoStack; -/* Basic functions */ - -EXTERN void TkUndoPushStack _ANSI_ARGS_((TkUndoAtom **stack, - TkUndoAtom *elem)); -EXTERN TkUndoAtom * TkUndoPopStack _ANSI_ARGS_((TkUndoAtom **stack)); -EXTERN int TkUndoInsertSeparator _ANSI_ARGS_((TkUndoAtom **stack)); -EXTERN void TkUndoClearStack _ANSI_ARGS_((TkUndoAtom **stack)); - -/* Functions for working on an undo/redo stack */ - -EXTERN TkUndoRedoStack * TkUndoInitStack _ANSI_ARGS_((Tcl_Interp *interp, - int maxdepth)); -EXTERN void TkUndoSetDepth _ANSI_ARGS_((TkUndoRedoStack *stack, - int maxdepth)); -EXTERN void TkUndoClearStacks _ANSI_ARGS_((TkUndoRedoStack *stack)); -EXTERN void TkUndoFreeStack _ANSI_ARGS_((TkUndoRedoStack *stack)); -EXTERN void TkUndoInsertUndoSeparator _ANSI_ARGS_((TkUndoRedoStack *stack)); -EXTERN TkUndoSubAtom * TkUndoMakeCmdSubAtom _ANSI_ARGS_(( - Tcl_Command command, - Tcl_Obj *actionScript, - TkUndoSubAtom *subAtomList)); -EXTERN TkUndoSubAtom * TkUndoMakeSubAtom _ANSI_ARGS_(( - TkUndoProc *funcPtr, - ClientData clientData, - Tcl_Obj *actionScript, - TkUndoSubAtom *subAtomList)); -EXTERN void TkUndoPushAction _ANSI_ARGS_((TkUndoRedoStack *stack, - TkUndoSubAtom *apply, - TkUndoSubAtom *revert)); -EXTERN int TkUndoRevert _ANSI_ARGS_((TkUndoRedoStack *stack)); -EXTERN int TkUndoApply _ANSI_ARGS_((TkUndoRedoStack *stack)); +/* + * Basic functions. + */ + +EXTERN void TkUndoPushStack(TkUndoAtom **stack, TkUndoAtom *elem); +EXTERN TkUndoAtom * TkUndoPopStack(TkUndoAtom **stack); +EXTERN int TkUndoInsertSeparator(TkUndoAtom **stack); +EXTERN void TkUndoClearStack(TkUndoAtom **stack); + +/* + * Functions for working on an undo/redo stack. + */ + +EXTERN TkUndoRedoStack *TkUndoInitStack(Tcl_Interp *interp, int maxdepth); +EXTERN void TkUndoSetDepth(TkUndoRedoStack *stack, int maxdepth); +EXTERN void TkUndoClearStacks(TkUndoRedoStack *stack); +EXTERN void TkUndoFreeStack(TkUndoRedoStack *stack); +EXTERN void TkUndoInsertUndoSeparator(TkUndoRedoStack *stack); +EXTERN TkUndoSubAtom * TkUndoMakeCmdSubAtom(Tcl_Command command, + Tcl_Obj *actionScript, TkUndoSubAtom *subAtomList); +EXTERN TkUndoSubAtom * TkUndoMakeSubAtom(TkUndoProc *funcPtr, + ClientData clientData, Tcl_Obj *actionScript, + TkUndoSubAtom *subAtomList); +EXTERN void TkUndoPushAction(TkUndoRedoStack *stack, + TkUndoSubAtom *apply, TkUndoSubAtom *revert); +EXTERN int TkUndoRevert(TkUndoRedoStack *stack); +EXTERN int TkUndoApply(TkUndoRedoStack *stack); # undef TCL_STORAGE_CLASS # define TCL_STORAGE_CLASS DLLIMPORT diff --git a/generic/tkVisual.c b/generic/tkVisual.c index 9f81693..b8cd42f 100644 --- a/generic/tkVisual.c +++ b/generic/tkVisual.c @@ -1,31 +1,31 @@ -/* +/* * tkVisual.c -- * - * This file contains library procedures for allocating and - * freeing visuals and colormaps. This code is based on a - * prototype implementation by Paul Mackerras. + * This file contains library procedures for allocating and freeing + * visuals and colormaps. This code is based on a prototype + * implementation by Paul Mackerras. * * Copyright (c) 1994 The Regents of the University of California. * Copyright (c) 1994-1997 Sun Microsystems, Inc. * - * See the file "license.terms" for information on usage and redistribution - * of this file, and for a DISCLAIMER OF ALL WARRANTIES. + * See the file "license.terms" for information on usage and redistribution of + * this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkVisual.c,v 1.6 2004/05/23 17:27:55 dkf Exp $ + * RCS: @(#) $Id: tkVisual.c,v 1.7 2005/11/15 15:18:22 dkf Exp $ */ #include "tkInt.h" #include "tkPort.h" /* - * The table below maps from symbolic names for visual classes - * to the associated X class symbols. + * The table below maps from symbolic names for visual classes to the + * associated X class symbols. */ typedef struct VisualDictionary { char *name; /* Textual name of class. */ - int minLength; /* Minimum # characters that must be - * specified for an unambiguous match. */ + int minLength; /* Minimum # characters that must be specified + * for an unambiguous match. */ int class; /* X symbol for class. */ } VisualDictionary; static VisualDictionary visualNames[] = { @@ -48,17 +48,16 @@ static VisualDictionary visualNames[] = { struct TkColormap { Colormap colormap; /* X's identifier for the colormap. */ - Visual *visual; /* Visual for which colormap was - * allocated. */ + Visual *visual; /* Visual for which colormap was allocated. */ int refCount; /* How many uses of the colormap are still - * outstanding (calls to Tk_GetColormap - * minus calls to Tk_FreeColormap). */ - int shareable; /* 0 means this colormap was allocated by - * a call to Tk_GetColormap with "new", - * implying that the window wants it all - * for itself. 1 means that the colormap - * was allocated as a default for a particular - * visual, so it can be shared. */ + * outstanding (calls to Tk_GetColormap minus + * calls to Tk_FreeColormap). */ + int shareable; /* 0 means this colormap was allocated by a + * call to Tk_GetColormap with "new", implying + * that the window wants it all for itself. 1 + * means that the colormap was allocated as a + * default for a particular visual, so it can + * be shared. */ struct TkColormap *nextPtr; /* Next in list of colormaps for this display, * or NULL for end of list. */ }; @@ -68,17 +67,17 @@ struct TkColormap { * * Tk_GetVisual -- * - * Given a string identifying a particular kind of visual, this - * procedure returns a visual and depth that matches the specification. + * Given a string identifying a particular kind of visual, this procedure + * returns a visual and depth that matches the specification. * * Results: - * The return value is normally a pointer to a visual. If an - * error occurred in looking up the visual, NULL is returned and - * an error message is left in the interp's result. The depth of the - * visual is returned to *depthPtr under normal returns. If - * colormapPtr is non-NULL, then this procedure also finds a - * suitable colormap for use with the visual in tkwin, and it - * returns that colormap in *colormapPtr unless an error occurs. + * The return value is normally a pointer to a visual. If an error + * occurred in looking up the visual, NULL is returned and an error + * message is left in the interp's result. The depth of the visual is + * returned to *depthPtr under normal returns. If colormapPtr is + * non-NULL, then this procedure also finds a suitable colormap for use + * with the visual in tkwin, and it returns that colormap in *colormapPtr + * unless an error occurs. * * Side effects: * A new colormap may be allocated. @@ -87,19 +86,17 @@ struct TkColormap { */ Visual * -Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) - Tcl_Interp *interp; /* Interpreter to use for error - * reporting. */ - Tk_Window tkwin; /* Window in which visual will be - * used. */ - CONST char *string; /* String describing visual. See - * manual entry for details. */ - int *depthPtr; /* The depth of the returned visual - * is stored here. */ - Colormap *colormapPtr; /* If non-NULL, then a suitable - * colormap for visual is placed here. - * This colormap must eventually be - * freed by calling Tk_FreeColormap. */ +Tk_GetVisual( + Tcl_Interp *interp, /* Interpreter to use for error reporting. */ + Tk_Window tkwin, /* Window in which visual will be used. */ + CONST char *string, /* String describing visual. See manual entry + * for details. */ + int *depthPtr, /* The depth of the returned visual is stored + * here. */ + Colormap *colormapPtr) /* If non-NULL, then a suitable colormap for + * visual is placed here. This colormap must + * eventually be freed by calling + * Tk_FreeColormap. */ { Tk_Window tkwin2; XVisualInfo template, *visInfoList, *bestPtr; @@ -112,17 +109,16 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) TkDisplay *dispPtr = ((TkWindow *) tkwin)->dispPtr; /* - * Parse string and set up a template for use in searching for - * an appropriate visual. + * Parse string and set up a template for use in searching for an + * appropriate visual. */ c = string[0]; if (c == '.') { /* - * The string must be a window name. If the window is on the - * same screen as tkwin, then just use its visual. Otherwise - * use the information about the visual as a template for the - * search. + * The string must be a window name. If the window is on the same + * screen as tkwin, then just use its visual. Otherwise use the + * information about the visual as a template for the search. */ tkwin2 = Tk_NameToWindow(interp, string, tkwin); @@ -134,8 +130,8 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) *depthPtr = Tk_Depth(tkwin2); if (colormapPtr != NULL) { /* - * Use the colormap from the other window too (but be sure - * to increment its reference count if it's one of the ones + * Use the colormap from the other window too (but be sure to + * increment its reference count if it's one of the ones * allocated here). */ @@ -181,15 +177,15 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) if (Tcl_GetInt(interp, string, &visualId) == TCL_ERROR) { Tcl_ResetResult(interp); Tcl_AppendResult(interp, "bad X identifier for visual: \"", - string, "\"", (char *) NULL); + string, "\"", NULL); return NULL; } template.visualid = visualId; mask = VisualIDMask; } else { /* - * Parse the string into a class name (or "best") optionally - * followed by whitespace and a depth. + * Parse the string into a class name (or "best") optionally followed + * by whitespace and a depth. */ for (p = string; *p != 0; p++) { @@ -209,11 +205,11 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) } if (template.class == -1) { Tcl_AppendResult(interp, "unknown or ambiguous visual name \"", - string, "\": class must be ", (char *) NULL); + string, "\": class must be ", NULL); for (dictPtr = visualNames; dictPtr->name != NULL; dictPtr++) { - Tcl_AppendResult(interp, dictPtr->name, ", ", (char *) NULL); + Tcl_AppendResult(interp, dictPtr->name, ", ", NULL); } - Tcl_AppendResult(interp, "or default", (char *) NULL); + Tcl_AppendResult(interp, "or default", NULL); return NULL; } while (isspace(UCHAR(*p))) { @@ -234,8 +230,8 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) } /* - * Find all visuals that match the template we've just created, - * and return an error if there are none that match. + * Find all visuals that match the template we've just created, and return + * an error if there are none that match. */ template.screen = Tk_ScreenNumber(tkwin); @@ -249,31 +245,37 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) } /* - * Search through the visuals that were returned to find the best - * one. The choice is based on the following criteria, in decreasing - * order of importance: + * Search through the visuals that were returned to find the best one. + * The choice is based on the following criteria, in decreasing order of + * importance: * - * 1. Depth: choose a visual with exactly the desired depth, - * else one with more bits than requested but as few bits - * as possible, else one with fewer bits but as many as - * possible. - * 2. Class: some visual classes are more desirable than others; - * pick the visual with the most desirable class. - * 3. Default: the default visual for the screen gets preference - * over other visuals, all else being equal. + * 1. Depth: choose a visual with exactly the desired depth, else one with + * more bits than requested but as few bits as possible, else one with + * fewer bits but as many as possible. + * 2. Class: some visual classes are more desirable than others; pick the + * visual with the most desirable class. + * 3. Default: the default visual for the screen gets preference over + * other visuals, all else being equal. */ bestPrio = 0; bestPtr = NULL; for (i = 0; i < numVisuals; i++) { switch (visInfoList[i].class) { - case DirectColor: prio = 5; break; - case GrayScale: prio = 1; break; - case PseudoColor: prio = 7; break; - case StaticColor: prio = 3; break; - case StaticGray: prio = 1; break; - case TrueColor: prio = 5; break; - default: prio = 0; break; + case DirectColor: + prio = 5; break; + case GrayScale: + prio = 1; break; + case PseudoColor: + prio = 7; break; + case StaticColor: + prio = 3; break; + case StaticGray: + prio = 1; break; + case TrueColor: + prio = 5; break; + default: + prio = 0; break; } if (visInfoList[i].visual == DefaultVisualOfScreen(Tk_Screen(tkwin))) { @@ -297,7 +299,7 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) } continue; - newBest: + newBest: bestPtr = &visInfoList[i]; bestPrio = prio; } @@ -306,11 +308,10 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) XFree((char *) visInfoList); /* - * If we need to find a colormap for this visual, do it now. - * If the visual is the default visual for the screen, then - * use the default colormap. Otherwise search for an existing - * colormap that's shareable. If all else fails, create a new - * colormap. + * If we need to find a colormap for this visual, do it now. If the visual + * is the default visual for the screen, then use the default colormap. + * Otherwise search for an existing colormap that's shareable. If all else + * fails, create a new colormap. */ if (colormapPtr != NULL) { @@ -338,7 +339,7 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) } } - done: + done: return visual; } @@ -347,31 +348,28 @@ Tk_GetVisual(interp, tkwin, string, depthPtr, colormapPtr) * * Tk_GetColormap -- * - * Given a string identifying a colormap, this procedure finds - * an appropriate colormap. + * Given a string identifying a colormap, this procedure finds an + * appropriate colormap. * * Results: * The return value is normally the X resource identifier for the - * colormap. If an error occurs, None is returned and an error - * message is placed in the interp's result. + * colormap. If an error occurs, None is returned and an error message is + * placed in the interp's result. * * Side effects: - * A reference count is incremented for the colormap, so - * Tk_FreeColormap must eventually be called exactly once for - * each call to Tk_GetColormap. + * A reference count is incremented for the colormap, so Tk_FreeColormap + * must eventually be called exactly once for each call to + * Tk_GetColormap. * *---------------------------------------------------------------------- */ Colormap -Tk_GetColormap(interp, tkwin, string) - Tcl_Interp *interp; /* Interpreter to use for error - * reporting. */ - Tk_Window tkwin; /* Window where colormap will be - * used. */ - CONST char *string; /* String that identifies colormap: - * either "new" or the name of - * another window. */ +Tk_GetColormap( + Tcl_Interp *interp, /* Interpreter to use for error reporting. */ + Tk_Window tkwin, /* Window where colormap will be used. */ + CONST char *string) /* String that identifies colormap: either + * "new" or the name of another window. */ { Colormap colormap; TkColormap *cmapPtr; @@ -396,9 +394,9 @@ Tk_GetColormap(interp, tkwin, string) } /* - * Use a colormap from an existing window. It must have the same - * visual as tkwin (which means, among other things, that the - * other window must be on the same screen). + * Use a colormap from an existing window. It must have the same visual as + * tkwin (which means, among other things, that the other window must be + * on the same screen). */ other = Tk_NameToWindow(interp, string, tkwin); @@ -407,12 +405,12 @@ Tk_GetColormap(interp, tkwin, string) } if (Tk_Screen(other) != Tk_Screen(tkwin)) { Tcl_AppendResult(interp, "can't use colormap for ", string, - ": not on same screen", (char *) NULL); + ": not on same screen", NULL); return None; } if (Tk_Visual(other) != Tk_Visual(tkwin)) { Tcl_AppendResult(interp, "can't use colormap for ", string, - ": incompatible visuals", (char *) NULL); + ": incompatible visuals", NULL); return None; } colormap = Tk_Colormap(other); @@ -436,36 +434,35 @@ Tk_GetColormap(interp, tkwin, string) * * Tk_FreeColormap -- * - * This procedure is called to release a colormap that was - * previously allocated by Tk_GetColormap. + * This procedure is called to release a colormap that was previously + * allocated by Tk_GetColormap. * * Results: * None. * * Side effects: - * The colormap's reference count is decremented. If this was the - * last reference to the colormap, then the colormap is freed. + * The colormap's reference count is decremented. If this was the last + * reference to the colormap, then the colormap is freed. * *---------------------------------------------------------------------- */ void -Tk_FreeColormap(display, colormap) - Display *display; /* Display for which colormap was - * allocated. */ - Colormap colormap; /* Colormap that is no longer needed. - * Must have been returned by previous - * call to Tk_GetColormap, or - * preserved by a previous call to - * Tk_PreserveColormap. */ +Tk_FreeColormap( + Display *display, /* Display for which colormap was + * allocated. */ + Colormap colormap) /* Colormap that is no longer needed. Must + * have been returned by previous call to + * Tk_GetColormap, or preserved by a previous + * call to Tk_PreserveColormap. */ { TkDisplay *dispPtr; TkColormap *cmapPtr, *prevPtr; /* - * Find Tk's information about the display, then see if this - * colormap is a non-default one (if it's a default one, there - * won't be an entry for it in the display's list). + * Find Tk's information about the display, then see if this colormap is a + * non-default one (if it's a default one, there won't be an entry for it + * in the display's list). */ dispPtr = TkGetDisplay(display); @@ -487,7 +484,7 @@ Tk_FreeColormap(display, colormap) } return; } - } + } } /* @@ -495,36 +492,35 @@ Tk_FreeColormap(display, colormap) * * Tk_PreserveColormap -- * - * This procedure is called to indicate to Tk that the specified - * colormap is being referenced from another location and should - * not be freed until all extra references are eliminated. The - * colormap must have been returned by Tk_GetColormap. + * This procedure is called to indicate to Tk that the specified colormap + * is being referenced from another location and should not be freed + * until all extra references are eliminated. The colormap must have been + * returned by Tk_GetColormap. * * Results: * None. * * Side effects: - * The colormap's reference count is incremented, so - * Tk_FreeColormap must eventually be called exactly once for - * each call to Tk_PreserveColormap. + * The colormap's reference count is incremented, so Tk_FreeColormap must + * eventually be called exactly once for each call to + * Tk_PreserveColormap. * *---------------------------------------------------------------------- */ void -Tk_PreserveColormap(display, colormap) - Display *display; /* Display for which colormap was - * allocated. */ - Colormap colormap; /* Colormap that should be - * preserved. */ +Tk_PreserveColormap( + Display *display, /* Display for which colormap was + * allocated. */ + Colormap colormap) /* Colormap that should be preserved. */ { TkDisplay *dispPtr; TkColormap *cmapPtr; /* - * Find Tk's information about the display, then see if this - * colormap is a non-default one (if it's a default one, there - * won't be an entry for it in the display's list). + * Find Tk's information about the display, then see if this colormap is a + * non-default one (if it's a default one, there won't be an entry for it + * in the display's list). */ dispPtr = TkGetDisplay(display); @@ -537,5 +533,13 @@ Tk_PreserveColormap(display, colormap) cmapPtr->refCount += 1; return; } - } + } } + +/* + * Local Variables: + * mode: c + * c-basic-offset: 4 + * fill-column: 78 + * End: + */ -- cgit v0.12