Mercurial > emacs
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)