Mercurial > emacs
comparison src/macfns.c @ 72543:f391876287f6
[TARGET_API_MAC_CARBON] (mac_update_proxy_icon): Don't
use FRAME_FILE_NAME. Use (FS)UpdateAlias.
(Fx_create_frame): Apply 2006-07-03 for xfns.c.
author | YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp> |
---|---|
date | Sun, 27 Aug 2006 07:09:33 +0000 |
parents | 892ea79efee6 |
children | d51cd08a3471 694bbb62a75d 6823a91487f2 |
comparison
equal
deleted
inserted
replaced
72542:bb89b5bbed54 | 72543:f391876287f6 |
---|---|
1943 #if TARGET_API_MAC_CARBON | 1943 #if TARGET_API_MAC_CARBON |
1944 static void | 1944 static void |
1945 mac_update_proxy_icon (f) | 1945 mac_update_proxy_icon (f) |
1946 struct frame *f; | 1946 struct frame *f; |
1947 { | 1947 { |
1948 OSStatus err; | |
1948 Lisp_Object file_name = | 1949 Lisp_Object file_name = |
1949 XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename; | 1950 XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename; |
1950 Window w = FRAME_MAC_WINDOW (f); | 1951 Window w = FRAME_MAC_WINDOW (f); |
1951 | 1952 AliasHandle alias = NULL; |
1952 if (FRAME_FILE_NAME (f) == NULL && !STRINGP (file_name)) | |
1953 return; | |
1954 if (FRAME_FILE_NAME (f) && STRINGP (file_name) | |
1955 && strcmp (FRAME_FILE_NAME (f), SDATA (file_name)) == 0) | |
1956 return; | |
1957 | |
1958 if (FRAME_FILE_NAME (f)) | |
1959 { | |
1960 xfree (FRAME_FILE_NAME (f)); | |
1961 FRAME_FILE_NAME (f) = NULL; | |
1962 } | |
1963 | 1953 |
1964 BLOCK_INPUT; | 1954 BLOCK_INPUT; |
1965 | 1955 |
1956 err = GetWindowProxyAlias (w, &alias); | |
1957 if (err == errWindowDoesNotHaveProxy && !STRINGP (file_name)) | |
1958 goto out; | |
1959 | |
1966 if (STRINGP (file_name)) | 1960 if (STRINGP (file_name)) |
1967 { | 1961 { |
1968 OSStatus err; | |
1969 AEDesc desc; | 1962 AEDesc desc; |
1963 #ifdef MAC_OSX | |
1964 FSRef fref; | |
1965 #else | |
1966 FSSpec fss; | |
1967 #endif | |
1968 Boolean changed; | |
1970 Lisp_Object encoded_file_name = ENCODE_FILE (file_name); | 1969 Lisp_Object encoded_file_name = ENCODE_FILE (file_name); |
1971 | 1970 |
1972 #ifdef MAC_OS8 | 1971 #ifdef MAC_OSX |
1972 err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name), | |
1973 SBYTES (encoded_file_name), typeFSRef, &desc); | |
1974 #else | |
1973 SetPortWindowPort (w); | 1975 SetPortWindowPort (w); |
1976 err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name), | |
1977 SBYTES (encoded_file_name), typeFSS, &desc); | |
1974 #endif | 1978 #endif |
1975 err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name), | |
1976 SBYTES (encoded_file_name), typeAlias, &desc); | |
1977 if (err == noErr) | 1979 if (err == noErr) |
1978 { | 1980 { |
1979 Size size = AEGetDescDataSize (&desc); | 1981 #ifdef MAC_OSX |
1980 AliasHandle alias = (AliasHandle) NewHandle (size); | 1982 err = AEGetDescData (&desc, &fref, sizeof (FSRef)); |
1981 | 1983 #else |
1982 if (alias == NULL) | 1984 err = AEGetDescData (&desc, &fss, sizeof (FSSpec)); |
1983 err = memFullErr; | 1985 #endif |
1984 else | |
1985 { | |
1986 HLock ((Handle) alias); | |
1987 err = AEGetDescData (&desc, *alias, size); | |
1988 HUnlock ((Handle) alias); | |
1989 if (err == noErr) | |
1990 err = SetWindowProxyAlias (w, alias); | |
1991 DisposeHandle ((Handle) alias); | |
1992 } | |
1993 AEDisposeDesc (&desc); | 1986 AEDisposeDesc (&desc); |
1994 } | 1987 } |
1995 if (err == noErr) | 1988 if (err == noErr) |
1996 { | 1989 { |
1997 FRAME_FILE_NAME (f) = xmalloc (SBYTES (file_name) + 1); | 1990 if (alias) |
1998 strcpy (FRAME_FILE_NAME (f), SDATA (file_name)); | 1991 { |
1992 #ifdef MAC_OSX | |
1993 err = FSUpdateAlias (NULL, &fref, alias, &changed); | |
1994 #else | |
1995 err = UpdateAlias (NULL, &fss, alias, &changed); | |
1996 #endif | |
1997 } | |
1998 if (err != noErr || alias == NULL) | |
1999 { | |
2000 if (alias) | |
2001 DisposeHandle ((Handle) alias); | |
2002 #ifdef MAC_OSX | |
2003 err = FSNewAliasMinimal (&fref, &alias); | |
2004 #else | |
2005 err = NewAliasMinimal (&fss, &alias); | |
2006 #endif | |
2007 changed = true; | |
2008 } | |
1999 } | 2009 } |
2000 } | 2010 if (err == noErr) |
2001 | 2011 if (changed) |
2002 if (FRAME_FILE_NAME (f) == NULL) | 2012 err = SetWindowProxyAlias (w, alias); |
2013 } | |
2014 | |
2015 if (alias) | |
2016 DisposeHandle ((Handle) alias); | |
2017 | |
2018 if (err != noErr || !STRINGP (file_name)) | |
2003 RemoveWindowProxy (w); | 2019 RemoveWindowProxy (w); |
2004 | 2020 |
2021 out: | |
2005 UNBLOCK_INPUT; | 2022 UNBLOCK_INPUT; |
2006 } | 2023 } |
2007 #endif | 2024 #endif |
2008 | 2025 |
2009 void | 2026 void |
2564 | 2581 |
2565 f->output_method = output_mac; | 2582 f->output_method = output_mac; |
2566 f->output_data.mac = (struct mac_output *) xmalloc (sizeof (struct mac_output)); | 2583 f->output_data.mac = (struct mac_output *) xmalloc (sizeof (struct mac_output)); |
2567 bzero (f->output_data.mac, sizeof (struct mac_output)); | 2584 bzero (f->output_data.mac, sizeof (struct mac_output)); |
2568 FRAME_FONTSET (f) = -1; | 2585 FRAME_FONTSET (f) = -1; |
2569 record_unwind_protect (unwind_create_frame, frame); | |
2570 | 2586 |
2571 f->icon_name | 2587 f->icon_name |
2572 = mac_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING); | 2588 = mac_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING); |
2573 if (! STRINGP (f->icon_name)) | 2589 if (! STRINGP (f->icon_name)) |
2574 f->icon_name = Qnil; | 2590 f->icon_name = Qnil; |
2575 | 2591 |
2576 /* FRAME_MAC_DISPLAY_INFO (f) = dpyinfo; */ | 2592 /* FRAME_MAC_DISPLAY_INFO (f) = dpyinfo; */ |
2593 | |
2594 /* With FRAME_MAC_DISPLAY_INFO set up, this unwind-protect is safe. */ | |
2595 record_unwind_protect (unwind_create_frame, frame); | |
2577 #if GLYPH_DEBUG | 2596 #if GLYPH_DEBUG |
2578 image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount; | 2597 image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount; |
2579 dpyinfo_refcount = dpyinfo->reference_count; | 2598 dpyinfo_refcount = dpyinfo->reference_count; |
2580 #endif /* GLYPH_DEBUG */ | 2599 #endif /* GLYPH_DEBUG */ |
2581 #ifdef MULTI_KBOARD | 2600 #ifdef MULTI_KBOARD |