diff options
| author | Po Lu | 2025-03-04 09:46:48 +0800 |
|---|---|---|
| committer | Po Lu | 2025-03-04 09:47:30 +0800 |
| commit | 144b268a84e6be81f59669b77651b4522a2f2805 (patch) | |
| tree | b2a546eabd07911f5147b86072f97d4a22718f41 /src/androidterm.c | |
| parent | d6aea7cc948f13615237a91d347b0383a3089a8a (diff) | |
| download | emacs-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.c | 38 |
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 | |||
| 134 | static android_cursor | ||
| 135 | make_invisible_cursor (struct android_display_info *dpyinfo) | ||
| 136 | { | ||
| 137 | return android_create_font_cursor (ANDROID_XC_NULL); | ||
| 131 | } | 138 | } |
| 132 | 139 | ||
| 133 | static void | 140 | static void |
| 134 | android_hide_hourglass (struct frame *f) | 141 | android_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 | ||
| 146 | static void | 163 | static void |
| @@ -259,12 +276,6 @@ android_ring_bell (struct frame *f) | |||
| 259 | } | 276 | } |
| 260 | } | 277 | } |
| 261 | 278 | ||
| 262 | static android_cursor | ||
| 263 | make_invisible_cursor (struct android_display_info *dpyinfo) | ||
| 264 | { | ||
| 265 | return android_create_font_cursor (ANDROID_XC_NULL); | ||
| 266 | } | ||
| 267 | |||
| 268 | static void | 279 | static void |
| 269 | android_toggle_visible_pointer (struct frame *f, bool invisible) | 280 | android_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 | ||