Import Tk 8.6.6 (as of svn r86089)
This commit is contained in:
153
unix/tkUnixXId.c
Normal file
153
unix/tkUnixXId.c
Normal file
@@ -0,0 +1,153 @@
|
||||
/*
|
||||
* tkUnixXId.c --
|
||||
*
|
||||
* Copyright (c) 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.
|
||||
*/
|
||||
|
||||
#include "tkUnixInt.h"
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tk_FreeXId --
|
||||
*
|
||||
* This function is called to indicate that an X resource identifier is
|
||||
* now free.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The identifier is added to the stack of free identifiers for its
|
||||
* display, so that it can be re-used.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
Tk_FreeXId(
|
||||
Display *display, /* Display for which xid was allocated. */
|
||||
XID xid) /* Identifier that is no longer in use. */
|
||||
{
|
||||
/*
|
||||
* This does nothing, because the XC-MISC extension takes care of
|
||||
* freeing XIDs for us. It has been a standard X11 extension for
|
||||
* about 15 years as of 2008. Keith Packard and another X.org
|
||||
* developer suggested that we remove the previous code that used:
|
||||
* #define XLIB_ILLEGAL_ACCESS.
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tk_GetPixmap --
|
||||
*
|
||||
* Same as the XCreatePixmap function except that it manages resource
|
||||
* identifiers better.
|
||||
*
|
||||
* Results:
|
||||
* Returns a new pixmap.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
Pixmap
|
||||
Tk_GetPixmap(
|
||||
Display *display, /* Display for new pixmap. */
|
||||
Drawable d, /* Drawable where pixmap will be used. */
|
||||
int width, int height, /* Dimensions of pixmap. */
|
||||
int depth) /* Bits per pixel for pixmap. */
|
||||
{
|
||||
return XCreatePixmap(display, d, (unsigned) width, (unsigned) height,
|
||||
(unsigned) depth);
|
||||
}
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* Tk_FreePixmap --
|
||||
*
|
||||
* Same as the XFreePixmap function except that it also marks the
|
||||
* resource identifier as free.
|
||||
*
|
||||
* Results:
|
||||
* None.
|
||||
*
|
||||
* Side effects:
|
||||
* The pixmap is freed in the X server and its resource identifier is
|
||||
* saved for re-use.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
void
|
||||
Tk_FreePixmap(
|
||||
Display *display, /* Display for which pixmap was allocated. */
|
||||
Pixmap pixmap) /* Identifier for pixmap. */
|
||||
{
|
||||
XFreePixmap(display, pixmap);
|
||||
Tk_FreeXId(display, (XID) pixmap);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
*----------------------------------------------------------------------
|
||||
*
|
||||
* TkpScanWindowId --
|
||||
*
|
||||
* Given a string, produce the corresponding Window Id.
|
||||
*
|
||||
* Results:
|
||||
* The return value is normally TCL_OK; in this case *idPtr will be set
|
||||
* to the Window value equivalent to string. If string is improperly
|
||||
* formed then TCL_ERROR is returned and an error message will be left in
|
||||
* the interp's result.
|
||||
*
|
||||
* Side effects:
|
||||
* None.
|
||||
*
|
||||
*----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
int
|
||||
TkpScanWindowId(
|
||||
Tcl_Interp *interp,
|
||||
const char *string,
|
||||
Window *idPtr)
|
||||
{
|
||||
int code;
|
||||
Tcl_Obj obj;
|
||||
|
||||
obj.refCount = 1;
|
||||
obj.bytes = (char *) string; /* DANGER?! */
|
||||
obj.length = strlen(string);
|
||||
obj.typePtr = NULL;
|
||||
|
||||
code = Tcl_GetLongFromObj(interp, &obj, (long *)idPtr);
|
||||
|
||||
if (obj.refCount > 1) {
|
||||
Tcl_Panic("invalid sharing of Tcl_Obj on C stack");
|
||||
}
|
||||
if (obj.typePtr && obj.typePtr->freeIntRepProc) {
|
||||
obj.typePtr->freeIntRepProc(&obj);
|
||||
}
|
||||
return code;
|
||||
}
|
||||
|
||||
/*
|
||||
* Local Variables:
|
||||
* mode: c
|
||||
* c-basic-offset: 4
|
||||
* fill-column: 78
|
||||
* End:
|
||||
*/
|
||||
Reference in New Issue
Block a user