summaryrefslogtreecommitdiffstats
path: root/macosx/tkMacOSXMenubutton.c
diff options
context:
space:
mode:
Diffstat (limited to 'macosx/tkMacOSXMenubutton.c')
-rw-r--r--macosx/tkMacOSXMenubutton.c58
1 files changed, 35 insertions, 23 deletions
diff --git a/macosx/tkMacOSXMenubutton.c b/macosx/tkMacOSXMenubutton.c
index 67d84ca..cd5b44c 100644
--- a/macosx/tkMacOSXMenubutton.c
+++ b/macosx/tkMacOSXMenubutton.c
@@ -10,7 +10,7 @@
* See the file "license.terms" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
- * RCS: @(#) $Id: tkMacOSXMenubutton.c,v 1.2.2.3 2005/09/10 14:54:17 das Exp $
+ * RCS: @(#) $Id: tkMacOSXMenubutton.c,v 1.2.2.4 2005/11/27 02:36:46 das Exp $
*/
#include <Carbon/Carbon.h>
@@ -87,8 +87,6 @@ static void CompareControlTitleParams(
extern int TkFontGetFirstTextLayout(Tk_TextLayout layout, Tk_Font * font, char * dst);
extern void TkMacOSXInitControlFontStyle(Tk_Font tkfont,ControlFontStylePtr fsPtr);
-extern int tkPictureIsOpen;
-
/*
* The structure below defines menubutton class behavior by means of
* procedures that can be invoked from generic window code.
@@ -603,7 +601,7 @@ MenuButtonInitControl (
Rect *cntrRect
)
{
- OSErr status;
+ OSStatus err;
TkMenuButton * butPtr = ( TkMenuButton * )mbPtr;
ControlRef rootControl;
SInt16 procID;
@@ -612,10 +610,7 @@ MenuButtonInitControl (
SInt16 minValue;
SInt16 maxValue;
SInt32 controlReference;
- int err;
short menuID;
- int length;
- Str255 itemText;
rootControl = TkMacOSXGetRootControl(Tk_WindowId(butPtr->tkwin));
mbPtr->windowRef = GetWindowFromPort(TkMacOSXGetDrawablePort(Tk_WindowId(butPtr->tkwin)));
@@ -643,10 +638,10 @@ MenuButtonInitControl (
#endif
return 1;
}
- status = EmbedControl(mbPtr->userPane,rootControl);
- if (status != noErr) {
+ err = EmbedControl(mbPtr->userPane,rootControl);
+ if (err != noErr) {
#ifdef TK_MAC_DEBUG
- fprintf(stderr,"Failed to embed user pane control %d\n", status);
+ fprintf(stderr,"Failed to embed user pane control %d\n", (int) err);
#endif
return 1;
}
@@ -674,7 +669,7 @@ MenuButtonInitControl (
err = EmbedControl(mbPtr->control,mbPtr->userPane);
if (err != noErr ) {
#ifdef TK_MAC_DEBUG
- fprintf(stderr,"failed to embed control of type %d,%d\n",procID, err);
+ fprintf(stderr,"failed to embed control of type %d,%d\n",procID, (int) err);
#endif
return 1;
}
@@ -688,30 +683,47 @@ MenuButtonInitControl (
err = SetControlFontStyle(mbPtr->control,&mbPtr->titleParams.style);
if (err !=noErr) {
#ifdef TK_MAC_DEBUG
- fprintf(stderr,"SetControlFontStyle failed %d\n", err);
+ fprintf(stderr,"SetControlFontStyle failed %d\n", (int) err);
#endif
return 1;
}
}
} else {
- CFStringRef cf;
+ CFStringRef cfStr;
err = TkMacOSXGetNewMenuID(mbPtr->info.interp, (TkMenu *)mbPtr, 0, &menuID);
if (err != TCL_OK) {
- return err;
+ return 1;
}
- length = strlen(Tk_PathName(mbPtr->info.tkwin));
- memmove(&itemText[1], Tk_PathName(mbPtr->info.tkwin),
- (length > 230) ? 230 : length);
- itemText[0] = (length > 230) ? 230 : length;
- if (!(mbPtr->menuRef = NewMenu(menuID,itemText))) {
+ err = CreateNewMenu(menuID, kMenuAttrDoNotUseUserCommandKeys,
+ &(mbPtr->menuRef));
+ if (err != noErr) {
+#ifdef TK_MAC_DEBUG
+ fprintf(stderr,"CreateNewMenu failed, %d.\n", (int) err);
+#endif
return 1;
}
- cf = CFStringCreateWithCString(NULL,
+ cfStr = CFStringCreateWithCString(NULL, Tk_PathName(mbPtr->info.tkwin),
+ kCFStringEncodingUTF8);
+ if (!cfStr) {
+#ifdef TK_MAC_DEBUG
+ fprintf(stderr,"CFStringCreateWithCString failed.\n");
+#endif
+ return 1;
+ }
+ err = SetMenuTitleWithCFString(mbPtr->menuRef, cfStr);
+ CFRelease(cfStr);
+ if (err != noErr) {
+#ifdef TK_MAC_DEBUG
+ fprintf(stderr,"SetMenuTitleWithCFString failed, %d.\n", (int) err);
+#endif
+ return 1;
+ }
+ cfStr = CFStringCreateWithCString(NULL,
(char*) mbPtr->titleParams.title, kCFStringEncodingUTF8);
AppendMenuItemText(mbPtr->menuRef, "\px");
- if (cf != NULL) {
- SetMenuItemTextWithCFString(mbPtr->menuRef, 1, cf);
- CFRelease(cf);
+ if (cfStr) {
+ SetMenuItemTextWithCFString(mbPtr->menuRef, 1, cfStr);
+ CFRelease(cfStr);
}
err = SetControlData(mbPtr->control,
kControlNoPart,