]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_make_frame_visible): Test and set asked_for_visible.
authorKarl Heuer <kwzh@gnu.org>
Sun, 11 Jun 1995 20:48:19 +0000 (20:48 +0000)
committerKarl Heuer <kwzh@gnu.org>
Sun, 11 Jun 1995 20:48:19 +0000 (20:48 +0000)
src/xterm.c

index f4d0fc8e543d12f65ce447ad6a163ff550e24b01..072974a0ec27494e5cc80405d34bdfa9fa0144b4 100644 (file)
@@ -236,6 +236,34 @@ static int x_io_error_quitter ();
 void x_catch_errors ();
 void x_uncatch_errors ();
 \f
+#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 */
+\f
 /* Return the struct x_display_info corresponding to DPY.  */
 
 struct x_display_info *
@@ -5073,6 +5101,13 @@ XTframe_raise_lower (f, raise)
 \f
 /* 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 @@ x_make_frame_visible (f)
 
   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