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.
This commit is contained in:
Po Lu 2025-03-04 09:46:48 +08:00
parent d6aea7cc94
commit 144b268a84

View file

@ -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;
}