aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPo Lu2023-02-26 15:00:47 +0800
committerPo Lu2023-02-26 15:00:47 +0800
commit744f19c22f2be1f8ab6d5da89eb33392fcbcfc25 (patch)
treed69880538c950b020345801423beb7b452491d58 /src
parent74a7d34361a857fdb48ec89276f0efedec32f6d0 (diff)
downloademacs-744f19c22f2be1f8ab6d5da89eb33392fcbcfc25.tar.gz
emacs-744f19c22f2be1f8ab6d5da89eb33392fcbcfc25.zip
Get rid of android_lookup_method
* src/android.c (struct android_emacs_window): New methods. (android_init_emacs_window): Add new methods. (android_lookup_method): Delete now-unused function. (android_change_window_attributes, android_reparent_window) (android_map_window, android_unmap_window, android_resize_window) (android_move_window, android_set_input_focus) (android_raise_window, android_lower_window, android_get_geometry) (android_translate_coordinates, android_set_dont_focus_on_map) (android_set_dont_accept_focus): Don't look up the class and method each time when calling a function; that's just waste.
Diffstat (limited to 'src')
-rw-r--r--src/android.c115
1 files changed, 43 insertions, 72 deletions
diff --git a/src/android.c b/src/android.c
index cf6ddd736eb..001fa867d9c 100644
--- a/src/android.c
+++ b/src/android.c
@@ -141,6 +141,19 @@ struct android_emacs_window
141 jmethodID toggle_on_screen_keyboard; 141 jmethodID toggle_on_screen_keyboard;
142 jmethodID lookup_string; 142 jmethodID lookup_string;
143 jmethodID set_fullscreen; 143 jmethodID set_fullscreen;
144 jmethodID change_window_background;
145 jmethodID reparent_to;
146 jmethodID map_window;
147 jmethodID unmap_window;
148 jmethodID resize_window;
149 jmethodID move_window;
150 jmethodID make_input_focus;
151 jmethodID raise;
152 jmethodID lower;
153 jmethodID get_window_geometry;
154 jmethodID translate_coordinates;
155 jmethodID set_dont_accept_focus;
156 jmethodID set_dont_focus_on_map;
144}; 157};
145 158
146/* The API level of the current device. */ 159/* The API level of the current device. */
@@ -2238,6 +2251,23 @@ android_init_emacs_window (void)
2238 "toggleOnScreenKeyboard", "(Z)V"); 2251 "toggleOnScreenKeyboard", "(Z)V");
2239 FIND_METHOD (lookup_string, "lookupString", "(I)Ljava/lang/String;"); 2252 FIND_METHOD (lookup_string, "lookupString", "(I)Ljava/lang/String;");
2240 FIND_METHOD (set_fullscreen, "setFullscreen", "(Z)V"); 2253 FIND_METHOD (set_fullscreen, "setFullscreen", "(Z)V");
2254 FIND_METHOD (change_window_background, "changeWindowBackground",
2255 "(I)V");
2256 FIND_METHOD (reparent_to, "reparentTo",
2257 "(Lorg/gnu/emacs/EmacsWindow;II)V");
2258 FIND_METHOD (map_window, "mapWindow", "()V");
2259 FIND_METHOD (unmap_window, "unmapWindow", "()V");
2260 FIND_METHOD (resize_window, "resizeWindow", "(II)V");
2261 FIND_METHOD (move_window, "moveWindow", "(II)V");
2262 FIND_METHOD (make_input_focus, "makeInputFocus", "(J)V");
2263 FIND_METHOD (raise, "raise", "()V");
2264 FIND_METHOD (lower, "lower", "()V");
2265 FIND_METHOD (get_window_geometry, "getWindowGeometry",
2266 "()[I");
2267 FIND_METHOD (translate_coordinates, "translateCoordinates",
2268 "(II)[I");
2269 FIND_METHOD (set_dont_focus_on_map, "setDontFocusOnMap", "(Z)V");
2270 FIND_METHOD (set_dont_accept_focus, "setDontAcceptFocus", "(Z)V");
2241#undef FIND_METHOD 2271#undef FIND_METHOD
2242} 2272}
2243 2273
@@ -2911,9 +2941,6 @@ android_resolve_handle2 (android_handle handle,
2911 return android_handles[handle].handle; 2941 return android_handles[handle].handle;
2912} 2942}
2913 2943
2914static jmethodID android_lookup_method (const char *, const char *,
2915 const char *);
2916
2917void 2944void
2918android_change_window_attributes (android_window handle, 2945android_change_window_attributes (android_window handle,
2919 enum android_window_value_mask value_mask, 2946 enum android_window_value_mask value_mask,
@@ -2926,8 +2953,7 @@ android_change_window_attributes (android_window handle,
2926 2953
2927 if (value_mask & ANDROID_CW_BACK_PIXEL) 2954 if (value_mask & ANDROID_CW_BACK_PIXEL)
2928 { 2955 {
2929 method = android_lookup_method ("org/gnu/emacs/EmacsWindow", 2956 method = window_class.change_window_background;
2930 "changeWindowBackground", "(I)V");
2931 (*android_java_env)->CallVoidMethod (android_java_env, 2957 (*android_java_env)->CallVoidMethod (android_java_env,
2932 window, method, 2958 window, method,
2933 (jint) attrs->background_pixel); 2959 (jint) attrs->background_pixel);
@@ -3403,55 +3429,12 @@ android_reparent_window (android_window w, android_window parent_handle,
3403 parent = android_resolve_handle (parent_handle, 3429 parent = android_resolve_handle (parent_handle,
3404 ANDROID_HANDLE_WINDOW); 3430 ANDROID_HANDLE_WINDOW);
3405 3431
3406 method = android_lookup_method ("org/gnu/emacs/EmacsWindow", 3432 method = window_class.reparent_to;
3407 "reparentTo",
3408 "(Lorg/gnu/emacs/EmacsWindow;II)V");
3409 (*android_java_env)->CallVoidMethod (android_java_env, window, 3433 (*android_java_env)->CallVoidMethod (android_java_env, window,
3410 method, 3434 method,
3411 parent, (jint) x, (jint) y); 3435 parent, (jint) x, (jint) y);
3412} 3436}
3413 3437
3414/* Look up the method with SIGNATURE by NAME in CLASS. Abort if it
3415 could not be found. This should be used for functions which are
3416 not called very often.
3417
3418 CLASS must never be unloaded, or the behavior is undefined. */
3419
3420static jmethodID
3421android_lookup_method (const char *class, const char *name,
3422 const char *signature)
3423{
3424 jclass java_class;
3425 jmethodID method;
3426
3427 java_class
3428 = (*android_java_env)->FindClass (android_java_env, class);
3429
3430 if (!java_class)
3431 {
3432 __android_log_print (ANDROID_LOG_ERROR, __func__,
3433 "Failed to find class %s", class);
3434 emacs_abort ();
3435 }
3436
3437 method
3438 = (*android_java_env)->GetMethodID (android_java_env,
3439 java_class, name,
3440 signature);
3441
3442 if (!method)
3443 {
3444 __android_log_print (ANDROID_LOG_ERROR, __func__,
3445 "Failed to find method %s in class %s"
3446 " with signature %s",
3447 name, class, signature);
3448 emacs_abort ();
3449 }
3450
3451 ANDROID_DELETE_LOCAL_REF (java_class);
3452 return method;
3453}
3454
3455void 3438void
3456android_clear_window (android_window handle) 3439android_clear_window (android_window handle)
3457{ 3440{
@@ -3472,8 +3455,7 @@ android_map_window (android_window handle)
3472 jmethodID map_window; 3455 jmethodID map_window;
3473 3456
3474 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 3457 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
3475 map_window = android_lookup_method ("org/gnu/emacs/EmacsWindow", 3458 map_window = window_class.map_window;
3476 "mapWindow", "()V");
3477 3459
3478 (*android_java_env)->CallVoidMethod (android_java_env, 3460 (*android_java_env)->CallVoidMethod (android_java_env,
3479 window, map_window); 3461 window, map_window);
@@ -3486,8 +3468,7 @@ android_unmap_window (android_window handle)
3486 jmethodID unmap_window; 3468 jmethodID unmap_window;
3487 3469
3488 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 3470 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
3489 unmap_window = android_lookup_method ("org/gnu/emacs/EmacsWindow", 3471 unmap_window = window_class.unmap_window;
3490 "unmapWindow", "()V");
3491 3472
3492 (*android_java_env)->CallVoidMethod (android_java_env, 3473 (*android_java_env)->CallVoidMethod (android_java_env,
3493 window, unmap_window); 3474 window, unmap_window);
@@ -3501,8 +3482,7 @@ android_resize_window (android_window handle, unsigned int width,
3501 jmethodID resize_window; 3482 jmethodID resize_window;
3502 3483
3503 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 3484 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
3504 resize_window = android_lookup_method ("org/gnu/emacs/EmacsWindow", 3485 resize_window = window_class.resize_window;
3505 "resizeWindow", "(II)V");
3506 3486
3507 (*android_java_env)->CallVoidMethod (android_java_env, 3487 (*android_java_env)->CallVoidMethod (android_java_env,
3508 window, resize_window, 3488 window, resize_window,
@@ -3516,8 +3496,7 @@ android_move_window (android_window handle, int x, int y)
3516 jmethodID move_window; 3496 jmethodID move_window;
3517 3497
3518 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 3498 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
3519 move_window = android_lookup_method ("org/gnu/emacs/EmacsWindow", 3499 move_window = window_class.move_window;
3520 "moveWindow", "(II)V");
3521 3500
3522 (*android_java_env)->CallVoidMethod (android_java_env, 3501 (*android_java_env)->CallVoidMethod (android_java_env,
3523 window, move_window, 3502 window, move_window,
@@ -4323,8 +4302,7 @@ android_set_input_focus (android_window handle, unsigned long time)
4323 jmethodID make_input_focus; 4302 jmethodID make_input_focus;
4324 4303
4325 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 4304 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
4326 make_input_focus = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4305 make_input_focus = window_class.make_input_focus;
4327 "makeInputFocus", "(J)V");
4328 4306
4329 (*android_java_env)->CallVoidMethod (android_java_env, window, 4307 (*android_java_env)->CallVoidMethod (android_java_env, window,
4330 make_input_focus, (jlong) time); 4308 make_input_focus, (jlong) time);
@@ -4338,8 +4316,7 @@ android_raise_window (android_window handle)
4338 jmethodID raise; 4316 jmethodID raise;
4339 4317
4340 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 4318 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
4341 raise = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4319 raise = window_class.raise;
4342 "raise", "()V");
4343 4320
4344 (*android_java_env)->CallVoidMethod (android_java_env, window, 4321 (*android_java_env)->CallVoidMethod (android_java_env, window,
4345 raise); 4322 raise);
@@ -4353,8 +4330,7 @@ android_lower_window (android_window handle)
4353 jmethodID lower; 4330 jmethodID lower;
4354 4331
4355 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 4332 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
4356 lower = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4333 lower = window_class.lower;
4357 "lower", "()V");
4358 4334
4359 (*android_java_env)->CallVoidMethod (android_java_env, window, 4335 (*android_java_env)->CallVoidMethod (android_java_env, window,
4360 lower); 4336 lower);
@@ -4425,8 +4401,7 @@ android_get_geometry (android_window handle,
4425 jint *ints; 4401 jint *ints;
4426 4402
4427 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 4403 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
4428 get_geometry = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4404 get_geometry = window_class.get_window_geometry;
4429 "getWindowGeometry", "()[I");
4430 4405
4431 window_geometry 4406 window_geometry
4432 = (*android_java_env)->CallObjectMethod (android_java_env, 4407 = (*android_java_env)->CallObjectMethod (android_java_env,
@@ -4486,9 +4461,7 @@ android_translate_coordinates (android_window src, int x,
4486 jint *ints; 4461 jint *ints;
4487 4462
4488 window = android_resolve_handle (src, ANDROID_HANDLE_WINDOW); 4463 window = android_resolve_handle (src, ANDROID_HANDLE_WINDOW);
4489 method = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4464 method = window_class.translate_coordinates;
4490 "translateCoordinates",
4491 "(II)[I");
4492 coordinates 4465 coordinates
4493 = (*android_java_env)->CallObjectMethod (android_java_env, 4466 = (*android_java_env)->CallObjectMethod (android_java_env,
4494 window, method, 4467 window, method,
@@ -4780,8 +4753,7 @@ android_set_dont_focus_on_map (android_window handle,
4780 jobject window; 4753 jobject window;
4781 4754
4782 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 4755 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
4783 method = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4756 method = window_class.set_dont_focus_on_map;
4784 "setDontFocusOnMap", "(Z)V");
4785 4757
4786 (*android_java_env)->CallVoidMethod (android_java_env, window, 4758 (*android_java_env)->CallVoidMethod (android_java_env, window,
4787 method, 4759 method,
@@ -4796,8 +4768,7 @@ android_set_dont_accept_focus (android_window handle,
4796 jobject window; 4768 jobject window;
4797 4769
4798 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW); 4770 window = android_resolve_handle (handle, ANDROID_HANDLE_WINDOW);
4799 method = android_lookup_method ("org/gnu/emacs/EmacsWindow", 4771 method = window_class.set_dont_accept_focus;
4800 "setDontAcceptFocus", "(Z)V");
4801 4772
4802 (*android_java_env)->CallVoidMethod (android_java_env, window, 4773 (*android_java_env)->CallVoidMethod (android_java_env, window,
4803 method, 4774 method,