diff options
Diffstat (limited to 'macosx/tkMacOSXWm.c')
-rw-r--r-- | macosx/tkMacOSXWm.c | 70 |
1 files changed, 60 insertions, 10 deletions
diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index d1477f0..fe8b9a0 100644 --- a/macosx/tkMacOSXWm.c +++ b/macosx/tkMacOSXWm.c @@ -12,7 +12,7 @@ * See the file "license.terms" for information on usage and redistribution * of this file, and for a DISCLAIMER OF ALL WARRANTIES. * - * RCS: @(#) $Id: tkMacOSXWm.c,v 1.7.2.5 2004/10/05 22:27:26 hobbs Exp $ + * RCS: @(#) $Id: tkMacOSXWm.c,v 1.7.2.6 2004/11/11 01:26:43 das Exp $ */ #include <Carbon/Carbon.h> @@ -90,6 +90,7 @@ static void WmAttrGetModifiedStatus(WindowRef macWindow, Tcl_Obj *result); static void WmAttrGetTitlePath(WindowRef macWindow, Tcl_Obj *result); +static void WmAttrGetAlpha(WindowRef macWindow, Tcl_Obj *result); static int WmClientCmd _ANSI_ARGS_((Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); @@ -773,17 +774,19 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ const char *optionTable[] = { "-modified", "-titlepath", + "-alpha", (char *)NULL }; enum optionIdx { WmAttrModifiedIdx, - WmAttrTitlePathIdx + WmAttrTitlePathIdx, + WmAttrAlphaIdx, }; /* Must have objc >= 3 at this point. */ if (objc < 3) { - Tcl_WrongNumArgs(interp, 0, objv, - "wm attributes window ?-modified ?bool?? ?-titlepath ?path??"); + Tcl_WrongNumArgs(interp, 1, objv, + "attributes window ?-modified ?bool?? ?-titlepath ?path?? ?-alpha ?double??"); return TCL_ERROR; } @@ -795,6 +798,8 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ WmAttrGetModifiedStatus(macWindow, result); Tcl_AppendToObj(result, " -titlepath ", -1); WmAttrGetTitlePath(macWindow, result); + Tcl_AppendToObj(result, " -alpha ", -1); + WmAttrGetAlpha(macWindow, result); Tcl_SetObjResult(interp, result); return TCL_OK; } @@ -811,6 +816,9 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ case WmAttrTitlePathIdx: WmAttrGetTitlePath(macWindow, result); break; + case WmAttrAlphaIdx: + WmAttrGetAlpha(macWindow, result); + break; } Tcl_SetObjResult(interp, result); return TCL_OK; @@ -818,7 +826,7 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ if ( (objc - 3) % 2 != 0 ) { Tcl_WrongNumArgs(interp, 3, objv, - "?-modified ?bool?? ?-titlepath ?path??"); + "?-modified ?bool?? ?-titlepath ?path?? ?-alpha ?double??"); return TCL_ERROR; } for (i = 3; i < objc; i += 2) { @@ -827,6 +835,7 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ FSRef ref; AliasHandle alias; Boolean isDirectory; + double dval; if (Tcl_GetIndexFromObj(interp, objv[i], optionTable, "option", 0, &index) != TCL_OK) { @@ -860,6 +869,22 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ result = objv[i+1]; } break; + case WmAttrAlphaIdx: + if (Tcl_GetDoubleFromObj(interp, objv[i+1], &dval) != + TCL_OK) { + return TCL_ERROR; + } + /* + * The user should give (transparent) 0 .. 1.0 (opaque) + */ + if (dval < 0.0) { + dval = 0.0; + } else if (dval > 1.0) { + dval = 1.0; + } + result = Tcl_NewDoubleObj(dval); + SetWindowAlpha(macWindow, dval); + break; } } Tcl_SetObjResult(interp, result); @@ -928,6 +953,31 @@ static void WmAttrGetTitlePath(WindowRef macWindow, Tcl_Obj *result) /* *---------------------------------------------------------------------- + * WmAttrGetAlpha -- + * + * Helper procedure to retrieve the -alpha option for the wm + * attributes command. + * + * Results: + * Nothing. + * + * Side effects: + * Appends the alpha value of the given window to the Tcl_Obj + * passed in. + * + *---------------------------------------------------------------------- + */ +static void WmAttrGetAlpha(WindowRef macWindow, Tcl_Obj *result) +{ + float fval; + if (GetWindowAlpha(macWindow, &fval) != noErr) { + fval = 1.0; + } + Tcl_AppendObjToObj(result, Tcl_NewDoubleObj(fval)); +} + +/* + *---------------------------------------------------------------------- * * WmClientCmd -- * @@ -1547,16 +1597,16 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ wmPtr->hints.flags &= ~IconPixmapHint; } else { OSErr err; - FSSpec spec; + AliasHandle alias; FSRef ref; Boolean isDirectory; err = FSPathMakeRef(Tcl_GetStringFromObj(objv[3], NULL), &ref, &isDirectory); if (err == noErr) { - err = FSGetCatalogInfo (&ref, kFSCatInfoNone, NULL, NULL, &spec, NULL); + err = FSNewAlias(NULL, &ref, &alias); if (err == noErr) { WindowRef macWin = GetWindowFromPort(TkMacOSXGetDrawablePort(winPtr->window)); - SetWindowProxyFSSpec(macWin, &spec); + SetWindowProxyAlias(macWin, alias); return TCL_OK; } } @@ -5050,9 +5100,9 @@ TkMacOSXMakeRealWindowExist( return; } else if (gMacEmbedHandler != NULL) { if (gMacEmbedHandler->containerExistProc != NULL) { - if (gMacEmbedHandler->containerExistProc((Tk_Window) winPtr) != TCL_OK) { + if (gMacEmbedHandler->containerExistProc((Tk_Window) winPtr) != TCL_OK) { panic("ContainerExistProc could not make container"); - } + } } return; } else { |