changeset 12192:1b571a7992b0

(x_make_frame_visible): Test and set asked_for_visible.
author Karl Heuer <kwzh@gnu.org>
date Sun, 11 Jun 1995 20:48:19 +0000
parents 33e8a9ef3cab
children 26ec7360f078
files src/xterm.c
diffstat 1 files changed, 43 insertions(+), 1 deletions(-) [+]
line wrap: on
line diff
--- a/src/xterm.c	Sun Jun 11 20:47:48 1995 +0000
+++ b/src/xterm.c	Sun Jun 11 20:48:19 1995 +0000
@@ -236,6 +236,34 @@
 void x_catch_errors ();
 void x_uncatch_errors ();
 
+#if 0
+/* This is a function useful for recording debugging information
+   about the sequence of occurrences in this file.  */
+
+struct record 
+{
+  char *locus;
+  int type;
+};
+
+struct record event_record[100];
+
+int event_record_index;
+
+record_event (locus, type)
+     char *locus;
+     int type;
+{
+  if (event_record_index == sizeof (event_record) / sizeof (struct record))
+    event_record_index = 0;
+
+  event_record[event_record_index].locus = locus;
+  event_record[event_record_index].type = type;
+  event_record_index++;
+}
+
+#endif /* 0 */
+
 /* Return the struct x_display_info corresponding to DPY.  */
 
 struct x_display_info *
@@ -5073,6 +5101,13 @@
 
 /* Change of visibility.  */
 
+/* This tries to wait until the frame is really visible.
+   However, if the window manager asks the user where to position
+   the frame, this will return before the user finishes doing that.
+   The frame will not actually be visible at that time,
+   but it will become visible later when the window manager
+   finishes with it.  */
+
 x_make_frame_visible (f)
      struct frame *f;
 {
@@ -5087,9 +5122,16 @@
 
   if (! FRAME_VISIBLE_P (f))
     {
-      if (! FRAME_ICONIFIED_P (f))
+      /* We test FRAME_GARBAGED_P here to make sure we don't
+	 call x_set_offset a second time
+	 if we get to x_make_frame_visible a second time
+	 before the window gets really visible.  */
+      if (! FRAME_ICONIFIED_P (f)
+	  && ! f->display.x->asked_for_visible)
 	x_set_offset (f, f->display.x->left_pos, f->display.x->top_pos, 0);
 
+      f->display.x->asked_for_visible = 1;
+
       if (! EQ (Vx_no_window_manager, Qt))
 	x_wm_set_window_state (f, NormalState);
 #ifdef USE_X_TOOLKIT