aboutsummaryrefslogtreecommitdiffstats
path: root/src/androidterm.c
diff options
context:
space:
mode:
authorPo Lu2025-03-04 09:46:48 +0800
committerPo Lu2025-03-04 09:47:30 +0800
commit144b268a84e6be81f59669b77651b4522a2f2805 (patch)
treeb2a546eabd07911f5147b86072f97d4a22718f41 /src/androidterm.c
parentd6aea7cc948f13615237a91d347b0383a3089a8a (diff)
downloademacs-144b268a84e6be81f59669b77651b4522a2f2805.tar.gz
emacs-144b268a84e6be81f59669b77651b4522a2f2805.zip
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.
Diffstat (limited to 'src/androidterm.c')
-rw-r--r--src/androidterm.c38
1 files changed, 26 insertions, 12 deletions
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)
125 125
126 x->hourglass = true; 126 x->hourglass = true;
127 127
128 if (!f->pointer_invisible) 128 /* An hourglass cursor ought to be visible whether or not the standard
129 android_define_cursor (FRAME_ANDROID_WINDOW (f), 129 cursor is invisible. */
130 x->hourglass_cursor); 130 android_define_cursor (FRAME_ANDROID_WINDOW (f),
131 x->hourglass_cursor);
132}
133
134static android_cursor
135make_invisible_cursor (struct android_display_info *dpyinfo)
136{
137 return android_create_font_cursor (ANDROID_XC_NULL);
131} 138}
132 139
133static void 140static void
134android_hide_hourglass (struct frame *f) 141android_hide_hourglass (struct frame *f)
135{ 142{
136 struct android_output *x; 143 struct android_output *x;
144 struct android_display_info *dpyinfo;
137 145
138 x = FRAME_ANDROID_OUTPUT (f); 146 x = FRAME_ANDROID_OUTPUT (f);
147 dpyinfo = FRAME_DISPLAY_INFO (f);
139 x->hourglass = false; 148 x->hourglass = false;
140 149
141 if (!f->pointer_invisible) 150 if (!f->pointer_invisible)
142 android_define_cursor (FRAME_ANDROID_WINDOW (f), 151 android_define_cursor (FRAME_ANDROID_WINDOW (f),
143 x->current_cursor); 152 x->current_cursor);
153 else
154 {
155 if (!dpyinfo->invisible_cursor)
156 dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo);
157
158 android_define_cursor (FRAME_ANDROID_WINDOW (f),
159 dpyinfo->invisible_cursor);
160 }
144} 161}
145 162
146static void 163static void
@@ -259,12 +276,6 @@ android_ring_bell (struct frame *f)
259 } 276 }
260} 277}
261 278
262static android_cursor
263make_invisible_cursor (struct android_display_info *dpyinfo)
264{
265 return android_create_font_cursor (ANDROID_XC_NULL);
266}
267
268static void 279static void
269android_toggle_visible_pointer (struct frame *f, bool invisible) 280android_toggle_visible_pointer (struct frame *f, bool invisible)
270{ 281{
@@ -272,6 +283,10 @@ android_toggle_visible_pointer (struct frame *f, bool invisible)
272 283
273 dpyinfo = FRAME_DISPLAY_INFO (f); 284 dpyinfo = FRAME_DISPLAY_INFO (f);
274 285
286 /* An hourglass cursor overrides invisibility. */
287 if (FRAME_ANDROID_OUTPUT (f)->hourglass)
288 goto set_invisibility;
289
275 if (!dpyinfo->invisible_cursor) 290 if (!dpyinfo->invisible_cursor)
276 dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo); 291 dpyinfo->invisible_cursor = make_invisible_cursor (dpyinfo);
277 292
@@ -280,10 +295,9 @@ android_toggle_visible_pointer (struct frame *f, bool invisible)
280 dpyinfo->invisible_cursor); 295 dpyinfo->invisible_cursor);
281 else 296 else
282 android_define_cursor (FRAME_ANDROID_WINDOW (f), 297 android_define_cursor (FRAME_ANDROID_WINDOW (f),
283 (FRAME_ANDROID_OUTPUT (f)->hourglass 298 f->output_data.android->current_cursor);
284 ? f->output_data.android->hourglass_cursor
285 : f->output_data.android->current_cursor));
286 299
300 set_invisibility:
287 f->pointer_invisible = invisible; 301 f->pointer_invisible = invisible;
288} 302}
289 303