emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emacs-diffs] Changes to emacs/src/macfns.c,v


From: YAMAMOTO Mitsuharu
Subject: [Emacs-diffs] Changes to emacs/src/macfns.c,v
Date: Sun, 27 Aug 2006 07:09:34 +0000

CVSROOT:        /cvsroot/emacs
Module name:    emacs
Changes by:     YAMAMOTO Mitsuharu <mituharu>   06/08/27 07:09:33

Index: macfns.c
===================================================================
RCS file: /cvsroot/emacs/emacs/src/macfns.c,v
retrieving revision 1.91
retrieving revision 1.92
diff -u -b -r1.91 -r1.92
--- macfns.c    25 Aug 2006 23:33:04 -0000      1.91
+++ macfns.c    27 Aug 2006 07:09:33 -0000      1.92
@@ -1945,63 +1945,80 @@
 mac_update_proxy_icon (f)
      struct frame *f;
 {
+  OSStatus err;
   Lisp_Object file_name =
     XBUFFER (XWINDOW (FRAME_SELECTED_WINDOW (f))->buffer)->filename;
   Window w = FRAME_MAC_WINDOW (f);
-
-  if (FRAME_FILE_NAME (f) == NULL && !STRINGP (file_name))
-    return;
-  if (FRAME_FILE_NAME (f) && STRINGP (file_name)
-      && strcmp (FRAME_FILE_NAME (f), SDATA (file_name)) == 0)
-    return;
-
-  if (FRAME_FILE_NAME (f))
-    {
-      xfree (FRAME_FILE_NAME (f));
-      FRAME_FILE_NAME (f) = NULL;
-    }
+  AliasHandle alias = NULL;
 
   BLOCK_INPUT;
 
+  err = GetWindowProxyAlias (w, &alias);
+  if (err == errWindowDoesNotHaveProxy && !STRINGP (file_name))
+    goto out;
+
   if (STRINGP (file_name))
     {
-      OSStatus err;
       AEDesc desc;
+#ifdef MAC_OSX
+      FSRef fref;
+#else
+      FSSpec fss;
+#endif
+      Boolean changed;
       Lisp_Object encoded_file_name = ENCODE_FILE (file_name);
 
-#ifdef MAC_OS8
+#ifdef MAC_OSX
+      err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name),
+                        SBYTES (encoded_file_name), typeFSRef, &desc);
+#else
       SetPortWindowPort (w);
-#endif
       err = AECoercePtr (TYPE_FILE_NAME, SDATA (encoded_file_name),
-                        SBYTES (encoded_file_name), typeAlias, &desc);
+                        SBYTES (encoded_file_name), typeFSS, &desc);
+#endif
       if (err == noErr)
        {
-         Size size = AEGetDescDataSize (&desc);
-         AliasHandle alias = (AliasHandle) NewHandle (size);
-
-         if (alias == NULL)
-           err = memFullErr;
-         else
-           {
-             HLock ((Handle) alias);
-             err = AEGetDescData (&desc, *alias, size);
-             HUnlock ((Handle) alias);
-             if (err == noErr)
-               err = SetWindowProxyAlias (w, alias);
-             DisposeHandle ((Handle) alias);
-           }
+#ifdef MAC_OSX
+         err = AEGetDescData (&desc, &fref, sizeof (FSRef));
+#else
+         err = AEGetDescData (&desc, &fss, sizeof (FSSpec));
+#endif
          AEDisposeDesc (&desc);
        }
       if (err == noErr)
        {
-         FRAME_FILE_NAME (f) = xmalloc (SBYTES (file_name) + 1);
-         strcpy (FRAME_FILE_NAME (f), SDATA (file_name));
+         if (alias)
+           {
+#ifdef MAC_OSX
+             err = FSUpdateAlias (NULL, &fref, alias, &changed);
+#else
+             err = UpdateAlias (NULL, &fss, alias, &changed);
+#endif
+           }
+         if (err != noErr || alias == NULL)
+           {
+             if (alias)
+               DisposeHandle ((Handle) alias);
+#ifdef MAC_OSX
+             err = FSNewAliasMinimal (&fref, &alias);
+#else
+             err = NewAliasMinimal (&fss, &alias);
+#endif
+             changed = true;
        }
     }
+      if (err == noErr)
+       if (changed)
+         err = SetWindowProxyAlias (w, alias);
+    }
 
-  if (FRAME_FILE_NAME (f) == NULL)
+  if (alias)
+    DisposeHandle ((Handle) alias);
+
+  if (err != noErr || !STRINGP (file_name))
     RemoveWindowProxy (w);
 
+ out:
   UNBLOCK_INPUT;
 }
 #endif
@@ -2566,7 +2583,6 @@
   f->output_data.mac = (struct mac_output *) xmalloc (sizeof (struct 
mac_output));
   bzero (f->output_data.mac, sizeof (struct mac_output));
   FRAME_FONTSET (f) = -1;
-  record_unwind_protect (unwind_create_frame, frame);
 
   f->icon_name
     = mac_get_arg (parms, Qicon_name, "iconName", "Title", RES_TYPE_STRING);
@@ -2574,6 +2590,9 @@
     f->icon_name = Qnil;
 
 /*   FRAME_MAC_DISPLAY_INFO (f) = dpyinfo; */
+
+  /* With FRAME_MAC_DISPLAY_INFO set up, this unwind-protect is safe.  */
+  record_unwind_protect (unwind_create_frame, frame);
 #if GLYPH_DEBUG
   image_cache_refcount = FRAME_X_IMAGE_CACHE (f)->refcount;
   dpyinfo_refcount = dpyinfo->reference_count;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]