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