]> git.eshelyaron.com Git - emacs.git/commitdiff
[TARGET_API_MAC_CARBON] (create_and_show_dialog): Use
authorYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Sun, 14 Jan 2007 07:58:02 +0000 (07:58 +0000)
committerYAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
Sun, 14 Jan 2007 07:58:02 +0000 (07:58 +0000)
DisableControl for disabled items.  Set default button to first
enabled one.  Use icon of application in execution.

src/ChangeLog
src/macmenu.c

index 3842c3c582426f27f1ddadb9f1e70247e7629206..f30f2a665725ab33cf56556b294515204d1feee9 100644 (file)
@@ -1,3 +1,9 @@
+2007-01-14  YAMAMOTO Mitsuharu  <mituharu@math.s.chiba-u.ac.jp>
+
+       * macmenu.c [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.
+
 2007-01-13  Eli Zaretskii  <eliz@gnu.org>
 
        * process.c (Fdelete_process, Fprocess_id, sigchld_handler): Copy
index 34e38eb2f473a928a5b87fd68b6a014fd3fc8422..b412429d69662c393753e6f8e8315a8d7d67e45c 100644 (file)
@@ -2447,7 +2447,7 @@ create_and_show_dialog (f, first_wv)
   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';
@@ -2488,6 +2488,13 @@ create_and_show_dialog (f, first_wv)
                                             label, &buttons[i]);
              CFRelease (label);
            }
+         if (err == noErr)
+           {
+             if (!wv->enabled)
+               err = DisableControl (buttons[i]);
+             else if (default_button == NULL)
+               default_button = buttons[i];
+           }
          if (err == noErr)
            {
              SInt16 unused;
@@ -2617,30 +2624,48 @@ create_and_show_dialog (f, first_wv)
   /* Create the application icon at the upper-left corner.  */
   if (err == noErr)
     {
-      ControlButtonContentInfo button_info;
-      IconRef icon_ref;
+      ControlButtonContentInfo content;
       ControlRef icon;
+      static const ProcessSerialNumber psn = {0, kCurrentProcess};
+#ifdef MAC_OSX
+      FSRef app_location;
+#else
+      ProcessInfoRec pinfo;
+      FSSpec app_spec;
+#endif
+      SInt16 unused;
 
-      button_info.contentType = kControlContentIconRef;
-      err = GetIconRef (kOnAppropriateDisk, MAC_EMACS_CREATOR_CODE,
-                       kGenericApplicationIcon, &icon_ref);
+      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)