From d302d5b14572feb1f17e98cf8ed78dec54685cf2 Mon Sep 17 00:00:00 2001
From: wolfsuit <wolfsuit>
Date: Thu, 1 Apr 2004 18:40:09 +0000
Subject: Fix for Bug 220871.

---
 ChangeLog             |  5 +++++
 macosx/tkMacOSXMenu.c | 26 ++++++++++++++++----------
 2 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 436f7f3..27b621e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2004-03-31  Jim Ingham  <jingham@apple.com>
+
+	* tkMacOSXMenu.c (EventuallyInvokeMenu): Report errors from invoking
+	menu commands as background errors. [Bug 220871]
+
 2004-03-26  Donal K. Fellows  <donal.k.fellows@man.ac.uk>
 
 	* generic/tkImgPPM.c (ReadPPMStringHeader): Code to read PPM/PGM data
diff --git a/macosx/tkMacOSXMenu.c b/macosx/tkMacOSXMenu.c
index 5ae94a7..8c95a32 100644
--- a/macosx/tkMacOSXMenu.c
+++ b/macosx/tkMacOSXMenu.c
@@ -9,7 +9,7 @@
  * See the file "license.terms" for information on usage and redistribution
  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  *
- * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.6.2.4 2004/02/16 00:42:34 wolfsuit Exp $
+ * RCS: @(#) $Id: tkMacOSXMenu.c,v 1.6.2.5 2004/04/01 18:40:10 wolfsuit Exp $
  */
 #include "tkMacOSXInt.h"
 #include "tkMenuButton.h"
@@ -141,9 +141,6 @@ typedef struct TopLevelMenubarList {
 #define CASCADE_CMD (0x1b)    	
 				/* The special command char for cascade
 			         * menus. */
-#define SEPARATOR_TEXT "\p(-"
-				/* The text for a menu separator. */
-
 #define MENUBAR_REDRAW_PENDING 1
 #define SCREEN_MARGIN 5
 
@@ -1079,7 +1076,9 @@ ReconfigureIndividualMenu(
     	 */
     
     	if (mePtr->type == SEPARATOR_ENTRY) {
-    	    AppendMenu(macMenuHdl, SEPARATOR_TEXT);
+    	    AppendMenuItemTextWithCFString (macMenuHdl, NULL, 
+                    kMenuItemAttrSeparator | kMenuItemAttrDisabled,
+                    0, NULL);
     	} else {
     	    Tcl_DString itemTextDString;
     	    int destWrote;
@@ -1087,13 +1086,12 @@ ReconfigureIndividualMenu(
 	    GetEntryText(mePtr, &itemTextDString);
             cf = CFStringCreateWithCString(NULL,
                   Tcl_DStringValue(&itemTextDString), kCFStringEncodingUTF8);
-	    AppendMenu(macMenuHdl, "\px");
 	    if (cf != NULL) {
-	      SetMenuItemTextWithCFString(macMenuHdl, base + index, cf);
+              AppendMenuItemTextWithCFString (macMenuHdl, cf, 0, 0, NULL);
 	      CFRelease(cf);
 	    } else {
 	      cf = CFSTR ("<Error>");
-	      SetMenuItemTextWithCFString(macMenuHdl, base + index, cf);
+              AppendMenuItemTextWithCFString (macMenuHdl, cf, 0, 0, NULL);
 	    }
 	    Tcl_DStringFree(&itemTextDString);
 	
@@ -2099,11 +2097,19 @@ EventuallyInvokeMenu (ClientData data)
 {
     struct MenuCommandHandlerData *realData
             = (struct MenuCommandHandlerData *) data;
+    int code;
 
+    code = TkInvokeMenu(realData->menuPtr->interp, realData->menuPtr,
+            realData->index);
+            
+    if (code != TCL_OK && code != TCL_CONTINUE
+            && code != TCL_BREAK) {
+        Tcl_AddErrorInfo(realData->menuPtr->interp, "\n    (menu invoke)");
+        Tcl_BackgroundError(realData->menuPtr->interp);
+    }
+    
     Tcl_Release(realData->menuPtr->interp);
     Tcl_Release(realData->menuPtr);
-    TkInvokeMenu(realData->menuPtr->interp, realData->menuPtr,
-            realData->index);
 }
 
 /*
-- 
cgit v0.12