From: Po Lu Date: Fri, 22 Apr 2022 05:42:09 +0000 (+0000) Subject: Fix default frame name on Haiku X-Git-Tag: emacs-29.0.90~1931^2~365 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=381eb5d5a0c7ba9d4ef06f8be1636f882d7a7b78;p=emacs.git Fix default frame name on Haiku * src/haikufns.c (haiku_set_background_color) (haiku_set_cursor_color, haiku_get_pixel, haiku_put_pixel) (haiku_set_internal_border_width) (haiku_set_inhibit_double_buffering) (Fhaiku_mouse_absolute_pixel_position, Fxw_color_defined_p) (Fxw_color_values, Fx_double_buffered_p) (Fx_display_backing_store): Clean up coding style. (haiku_set_name): Use correct default name and don't cons extra string all the time. * src/haikuterm.c (haiku_read_socket): Remove unused variable. (haiku_term_init): Set default name. (mark_haiku_display): Mark new field. * src/haikuterm.h (struct haiku_display_info): New field `default_name'. --- diff --git a/src/haikufns.c b/src/haikufns.c index 5fca46c41bd..14644be22bd 100644 --- a/src/haikufns.c +++ b/src/haikufns.c @@ -1394,11 +1394,12 @@ frame_geometry (Lisp_Object frame, Lisp_Object attribute) void haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { + Emacs_Color color; + struct face *defface; + CHECK_STRING (arg); block_input (); - Emacs_Color color; - if (haiku_get_color (SSDATA (arg), &color)) { store_frame_param (f, Qbackground_color, oldval); @@ -1411,8 +1412,6 @@ haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval if (FRAME_HAIKU_VIEW (f)) { - struct face *defface; - BView_draw_lock (FRAME_HAIKU_VIEW (f), false, 0, 0, 0, 0); BView_SetViewColor (FRAME_HAIKU_VIEW (f), color.pixel); BView_draw_unlock (FRAME_HAIKU_VIEW (f)); @@ -1434,10 +1433,10 @@ haiku_set_background_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval void haiku_set_cursor_color (struct frame *f, Lisp_Object arg, Lisp_Object oldval) { - CHECK_STRING (arg); + Emacs_Color color, fore_pixel; + CHECK_STRING (arg); block_input (); - Emacs_Color color, fore_pixel; if (haiku_get_color (SSDATA (arg), &color)) { @@ -1478,11 +1477,7 @@ haiku_get_pixel (haiku bitmap, int x, int y) { unsigned char *data; int32_t bytes_per_row; - int mono_p; - int left; - int right; - int top; - int bottom; + int mono_p, left, right, top, bottom, byte; data = BBitmap_data (bitmap); BBitmap_dimensions (bitmap, &left, &top, &right, &bottom, @@ -1494,20 +1489,17 @@ haiku_get_pixel (haiku bitmap, int x, int y) if (!mono_p) return ((uint32_t *) (data + (bytes_per_row * y)))[x]; - int byte = y * bytes_per_row + x / 8; + byte = y * bytes_per_row + x / 8; return data[byte] & (1 << (x % 8)); } void haiku_put_pixel (haiku bitmap, int x, int y, unsigned long pixel) { - unsigned char *data; + unsigned char *data, *byte; int32_t bytes_per_row; - int mono_p; - int left; - int right; - int top; - int bottom; + int mono_p, left, right, top, bottom; + ptrdiff_t off, bit, xoff; data = BBitmap_data (bitmap); BBitmap_dimensions (bitmap, &left, &top, &right, &bottom, @@ -1518,11 +1510,11 @@ haiku_put_pixel (haiku bitmap, int x, int y, unsigned long pixel) if (mono_p) { - ptrdiff_t off = y * bytes_per_row; - ptrdiff_t bit = x % 8; - ptrdiff_t xoff = x / 8; + off = y * bytes_per_row; + bit = x % 8; + xoff = x / 8; - unsigned char *byte = data + off + xoff; + byte = data + off + xoff; if (!pixel) *byte &= ~(1 << bit); else @@ -1652,7 +1644,8 @@ haiku_unvisualize_frame (struct frame *f) } void -haiku_set_internal_border_width (struct frame *f, Lisp_Object arg, Lisp_Object oldval) +haiku_set_internal_border_width (struct frame *f, Lisp_Object arg, + Lisp_Object oldval) { int old_width = FRAME_INTERNAL_BORDER_WIDTH (f); int new_width = check_int_nonnegative (arg); @@ -1707,28 +1700,33 @@ check_x_display_info (Lisp_Object object) return check_haiku_display_info (object); } -/* Rename frame F to NAME. If NAME is nil, set F's name to "GNU - Emacs". If EXPLICIT_P is non-zero, that indicates Lisp code is - setting the name, not redisplay; in that case, set F's name to NAME - and set F->explicit_name; if NAME is nil, clear F->explicit_name. +/* Rename frame F to NAME. If NAME is nil, set F's name to the + default name. If EXPLICIT_P is non-zero, that indicates Lisp code + is setting the name, not redisplay; in that case, set F's name to + NAME and set F->explicit_name; if NAME is nil, clear + F->explicit_name. If EXPLICIT_P is zero, it means redisplay is setting the name; the name provided will be ignored if explicit_name is set. */ void haiku_set_name (struct frame *f, Lisp_Object name, bool explicit_p) { + struct haiku_display_info *dpyinfo; + if (explicit_p) { if (f->explicit_name && NILP (name)) - update_mode_lines = 24; + update_mode_lines = 37; f->explicit_name = !NILP (name); } else if (f->explicit_name) return; + dpyinfo = FRAME_DISPLAY_INFO (f); + if (NILP (name)) - name = build_unibyte_string ("GNU Emacs"); + name = dpyinfo->default_name; if (!NILP (Fstring_equal (name, f->name))) return; @@ -1754,11 +1752,9 @@ haiku_set_inhibit_double_buffering (struct frame *f, { #endif EmacsView_set_up_double_buffering (FRAME_HAIKU_VIEW (f)); + if (!NILP (old_value)) - { - SET_FRAME_GARBAGED (f); - expose_frame (f, 0, 0, 0, 0); - } + expose_frame (f, 0, 0, 0, 0); #ifndef USE_BE_CAIRO } else @@ -1798,19 +1794,15 @@ the mouse cursor position in pixels relative to a position (0, 0) of the selected frame's display. */) (void) { - if (!x_display_list) - return Qnil; - struct frame *f = SELECTED_FRAME (); + void *view; + int x, y; - if (FRAME_INITIAL_P (f) || !FRAME_HAIKU_P (f) - || !FRAME_HAIKU_VIEW (f)) + if (FRAME_INITIAL_P (f) || !FRAME_HAIKU_P (f)) return Qnil; block_input (); - void *view = FRAME_HAIKU_VIEW (f); - - int x, y; + view = FRAME_HAIKU_VIEW (f); BView_get_mouse (view, &x, &y); BView_convert_to_screen (view, &x, &y); unblock_input (); @@ -1830,6 +1822,7 @@ DEFUN ("xw-color-defined-p", Fxw_color_defined_p, Sxw_color_defined_p, 1, 2, 0, (Lisp_Object color, Lisp_Object frame) { Emacs_Color col; + CHECK_STRING (color); decode_window_system_frame (frame); @@ -1841,6 +1834,7 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, (Lisp_Object color, Lisp_Object frame) { Emacs_Color col; + CHECK_STRING (color); decode_window_system_frame (frame); @@ -1851,7 +1845,9 @@ DEFUN ("xw-color-values", Fxw_color_values, Sxw_color_values, 1, 2, 0, return Qnil; } unblock_input (); - return list3i (lrint (col.red), lrint (col.green), lrint (col.blue)); + + return list3i (lrint (col.red), lrint (col.green), + lrint (col.blue)); } DEFUN ("x-display-grayscale-p", Fx_display_grayscale_p, Sx_display_grayscale_p, @@ -2346,8 +2342,7 @@ DEFUN ("x-double-buffered-p", Fx_double_buffered_p, Sx_double_buffered_p, doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object frame) { - struct frame *f = decode_live_frame (frame); - check_window_system (f); + struct frame *f = decode_window_system_frame (frame); return EmacsView_double_buffered_p (FRAME_HAIKU_VIEW (f)) ? Qt : Qnil; } @@ -2357,13 +2352,14 @@ DEFUN ("x-display-backing-store", Fx_display_backing_store, Sx_display_backing_s doc: /* SKIP: real doc in xfns.c. */) (Lisp_Object terminal) { + struct frame *f; + if (FRAMEP (terminal)) { - CHECK_LIVE_FRAME (terminal); - struct frame *f = decode_window_system_frame (terminal); + f = decode_window_system_frame (terminal); - if (FRAME_HAIKU_VIEW (f) && - EmacsView_double_buffered_p (FRAME_HAIKU_VIEW (f))) + if (FRAME_HAIKU_VIEW (f) + && EmacsView_double_buffered_p (FRAME_HAIKU_VIEW (f))) return FRAME_PARENT_FRAME (f) ? Qwhen_mapped : Qalways; else return Qnot_useful; diff --git a/src/haikuterm.c b/src/haikuterm.c index 213641d6073..8c6d620b0f7 100644 --- a/src/haikuterm.c +++ b/src/haikuterm.c @@ -3121,7 +3121,6 @@ haiku_read_socket (struct terminal *terminal, struct input_event *hold_quit) || b->y < r.y || b->y >= r.y + r.height) { f->mouse_moved = true; - dpyinfo->last_mouse_scroll_bar = NULL; note_mouse_highlight (f, b->x, b->y); remember_mouse_glyph (f, b->x, b->y, &FRAME_DISPLAY_INFO (f)->last_mouse_glyph); @@ -3948,8 +3947,9 @@ haiku_term_init (void) { struct haiku_display_info *dpyinfo; struct terminal *terminal; - - Lisp_Object color_file, color_map; + Lisp_Object color_file, color_map, system_name; + ptrdiff_t nbytes; + void *name_buffer; block_input (); Fset_input_interrupt_mode (Qt); @@ -4026,6 +4026,23 @@ haiku_term_init (void) BCursor_from_id (CURSOR_ID_NO_CURSOR)); #undef ASSIGN_CURSOR + system_name = Fsystem_name (); + + if (STRINGP (system_name)) + { + nbytes = sizeof "GNU Emacs" + sizeof " at "; + + if (INT_ADD_WRAPV (nbytes, SBYTES (system_name), &nbytes)) + memory_full (SIZE_MAX); + + name_buffer = alloca (nbytes); + sprintf (name_buffer, "%s%s%s", "GNU Emacs", + " at ", SDATA (system_name)); + dpyinfo->default_name = build_string (name_buffer); + } + else + dpyinfo->default_name = build_string ("GNU Emacs"); + unblock_input (); return dpyinfo; @@ -4093,7 +4110,10 @@ void mark_haiku_display (void) { if (x_display_list) - mark_object (x_display_list->color_map); + { + mark_object (x_display_list->color_map); + mark_object (x_display_list->default_name); + } } void diff --git a/src/haikuterm.h b/src/haikuterm.h index 903a21d29f7..d20d491838f 100644 --- a/src/haikuterm.h +++ b/src/haikuterm.h @@ -81,6 +81,7 @@ struct haiku_display_info int color_p; Lisp_Object rdb; + Lisp_Object default_name; Emacs_Cursor vertical_scroll_bar_cursor; Emacs_Cursor horizontal_scroll_bar_cursor; @@ -96,8 +97,6 @@ struct haiku_display_info struct haiku_rect last_mouse_glyph; - void *last_mouse_scroll_bar; - haiku display; double resx, resy;