#include "dispextern.h"
#include "cm.h"
#include "buffer.h"
-#include "charset.h"
+#include "character.h"
#include "keyboard.h"
#include "frame.h"
#include "window.h"
int paused_p;
struct window *root_window = XWINDOW (f->root_window);
+ if (redisplay_dont_pause)
+ force_p = 1;
#if PERIODIC_PREEMPTION_CHECKING
- if (!force_p && NUMBERP (Vredisplay_preemption_period))
+ else if (NILP (Vredisplay_preemption_period))
+ force_p = 1;
+ else if (!force_p && NUMBERP (Vredisplay_preemption_period))
{
EMACS_TIME tm;
double p = XFLOATINT (Vredisplay_preemption_period);
/* Record that this is not a frame-based redisplay. */
set_frame_matrix_frame (NULL);
+ if (redisplay_dont_pause)
+ force_p = 1;
#if PERIODIC_PREEMPTION_CHECKING
- if (!force_p && NUMBERP (Vredisplay_preemption_period))
+ else if (NILP (Vredisplay_preemption_period))
+ force_p = 1;
+ else if (!force_p && NUMBERP (Vredisplay_preemption_period))
{
EMACS_TIME tm;
double p = XFLOATINT (Vredisplay_preemption_period);
#endif
/* Check pending input the first time so that we can quickly return. */
- if (redisplay_dont_pause)
- force_p = 1;
-#if PERIODIC_PREEMPTION_CHECKING
- else if (NILP (Vredisplay_preemption_period))
- force_p = 1;
-#else
- else if (!force_p)
+#if !PERIODIC_PREEMPTION_CHECKING
+ if (!force_p)
detect_input_pending_ignore_squeezables ();
#endif
|| 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
+ /* This next line is necessary for correctly redrawing
+ mouse-face areas after scrolling and other operations.
+ However, it causes excessive flickering when mouse is moved
+ across the mode line. Luckily, turning it off for the mode
+ line doesn't seem to hurt anything. -- cyd.
+ But it is still needed for the header line. -- kfs. */
+ || (current_row->mouse_face_p
+ && !(current_row->mode_line_p && vpos > 0))
|| current_row->x != desired_row->x)
{
rif->cursor_to (vpos, 0, desired_row->y, desired_row->x);
if (preempt_count <= 0)
preempt_count = 1;
- if (redisplay_dont_pause)
- force_p = 1;
-#if PERIODIC_PREEMPTION_CHECKING
- else if (NILP (Vredisplay_preemption_period))
- force_p = 1;
-#else
- else if (!force_p && detect_input_pending_ignore_squeezables ())
+#if !PERIODIC_PREEMPTION_CHECKING
+ if (!force_p && detect_input_pending_ignore_squeezables ())
{
pause = 1;
goto do_pause;