# HG changeset patch # User YAMAMOTO Mitsuharu # Date 1168761463 0 # Node ID c9e95656316dfab0b42ad109df86bd752488bd28 # Parent b3af187429fb5a3f0b42f1dfdc8de5542fb4580d [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. diff -r b3af187429fb -r c9e95656316d src/macmenu.c --- 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)