1
Fork 0
mirror of git://git.sv.gnu.org/emacs.git synced 2026-01-09 05:01:02 -08:00

Minor cleanups to Haiku windowing

* src/haikufns.c (haiku_create_frame, haiku_create_tip_frame):
* src/haikuterm.h (struct haiku_output, struct scroll_bar)
(XSCROLL_BAR): Remove used fields of various structs.

* src/haikuterm.c (haiku_flash): Make input detection actually
work.
This commit is contained in:
Po Lu 2022-04-13 06:46:45 +00:00
parent 8e3d120b9f
commit eb85abf5b2
3 changed files with 67 additions and 69 deletions

View file

@ -800,8 +800,6 @@ haiku_create_frame (Lisp_Object parms)
initialize_frame_menubar (f);
unblock_input ();
FRAME_OUTPUT_DATA (f)->window_desc = FRAME_OUTPUT_DATA (f)->window;
Vframe_list = Fcons (frame, Vframe_list);
Lisp_Object parent_frame = gui_display_get_arg (dpyinfo, parms, Qparent_frame, NULL, NULL,
@ -1046,7 +1044,6 @@ haiku_create_tip_frame (Lisp_Object parms)
if (!window)
emacs_abort ();
FRAME_OUTPUT_DATA (f)->window_desc = window;
BWindow_set_tooltip_decoration (window);
unblock_input ();
}

View file

@ -3723,10 +3723,13 @@ haiku_flash (struct frame *f)
int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f);
int width = flash_right - flash_left;
void *view = FRAME_HAIKU_VIEW (f);
struct timespec delay, wakeup, current, timeout;
object_wait_info info;
bigtime_t wakeup;
delay = make_timespec (0, 150 * 1000 * 1000);
wakeup = timespec_add (current_timespec (), delay);
info.object = port_application_to_emacs;
info.type = B_OBJECT_TYPE_PORT;
info.events = B_EVENT_READ;
wakeup = system_time () + 150000;
BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f),
FRAME_PIXEL_HEIGHT (f));
@ -3760,17 +3763,17 @@ haiku_flash (struct frame *f)
available. */
while (!detect_input_pending ())
{
current = current_timespec ();
/* Break if result would not be positive. */
if (timespec_cmp (wakeup, current) <= 0)
if (wakeup < system_time ())
break;
/* How long `select' should wait. */
timeout = make_timespec (0, 10 * 1000 * 1000);
/* Try to wait that long--but we might wake up sooner. */
pselect (0, NULL, NULL, NULL, &timeout, NULL);
wait_for_objects_etc (&info, 1, B_ABSOLUTE_TIMEOUT, wakeup);
if (info.events & B_EVENT_READ)
break;
info.events = B_EVENT_READ;
}
BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f),

View file

@ -36,8 +36,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */
extern int popup_activated_p;
extern void be_app_quit (void);
struct haikufont_info
{
struct font font;
@ -128,6 +126,8 @@ struct haiku_display_info
struct haiku_output
{
struct haiku_display_info *display_info;
Emacs_Cursor text_cursor;
Emacs_Cursor nontext_cursor;
Emacs_Cursor modeline_cursor;
@ -144,20 +144,11 @@ struct haiku_output
Emacs_Cursor bottom_edge_cursor;
Emacs_Cursor bottom_left_corner_cursor;
Emacs_Cursor no_cursor;
Emacs_Cursor current_cursor;
struct haiku_display_info *display_info;
int baseline_offset;
int fontset;
Emacs_Color cursor_color;
Window window_desc, parent_desc;
int titlebar_height;
int toolbar_height;
Window parent_desc;
haiku window;
haiku view;
@ -165,21 +156,26 @@ struct haiku_output
int menu_up_to_date_p;
int zoomed_p;
int hourglass_p;
int menu_bar_open_p;
int fontset;
int baseline_offset;
/* Whether or not there is data in a back buffer that hasn't been
displayed yet. */
bool dirty_p;
struct font *font;
int hourglass_p;
uint32_t cursor_fg;
bool dirty_p;
/* The pending position we're waiting for. */
int pending_top, pending_left;
/* Whether or not adjust_frame_size and haiku_set_offset have yet
been called by haiku_create_frame. */
bool configury_done;
/* The default cursor foreground color. */
uint32_t cursor_fg;
};
struct x_output
@ -230,23 +226,25 @@ struct scroll_bar
/* True if the scroll bar is horizontal. */
bool horizontal;
/* The amount of units taken up by the thumb, which represents the
portion of the buffer currently on screen. */
int page_size;
};
#define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec))
#define FRAME_DIRTY_P(f) (FRAME_OUTPUT_DATA (f)->dirty_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)
#define FRAME_HAIKU_VIEW(f) ((MAKE_FRAME_DIRTY (f)), FRAME_OUTPUT_DATA (f)->view)
#define FRAME_HAIKU_MENU_BAR(f) (FRAME_OUTPUT_DATA (f)->menubar)
#define FRAME_DISPLAY_INFO(f) (FRAME_OUTPUT_DATA (f)->display_info)
#define FRAME_FONT(f) (FRAME_OUTPUT_DATA (f)->font)
#define FRAME_FONTSET(f) (FRAME_OUTPUT_DATA (f)->fontset)
#define FRAME_NATIVE_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window)
#define FRAME_BASELINE_OFFSET(f) (FRAME_OUTPUT_DATA (f)->baseline_offset)
#define FRAME_CURSOR_COLOR(f) (FRAME_OUTPUT_DATA (f)->cursor_color)
#define FRAME_DIRTY_P(f) (FRAME_OUTPUT_DATA (f)->dirty_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)
#define FRAME_HAIKU_VIEW(f) ((MAKE_FRAME_DIRTY (f)), FRAME_OUTPUT_DATA (f)->view)
#define FRAME_HAIKU_MENU_BAR(f) (FRAME_OUTPUT_DATA (f)->menubar)
#define FRAME_DISPLAY_INFO(f) (FRAME_OUTPUT_DATA (f)->display_info)
#define FRAME_FONT(f) (FRAME_OUTPUT_DATA (f)->font)
#define FRAME_FONTSET(f) (FRAME_OUTPUT_DATA (f)->fontset)
#define FRAME_NATIVE_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window)
#define FRAME_BASELINE_OFFSET(f) (FRAME_OUTPUT_DATA (f)->baseline_offset)
#define FRAME_CURSOR_COLOR(f) (FRAME_OUTPUT_DATA (f)->cursor_color)
#ifdef USE_BE_CAIRO
#define FRAME_CR_CONTEXT(f) \
@ -262,57 +260,57 @@ extern void syms_of_haikufont (void);
extern void syms_of_haikuselect (void);
extern void init_haiku_select (void);
extern void be_app_quit (void);
extern void haiku_iconify_frame (struct frame *);
extern void haiku_visualize_frame (struct frame *);
extern void haiku_unvisualize_frame (struct frame *);
extern void haiku_set_offset (struct frame *, int, int, int);
extern void haiku_set_frame_visible_invisible (struct frame *, bool);
extern void haiku_free_frame_resources (struct frame *f);
extern void haiku_scroll_bar_remove (struct scroll_bar *bar);
extern void haiku_clear_under_internal_border (struct frame *f);
extern void haiku_set_name (struct frame *f, Lisp_Object name, bool explicit_p);
extern void haiku_free_frame_resources (struct frame *);
extern void haiku_scroll_bar_remove (struct scroll_bar *);
extern void haiku_clear_under_internal_border (struct frame *);
extern void haiku_set_name (struct frame *, Lisp_Object, bool);
extern Lisp_Object haiku_message_to_lisp (void *);
extern struct haiku_display_info *haiku_term_init (void);
extern void mark_haiku_display (void);
extern int haiku_get_color (const char *name, Emacs_Color *color);
extern void haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval);
extern void haiku_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval);
extern void haiku_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval);
extern void haiku_set_internal_border_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval);
extern void haiku_change_tab_bar_height (struct frame *f, int height);
extern void haiku_change_tool_bar_height (struct frame *f, int height);
extern int haiku_get_color (const char *, Emacs_Color *);
extern void haiku_set_background_color (struct frame *, Lisp_Object, Lisp_Object);
extern void haiku_set_cursor_color (struct frame *, Lisp_Object, Lisp_Object);
extern void haiku_set_cursor_type (struct frame *, Lisp_Object, Lisp_Object);
extern void haiku_set_internal_border_width (struct frame *, Lisp_Object, Lisp_Object);
extern void haiku_change_tab_bar_height (struct frame *, int);
extern void haiku_change_tool_bar_height (struct frame *, int);
extern void haiku_query_color (uint32_t col, Emacs_Color *color);
extern void haiku_query_color (uint32_t, Emacs_Color *);
extern unsigned long haiku_get_pixel (haiku bitmap, int x, int y);
extern void haiku_put_pixel (haiku bitmap, int x, int y, unsigned long pixel);
extern unsigned long haiku_get_pixel (haiku, int, int);
extern void haiku_put_pixel (haiku, int, int, unsigned long);
extern Lisp_Object haiku_menu_show (struct frame *f, int x, int y, int menu_flags,
Lisp_Object title, const char **error_name);
extern Lisp_Object haiku_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents);
extern Lisp_Object haiku_menu_show (struct frame *, int, int, int,
Lisp_Object, const char **);
extern Lisp_Object haiku_popup_dialog (struct frame *, Lisp_Object, Lisp_Object);
extern void haiku_note_drag_motion (void);
extern void initialize_frame_menubar (struct frame *f);
extern void initialize_frame_menubar (struct frame *);
extern void run_menu_bar_help_event (struct frame *f, int mb_idx);
extern void put_xrm_resource (Lisp_Object name, Lisp_Object val);
extern void run_menu_bar_help_event (struct frame *, int);
extern void put_xrm_resource (Lisp_Object, Lisp_Object);
#ifdef HAVE_NATIVE_IMAGE_API
extern bool haiku_can_use_native_image_api (Lisp_Object type);
extern int haiku_load_image (struct frame *f, struct image *img,
Lisp_Object spec_file, Lisp_Object spec_data);
extern bool haiku_can_use_native_image_api (Lisp_Object);
extern int haiku_load_image (struct frame *, struct image *,
Lisp_Object, Lisp_Object);
extern void syms_of_haikuimage (void);
#endif
#ifdef USE_BE_CAIRO
extern cairo_t *
haiku_begin_cr_clip (struct frame *f, struct glyph_string *s);
extern cairo_t *haiku_begin_cr_clip (struct frame *, struct glyph_string *);
extern void
haiku_end_cr_clip (cairo_t *cr);
extern void haiku_end_cr_clip (cairo_t *);
#endif
extern void haiku_merge_cursor_foreground (struct glyph_string *, unsigned long *,