diff options
author | hobbs <hobbs> | 2004-10-05 22:27:25 (GMT) |
---|---|---|
committer | hobbs <hobbs> | 2004-10-05 22:27:25 (GMT) |
commit | 7ab5ea85960517b81f0466e0121003ff45e98369 (patch) | |
tree | 13c1b1ed9de46677032e5133c6477bf34437d5e8 /macosx/tkMacOSXWm.c | |
parent | 71ccd83260b9cb9ed67dc38726c9cbcb90991fcd (diff) | |
download | tk-7ab5ea85960517b81f0466e0121003ff45e98369.zip tk-7ab5ea85960517b81f0466e0121003ff45e98369.tar.gz tk-7ab5ea85960517b81f0466e0121003ff45e98369.tar.bz2 |
Backport of 8.5 wm iconphoto that added support for Tk photo
* generic/tkInt.h (TkDisplay): images as titlebar icons. TIP #159
* win/tkWinWm.c (WmIconphotoCmd): wm iconphoto ?-default? image1 ...
* macosx/tkMacOSXWm.c (WmIconphotoCmd): Implemented for Win/Unix,
* unix/tkUnixWm.c (WmIconphotoCmd): stubbed out for OS X.
* tests/wm.test, tests/unixWm.test, tests/winWm.test: [Bug 815751]
Diffstat (limited to 'macosx/tkMacOSXWm.c')
-rw-r--r-- | macosx/tkMacOSXWm.c | 77 |
1 files changed, 74 insertions, 3 deletions
diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c index 9e17a9d..d1477f0 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.4 2004/07/25 01:57:41 wolfsuit Exp $ + * RCS: @(#) $Id: tkMacOSXWm.c,v 1.7.2.5 2004/10/05 22:27:26 hobbs Exp $ */ #include <Carbon/Carbon.h> @@ -129,6 +129,9 @@ static int WmIconmaskCmd _ANSI_ARGS_((Tk_Window tkwin, static int WmIconnameCmd _ANSI_ARGS_((Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); +static int WmIconphotoCmd _ANSI_ARGS_((Tk_Window tkwin, + TkWindow *winPtr, Tcl_Interp *interp, int objc, + Tcl_Obj *CONST objv[])); static int WmIconpositionCmd _ANSI_ARGS_((Tk_Window tkwin, TkWindow *winPtr, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[])); @@ -542,7 +545,8 @@ Tk_WmObjCmd( "aspect", "attributes", "client", "colormapwindows", "command", "deiconify", "focusmodel", "frame", "geometry", "grid", "group", "iconbitmap", - "iconify", "iconmask", "iconname", "iconposition", + "iconify", "iconmask", "iconname", + "iconphoto", "iconposition", "iconwindow", "maxsize", "minsize", "overrideredirect", "positionfrom", "protocol", "resizable", "sizefrom", "stackorder", "state", "title", "transient", @@ -551,7 +555,8 @@ Tk_WmObjCmd( WMOPT_ASPECT, WMOPT_ATTRIBUTES, WMOPT_CLIENT, WMOPT_COLORMAPWINDOWS, WMOPT_COMMAND, WMOPT_DEICONIFY, WMOPT_FOCUSMODEL, WMOPT_FRAME, WMOPT_GEOMETRY, WMOPT_GRID, WMOPT_GROUP, WMOPT_ICONBITMAP, - WMOPT_ICONIFY, WMOPT_ICONMASK, WMOPT_ICONNAME, WMOPT_ICONPOSITION, + WMOPT_ICONIFY, WMOPT_ICONMASK, WMOPT_ICONNAME, + WMOPT_ICONPHOTO, WMOPT_ICONPOSITION, WMOPT_ICONWINDOW, WMOPT_MAXSIZE, WMOPT_MINSIZE, WMOPT_OVERRIDEREDIRECT, WMOPT_POSITIONFROM, WMOPT_PROTOCOL, WMOPT_RESIZABLE, WMOPT_SIZEFROM, WMOPT_STACKORDER, WMOPT_STATE, WMOPT_TITLE, WMOPT_TRANSIENT, @@ -630,6 +635,8 @@ wrongNumArgs: return WmIconmaskCmd(tkwin, winPtr, interp, objc, objv); case WMOPT_ICONNAME: return WmIconnameCmd(tkwin, winPtr, interp, objc, objv); + case WMOPT_ICONPHOTO: + return WmIconphotoCmd(tkwin, winPtr, interp, objc, objv); case WMOPT_ICONPOSITION: return WmIconpositionCmd(tkwin, winPtr, interp, objc, objv); case WMOPT_ICONWINDOW: @@ -1733,6 +1740,70 @@ Tcl_Obj *CONST objv[]; /* Argument objects. */ /* *---------------------------------------------------------------------- * + * WmIconphotoCmd -- + * + * This procedure is invoked to process the "wm iconphoto" + * Tcl command. + * See the user documentation for details on what it does. + * Not yet implemented for OS X. + * + * Results: + * A standard Tcl result. + * + * Side effects: + * See the user documentation. + * + *---------------------------------------------------------------------- + */ + +static int +WmIconphotoCmd(tkwin, winPtr, interp, objc, objv) + Tk_Window tkwin; /* Main window of the application. */ + TkWindow *winPtr; /* Toplevel to work with */ + Tcl_Interp *interp; /* Current interpreter. */ + int objc; /* Number of arguments. */ + Tcl_Obj *CONST objv[]; /* Argument objects. */ +{ + register WmInfo *wmPtr = winPtr->wmInfoPtr; + Tk_PhotoHandle photo; + int i, width, height, isDefault = 0; + + if (objc < 4) { + Tcl_WrongNumArgs(interp, 2, objv, + "window ?-default? image1 ?image2 ...?"); + return TCL_ERROR; + } + if (strcmp(Tcl_GetString(objv[3]), "-default") == 0) { + isDefault = 1; + if (objc == 4) { + Tcl_WrongNumArgs(interp, 2, objv, + "window ?-default? image1 ?image2 ...?"); + return TCL_ERROR; + } + } + /* + * Iterate over all images to retrieve their sizes, in order to allocate a + * buffer large enough to hold all images. + */ + for (i = 3 + isDefault; i < objc; i++) { + photo = Tk_FindPhoto(interp, Tcl_GetString(objv[i])); + if (photo == NULL) { + Tcl_AppendResult(interp, "can't use \"", Tcl_GetString(objv[i]), + "\" as iconphoto: not a photo image", (char *) NULL); + return TCL_ERROR; + } + Tk_PhotoGetSize(photo, &width, &height); + } + /* + * This requires implementation for OS X, but we silently return + * for now. + */ + return TCL_OK; +} + +/* + *---------------------------------------------------------------------- + * * WmIconpositionCmd -- * * This procedure is invoked to process the "wm iconposition" |