emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master 381eb5d5a0: Fix default frame name on Haiku


From: Po Lu
Subject: master 381eb5d5a0: Fix default frame name on Haiku
Date: Fri, 22 Apr 2022 01:42:44 -0400 (EDT)

branch: master
commit 381eb5d5a0c7ba9d4ef06f8be1636f882d7a7b78
Author: Po Lu <luangruo@yahoo.com>
Commit: Po Lu <luangruo@yahoo.com>

    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'.
---
 src/haikufns.c  | 92 +++++++++++++++++++++++++++------------------------------
 src/haikuterm.c | 28 +++++++++++++++---
 src/haikuterm.h |  3 +-
 3 files changed, 69 insertions(+), 54 deletions(-)

diff --git a/src/haikufns.c b/src/haikufns.c
index 5fca46c41b..14644be22b 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 213641d607..8c6d620b0f 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 903a21d29f..d20d491838 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;



reply via email to

[Prev in Thread] Current Thread [Next in Thread]