From: Po Lu Date: Tue, 4 Mar 2025 01:46:48 +0000 (+0800) Subject: Render Android hourglass cursor mechanics more consistent with X X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=24bae090005a56ad88547ca5e58a0049821c5ae6;p=emacs.git Render Android hourglass cursor mechanics more consistent with X * src/androidterm.c (android_show_hourglass): Always define the hourglass cursor, but... (android_hide_hourglass): ... restore the invisible cursor subsequently, if need be. (android_toggle_visible_pointer): Do not hide the current cursor if it is an hourglass. (cherry picked from commit 144b268a84e6be81f59669b77651b4522a2f2805) --- diff --git a/src/androidterm.c b/src/androidterm.c index 79ee374f2ca..7fd61ee6d1c 100644 --- a/src/androidterm.c +++ b/src/androidterm.c @@ -125,22 +125,39 @@ android_show_hourglass (struct frame *f) x->hourglass = true; - if (!f->pointer_invisible) - android_define_cursor (FRAME_ANDROID_WINDOW (f), - x->hourglass_cursor); + /* An hourglass cursor ought to be visible whether or not the standard + cursor is invisible. */ + android_define_cursor (FRAME_ANDROID_WINDOW (f), + x->hourglass_cursor); +} + +static android_cursor +make_invisible_cursor (struct android_display_info *dpyinfo) +{ + return android_create_font_cursor (ANDROID_XC_NULL); } static void android_hide_hourglass (struct frame *f) { struct android_output *x; + struct android_display_info *dpyinfo; x = FRAME_ANDROID_OUTPUT (f); + dpyinfo = FRAME_DISPLAY_INFO (f); x->hourglass = false; if (!f->pointer_invisible) android_define_cursor (FRAME_ANDROID_WINDOW (f), x->current_cursor); + else + { + if (!dpyinfo->invisible_cursor) + dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo); + + android_define_cursor (FRAME_ANDROID_WINDOW (f), + dpyinfo->invisible_cursor); + } } static void @@ -259,12 +276,6 @@ android_ring_bell (struct frame *f) } } -static android_cursor -make_invisible_cursor (struct android_display_info *dpyinfo) -{ - return android_create_font_cursor (ANDROID_XC_NULL); -} - static void android_toggle_visible_pointer (struct frame *f, bool invisible) { @@ -272,6 +283,10 @@ android_toggle_visible_pointer (struct frame *f, bool invisible) dpyinfo = FRAME_DISPLAY_INFO (f); + /* An hourglass cursor overrides invisibility. */ + if (FRAME_ANDROID_OUTPUT (f)->hourglass) + goto set_invisibility; + if (!dpyinfo->invisible_cursor) dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo); @@ -280,10 +295,9 @@ android_toggle_visible_pointer (struct frame *f, bool invisible) dpyinfo->invisible_cursor); else android_define_cursor (FRAME_ANDROID_WINDOW (f), - (FRAME_ANDROID_OUTPUT (f)->hourglass - ? f->output_data.android->hourglass_cursor - : f->output_data.android->current_cursor)); + f->output_data.android->current_cursor); + set_invisibility: f->pointer_invisible = invisible; }