aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPo Lu2022-04-13 06:46:45 +0000
committerPo Lu2022-04-13 06:46:45 +0000
commiteb85abf5b2d0ce02f934f2d334ecd60c57da907c (patch)
tree4bb60537b688bad3be360821724d389de0cfbbe5
parent8e3d120b9f06bc1cc5e84d9a8a3773700494234f (diff)
downloademacs-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.c3
-rw-r--r--src/haikuterm.c23
-rw-r--r--src/haikuterm.h110
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
37extern int popup_activated_p; 37extern int popup_activated_p;
38 38
39extern void be_app_quit (void);
40
41struct haikufont_info 39struct haikufont_info
42{ 40{
43 struct font font; 41 struct font font;
@@ -128,6 +126,8 @@ struct haiku_display_info
128 126
129struct haiku_output 127struct 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
185struct x_output 181struct 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);
262extern void syms_of_haikuselect (void); 260extern void syms_of_haikuselect (void);
263extern void init_haiku_select (void); 261extern void init_haiku_select (void);
264 262
263extern void be_app_quit (void);
264
265extern void haiku_iconify_frame (struct frame *); 265extern void haiku_iconify_frame (struct frame *);
266extern void haiku_visualize_frame (struct frame *); 266extern void haiku_visualize_frame (struct frame *);
267extern void haiku_unvisualize_frame (struct frame *); 267extern void haiku_unvisualize_frame (struct frame *);
268extern void haiku_set_offset (struct frame *, int, int, int); 268extern void haiku_set_offset (struct frame *, int, int, int);
269extern void haiku_set_frame_visible_invisible (struct frame *, bool); 269extern void haiku_set_frame_visible_invisible (struct frame *, bool);
270extern void haiku_free_frame_resources (struct frame *f); 270extern void haiku_free_frame_resources (struct frame *);
271extern void haiku_scroll_bar_remove (struct scroll_bar *bar); 271extern void haiku_scroll_bar_remove (struct scroll_bar *);
272extern void haiku_clear_under_internal_border (struct frame *f); 272extern void haiku_clear_under_internal_border (struct frame *);
273extern void haiku_set_name (struct frame *f, Lisp_Object name, bool explicit_p); 273extern void haiku_set_name (struct frame *, Lisp_Object, bool);
274extern Lisp_Object haiku_message_to_lisp (void *); 274extern Lisp_Object haiku_message_to_lisp (void *);
275 275
276extern struct haiku_display_info *haiku_term_init (void); 276extern struct haiku_display_info *haiku_term_init (void);
277 277
278extern void mark_haiku_display (void); 278extern void mark_haiku_display (void);
279 279
280extern int haiku_get_color (const char *name, Emacs_Color *color); 280extern int haiku_get_color (const char *, Emacs_Color *);
281extern void haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval); 281extern void haiku_set_background_color (struct frame *, Lisp_Object, Lisp_Object);
282extern void haiku_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval); 282extern void haiku_set_cursor_color (struct frame *, Lisp_Object, Lisp_Object);
283extern void haiku_set_cursor_type (struct frame *f, Lisp_Object arg, Lisp_Object oldval); 283extern void haiku_set_cursor_type (struct frame *, Lisp_Object, Lisp_Object);
284extern void haiku_set_internal_border_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval); 284extern void haiku_set_internal_border_width (struct frame *, Lisp_Object, Lisp_Object);
285extern void haiku_change_tab_bar_height (struct frame *f, int height); 285extern void haiku_change_tab_bar_height (struct frame *, int);
286extern void haiku_change_tool_bar_height (struct frame *f, int height); 286extern void haiku_change_tool_bar_height (struct frame *, int);
287 287
288extern void haiku_query_color (uint32_t col, Emacs_Color *color); 288extern void haiku_query_color (uint32_t, Emacs_Color *);
289 289
290extern unsigned long haiku_get_pixel (haiku bitmap, int x, int y); 290extern unsigned long haiku_get_pixel (haiku, int, int);
291extern void haiku_put_pixel (haiku bitmap, int x, int y, unsigned long pixel); 291extern void haiku_put_pixel (haiku, int, int, unsigned long);
292 292
293extern Lisp_Object haiku_menu_show (struct frame *f, int x, int y, int menu_flags, 293extern Lisp_Object haiku_menu_show (struct frame *, int, int, int,
294 Lisp_Object title, const char **error_name); 294 Lisp_Object, const char **);
295extern Lisp_Object haiku_popup_dialog (struct frame *f, Lisp_Object header, Lisp_Object contents); 295extern Lisp_Object haiku_popup_dialog (struct frame *, Lisp_Object, Lisp_Object);
296extern void haiku_note_drag_motion (void); 296extern void haiku_note_drag_motion (void);
297 297
298extern void initialize_frame_menubar (struct frame *f); 298extern void initialize_frame_menubar (struct frame *);
299 299
300extern void run_menu_bar_help_event (struct frame *f, int mb_idx); 300extern void run_menu_bar_help_event (struct frame *, int);
301extern void put_xrm_resource (Lisp_Object name, Lisp_Object val); 301extern void put_xrm_resource (Lisp_Object, Lisp_Object);
302 302
303#ifdef HAVE_NATIVE_IMAGE_API 303#ifdef HAVE_NATIVE_IMAGE_API
304extern bool haiku_can_use_native_image_api (Lisp_Object type); 304extern bool haiku_can_use_native_image_api (Lisp_Object);
305extern int haiku_load_image (struct frame *f, struct image *img, 305extern int haiku_load_image (struct frame *, struct image *,
306 Lisp_Object spec_file, Lisp_Object spec_data); 306 Lisp_Object, Lisp_Object);
307extern void syms_of_haikuimage (void); 307extern void syms_of_haikuimage (void);
308#endif 308#endif
309 309
310#ifdef USE_BE_CAIRO 310#ifdef USE_BE_CAIRO
311extern cairo_t * 311extern cairo_t *haiku_begin_cr_clip (struct frame *, struct glyph_string *);
312haiku_begin_cr_clip (struct frame *f, struct glyph_string *s);
313 312
314extern void 313extern void haiku_end_cr_clip (cairo_t *);
315haiku_end_cr_clip (cairo_t *cr);
316#endif 314#endif
317 315
318extern void haiku_merge_cursor_foreground (struct glyph_string *, unsigned long *, 316extern void haiku_merge_cursor_foreground (struct glyph_string *, unsigned long *,