Adapt last change to Haiku port
* src/haikuterm.c (haiku_frame_up_to_date): (haiku_clear_frame): (haiku_update_begin): (haiku_flush): (haiku_flush_dirty_back_buffer_on): (haiku_read_socket): * src/haikuterm.h (struct haiku_output): (FRAME_COMPLETE_P): Synchronize logic with X.
This commit is contained in:
parent
da6778d1ce
commit
cf19743aca
2 changed files with 32 additions and 5 deletions
|
@ -232,6 +232,9 @@ haiku_frame_up_to_date (struct frame *f)
|
|||
be_evict_font_cache ();
|
||||
up_to_date_count = 0;
|
||||
}
|
||||
|
||||
/* Mark the frame as complete. */
|
||||
FRAME_COMPLETE_P (f) = true;
|
||||
unblock_input ();
|
||||
}
|
||||
|
||||
|
@ -265,6 +268,8 @@ haiku_clear_frame (struct frame *f)
|
|||
|
||||
mark_window_cursors_off (XWINDOW (FRAME_ROOT_WINDOW (f)));
|
||||
|
||||
FRAME_COMPLETE_P (f) = false;
|
||||
|
||||
block_input ();
|
||||
BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f),
|
||||
FRAME_PIXEL_HEIGHT (f));
|
||||
|
@ -1436,6 +1441,9 @@ haiku_clip_to_row (struct window *w, struct glyph_row *row,
|
|||
static void
|
||||
haiku_update_begin (struct frame *f)
|
||||
{
|
||||
/* Mark the frame as incomplete so it is not flushed upon handling
|
||||
input. */
|
||||
FRAME_COMPLETE_P (f) = false;
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -2959,6 +2967,10 @@ haiku_flush (struct frame *f)
|
|||
if (FRAME_DIRTY_P (f) && !buffer_flipping_blocked_p ())
|
||||
haiku_flip_buffers (f);
|
||||
|
||||
/* The frame is complete again as its contents were just
|
||||
flushed. */
|
||||
FRAME_COMPLETE_P (f) = true;
|
||||
|
||||
if (FRAME_VISIBLE_P (f) && !FRAME_TOOLTIP_P (f))
|
||||
BWindow_Flush (FRAME_HAIKU_WINDOW (f));
|
||||
}
|
||||
|
@ -3086,10 +3098,15 @@ haiku_make_fullscreen_consistent (struct frame *f)
|
|||
static void
|
||||
haiku_flush_dirty_back_buffer_on (struct frame *f)
|
||||
{
|
||||
if (!FRAME_GARBAGED_P (f)
|
||||
&& !buffer_flipping_blocked_p ()
|
||||
&& FRAME_DIRTY_P (f))
|
||||
haiku_flip_buffers (f);
|
||||
if (FRAME_GARBAGED_P (f)
|
||||
|| buffer_flipping_blocked_p ()
|
||||
/* If the frame is not already up to date, do not flush buffers
|
||||
on input, as that will result in flicker. */
|
||||
|| !FRAME_COMPLETE_P (f)
|
||||
|| !FRAME_DIRTY_P (f))
|
||||
return;
|
||||
|
||||
haiku_flip_buffers (f);
|
||||
}
|
||||
|
||||
/* N.B. that support for TYPE must be explicitly added to
|
||||
|
@ -3135,6 +3152,7 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
|
|||
int button_or_motion_p, do_help;
|
||||
enum haiku_event_type type;
|
||||
struct input_event inev, inev2;
|
||||
struct frame *mouse_frame;
|
||||
|
||||
message_count = 0;
|
||||
button_or_motion_p = 0;
|
||||
|
@ -3252,9 +3270,13 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit)
|
|||
|| !EQ (f->tool_bar_window, hlinfo->mouse_face_window)
|
||||
|| !EQ (f->tab_bar_window, hlinfo->mouse_face_window)))
|
||||
{
|
||||
mouse_frame = hlinfo->mouse_face_mouse_frame;
|
||||
|
||||
clear_mouse_face (hlinfo);
|
||||
hlinfo->mouse_face_hidden = true;
|
||||
haiku_flush_dirty_back_buffer_on (f);
|
||||
|
||||
if (mouse_frame)
|
||||
haiku_flush_dirty_back_buffer_on (mouse_frame);
|
||||
}
|
||||
|
||||
inev.code = b->keysym ? b->keysym : b->multibyte_char;
|
||||
|
|
|
@ -174,6 +174,10 @@ struct haiku_output
|
|||
displayed yet. */
|
||||
bool_bf dirty_p : 1;
|
||||
|
||||
/* Whether or not the frame is complete, i.e. safe to flush on
|
||||
input. */
|
||||
bool_bf complete_p : 1;
|
||||
|
||||
struct font *font;
|
||||
|
||||
/* The pending position we're waiting for. */
|
||||
|
@ -275,6 +279,7 @@ struct scroll_bar
|
|||
#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
|
||||
|
||||
#define FRAME_DIRTY_P(f) (FRAME_OUTPUT_DATA (f)->dirty_p)
|
||||
#define FRAME_COMPLETE_P(f) (FRAME_OUTPUT_DATA (f)->complete_p)
|
||||
#define MAKE_FRAME_DIRTY(f) (FRAME_DIRTY_P (f) = 1)
|
||||
#define FRAME_OUTPUT_DATA(f) ((f)->output_data.haiku)
|
||||
#define FRAME_HAIKU_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window)
|
||||
|
|
Loading…
Add table
Reference in a new issue