summaryrefslogtreecommitdiff
path: root/src/macfns.c
diff options
context:
space:
mode:
authorKaroly Lorentey <lorentey@elte.hu>2006-10-14 16:56:21 +0000
committerKaroly Lorentey <lorentey@elte.hu>2006-10-14 16:56:21 +0000
commit3f87f67ee215ffeecbd2f53bd7f342cdf03f47df (patch)
tree16f2af9111af08a94d608d96a957f5c3ec5effcc /src/macfns.c
parent350e4fb815d7413ef6d339dd664014706f742927 (diff)
parent7a210b69c7f92650c524766d1b9d3f3eefdd67c7 (diff)
downloademacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.tar.gz
emacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.tar.bz2
emacs-3f87f67ee215ffeecbd2f53bd7f342cdf03f47df.zip
Merged from emacs@sv.gnu.org
Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-371 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-372 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-373 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-374 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-375 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-376 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-377 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-378 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-379 Merge from erc--emacs--21 * emacs@sv.gnu.org/emacs--devo--0--patch-380 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-381 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-382 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-383 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-384 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-385 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-386 Update from erc--emacs--22 * emacs@sv.gnu.org/emacs--devo--0--patch-387 Fix ERC bug introduced in last patch * emacs@sv.gnu.org/emacs--devo--0--patch-388 Update from erc--emacs--22 * emacs@sv.gnu.org/emacs--devo--0--patch-389 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-390 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-391 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-392 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-393 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-394 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-395 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-396 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-397 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-398 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-399 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-400 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-401 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-402 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-403 Rcirc update from Ryan Yeske * emacs@sv.gnu.org/emacs--devo--0--patch-404 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-405 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-406 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-407 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-408 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-409 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-410 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-411 Miscellaneous tq-related fixes. * emacs@sv.gnu.org/emacs--devo--0--patch-412 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-121 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-122 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-123 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-124 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-125 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-126 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-127 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-581
Diffstat (limited to 'src/macfns.c')
-rw-r--r--src/macfns.c98
1 files changed, 56 insertions, 42 deletions
diff --git a/src/macfns.c b/src/macfns.c
index 8716f072411..2d004be9962 100644
--- a/src/macfns.c
+++ b/src/macfns.c
@@ -1945,63 +1945,80 @@ static void
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 @@ This function is an internal primitive--use `make-frame' instead. */)
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 @@ This function is an internal primitive--use `make-frame' instead. */)
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;
@@ -2876,14 +2895,9 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0,
CHECK_STRING (color);
if (mac_defined_color (f, SDATA (color), &foo, 0))
- {
- Lisp_Object rgb[3];
-
- rgb[0] = make_number (foo.red);
- rgb[1] = make_number (foo.green);
- rgb[2] = make_number (foo.blue);
- return Flist (3, rgb);
- }
+ return list3 (make_number (foo.red),
+ make_number (foo.green),
+ make_number (foo.blue));
else
return Qnil;
}