# HG changeset patch # User Jan D. # Date 1293801376 -3600 # Node ID 9c611deb66fad237f434df7ac83d15de95fea6d6 # Parent 491d946138487e52d19ab7d9764bec1ec2e791de For nextstep: Handle bad utf-8 in buffer name, always use buffer name for title. * nsfns.m (ns_set_name_as_filename): Always use buffer name for title and buffer filename only for RepresentedFilename. Handle bad UTF-8 in buffer name. diff -r 491d94613848 -r 9c611deb66fa src/ChangeLog --- a/src/ChangeLog Thu Dec 30 21:23:13 2010 +0100 +++ b/src/ChangeLog Fri Dec 31 14:16:16 2010 +0100 @@ -1,3 +1,9 @@ +2010-12-31 Jan Djärv + + * nsfns.m (ns_set_name_as_filename): Always use buffer name for + title and buffer filename only for RepresentedFilename. + Handle bad UTF-8 in buffer name (Bug#7517). + 2010-12-30 Jan Djärv * coding.h (ENCODE_UTF_8): Remove "Used by ..." comment. diff -r 491d94613848 -r 9c611deb66fa src/nsfns.m --- a/src/nsfns.m Thu Dec 30 21:23:13 2010 +0100 +++ b/src/nsfns.m Fri Dec 31 14:16:16 2010 +0100 @@ -602,12 +602,13 @@ ns_set_name_as_filename (struct frame *f) { NSView *view; - Lisp_Object name; + Lisp_Object name, filename; Lisp_Object buf = XWINDOW (f->selected_window)->buffer; const char *title; NSAutoreleasePool *pool; struct gcpro gcpro1; - Lisp_Object encoded_name; + Lisp_Object encoded_name, encoded_filename; + NSString *str; NSTRACE (ns_set_name_as_filename); if (f->explicit_name || ! NILP (f->title) || ns_in_resize) @@ -615,16 +616,16 @@ BLOCK_INPUT; pool = [[NSAutoreleasePool alloc] init]; - name = XBUFFER (buf)->filename; - if (NILP (name) || FRAME_ICONIFIED_P (f)) name = XBUFFER (buf)->name; - - if (FRAME_ICONIFIED_P (f) && !NILP (f->icon_name)) - name = f->icon_name; + filename = XBUFFER (buf)->filename; + name = XBUFFER (buf)->name; if (NILP (name)) - name = build_string ([ns_app_name UTF8String]); - else - CHECK_STRING (name); + { + if (! NILP (filename)) + name = Ffile_name_nondirectory (filename); + else + name = build_string ([ns_app_name UTF8String]); + } GCPRO1 (name); encoded_name = ENCODE_UTF_8 (name); @@ -642,33 +643,39 @@ return; } - if (! FRAME_ICONIFIED_P (f)) + str = [NSString stringWithUTF8String: SDATA (encoded_name)]; + if (str == nil) str = @"Bad coding"; + + if (FRAME_ICONIFIED_P (f)) + [[view window] setMiniwindowTitle: str]; + else { + NSString *fstr; + + if (! NILP (filename)) + { + GCPRO1 (filename); + encoded_filename = ENCODE_UTF_8 (filename); + UNGCPRO; + + fstr = [NSString stringWithUTF8String: SDATA (encoded_filename)]; + if (fstr == nil) fstr = @""; #ifdef NS_IMPL_COCOA - /* work around a bug observed on 10.3 where - setTitleWithRepresentedFilename does not clear out previous state - if given filename does not exist */ - NSString *str = [NSString stringWithUTF8String: SDATA (encoded_name)]; - if (![[NSFileManager defaultManager] fileExistsAtPath: str]) - { - [[view window] setTitleWithRepresentedFilename: @""]; - [[view window] setTitle: str]; + /* work around a bug observed on 10.3 and later where + setTitleWithRepresentedFilename does not clear out previous state + if given filename does not exist */ + if (! [[NSFileManager defaultManager] fileExistsAtPath: fstr]) + [[view window] setRepresentedFilename: @""]; +#endif } else - { - [[view window] setTitleWithRepresentedFilename: str]; - } -#else - [[view window] setTitleWithRepresentedFilename: - [NSString stringWithUTF8String: SDATA (encoded_name)]]; -#endif + fstr = @""; + + [[view window] setRepresentedFilename: fstr]; + [[view window] setTitle: str]; f->name = name; } - else - { - [[view window] setMiniwindowTitle: - [NSString stringWithUTF8String: SDATA (encoded_name)]]; - } + [pool release]; UNBLOCK_INPUT; }