diff options
| author | Po Lu | 2022-04-13 06:46:45 +0000 |
|---|---|---|
| committer | Po Lu | 2022-04-13 06:46:45 +0000 |
| commit | eb85abf5b2d0ce02f934f2d334ecd60c57da907c (patch) | |
| tree | 4bb60537b688bad3be360821724d389de0cfbbe5 | |
| parent | 8e3d120b9f06bc1cc5e84d9a8a3773700494234f (diff) | |
| download | emacs-eb85abf5b2d0ce02f934f2d334ecd60c57da907c.tar.gz emacs-eb85abf5b2d0ce02f934f2d334ecd60c57da907c.zip | |
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.
| -rw-r--r-- | src/haikufns.c | 3 | ||||
| -rw-r--r-- | src/haikuterm.c | 23 | ||||
| -rw-r--r-- | src/haikuterm.h | 110 |
3 files changed, 67 insertions, 69 deletions
diff --git a/src/haikufns.c b/src/haikufns.c index 0662410289a..b282cf292a7 100644 --- a/src/haikufns.c +++ b/src/haikufns.c | |||
| @@ -800,8 +800,6 @@ haiku_create_frame (Lisp_Object parms) | |||
| 800 | initialize_frame_menubar (f); | 800 | initialize_frame_menubar (f); |
| 801 | unblock_input (); | 801 | unblock_input (); |
| 802 | 802 | ||
| 803 | FRAME_OUTPUT_DATA (f)->window_desc = FRAME_OUTPUT_DATA (f)->window; | ||
| 804 | |||
| 805 | Vframe_list = Fcons (frame, Vframe_list); | 803 | Vframe_list = Fcons (frame, Vframe_list); |
| 806 | 804 | ||
| 807 | Lisp_Object parent_frame = gui_display_get_arg (dpyinfo, parms, Qparent_frame, NULL, NULL, | 805 | 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) | |||
| 1046 | if (!window) | 1044 | if (!window) |
| 1047 | emacs_abort (); | 1045 | emacs_abort (); |
| 1048 | 1046 | ||
| 1049 | FRAME_OUTPUT_DATA (f)->window_desc = window; | ||
| 1050 | BWindow_set_tooltip_decoration (window); | 1047 | BWindow_set_tooltip_decoration (window); |
| 1051 | unblock_input (); | 1048 | unblock_input (); |
| 1052 | } | 1049 | } |
diff --git a/src/haikuterm.c b/src/haikuterm.c index 667ed685c52..bc21276437d 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c | |||
| @@ -3723,10 +3723,13 @@ haiku_flash (struct frame *f) | |||
| 3723 | int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); | 3723 | int flash_right = FRAME_PIXEL_WIDTH (f) - FRAME_INTERNAL_BORDER_WIDTH (f); |
| 3724 | int width = flash_right - flash_left; | 3724 | int width = flash_right - flash_left; |
| 3725 | void *view = FRAME_HAIKU_VIEW (f); | 3725 | void *view = FRAME_HAIKU_VIEW (f); |
| 3726 | struct timespec delay, wakeup, current, timeout; | 3726 | object_wait_info info; |
| 3727 | bigtime_t wakeup; | ||
| 3727 | 3728 | ||
| 3728 | delay = make_timespec (0, 150 * 1000 * 1000); | 3729 | info.object = port_application_to_emacs; |
| 3729 | wakeup = timespec_add (current_timespec (), delay); | 3730 | info.type = B_OBJECT_TYPE_PORT; |
| 3731 | info.events = B_EVENT_READ; | ||
| 3732 | wakeup = system_time () + 150000; | ||
| 3730 | 3733 | ||
| 3731 | BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f), | 3734 | BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f), |
| 3732 | FRAME_PIXEL_HEIGHT (f)); | 3735 | FRAME_PIXEL_HEIGHT (f)); |
| @@ -3760,17 +3763,17 @@ haiku_flash (struct frame *f) | |||
| 3760 | available. */ | 3763 | available. */ |
| 3761 | while (!detect_input_pending ()) | 3764 | while (!detect_input_pending ()) |
| 3762 | { | 3765 | { |
| 3763 | current = current_timespec (); | ||
| 3764 | |||
| 3765 | /* Break if result would not be positive. */ | 3766 | /* Break if result would not be positive. */ |
| 3766 | if (timespec_cmp (wakeup, current) <= 0) | 3767 | if (wakeup < system_time ()) |
| 3767 | break; | 3768 | break; |
| 3768 | 3769 | ||
| 3769 | /* How long `select' should wait. */ | ||
| 3770 | timeout = make_timespec (0, 10 * 1000 * 1000); | ||
| 3771 | |||
| 3772 | /* Try to wait that long--but we might wake up sooner. */ | 3770 | /* Try to wait that long--but we might wake up sooner. */ |
| 3773 | pselect (0, NULL, NULL, NULL, &timeout, NULL); | 3771 | wait_for_objects_etc (&info, 1, B_ABSOLUTE_TIMEOUT, wakeup); |
| 3772 | |||
| 3773 | if (info.events & B_EVENT_READ) | ||
| 3774 | break; | ||
| 3775 | |||
| 3776 | info.events = B_EVENT_READ; | ||
| 3774 | } | 3777 | } |
| 3775 | 3778 | ||
| 3776 | BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f), | 3779 | BView_draw_lock (view, true, 0, 0, FRAME_PIXEL_WIDTH (f), |
diff --git a/src/haikuterm.h b/src/haikuterm.h index 02bb1ddc6f2..5f905ab4000 100644 --- a/src/haikuterm.h +++ b/src/haikuterm.h | |||
| @@ -36,8 +36,6 @@ along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>. */ | |||
| 36 | 36 | ||
| 37 | extern int popup_activated_p; | 37 | extern int popup_activated_p; |
| 38 | 38 | ||
| 39 | extern void be_app_quit (void); | ||
| 40 | |||
| 41 | struct haikufont_info | 39 | struct haikufont_info |
| 42 | { | 40 | { |
| 43 | struct font font; | 41 | struct font font; |
| @@ -128,6 +126,8 @@ struct haiku_display_info | |||
| 128 | 126 | ||
| 129 | struct haiku_output | 127 | struct haiku_output |
| 130 | { | 128 | { |
| 129 | struct haiku_display_info *display_info; | ||
| 130 | |||
| 131 | Emacs_Cursor text_cursor; | 131 | Emacs_Cursor text_cursor; |
| 132 | Emacs_Cursor nontext_cursor; | 132 | Emacs_Cursor nontext_cursor; |
| 133 | Emacs_Cursor modeline_cursor; | 133 | Emacs_Cursor modeline_cursor; |
| @@ -144,20 +144,11 @@ struct haiku_output | |||
| 144 | Emacs_Cursor bottom_edge_cursor; | 144 | Emacs_Cursor bottom_edge_cursor; |
| 145 | Emacs_Cursor bottom_left_corner_cursor; | 145 | Emacs_Cursor bottom_left_corner_cursor; |
| 146 | Emacs_Cursor no_cursor; | 146 | Emacs_Cursor no_cursor; |
| 147 | |||
| 148 | Emacs_Cursor current_cursor; | 147 | Emacs_Cursor current_cursor; |
| 149 | 148 | ||
| 150 | struct haiku_display_info *display_info; | ||
| 151 | |||
| 152 | int baseline_offset; | ||
| 153 | int fontset; | ||
| 154 | |||
| 155 | Emacs_Color cursor_color; | 149 | Emacs_Color cursor_color; |
| 156 | 150 | ||
| 157 | Window window_desc, parent_desc; | 151 | Window parent_desc; |
| 158 | |||
| 159 | int titlebar_height; | ||
| 160 | int toolbar_height; | ||
| 161 | 152 | ||
| 162 | haiku window; | 153 | haiku window; |
| 163 | haiku view; | 154 | haiku view; |
| @@ -165,21 +156,26 @@ struct haiku_output | |||
| 165 | 156 | ||
| 166 | int menu_up_to_date_p; | 157 | int menu_up_to_date_p; |
| 167 | int zoomed_p; | 158 | int zoomed_p; |
| 168 | 159 | int hourglass_p; | |
| 169 | int menu_bar_open_p; | 160 | int menu_bar_open_p; |
| 161 | int fontset; | ||
| 162 | int baseline_offset; | ||
| 170 | 163 | ||
| 171 | struct font *font; | 164 | /* Whether or not there is data in a back buffer that hasn't been |
| 172 | 165 | displayed yet. */ | |
| 173 | int hourglass_p; | ||
| 174 | uint32_t cursor_fg; | ||
| 175 | bool dirty_p; | 166 | bool dirty_p; |
| 176 | 167 | ||
| 168 | struct font *font; | ||
| 169 | |||
| 177 | /* The pending position we're waiting for. */ | 170 | /* The pending position we're waiting for. */ |
| 178 | int pending_top, pending_left; | 171 | int pending_top, pending_left; |
| 179 | 172 | ||
| 180 | /* Whether or not adjust_frame_size and haiku_set_offset have yet | 173 | /* Whether or not adjust_frame_size and haiku_set_offset have yet |
| 181 | been called by haiku_create_frame. */ | 174 | been called by haiku_create_frame. */ |
| 182 | bool configury_done; | 175 | bool configury_done; |
| 176 | |||
| 177 | /* The default cursor foreground color. */ | ||
| 178 | uint32_t cursor_fg; | ||
| 183 | }; | 179 | }; |
| 184 | 180 | ||
| 185 | struct x_output | 181 | struct x_output |
| @@ -230,23 +226,25 @@ struct scroll_bar | |||
| 230 | /* True if the scroll bar is horizontal. */ | 226 | /* True if the scroll bar is horizontal. */ |
| 231 | bool horizontal; | 227 | bool horizontal; |
| 232 | 228 | ||
| 229 | /* The amount of units taken up by the thumb, which represents the | ||
| 230 | portion of the buffer currently on screen. */ | ||
| 233 | int page_size; | 231 | int page_size; |
| 234 | }; | 232 | }; |
| 235 | 233 | ||
| 236 | #define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec)) | 234 | #define XSCROLL_BAR(vec) ((struct scroll_bar *) XVECTOR (vec)) |
| 237 | 235 | ||
| 238 | #define FRAME_DIRTY_P(f) (FRAME_OUTPUT_DATA (f)->dirty_p) | 236 | #define FRAME_DIRTY_P(f) (FRAME_OUTPUT_DATA (f)->dirty_p) |
| 239 | #define MAKE_FRAME_DIRTY(f) (FRAME_DIRTY_P (f) = 1) | 237 | #define MAKE_FRAME_DIRTY(f) (FRAME_DIRTY_P (f) = 1) |
| 240 | #define FRAME_OUTPUT_DATA(f) ((f)->output_data.haiku) | 238 | #define FRAME_OUTPUT_DATA(f) ((f)->output_data.haiku) |
| 241 | #define FRAME_HAIKU_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window) | 239 | #define FRAME_HAIKU_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window) |
| 242 | #define FRAME_HAIKU_VIEW(f) ((MAKE_FRAME_DIRTY (f)), FRAME_OUTPUT_DATA (f)->view) | 240 | #define FRAME_HAIKU_VIEW(f) ((MAKE_FRAME_DIRTY (f)), FRAME_OUTPUT_DATA (f)->view) |
| 243 | #define FRAME_HAIKU_MENU_BAR(f) (FRAME_OUTPUT_DATA (f)->menubar) | 241 | #define FRAME_HAIKU_MENU_BAR(f) (FRAME_OUTPUT_DATA (f)->menubar) |
| 244 | #define FRAME_DISPLAY_INFO(f) (FRAME_OUTPUT_DATA (f)->display_info) | 242 | #define FRAME_DISPLAY_INFO(f) (FRAME_OUTPUT_DATA (f)->display_info) |
| 245 | #define FRAME_FONT(f) (FRAME_OUTPUT_DATA (f)->font) | 243 | #define FRAME_FONT(f) (FRAME_OUTPUT_DATA (f)->font) |
| 246 | #define FRAME_FONTSET(f) (FRAME_OUTPUT_DATA (f)->fontset) | 244 | #define FRAME_FONTSET(f) (FRAME_OUTPUT_DATA (f)->fontset) |
| 247 | #define FRAME_NATIVE_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window) | 245 | #define FRAME_NATIVE_WINDOW(f) (FRAME_OUTPUT_DATA (f)->window) |
| 248 | #define FRAME_BASELINE_OFFSET(f) (FRAME_OUTPUT_DATA (f)->baseline_offset) | 246 | #define FRAME_BASELINE_OFFSET(f) (FRAME_OUTPUT_DATA (f)->baseline_offset) |
| 249 | #define FRAME_CURSOR_COLOR(f) (FRAME_OUTPUT_DATA (f)->cursor_color) | 247 | #define FRAME_CURSOR_COLOR(f) (FRAME_OUTPUT_DATA (f)->cursor_color) |
| 250 | 248 | ||
| 251 | #ifdef USE_BE_CAIRO | 249 | #ifdef USE_BE_CAIRO |
| 252 | #define FRAME_CR_CONTEXT(f) \ | 250 | #define FRAME_CR_CONTEXT(f) \ |
| @@ -262,57 +260,57 @@ extern void syms_of_haikufont (void); | |||
| 262 | extern void syms_of_haikuselect (void); | 260 | extern void syms_of_haikuselect (void); |
| 263 | extern void init_haiku_select (void); | 261 | extern void init_haiku_select (void); |
| 264 | 262 | ||
| 263 | extern void be_app_quit (void); | ||
| 264 | |||
| 265 | extern void haiku_iconify_frame (struct frame *); | 265 | extern void haiku_iconify_frame (struct frame *); |
| 266 | extern void haiku_visualize_frame (struct frame *); | 266 | extern void haiku_visualize_frame (struct frame *); |
| 267 | extern void haiku_unvisualize_frame (struct frame *); | 267 | extern void haiku_unvisualize_frame (struct frame *); |
| 268 | extern void haiku_set_offset (struct frame *, int, int, int); | 268 | extern void haiku_set_offset (struct frame *, int, int, int); |
| 269 | extern void haiku_set_frame_visible_invisible (struct frame *, bool); | 269 | extern void haiku_set_frame_visible_invisible (struct frame *, bool); |
| 270 | extern void haiku_free_frame_resources (struct frame *f); | 270 | extern void haiku_free_frame_resources (struct frame *); |
| 271 | extern void haiku_scroll_bar_remove (struct scroll_bar *bar); | 271 | extern void haiku_scroll_bar_remove (struct scroll_bar *); |
| 272 | extern void haiku_clear_under_internal_border (struct frame *f); | 272 | extern void haiku_clear_under_internal_border (struct frame *); |
| 273 | extern void haiku_set_name (struct frame *f, Lisp_Object name, bool explicit_p); | 273 | extern void haiku_set_name (struct frame *, Lisp_Object, bool); |
| 274 | extern Lisp_Object haiku_message_to_lisp (void *); | 274 | extern Lisp_Object haiku_message_to_lisp (void *); |
| 275 | 275 | ||
| 276 | extern struct haiku_display_info *haiku_term_init (void); | 276 | extern struct haiku_display_info *haiku_term_init (void); |
| 277 | 277 | ||
| 278 | extern void mark_haiku_display (void); | 278 | extern void mark_haiku_display (void); |
| 279 | 279 | ||
| 280 | extern int haiku_get_color (const char *name, Emacs_Color *color); | 280 | extern int haiku_get_color (const char *, Emacs_Color *); |
| 281 | extern void haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval); | 281 | extern void haiku_set_background_color (struct frame *, Lisp_Object, Lisp_Object); |
| 282 | extern void haiku_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval); | 282 | extern void haiku_set_cursor_color (struct frame *, Lisp_Object, Lisp_Object); |
| 283 | extern void haiku_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval); | 283 | extern void haiku_set_cursor_type (struct frame *, Lisp_Object, Lisp_Object); |
| 284 | extern void haiku_set_internal_border_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval); | 284 | extern void haiku_set_internal_border_width (struct frame *, Lisp_Object, Lisp_Object); |
| 285 | extern void haiku_change_tab_bar_height (struct frame *f, int height); | 285 | extern void haiku_change_tab_bar_height (struct frame *, int); |
| 286 | extern void haiku_change_tool_bar_height (struct frame *f, int height); | 286 | extern void haiku_change_tool_bar_height (struct frame *, int); |
| 287 | 287 | ||
| 288 | extern void haiku_query_color (uint32_t col, Emacs_Color *color); | 288 | extern void haiku_query_color (uint32_t, Emacs_Color *); |
| 289 | 289 | ||
| 290 | extern unsigned long haiku_get_pixel (haiku bitmap, int x, int y); | 290 | extern unsigned long haiku_get_pixel (haiku, int, int); |
| 291 | extern void haiku_put_pixel (haiku bitmap, int x, int y, unsigned long pixel); | 291 | extern void haiku_put_pixel (haiku, int, int, unsigned long); |
| 292 | 292 | ||
| 293 | extern Lisp_Object haiku_menu_show (struct frame *f, int x, int y, int menu_flags, | 293 | extern Lisp_Object haiku_menu_show (struct frame *, int, int, int, |
| 294 | Lisp_Object title, const char **error_name); | 294 | Lisp_Object, const char **); |
| 295 | extern Lisp_Object haiku_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents); | 295 | extern Lisp_Object haiku_popup_dialog (struct frame *, Lisp_Object, Lisp_Object); |
| 296 | extern void haiku_note_drag_motion (void); | 296 | extern void haiku_note_drag_motion (void); |
| 297 | 297 | ||
| 298 | extern void initialize_frame_menubar (struct frame *f); | 298 | extern void initialize_frame_menubar (struct frame *); |
| 299 | 299 | ||
| 300 | extern void run_menu_bar_help_event (struct frame *f, int mb_idx); | 300 | extern void run_menu_bar_help_event (struct frame *, int); |
| 301 | extern void put_xrm_resource (Lisp_Object name, Lisp_Object val); | 301 | extern void put_xrm_resource (Lisp_Object, Lisp_Object); |
| 302 | 302 | ||
| 303 | #ifdef HAVE_NATIVE_IMAGE_API | 303 | #ifdef HAVE_NATIVE_IMAGE_API |
| 304 | extern bool haiku_can_use_native_image_api (Lisp_Object type); | 304 | extern bool haiku_can_use_native_image_api (Lisp_Object); |
| 305 | extern int haiku_load_image (struct frame *f, struct image *img, | 305 | extern int haiku_load_image (struct frame *, struct image *, |
| 306 | Lisp_Object spec_file, Lisp_Object spec_data); | 306 | Lisp_Object, Lisp_Object); |
| 307 | extern void syms_of_haikuimage (void); | 307 | extern void syms_of_haikuimage (void); |
| 308 | #endif | 308 | #endif |
| 309 | 309 | ||
| 310 | #ifdef USE_BE_CAIRO | 310 | #ifdef USE_BE_CAIRO |
| 311 | extern cairo_t * | 311 | extern cairo_t *haiku_begin_cr_clip (struct frame *, struct glyph_string *); |
| 312 | haiku_begin_cr_clip (struct frame *f, struct glyph_string *s); | ||
| 313 | 312 | ||
| 314 | extern void | 313 | extern void haiku_end_cr_clip (cairo_t *); |
| 315 | haiku_end_cr_clip (cairo_t *cr); | ||
| 316 | #endif | 314 | #endif |
| 317 | 315 | ||
| 318 | extern void haiku_merge_cursor_foreground (struct glyph_string *, unsigned long *, | 316 | extern void haiku_merge_cursor_foreground (struct glyph_string *, unsigned long *, |