changeset 75231:c9e95656316d

[TARGET_API_MAC_CARBON] (create_and_show_dialog): Use DisableControl for disabled items. Set default button to first enabled one. Use icon of application in execution.
author YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
date Sun, 14 Jan 2007 07:57:43 +0000
parents b3af187429fb
children 037fa20cc6bd
files src/macmenu.c
diffstat 1 files changed, 37 insertions(+), 12 deletions(-) [+]
line wrap: on
line diff
--- a/src/macmenu.c	Sun Jan 14 03:52:57 2007 +0000
+++ b/src/macmenu.c	Sun Jan 14 07:57:43 2007 +0000
@@ -2447,7 +2447,7 @@
   short buttons_height, text_height, inner_width, inner_height;
   Rect empty_rect, *rects;
   WindowRef window = NULL;
-  ControlRef *buttons, text;
+  ControlRef *buttons, default_button = NULL, text;
 
   dialog_name = first_wv->name;
   nb_buttons = dialog_name[1] - '0';
@@ -2490,6 +2490,13 @@
 	    }
 	  if (err == noErr)
 	    {
+	      if (!wv->enabled)
+		err = DisableControl (buttons[i]);
+	      else if (default_button == NULL)
+		default_button = buttons[i];
+	    }
+	  if (err == noErr)
+	    {
 	      SInt16 unused;
 
 	      rects[i] = empty_rect;
@@ -2617,30 +2624,48 @@
   /* Create the application icon at the upper-left corner.  */
   if (err == noErr)
     {
-      ControlButtonContentInfo button_info;
-      IconRef icon_ref;
+      ControlButtonContentInfo content;
       ControlRef icon;
-
-      button_info.contentType = kControlContentIconRef;
-      err = GetIconRef (kOnAppropriateDisk, MAC_EMACS_CREATOR_CODE,
-			kGenericApplicationIcon, &icon_ref);
+      static const ProcessSerialNumber psn = {0, kCurrentProcess};
+#ifdef MAC_OSX
+      FSRef app_location;
+#else
+      ProcessInfoRec pinfo;
+      FSSpec app_spec;
+#endif
+      SInt16 unused;
+
+      content.contentType = kControlContentIconRef;
+#ifdef MAC_OSX
+      err = GetProcessBundleLocation (&psn, &app_location);
+      if (err == noErr)
+	err = GetIconRefFromFileInfo (&app_location, 0, NULL, 0, NULL,
+				      kIconServicesNormalUsageFlag,
+				      &content.u.iconRef, &unused);
+#else
+      bzero (&pinfo, sizeof (ProcessInfoRec));
+      pinfo.processInfoLength = sizeof (ProcessInfoRec);
+      pinfo.processAppSpec = &app_spec;
+      err = GetProcessInformation (&psn, &pinfo);
+      if (err == noErr)
+	err = GetIconRefFromFile (&app_spec, &content.u.iconRef, &unused);
+#endif
       if (err == noErr)
 	{
 	  Rect bounds;
 
-	  button_info.u.iconRef = icon_ref;
 	  SetRect (&bounds, DIALOG_ICON_LEFT_MARGIN, DIALOG_ICON_TOP_MARGIN,
 		   DIALOG_ICON_LEFT_MARGIN + DIALOG_ICON_WIDTH,
 		   DIALOG_ICON_TOP_MARGIN + DIALOG_ICON_HEIGHT);
-	  err = CreateIconControl (window, &bounds, &button_info,
-				   true, &icon);
-	  ReleaseIconRef (icon_ref);
+	  err = CreateIconControl (window, &bounds, &content, true, &icon);
+	  ReleaseIconRef (content.u.iconRef);
 	}
     }
 
   /* Show the dialog window and run event loop.  */
   if (err == noErr)
-    err = SetWindowDefaultButton (window, buttons[0]);
+    if (default_button)
+      err = SetWindowDefaultButton (window, default_button);
   if (err == noErr)
     err = install_dialog_event_handler (window);
   if (err == noErr)