]> git.eshelyaron.com Git - emacs.git/commitdiff
Simplify represented filename handling (bug#30800)
authorAlan Third <alan@idiocy.org>
Fri, 30 Mar 2018 11:25:15 +0000 (12:25 +0100)
committerAlan Third <alan@idiocy.org>
Fri, 30 Mar 2018 11:33:42 +0000 (12:33 +0100)
* src/nsfns.m (ns_set_represented_filename): Move function from
nsterm.m and set represented filename directly.
* src/nsterm.h (ns_set_represented_filename): Remove definition.
* src/nsterm.m (ns_set_represented_filename): Move function to
nsfns.m.
(x_free_frame_resources): Remove references to represented_frame.
(sendEvent): Don't set represented filename.

src/nsfns.m
src/nsterm.h
src/nsterm.m

index 6df54b4eb50a56ae479db02de416118cea2d00f1..7cf45a54f90fb17072c1d2d980dc26cb814b76bb 100644 (file)
@@ -463,6 +463,47 @@ ns_set_name (struct frame *f, Lisp_Object name, int explicit)
   ns_set_name_internal (f, name);
 }
 
+static void
+ns_set_represented_filename (struct frame *f)
+{
+  Lisp_Object filename, encoded_filename;
+  Lisp_Object buf = XWINDOW (f->selected_window)->contents;
+  NSAutoreleasePool *pool;
+  NSString *fstr;
+  NSView *view = FRAME_NS_VIEW (f);
+
+  NSTRACE ("ns_set_represented_filename");
+
+  if (f->explicit_name || ! NILP (f->title))
+    return;
+
+  block_input ();
+  pool = [[NSAutoreleasePool alloc] init];
+  filename = BVAR (XBUFFER (buf), filename);
+
+  if (! NILP (filename))
+    {
+      encoded_filename = ENCODE_UTF_8 (filename);
+
+      fstr = [NSString stringWithUTF8String: SSDATA (encoded_filename)];
+      if (fstr == nil) fstr = @"";
+    }
+  else
+    fstr = @"";
+
+#ifdef NS_IMPL_COCOA
+  /* 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
+  [[view window] setRepresentedFilename: fstr];
+
+  [pool release];
+  unblock_input ();
+}
+
 
 /* This function should be called when the user's lisp code has
    specified a name for the frame; the name will override any set by the
index a9635374c78a957193c597d65746ab288a20294a..a99b517fd5ec86416453dcdd1e6afd8933683328 100644 (file)
@@ -1237,12 +1237,6 @@ struct input_event;
 extern void ns_init_events (struct input_event *);
 extern void ns_finish_events (void);
 
-#ifdef __OBJC__
-/* Needed in nsfns.m.  */
-extern void
-ns_set_represented_filename (struct frame *f);
-
-#endif
 
 #ifdef NS_IMPL_GNUSTEP
 extern char gnustep_base_version[];  /* version tracking */
index 06ba2e1a4c7461802532e2a3bee10aef7b6cc350..3c95fedadc9f10f1515e4a1a434dc4e198486833 100644 (file)
@@ -327,9 +327,6 @@ static struct {
   NULL, 0, 0
 };
 
-static NSString *represented_filename = nil;
-static struct frame *represented_frame = 0;
-
 #ifdef NS_IMPL_COCOA
 /*
  * State for pending menu activation:
@@ -472,40 +469,6 @@ static void ns_judge_scroll_bars (struct frame *f);
 
    ========================================================================== */
 
-void
-ns_set_represented_filename (struct frame *f)
-{
-  Lisp_Object filename, encoded_filename;
-  Lisp_Object buf = XWINDOW (f->selected_window)->contents;
-  NSAutoreleasePool *pool;
-  NSString *fstr;
-
-  NSTRACE ("ns_set_represented_filename");
-
-  if (f->explicit_name || ! NILP (f->title))
-    return;
-
-  block_input ();
-  pool = [[NSAutoreleasePool alloc] init];
-  filename = BVAR (XBUFFER (buf), filename);
-
-  if (! NILP (filename))
-    {
-      encoded_filename = ENCODE_UTF_8 (filename);
-
-      fstr = [NSString stringWithUTF8String: SSDATA (encoded_filename)];
-      if (fstr == nil) fstr = @"";
-    }
-  else
-    fstr = @"";
-
-  represented_filename = [fstr retain];
-  represented_frame = f;
-
-  [pool release];
-  unblock_input ();
-}
-
 void
 ns_init_events (struct input_event *ev)
 {
@@ -1783,10 +1746,6 @@ x_free_frame_resources (struct frame *f)
     dpyinfo->x_highlight_frame = 0;
   if (f == hlinfo->mouse_face_mouse_frame)
     reset_mouse_highlight (hlinfo);
-  /* Ensure that sendEvent does not attempt to dereference a freed
-     frame. (bug#30800) */
-  if (represented_frame == f)
-    represented_frame = NULL;
 
   if (f->output_data.ns->miniimage != nil)
     [f->output_data.ns->miniimage release];
@@ -5630,23 +5589,6 @@ ns_term_shutdown (int sig)
     }
 #endif
 
-  if (represented_filename != nil && represented_frame)
-    {
-      NSString *fstr = represented_filename;
-      NSView *view = FRAME_NS_VIEW (represented_frame);
-#ifdef NS_IMPL_COCOA
-      /* 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
-      [[view window] setRepresentedFilename: fstr];
-      [represented_filename release];
-      represented_filename = nil;
-      represented_frame = NULL;
-    }
-
   if (type == NSEventTypeApplicationDefined)
     {
       switch ([theEvent data2])