changeset 34465:94435b0ce7fd

* src/macfns.c (x_create_tip_frame, Fx_hide_tip): change to handle Lisp_Object type tip_frame (was struct frame *) as in xfns.c.
author Andrew Choi <akochoi@shaw.ca>
date Tue, 12 Dec 2000 04:50:33 +0000
parents e24416b330c6
children 3e1faf8a629f
files mac/ChangeLog mac/src/macfns.c
diffstat 2 files changed, 36 insertions(+), 16 deletions(-) [+]
line wrap: on
line diff
--- a/mac/ChangeLog	Tue Dec 12 04:30:37 2000 +0000
+++ b/mac/ChangeLog	Tue Dec 12 04:50:33 2000 +0000
@@ -1,3 +1,8 @@
+2000-12-12  Andrew Choi  <akochoi@i-cable.com>
+
+	* src/macfns.c (x_create_tip_frame, Fx_hide_tip): change to handle
+	Lisp_Object type tip_frame (was struct frame *) as in xfns.c.
+
 2000-11-26  Andrew Choi  <akochoi@i-cable.com>
 
 	* src/macterm.c (x_handle_tool_bar_click):
--- a/mac/src/macfns.c	Tue Dec 12 04:30:37 2000 +0000
+++ b/mac/src/macfns.c	Tue Dec 12 04:50:33 2000 +0000
@@ -8970,7 +8970,7 @@
      
 /* The frame of a currently visible tooltip, or null.  */
 
-struct frame *tip_frame;
+Lisp_Object tip_frame;
 
 /* If non-nil, a timer started that hides the last tooltip when it
    fires.  */
@@ -9272,7 +9272,7 @@
   /* Create a frame for the tooltip, and record it in the global
      variable tip_frame.  */
   frame = x_create_tip_frame (FRAME_MAC_DISPLAY_INFO (f), parms);
-  tip_frame = f = XFRAME (frame);
+  f = XFRAME (frame);
 
   /* Set up the frame's root window.  Currently we use a size of 80
      columns x 40 lines.  If someone wants to show a larger tip, he
@@ -9363,28 +9363,43 @@
 Value is t is tooltip was open, nil otherwise.")
   ()
 {
-  int count = specpdl_ptr - specpdl;
-  int deleted_p = 0;
+  int count;
+  Lisp_Object deleted;
+
+  /* Return quickly if nothing to do.  */
+  if (NILP (tip_timer) && !FRAMEP (tip_frame))
+    return Qnil;
   
+  count = BINDING_STACK_SIZE ();
+  deleted = Qnil;
   specbind (Qinhibit_redisplay, Qt);
+  specbind (Qinhibit_quit, Qt);
   
   if (!NILP (tip_timer))
     {
-      call1 (intern ("cancel-timer"), tip_timer);
+      Lisp_Object tem;
+      struct gcpro gcpro1;
+      tem = tip_timer;
+      GCPRO1 (tem);
       tip_timer = Qnil;
-    }
-
-  if (tip_frame)
+      call1 (intern ("cancel-timer"), tem);
+      UNGCPRO;
+    }
+
+  if (FRAMEP (tip_frame))
     {
       Lisp_Object frame;
-      
-      XSETFRAME (frame, tip_frame);
-      Fdelete_frame (frame, Qt);
-      tip_frame = NULL;
-      deleted_p = 1;
-    }
-
-  return unbind_to (count, deleted_p ? Qt : Qnil);
+      struct gcpro gcpro1;
+
+      frame = tip_frame;
+      GCPRO1 (frame);
+      tip_frame = Qnil;
+      Fdelete_frame (frame, Qnil);
+      deleted = Qt;
+      UNGCPRO;
+    }
+
+  return unbind_to (count, deleted);
 }