From: Po Lu Date: Wed, 21 Jun 2023 02:31:05 +0000 (+0800) Subject: Update Android port X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=bdaeecd1759e6aee5ad8bf04ba6ed9bb8fb4453d;p=emacs.git Update Android port * src/androidfns.c (android_set_tool_bar_position): (frame_geometry): * src/androidterm.c (android_flash): (android_clear_under_internal_border): Synchronize with X. --- diff --git a/src/androidfns.c b/src/androidfns.c index 46ff073438a..11ed2e6c00a 100644 --- a/src/androidfns.c +++ b/src/androidfns.c @@ -254,15 +254,26 @@ android_set_tool_bar_position (struct frame *f, Lisp_Object new_value, Lisp_Object old_value) { - Lisp_Object choice = list4 (Qleft, Qright, Qtop, Qbottom); + if (!EQ (new_value, Qtop) && !EQ (new_value, Qbottom)) + error ("Tool bar position must be either `top' or `bottom'"); - if (!NILP (Fmemq (new_value, choice))) - { - if (!EQ (new_value, Qtop)) - error ("The only supported tool bar position is top"); - } - else - wrong_choice (choice, new_value); + if (EQ (new_value, old_value)) + return; + + /* Set the tool bar position. */ + fset_tool_bar_position (f, new_value); + + /* Now reconfigure frame glyphs to place the tool bar at the + bottom. While the inner height has not changed, call + `resize_frame_windows' to place each of the windows at its + new position. */ + + adjust_frame_size (f, -1, -1, 3, false, Qtool_bar_position); + adjust_frame_glyphs (f); + SET_FRAME_GARBAGED (f); + + if (FRAME_ANDROID_WINDOW (f)) + android_clear_under_internal_border (f); } void @@ -1470,7 +1481,7 @@ frame_geometry (Lisp_Object frame, Lisp_Object attribute) tab_bar_height = FRAME_TAB_BAR_HEIGHT (f); tab_bar_width = (tab_bar_height - ? native_width - 2 * internal_border_width + ? native_width - 2 * internal_border_width : 0); inner_top += tab_bar_height; @@ -1478,7 +1489,14 @@ frame_geometry (Lisp_Object frame, Lisp_Object attribute) tool_bar_width = (tool_bar_height ? native_width - 2 * internal_border_width : 0); - inner_top += tool_bar_height; + + /* Subtract or add to the inner dimensions based on the tool bar + position. */ + + if (EQ (FRAME_TOOL_BAR_POSITION (f), Qtop)) + inner_top += tool_bar_height; + else + inner_bottom -= tool_bar_height; /* Construct list. */ if (EQ (attribute, Qouter_edges)) diff --git a/src/androidterm.c b/src/androidterm.c index 29076981a47..aed8e24b9fa 100644 --- a/src/androidterm.c +++ b/src/androidterm.c @@ -181,7 +181,8 @@ android_flash (struct frame *f) android_fill_rectangle (FRAME_ANDROID_DRAWABLE (f), gc, flash_left, (height - flash_height - - FRAME_INTERNAL_BORDER_WIDTH (f)), + - FRAME_INTERNAL_BORDER_WIDTH (f) + - FRAME_BOTTOM_MARGIN_HEIGHT (f)), width, flash_height); } @@ -234,7 +235,8 @@ android_flash (struct frame *f) android_fill_rectangle (FRAME_ANDROID_DRAWABLE (f), gc, flash_left, (height - flash_height - - FRAME_INTERNAL_BORDER_WIDTH (f)), + - FRAME_INTERNAL_BORDER_WIDTH (f) + - FRAME_BOTTOM_MARGIN_HEIGHT (f)), width, flash_height); } else @@ -4213,14 +4215,16 @@ android_clear_under_internal_border (struct frame *f) int width = FRAME_PIXEL_WIDTH (f); int height = FRAME_PIXEL_HEIGHT (f); int margin = FRAME_TOP_MARGIN_HEIGHT (f); - int face_id = - (FRAME_PARENT_FRAME (f) - ? (!NILP (Vface_remapping_alist) - ? lookup_basic_face (NULL, f, CHILD_FRAME_BORDER_FACE_ID) - : CHILD_FRAME_BORDER_FACE_ID) - : (!NILP (Vface_remapping_alist) - ? lookup_basic_face (NULL, f, INTERNAL_BORDER_FACE_ID) - : INTERNAL_BORDER_FACE_ID)); + int bottom_margin = FRAME_BOTTOM_MARGIN_HEIGHT (f); + int face_id = (FRAME_PARENT_FRAME (f) + ? (!NILP (Vface_remapping_alist) + ? lookup_basic_face (NULL, f, + CHILD_FRAME_BORDER_FACE_ID) + : CHILD_FRAME_BORDER_FACE_ID) + : (!NILP (Vface_remapping_alist) + ? lookup_basic_face (NULL, f, + INTERNAL_BORDER_FACE_ID) + : INTERNAL_BORDER_FACE_ID)); struct face *face = FACE_FROM_ID_OR_NULL (f, face_id); if (face) @@ -4236,7 +4240,8 @@ android_clear_under_internal_border (struct frame *f) android_fill_rectangle (FRAME_ANDROID_DRAWABLE (f), gc, width - border, 0, border, height); android_fill_rectangle (FRAME_ANDROID_DRAWABLE (f), gc, 0, - height - border, width, border); + height - bottom_margin - border, + width, border); android_set_foreground (gc, FRAME_FOREGROUND_PIXEL (f)); } else @@ -4248,7 +4253,8 @@ android_clear_under_internal_border (struct frame *f) android_clear_area (FRAME_ANDROID_DRAWABLE (f), width - border, 0, border, height); android_clear_area (FRAME_ANDROID_DRAWABLE (f), 0, - height - border, width, border); + height - bottom_margin - border, + width, border); } } }