From e15ff9a55bb391af7bf3a2e476b2dd406c33ab9b Mon Sep 17 00:00:00 2001
From: das <das@noemail.net>
Date: Sun, 9 Apr 2006 22:07:27 +0000
Subject: 	* macosx/tkMacOSXWm.c (WmResizableCmd): propagate window
 attribute 	changes to Carbon window manager. [FR 1467004]

FossilOrigin-Name: d74d8edcdb6959b3911b861e772476e3cf806471
---
 ChangeLog           |  5 +++++
 macosx/tkMacOSXWm.c | 22 ++++++++++++++++------
 2 files changed, 21 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 5a3d463..2a017d6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2006-04-09  Daniel Steffen  <das@users.sourceforge.net>
+
+	* macosx/tkMacOSXWm.c (WmResizableCmd): propagate window attribute
+	changes to Carbon window manager. [FR 1467004]
+
 2006-04-07  Daniel Steffen  <das@users.sourceforge.net>
 
 	* macosx/tkMacOSXMouseEvent.c (TkMacOSXProcessMouseEvent): fix return
diff --git a/macosx/tkMacOSXWm.c b/macosx/tkMacOSXWm.c
index f45001a..bd0201e 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.20 2006/04/07 06:16:03 das Exp $
+ * RCS: @(#) $Id: tkMacOSXWm.c,v 1.7.2.21 2006/04/09 22:07:27 das Exp $
  */
 
 #include "tkMacOSXInt.h"
@@ -321,10 +321,10 @@ TkWmMapWindow(
 	/*
 	 * Create the underlying Mac window for this Tk window.
 	 */
-	macWin = (MacDrawable *) winPtr->window;
 	if (!TkMacOSXHostToplevelExists(winPtr)) {
 	    TkMacOSXMakeRealWindowExist(winPtr);
 	}
+	macWin = (MacDrawable *) winPtr->window;
 
 	/*
 	 * Generate configure event when we first map the window.
@@ -2368,7 +2368,7 @@ WmResizableCmd(tkwin, winPtr, interp, objc, objv)
     Tcl_Obj *CONST objv[];	/* Argument objects. */
 {
     register WmInfo *wmPtr = winPtr->wmInfoPtr;
-    int width, height;
+    int width, height, oldAttributes;
 
     if ((objc != 3) && (objc != 5)) {
         Tcl_WrongNumArgs(interp, 2, objv, "window ?width height?");
@@ -2387,6 +2387,7 @@ WmResizableCmd(tkwin, winPtr, interp, objc, objv)
         || (Tcl_GetBooleanFromObj(interp, objv[4], &height) != TCL_OK)) {
         return TCL_ERROR;
     }
+    oldAttributes = wmPtr->attributes;
     if (width) {
         wmPtr->flags &= ~WM_WIDTH_NOT_RESIZABLE;
         wmPtr->attributes |= kWindowHorizontalZoomAttribute;
@@ -2401,9 +2402,6 @@ WmResizableCmd(tkwin, winPtr, interp, objc, objv)
         wmPtr->flags |= WM_HEIGHT_NOT_RESIZABLE;
         wmPtr->attributes &= ~kWindowVerticalZoomAttribute;
     }
-    /*
-     * XXX: Need a ChangeWindowAttributes
-     */
     if (width || height) {
         wmPtr->attributes |= kWindowResizableAttribute;
     } else {
@@ -2415,6 +2413,18 @@ WmResizableCmd(tkwin, winPtr, interp, objc, objv)
 		wmPtr->scrollWinPtr->instanceData);
     }
     WmUpdateGeom(wmPtr, winPtr);
+    if (wmPtr->attributes != oldAttributes) {
+	if (winPtr->window == None) {
+	    Tk_MakeWindowExist((Tk_Window) winPtr);
+	}
+	if (!TkMacOSXHostToplevelExists(winPtr)) {
+	    TkMacOSXMakeRealWindowExist(winPtr);
+	}
+	ChangeWindowAttributes(
+		GetWindowFromPort(TkMacOSXGetDrawablePort(winPtr->window)),
+		wmPtr->attributes & (wmPtr->attributes ^ oldAttributes),
+		oldAttributes & (wmPtr->attributes ^ oldAttributes));
+    }
     return TCL_OK;
 }
 
-- 
cgit v0.12