]> git.eshelyaron.com Git - emacs.git/commitdiff
(x_make_frame_visible): Wait for frame becoming visible
authorGerd Moellmann <gerd@gnu.org>
Thu, 30 Dec 1999 11:45:10 +0000 (11:45 +0000)
committerGerd Moellmann <gerd@gnu.org>
Thu, 30 Dec 1999 11:45:10 +0000 (11:45 +0000)
differently.

src/ChangeLog
src/xterm.c

index 1ff7ba5ae8e71caf184cb3355f0b52712b3b80e8..14be4433453a009e2990a4dba00d9893dc64521b 100644 (file)
@@ -1,3 +1,8 @@
+1999-12-30  Gerd Moellmann  <gerd@gnu.org>
+
+       * xterm.c (x_make_frame_visible): Wait for frame becoming visible
+       differently.
+
 1999-12-30  Eli Zaretskii  <eliz@is.elta.co.il>
 
        * msdos.c (IT_write_glyphs): Track last changes to struct glyph.
index 811bfcf45f8a68f20708b0a23d06f5bc48b2423f..0f2c50fcbce54758c74a87cd1f4df85cc5b3c85e 100644 (file)
@@ -11298,7 +11298,7 @@ x_make_frame_visible (f)
      so that incoming events are handled.  */
   {
     Lisp_Object frame;
-    int count = input_signal_count;
+    int count;
     /* This must be before UNBLOCK_INPUT
        since events that arrive in response to the actions above
        will set it when they are handled.  */
@@ -11350,37 +11350,33 @@ x_make_frame_visible (f)
 
     XSETFRAME (frame, f);
 
-    while (1)
+    /* Wait until the frame is visible.  Process X events until a
+       MapNotify event has been seen, or until we think we won't get a
+       MapNotify at all..  */
+    for (count = input_signal_count + 10;
+        input_signal_count < count && !FRAME_VISIBLE_P (f);)
       {
+       /* Force processing of queued events.  */
        x_sync (f);
-       /* Once we have handled input events,
-          we should have received the MapNotify if one is coming.
-          So if we have not got it yet, stop looping.
-          Some window managers make their own decisions
-          about visibility.  */
-       if (input_signal_count != count)
-         break;
-       /* Machines that do polling rather than SIGIO have been observed
-          to go into a busy-wait here.  So we'll fake an alarm signal
-          to let the handler know that there's something to be read.
-          We used to raise a real alarm, but it seems that the handler
-          isn't always enabled here.  This is probably a bug.  */
+
+       /* Machines that do polling rather than SIGIO have been
+          observed to go into a busy-wait here.  So we'll fake an
+          alarm signal to let the handler know that there's something
+          to be read.  We used to raise a real alarm, but it seems
+          that the handler isn't always enabled here.  This is
+          probably a bug.  */
        if (input_polling_used ())
          {
-           /* It could be confusing if a real alarm arrives while processing
-              the fake one.  Turn it off and let the handler reset it.  */
+           /* It could be confusing if a real alarm arrives while
+              processing the fake one.  Turn it off and let the
+              handler reset it.  */
            alarm (0);
            input_poll_signal (0);
          }
-       /* Once we have handled input events,
-          we should have received the MapNotify if one is coming.
-          So if we have not got it yet, stop looping.
-          Some window managers make their own decisions
-          about visibility.  */
-       if (input_signal_count != count)
-         break;
+
+       /* See if a MapNotify event has been processed.  */
+       FRAME_SAMPLE_VISIBILITY (f);
       }
-    FRAME_SAMPLE_VISIBILITY (f);
   }
 }