]> code.delx.au - gnu-emacs/blobdiff - src/dispnew.c
*** empty log message ***
[gnu-emacs] / src / dispnew.c
index cd9a773bdeb8ff2f8f62e554eff31680d866bf92..d2c63687dd609079e8c7749243ede0008f323270 100644 (file)
@@ -1797,11 +1797,9 @@ check_matrix_invariants (w)
 
    X and Y are column/row within the frame glyph matrix where
    sub-matrices for the window tree rooted at WINDOW must be
-   allocated.  CH_DIM contains the dimensions of the smallest
-   character that could be used during display.  DIM_ONLY_P non-zero
-   means that the caller of this function is only interested in the
-   result matrix dimension, and matrix adjustments should not be
-   performed.
+   allocated.  DIM_ONLY_P non-zero means that the caller of this
+   function is only interested in the result matrix dimension, and
+   matrix adjustments should not be performed.
 
    The function returns the total width/height of the sub-matrices of
    the window tree.  If called on a frame root window, the computation
@@ -2049,8 +2047,7 @@ required_matrix_width (w)
 
 
 /* Allocate window matrices for window-based redisplay.  W is the
-   window whose matrices must be allocated/reallocated.  CH_DIM is the
-   size of the smallest character that could potentially be used on W.  */
+   window whose matrices must be allocated/reallocated.  */
 
 static void
 allocate_matrices_for_window_redisplay (w)
@@ -2283,7 +2280,6 @@ static void
 adjust_frame_glyphs_for_frame_redisplay (f)
      struct frame *f;
 {
-  struct dim ch_dim;
   struct dim matrix_dim;
   int pool_changed_p;
   int window_change_flags;
@@ -2292,10 +2288,6 @@ adjust_frame_glyphs_for_frame_redisplay (f)
   if (!FRAME_LIVE_P (f))
     return;
 
-  /* Determine the smallest character in any font for F.  On
-     console windows, all characters have dimension (1, 1).  */
-  ch_dim.width = ch_dim.height = 1;
-
   top_window_y = FRAME_TOP_MARGIN (f);
 
   /* Allocate glyph pool structures if not already done.  */
@@ -2384,22 +2376,14 @@ static void
 adjust_frame_glyphs_for_window_redisplay (f)
      struct frame *f;
 {
-  struct dim ch_dim;
   struct window *w;
 
   xassert (FRAME_WINDOW_P (f) && FRAME_LIVE_P (f));
 
-  /* Get minimum sizes.  */
-#ifdef HAVE_WINDOW_SYSTEM
-  ch_dim.width = FRAME_SMALLEST_CHAR_WIDTH (f);
-  ch_dim.height = FRAME_SMALLEST_FONT_HEIGHT (f);
-#else
-  ch_dim.width = ch_dim.height = 1;
-#endif
-
   /* Allocate/reallocate window matrices.  */
   allocate_matrices_for_window_redisplay (XWINDOW (FRAME_ROOT_WINDOW (f)));
 
+#ifdef HAVE_X_WINDOWS
   /* Allocate/ reallocate matrices of the dummy window used to display
      the menu bar under X when no X toolkit support is available.  */
 #if ! defined (USE_X_TOOLKIT) && ! defined (USE_GTK)
@@ -2423,7 +2407,8 @@ adjust_frame_glyphs_for_window_redisplay (f)
     XSETFASTINT (w->total_cols, FRAME_TOTAL_COLS (f));
     allocate_matrices_for_window_redisplay (w);
   }
-#endif /* not USE_X_TOOLKIT */
+#endif /* not USE_X_TOOLKIT && not USE_GTK */
+#endif /* HAVE_X_WINDOWS */
 
 #ifndef USE_GTK
   /* Allocate/ reallocate matrices of the tool bar window.  If we
@@ -4406,7 +4391,12 @@ update_text_area (w, vpos)
       || desired_row->phys_height != current_row->phys_height
       || desired_row->visible_height != current_row->visible_height
       || current_row->overlapped_p
+#if 0
+      /* This causes excessive flickering when mouse is moved across
+        the mode line.  Luckily everything seems to work just fine
+        without doing this.  KFS 2006-09-17.  */
       || current_row->mouse_face_p
+#endif
       || current_row->x != desired_row->x)
     {
       rif->cursor_to (vpos, 0, desired_row->y, desired_row->x);
@@ -6495,37 +6485,58 @@ Emacs was built without floating point support.
 
 
 /* This is just like wait_reading_process_output, except that
-   it does redisplay.  */
+   it does redisplay.
+
+   TIMEOUT is number of seconds to wait (float or integer),
+   or t to wait forever.
+   READING is 1 if reading input.
+   If DO_DISPLAY is >0 display process output while waiting.
+   If DO_DISPLAY is >1 perform an initial redisplay before waiting.
+*/
 
 Lisp_Object
-sit_for (sec, usec, reading, display, initial_display)
-     int sec, usec, reading, display, initial_display;
+sit_for (timeout, reading, do_display)
+     Lisp_Object timeout;
+     int reading, do_display;
 {
-  int preempt = (sec > 0) || (sec == 0 && usec >= 0);
+  int sec, usec;
 
-  swallow_events (display);
+  swallow_events (do_display);
 
-  if ((detect_input_pending_run_timers (display) && preempt)
+  if ((detect_input_pending_run_timers (do_display))
       || !NILP (Vexecuting_kbd_macro))
     return Qnil;
 
-  if (initial_display)
+  if (do_display >= 2)
+    redisplay_preserve_echo_area (2);
+
+  if (INTEGERP (timeout))
     {
-      int count = SPECPDL_INDEX ();
-      if (!preempt)
-       specbind (Qredisplay_dont_pause, Qt);
-      redisplay_preserve_echo_area (2);
-      unbind_to (count, Qnil);
+      sec = XINT (timeout);
+      usec = 0;
     }
+  else if (FLOATP (timeout))
+    {
+      double seconds = XFLOAT_DATA (timeout);
+      sec = (int) seconds;
+      usec = (int) ((seconds - sec) * 1000000);
+    }
+  else if (EQ (timeout, Qt))
+    {
+      sec = 0;
+      usec = 0;
+    }
+  else
+    wrong_type_argument (Qnumberp, timeout);
 
-  if (sec == 0 && usec == 0)
+  if (sec == 0 && usec == 0 && !EQ (timeout, Qt))
     return Qt;
 
 #ifdef SIGIO
   gobble_input (0);
 #endif
 
-  wait_reading_process_output (sec, usec, reading ? -1 : 1, display,
+  wait_reading_process_output (sec, usec, reading ? -1 : 1, do_display,
                               Qnil, NULL, 0);
 
   return detect_input_pending () ? Qnil : Qt;
@@ -6534,15 +6545,16 @@ sit_for (sec, usec, reading, display, initial_display)
 
 DEFUN ("redisplay", Fredisplay, Sredisplay, 0, 1, 0,
        doc: /* Perform redisplay if no input is available.
-If optional arg FORCE is non-nil or `rediplay-dont-pause' is non-nil,
-perform a full redisplay even if input is available.  */)
+If optional arg FORCE is non-nil or `redisplay-dont-pause' is non-nil,
+perform a full redisplay even if input is available.
+Return t if redisplay was performed, nil otherwise.  */)
      (force)
   Lisp_Object force;
 {
   int count;
 
-  swallow_events (Qt);
-  if ((detect_input_pending_run_timers (Qt)
+  swallow_events (1);
+  if ((detect_input_pending_run_timers (1)
        && NILP (force) && !redisplay_dont_pause)
       || !NILP (Vexecuting_kbd_macro))
     return Qnil;
@@ -6810,9 +6822,15 @@ init_display ()
 For types defined in VMS, use  set term /device=TYPE.\n\
 For types not defined in VMS, use  define emacs_term \"TYPE\".\n\
 \(The quotation marks are necessary since terminal types are lower case.)\n");
-#else
-      fprintf (stderr, "Please set the environment variable TERM; see tset(1).\n");
-#endif
+#else /* not VMS */
+
+#ifdef HAVE_WINDOW_SYSTEM
+      if (! inhibit_window_system)
+       fprintf (stderr, "Please set the environment variable DISPLAY or TERM (see `tset').\n");
+      else
+#endif /* HAVE_WINDOW_SYSTEM */
+       fprintf (stderr, "Please set the environment variable TERM; see `tset'.\n");
+#endif /* not VMS */
       exit (1);
     }