2023-08-07 Po Lu * nt/mingw-cfg.site: Remove additions for Gnulib printf. * m4, lib: Update from Gnulib. * msdos/sedlibmk.inp: Remove variables deleted as part of previous change. * admin/merge-gnulib (GNULIB_MODULES): Remove vasprintf and printf-posix. 2023-08-06 Po Lu * java/org/gnu/emacs/EmacsService.java (readDirectoryEntry): Fix potential NULL dereference. * java/org/gnu/emacs/EmacsSafThread.java (openDocument1): If initially opening with rwt, verify the file descriptor is really writable; if not, resort to rw and truncating the file descriptor by hand instead. * src/androidvfs.c (NATIVE_NAME (ftruncate)): New function. Truncate file descriptor and return whether that was successful. * src/androidvfs.c (android_saf_tree_chmod): Repair file access permissions allowed within FLAGS. 2023-08-05 Po Lu * doc/lispref/commands.texi (Touchscreen Events): Fix typo. * lisp/subr.el (y-or-n-p): Don't call set-text-conversion-style when not present. 2023-08-04 Po Lu * ChangeLog.android: New file. 2023-08-04 Po Lu * src/androidvfs.c (android_verify_jni_string): Move to android.c. * src/android.c (android_verify_jni_string): New function. (android_build_string): Forgo encoding menu text if TEXT is a multibyte string that's also a valid JNI string. * src/android.h: Update prototypes. * java/org/gnu/emacs/EmacsService.java (getDocumentTrees): Don't encode some characters that need not be escaped within file names. 2023-08-03 Po Lu * src/fileio.c (check_vfs_filename): Revert earlier change. * src/android.h: Update prototypes. * src/androidvfs.c (unix_vfs_ops, android_unix_chmod, afs_vfs_ops) (android_afs_chmod, content_vfs_ops, android_content_chmod) (authority_vfs_ops, android_authority_chmod, saf_root_vfs_ops) (android_saf_root_chmod, saf_tree_vfs_ops, android_saf_tree_chmod) (saf_file_vfs_ops, saf_new_vfs_ops, android_saf_new_chmod) (root_vfs_ops): Add `chmod' to the list of functions implemented by each vnode. (android_fchmodat): New function. * src/fileio.c (Fset_file_modes): Use `emacs_fchmodat'. * src/lisp.h: * src/sysdep.c (emacs_fchmodat): Delegate to android_fchmodat on Android. * java/org/gnu/emacs/EmacsSafThread.java (CacheToplevel) (EmacsSafThread, DocIdEntry, getCache, pruneCache) (cacheDirectoryFromCursor, run, documentIdFromName1) (statDocument1, openDocumentDirectory1, openDocument1): Introduce a file status cache and populate it with files within directories as they are opened. * java/org/gnu/emacs/EmacsService.java (createDocument) (createDirectory, moveDocument): Invalidate the file status cache wherever needed. * src/fileio.c (check_vfs_filename): (Fset_file_modes): Permit `set-file-modes' to silently fail on asset and content files. 2023-08-02 Po Lu * doc/emacs/android.texi (Android, What is Android?) (Android Startup, Android File System, Android Environment) (Android Windowing, Android Fonts, Android Troubleshooting): Improve section titles. (Android Windowing): Describe the relation between keyboard modifiers reported by Android and those in key events. * java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp): Clear META_SYM_ON and META_META_MASK when retrieving ASCII characters. * src/androidgui.h: Add ANDROID_META_MASK. * src/androidterm.c (android_android_to_emacs_modifiers) (android_emacs_to_android_modifiers): Transform META to Alt, and vice versa. 2023-08-01 Po Lu * doc/emacs/android.texi (Android File System): Describe how to access real files named /assets or /contents if so required. * java/org/gnu/emacs/EmacsService.java (validAuthority): * src/android.c (android_init_emacs_service): * src/android.h: New function. * src/androidvfs.c (android_saf_valid_authority_p): New function. Wrap the Java function. (android_saf_root_stat, android_saf_root_access): Don't return success if no authority by vp->authority's name exists. (android_saf_tree_from_name): Check validity of string data before giving it to JNI. * src/sfnt.c (CHECK_STACK_AVAILABLE): New macro. (PUSH, PUSH_UNCHECKED): Always define to unchecked versions, even if TEST. (PUSH2_UNCHECKED): New macro. (NPUSHB, NPUSHW, PUSHB, PUSHW): Check the number of remaining stack elements once. (stack_overflow_test_args): Expect zero stack arguments. * src/android.c (ANDROID_THROW): Remove unused macro. 2023-07-31 Po Lu * src/sfnt.c (ISECT): Micro-optimize this instruction. * src/sfntfont.c (sfnt_parse_style): Avoid GC safety problem. (sfnt_parse_style): Fix misworded commentary. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): * java/org/gnu/emacs/EmacsNoninteractive.java (main): * java/org/gnu/emacs/EmacsService.java (run): * java/org/gnu/emacs/EmacsThread.java (run): * src/android.c (initEmacs, setEmacsParams): Set `android_api_level' within setEmacsParams, not in initEmacs. * src/androidvfs.c: Pacify compiler warnings. * java/org/gnu/emacs/EmacsService.java (renameDocument): Don't catch UnsupportedOperationException; handle ENOSYS in android_saf_rename_document instead. (moveDocument): New function. * lisp/subr.el (y-or-n-p): Always change the text conversion style. * src/android.c (android_init_emacs_service) (android_exception_check_4): New function. * src/android.h: Update Java function table. * src/androidvfs.c (android_saf_rename_document): Handle ENOSYS here by setting errno to EXDEV. (android_saf_move_document): New function. (android_document_id_from_name): Take const `dir_name'. (android_saf_tree_rename): Use delete-move-rename to implement cross-directory renames. 2023-07-30 Po Lu * java/org/gnu/emacs/EmacsSafThread.java (postInvalidateCacheDir): * java/org/gnu/emacs/EmacsService.java (renameDocument): New functions. * src/android.c (android_init_emacs_service): * src/android.h (struct android_emacs_service): Link to new JNI function. * src/androidvfs.c (android_saf_rename_document): New function. (android_saf_tree_rename): Implement in terms of that function if possible. 2023-07-29 Po Lu * java/org/gnu/emacs/EmacsSafThread.java (statDocument1): * src/androidvfs.c (android_afs_stat, android_content_stat) (android_saf_root_stat): Report search permissions for files. * src/androidvfs.c: Improve commentary. 2023-07-29 Po Lu * java/org/gnu/emacs/EmacsSafThread.java (postInvalidateCache): New argument cacheName. Remove that file from the cache. (accessDocument1): Consult the storage cache as well. * java/org/gnu/emacs/EmacsService.java (deleteDocument): New argument NAME. * src/android.c (android_init_emacs_service): Add new argument. * src/androidvfs.c (android_saf_delete_document) (android_saf_tree_rmdir, android_saf_file_unlink): Pass name of file being deleted to `deleteDocument'. 2023-07-29 Po Lu * src/androidvfs.c (android_saf_exception_check): Describe exceptions earlier. * java/org/gnu/emacs/EmacsSafThread.java (DocIdEntry) (getCacheEntry, CacheEntry, documentIdFromName1): Fix earlier change. * java/org/gnu/emacs/EmacsSafThread.java (DocIdEntry) (getCacheEntry, CacheEntry): Use `uptimeMillis' as the basis for cache expiration. * java/org/gnu/emacs/EmacsSafThread.java (EmacsSafThread, getCache) (pruneCache1, pruneCache, cacheChild, cacheDirectoryFromCursor) (documentIdFromName1, openDocumentDirectory1): Implement the cache referred to by the commentary. * java/org/gnu/emacs/EmacsService.java (deleteDocument): Invalidate the cache upon document removal. * src/androidvfs.c (android_saf_exception_check) (android_document_id_from_name): Correctly preserve or set errno in error cases. 2023-07-28 Po Lu * java/org/gnu/emacs/EmacsSafThread.java (documentIdFromName1): Fix query argument placeholder string. * src/androidvfs.c (android_document_id_from_name): Don't return 0 if an SAF exception occurs. * src/androidselect.c (Fandroid_get_clipboard): Don't return data if clipboard is empty. Reported by Johan Widén . 2023-07-28 Po Lu * doc/emacs/android.texi (Android Document Providers): Say that quitting is now possible. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New functions `safSyncAndReadInput', `safync' and `safPostRequest'. * java/org/gnu/emacs/EmacsSafThread.java: New file. Move cancel-able SAF operations here. * java/org/gnu/emacs/EmacsService.java (EmacsService): Allow quitting from most SAF operations. * src/androidvfs.c (android_saf_exception_check): Return EINTR if OperationCanceledException is received. (android_saf_stat, android_saf_access) (android_document_id_from_name, android_saf_tree_opendir_1) (android_saf_file_open): Don't allow reentrant calls from async input handlers. (NATIVE_NAME): Implement new synchronization primitives for JNI. (android_vfs_init): Initialize new class. * src/dired.c (open_directory): Handle EINTR from opendir. * src/sysdep.c: Describe which operations may return EINTR on Android. 2023-07-28 Po Lu * java/org/gnu/emacs/EmacsDirectoryEntry.java (EmacsDirectoryEntry): Make class final. * java/org/gnu/emacs/EmacsService.java (accessDocument) (openDocumentDirectory, openDocument, createDocument): Throw access and IO error exceptions instead of catching them. (createDirectory, deleteDocument): New functions. * src/android.c (android_init_emacs_service): Add new functions. * src/android.h (struct android_emacs_service): Likewise. * src/androidvfs.c (android_saf_exception_check): New function. Translate between Java exceptions and errno values. (android_saf_stat, android_saf_access, android_saf_delete_document) (struct android_saf_tree_vnode, android_document_id_from_name) (android_saf_tree_name, android_saf_tree_rmdir) (android_saf_tree_opendir_1, android_saf_tree_opendir) (android_saf_file_open, android_saf_file_unlink) (android_saf_new_open, android_saf_new_mkdir): Implement missing VFS operations and derive errno values from the type of any exceptions thrown. (android_vfs_init): Initialize exception classes. (android_mkdir, android_fstat): Remove trailing whitespace. 2023-07-27 Po Lu * doc/emacs/android.texi (Android Document Providers): Improve wording of paragraph clarifying limits on subprocesses. * java/org/gnu/emacs/EmacsService.java (getDocumentTrees): Use Java standard US-ASCII coding standard instead of the undocumented ``ASCII'' alias. (decodeFileName): Remove unused function. (documentIdFromName): * src/android.c (android_init_emacs_service): Take a String for NAME instead of a byte array. * src/androidvfs.c (android_verify_jni_string): New function. (android_document_id_from_name): Verify that STRING is a valid Modified UTF-8 string. * src/androidvfs.c (android_afs_initial) (android_content_get_directory_name, android_saf_tree_name) (android_saf_tree_from_name, android_vfs_init): Silence compiler warnings. * src/android.c (android_run_in_emacs_thread): Behave more robustly if SIGIO arrives too late Emacs for Emacs to check for signals, but too early to preempt a long running syscall. * java/org/gnu/emacs/EmacsActivity.java (onActivityResult): * src/androidvfs.c (android_renameat_noreplace, android_rename): Free vdst using vdst->ops, not vp->ops. 2023-07-27 Po Lu * configure.ac (ANDROID_STUBIFY): Add androidvfs.o when building libemacs.so. * doc/emacs/android.texi (Android): Add `Android Document Providers'. (Android Startup): Update the location of the content identifier directory. (Android File System): Describe access to document provider directories. (Android Document Providers): New node. * doc/emacs/emacs.texi (Top): Update the menu for the Android appendix. * java/Makefile.in (filename, install_temp/assets/build_info): Make directory-tree depend on build_info. * java/org/gnu/emacs/EmacsActivity.java (onActivityResult): New function. When a document tree is accepted, persist access to it. * java/org/gnu/emacs/EmacsDirectoryEntry.java (EmacsDirectoryEntry): New struct. * java/org/gnu/emacs/EmacsOpenActivity.java (checkReadableOrCopy): Use EmacsService.buildContentName. * java/org/gnu/emacs/EmacsService.java (getEmacsView) (openContentUri) (checkContentUri): Remove excessive debug logging. (buildContentName, getDocumentAuthorities, requestDirectoryAccess) (getDocumentTrees, decodeFileName, documentIdFromName, getTreeUri) (statDocument, accessDocument, openDocumentDirectory) (readDirectoryEntry) (openDocument, createDocument): New functions. * lib-src/asset-directory-tool.c: Improve commentary by illustrating the difference between directory and ordinary files. * src/android.c (ANDROID_THROW, enum android_fd_table_entry_flags) (struct android_emacs_service, android_extract_long) (android_scan_directory_tree, android_is_directory) (android_get_asset_name, android_url_encode) (android_content_name_p) (android_get_content_name, android_check_content_access) (android_fstat) (android_fstatat, android_file_access_p) (android_hack_asset_fd_fallback) (android_detect_ashmem, android_hack_asset_fd) (android_close_on_exec) (android_open, android_close, android_fclose) (android_create_lib_link) (android_faccessat, struct android_dir, android_opendir) (android_dirfd) (android_readdir, android_closedir) (android_lookup_asset_directory_fd) (android_exception_check_3, android_get_current_api_level) (android_open_asset, android_close_asset, android_asset_read_quit) (android_asset_read, android_asset_lseek, android_asset_fstat): Move content and asset related functions to androidvfs.c. (android_init_emacs_service): Obtain handles for new JNI functions. (initEmacsParams): Initialize the VFS layer. (android_request_directory_access): New function. (android_display_toast): Remove unused function. * src/android.h (android_get_current_api_level): Assume that this function never returns less than __ANDROID_API__. (struct android_emacs_service): Move `struct android_emacs_service' here. * src/androidfns.c (Fandroid_request_directory_access): New interactive function. (syms_of_androidfns): Register new subr. * src/androidvfs.c (struct android_vdir, struct android_vops) (struct android_vnode, struct android_special_vnode) (enum android_vnode_type, struct android_cursor_class) (struct emacs_directory_entry_class) (struct android_parcel_file_descriptor_class) (android_init_cursor_class, android_init_entry_class) (android_init_fd_class, android_vfs_canonicalize_name) (struct android_unix_vnode, struct android_unix_vdir) (unix_vfs_ops) (android_unix_name, android_unix_vnode, android_unix_open) (android_unix_close, android_unix_unlink, android_unix_symlink) (android_unix_rmdir, android_unix_rename, android_unix_stat) (android_unix_access, android_unix_mkdir, android_unix_readdir) (android_unix_closedir, android_unix_dirfd, android_unix_opendir) (android_extract_long, android_scan_directory_tree) (android_is_directory, android_init_assets) (android_hack_asset_fd_fallback, android_detect_ashmem) (android_hack_asset_fd, struct android_afs_vnode) (struct android_afs_vdir, struct android_afs_open_fd, afs_vfs_ops) (android_afs_name, android_afs_initial, android_close_on_exec) (android_afs_open, android_afs_close, android_afs_unlink) (android_afs_symlink, android_afs_rmdir, android_afs_rename) (android_afs_stat, android_afs_access, android_afs_mkdir) (android_afs_readdir, android_afs_closedir, android_afs_dirfd) (android_afs_opendir, android_afs_get_directory_name) (struct android_content_vdir, content_vfs_ops) (content_directory_contents, android_content_name) (android_content_open, android_content_close) (android_content_unlink, android_content_symlink) (android_content_rmdir, android_content_rename) (android_content_stat, android_content_access) (android_content_mkdir, android_content_readdir) (android_content_closedir, android_content_dirfd) (android_content_opendir, android_content_get_directory_name) (android_content_initial, android_get_content_name) (android_check_content_access, struct android_authority_vnode) (authority_vfs_ops, android_authority_name) (android_authority_open) (android_authority_close, android_authority_unlink) (android_authority_symlink, android_authority_rmdir) (android_authority_rename, android_authority_stat) (android_authority_access, android_authority_mkdir) (android_authority_opendir, android_authority_initial) (struct android_saf_root_vnode, struct android_saf_root_vdir) (saf_root_vfs_ops, android_saf_root_name, android_saf_root_open) (android_saf_root_close, android_saf_root_unlink) (android_saf_root_symlink, android_saf_root_rmdir) (android_saf_root_rename, android_saf_root_stat) (androqid_saf_root_access, android_saf_root_mkdir) (android_saf_root_readdir, android_saf_root_closedir) (android_saf_root_dirfd, android_saf_root_opendir) (android_saf_root_initial, android_saf_root_get_directory) (android_saf_stat, android_saf_access) (struct android_saf_tree_vnode, struct android_saf_tree_vdir) (saf_tree_vfs_ops, android_document_id_from_name) (android_saf_tree_name, android_saf_tree_open) (android_saf_tree_close, android_saf_tree_unlink) (android_saf_tree_symlink, android_saf_tree_rmdir) (android_saf_tree_rename, android_saf_tree_stat) (android_saf_tree_access, android_saf_tree_mkdir) (android_saf_tree_opendir_1, android_saf_tree_readdir) (android_saf_tree_closedir, android_saf_tree_dirfd) (android_saf_tree_opendir, android_saf_tree_from_name) (android_saf_tree_get_directory, android_saf_file_vnode) (saf_file_vfs_ops, android_saf_file_name, android_saf_file_open) (android_saf_file_unlink, android_saf_file_rmdir) (android_saf_file_opendir, android_close_parcel_fd) (android_saf_new_vnode, android_saf_new_name) (android_saf_new_open) (android_saf_new_unlink, android_saf_new_symlink) (android_saf_new_rmdir, android_saf_new_rename) (android_saf_new_stat, android_saf_new_access) (android_saf_new_mkdir, android_saf_new_opendir, root_vfs_ops) (special_vnodes, android_root_name, android_name_file) (android_vfs_init, android_open, android_unlink, android_symlink) (android_rmdir, android_mkdir, android_renameat_noreplace) (android_rename, android_fstat, android_fstatat_1) (android_fstatat) (android_faccessat, android_fdopen, android_close, android_fclose) (android_open_asset, android_close_asset, android_asset_read_quit) (android_asset_read, android_asset_lseek, android_asset_fstat) (android_opendir, android_dirfd, android_readdir) (android_closedir): Move file system emulation routines here. Introduce a new ``VFS'' layer for translating between Emacs-specific file names and the various disparate interfaces for accessing files on Android. * src/callproc.c (delete_temp_file): * src/charset.c (load_charset_map_from_file): * src/dired.c: * src/emacs.c (Fkill_emacs): * src/fileio.c (check_mutable_filename, Fcopy_file) (Fmake_directory_internal, Fdelete_directory_internal) (Fdelete_file, Frename_file, Fadd_name_to_file) (Fmake_symbolic_link, file_accessible_directory_p) (Fset_file_modes) (Fset_file_times, write_region): * src/filelock.c (get_boot_time, rename_lock_file) (create_lock_file, current_lock_owner, unlock_file): * src/image.c (slurp_file, png_load_body, jpeg_load_body): * src/keyboard.c (Fopen_dribble_file): * src/lisp.h: * src/lread.c (Fload): * src/process.c (handle_child_signal): * src/sysdep.c (init_standard_fds, emacs_fopen, emacs_fdopen) (emacs_unlink, emacs_symlink, emacs_rmdir, emacs_mkdir) (emacs_renameat_noreplace, emacs_rename): * src/term.c (Fresume_tty, init_tty): Use and add new wrappers for fopen, fdopen, unlink, symlink, rmdir, mkdir, renameat_norepalce and rename. 2023-07-23 Po Lu * doc/emacs/android.texi (Android File System): Document where the app library directory can probably be found. * src/android.c (android_create_lib_link): New function. Try to symlink `lib' in the directory holding the files directory to the app library directory. (setEmacsParams): Call that function if Emacs is being initialized from an application context. 2023-07-22 Po Lu * lisp/touch-screen.el (touch-screen-drag): If touch-screen-word-select, also keep the initial word within the region while scrolling. * src/window.h (WINDOW_MENU_BAR_P): Check for external menu bars using HAVE_WINDOW_SYSTEM && HAVE_EXT_MENU_BAR instead of hard coding X without Xt or GTK. * doc/lispref/commands.texi (Key Sequence Input): Describe which events receive imaginary prefix keys. * lisp/touch-screen.el (touch-screen-translate-touch): Consider `vertical-line' a virtual function key. (function-key-map): Translate events on vertical window borders. * etc/NEWS: Announce `current-key-remap-sequence'. * src/androidfns.c (Fx_create_frame): Default Qvertical_scroll_bars to Qnil, but set scroll-bar-width and scroll-bar-height. 2023-07-21 Po Lu * doc/lispref/commands.texi (Key Sequence Input): Document new argument to `read-key-sequence' etc. * lisp/help-macro.el (make-help-screen): * lisp/subr.el (read-key, read-char-choice-with-read-key): Disable text conversion and display the OSK before reading a key sequence. * lisp/touch-screen.el (touch-screen-window-selection-changed): Only cancel the minibuffer OSK timer. (touch-screen-handle-point-up): Update comment accordingly. * src/keyboard.c (command_loop_1, read_menu_command) (read_key_sequence, read_key_sequence_vs, Fread_key_sequence) (Fread_key_sequence_vector): New arg DISABLE_TEXT_CONVERSION. All callers changed. * lisp/touch-screen.el (touch-screen-translate-touch): Check if a prefix is specified separately from prefix being non-nil. Accept `nil' as an imaginary prefix key. (function-key-map): Register translation functions on the tab bar, tab lines and internal border. * lisp/touch-screen.el (touch-screen-preview-select): Avoid unnecessary redisplays. (touch-screen-drag): Scroll at window margins using window scrolling functions instead of relying on redisplay to recenter the window around point. * doc/emacs/input.texi (Touchscreens): Document `touch-screen-preview-select'. * doc/lispref/commands.texi (Touchscreen Events): Fix typo in the descriptions of two touch screen events. * lisp/dired.el (dired-insert-set-properties): Adjust for changes to file end computation. * lisp/minibuffer.el (clear-minibuffer-message): Don't clear minibuffer message if dragging. * lisp/touch-screen.el (touch-screen-current-tool): Fix doc string. (touch-screen-preview-select): New function. (touch-screen-drag): Call it if point changes. 2023-07-20 Po Lu * exec/trace.c (handle_readlinkat): Adjust commentary to match behavior. * src/android.c (android_get_keysym_name): NULL terminate *NAME_RETURN. * lisp/international/mule-cmds.el (set-coding-system-map): Don't display `set-terminal-coding-system' on Android. * lisp/cus-edit.el (custom-display): Add `android' display type. * src/android.c (struct android_event_queue): Don't make unnecessarily volatile. * lisp/touch-screen.el (touch-screen-handle-touch): Don't restart dragging if point is at ZV and the tap falls on a different row. * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): New field `title'. (addSubmenu): New arg TITLE. Set that field. (expandTo): Set MENU's header title if it's a context menu. * src/androidmenu.c (android_init_emacs_context_menu): Adjust signature of `createContextMenu'. (android_menu_show): Use TITLE instead of pane titles if there's only one pane. * doc/emacs/dired.texi (Marks vs Flags): Document command bound to `touchscreen-hold'. * doc/lispref/commands.texi (Touchscreen Events): Describe `touch-screen-inhibit-drag'. * etc/NEWS: Improve description of changes to touch screen support. * lisp/dired-aux.el (dired-do-chxxx, dired-do-chmod) (dired-do-print, dired-do-shell-command, dired-do-compress-to) (dired-do-create-files, dired-do-rename, dired-do-isearch) (dired-do-isearch-regexp, dired-do-search) (dired-do-query-replace-regexp, dired-do-find-regexp) (dired-vc-next-action): Disable ``click to select'' after running this command. * lisp/dired.el (dired-insert-set-properties): Attach click-to-select keymap to file names if necessary. (dired-mode-map): Bind `touchscreen-hold' to click to select mode. (dired-post-do-command): New function. (dired-do-delete): Call it. (dired-mark-for-click, dired-enable-click-to-select-mode): New functions. (dired-click-to-select-mode): New minor mode. * lisp/touch-screen.el (touch-screen-current-tool): Fix doc string. (touch-screen-inhibit-drag): New function. 2023-07-19 Po Lu * src/sfnt.c (sfnt_infer_deltas): Improve commentary. * lisp/touch-screen.el (touch-screen-handle-point-up): If what is `restart-drag' (meaning that a drag has been restarted but the touchpoint has not moved), translate the release into a regular mouse click to deactivate the region. * build-aux/makecounter.sh (curcount): Rename `counter' to `emacs_shortlisp_counter'. * doc/emacs/input.texi (Touchscreens): Document `touch-screen-extend-selection'. * doc/lispref/commands.texi (Touchscreen Events): Document `touchscreen-restart-drag'. * lisp/touch-screen.el (touch-screen-extend-selection): New user option. (touch-screen-restart-drag): New function. (touch-screen-handle-point-update): Handle `restart-drag' gestures. (touch-screen-handle-touch): Check if the prerequisites for extending a previous drag gesture are met, and generate such events if so. (touch-screen-translate-touch): Update doc string. * src/Makefile.in (otherobj): Remove BUILD_COUNTER_OBJ. ($(lispsource)/international/charprop.el): (%.elc): Don't depend on bootstrap-emacs if cross configuring for Android. (libemacs.so): Directly depend on and link with BUILD_COUNTER_OBJ. * build-aux/makecounter.sh: New script. * src/Makefile.in (abs_top_builddir): New variable. (BUILD_COUNTER_OBJ): Define to build-counter.o if compiling for Android. (build-counter.c): New target. Generate this file using makecounter.sh upon changes to lisp.mk or shortlisp. (lisp.mk): Make and load relative to abs_top_builddir. (emacs$(EXEEXT)): Adjust accordingly. (mostlyclean): Remove build-counter.c. 2023-07-18 Po Lu * lisp/touch-screen.el (touch-screen-handle-point-update) (touch-screen-handle-point-up): Fix typos. * lisp/touch-screen.el (touch-screen-handle-point-update): Fix typo. * src/keyboard.c (make_lispy_event): Return nil if no menu item is found. * lisp/touch-screen.el (touch-screen-hold) (touch-screen-handle-point-up): Don't select inactive minibuffer windows. (touch-screen-handle-point-update): Improve detection of left and right edges. * lisp/touch-screen.el (touch-screen-handle-touch): Fix treatment of stray update events. * src/frame.c (syms_of_frame): Default to nil if HAVE_ANDROID. * src/keyboard.c (make_lispy_event): Fix botched merge. * doc/lispref/commands.texi (Touchscreen Events): Describe treatment of canceled touch sequences during touch event translation. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): Update JNI prototypes. * java/org/gnu/emacs/EmacsWindow.java (motionEvent): Set cancellation flag in events sent where appropriate. * lisp/touch-screen.el (touch-screen-handle-point-update): Improve treatment of horizontal scrolling near window edges. (touch-screen-handle-touch): Don't handle point up if the touch sequence has been canceled. * src/android.c (sendTouchDown, sendTouchUp, sendTouchMove): New argument `flags'. * src/androidgui.h (enum android_touch_event_flags): New enum. (struct android_touch_event): New field `flags'. * src/androidterm.c (handle_one_android_event): Report cancellation in TOUCHSCREEN_END_EVENTs. * src/keyboard.c (make_lispy_event): Fix botched merge. 2023-07-17 Po Lu * doc/lispref/commands.texi (Touchscreen Events): Document meaning of `mouse-1-menu-command'. * lisp/mouse.el (minor-mode-menu-from-indicator): New arg EVENT. Give it to popup-menu. (mouse-minor-mode-menu): Use posn specified within EVENT. * lisp/touch-screen.el (touch-screen-handle-touch): Fix interactive translation. Treat commands labeled `mouse-1-menu-command' like ordinary keymaps. * doc/lispref/commands.texi (Touchscreen Events): Document changes to simple translation. * lisp/touch-screen.el (touch-screen-handle-point-up): Generate `down-mouse-1' if the current gesture is `mouse-1-menu'. (touch-screen-handle-touch): If binding is a keymap, set state to `mouse-1-menu' and wait for point to be released before generating down-mouse-1. * lisp/tab-bar.el (tab-bar-map): Don't bind touch-screen-drag. * lisp/touch-screen.el (touch-screen-drag): Extend the region based on the position of the mark, not the position of point relative to EVENT. (touch-screen-translate-touch): Don't generate virtual function keys for non-mouse events. (function-key-map): Remove redundant definitions. * src/keyboard.c (read_key_sequence): Don't generate *-bar prefix keys for mock input (such as input from function key translation.) * doc/emacs/input.texi (Touchscreens): Document the new feature for people who have trouble dragging to word boundaries. * lisp/touch-screen.el (touch-screen-word-select): New defcustom. (touch-screen-word-select-bounds) (touch-screen-word-select-initial-word): New variable definitions. (touch-screen-hold): If `touch-screen-word-select', select the word around EVENT. (touch-screen-drag): If `touch-screen-word-select', extend the region to the next word boundary if the character under point constitutes a word. (touch-screen-handle-point-update, touch-screen-handle-touch) (touch-screen-translate-touch): Fix doc strings and fill comments. 2023-07-16 Po Lu * java/org/gnu/emacs/EmacsService.java (displayToast): * src/android.c (android_init_emacs_service): Remove unused function. * lisp/touch-screen.el (touch-screen-handle-point-up): Correctly compute posn point. (touch-screen-translate-touch): Update doc string. (function-key-map): Define touch screen translation functions within the internal border. * doc/lispref/commands.texi (Touchscreen Events): Improve documentation. * lisp/tab-bar.el (tab-bar-map): Bind `[tab-bar touchscreen-hold]'. * lisp/touch-screen.el (touch-screen-hold, touch-screen-drag): New functions. (touch-screen-handle-timeout): Generate a `touchscreen-hold' event instead. (touch-screen-handle-point-update): Generate a `touchscreen-drag' event upon dragging. (touch-screen-translate-touch): Cancel touch screen timer upon exit. * src/keyboard.c (access_keymap_keyremap): Take unsigned int start and end instead. * doc/emacs/emacs.texi (Top): * doc/emacs/input.texi (Other Input Devices): Correctly capitalize subsection name. (Touchscreens): Document additional translation. * doc/lispref/commands.texi (Touchscreen Events): Document that `touchscreen-end' events now have prefix keys. Also, describe mouse emulation and `touchscreen-scroll' events. * doc/lispref/keymaps.texi (Translation Keymaps): Document `current-key-remap-sequence'. * lisp/touch-screen.el (touch-screen-translate-prompt): New function. (touch-screen-scroll): New command. Bind to `touchscreen-scroll'. (touch-screen-handle-point-update, touch-screen-handle-point-up) (touch-screen-handle-touch): Refactor to actually translate touch screen event sequences, as opposed to looking up commands and executing them. (touch-screen-translate-touch): New function. Bind in function-key-map to all touch screen events. (touch-screen-drag-mode-line-1, touch-screen-drag-mode-line) (touch-screen-tap-header-line): Remove special commands for dragging the mode line and clicking on the header line. * lisp/wid-edit.el (widget-button-click): Adjust accordingly. * src/keyboard.c (access_keymap_keyremap): Bind `current-key-remap-sequence' to the key sequence being remapped. (keyremap_step): Give fkey->start and fkey->end to access_keymap_keyremap. (head_table): Add imaginary prefix to touchscreen-end events as well. (syms_of_keyboard): New variable Vcurrent_key_remap_sequence. 2023-07-15 Po Lu * doc/emacs/android.texi (Android): Add new node to menu. (Android Environment): Add footnote pointing to new node. (Android Software): New node. * doc/emacs/emacs.texi (Top): Add new node to menu. * java/AndroidManifest.xml.in (manifest): Fix location of sharedUserId property. * java/INSTALL: Improve documentation of shared user ID support. 2023-07-14 Po Lu * configure.ac (ANDROID_SHARED_USER_NAME): New variable. Substitute it. * java/AndroidManifest.xml.in: Set `sharedUserLabel' if a shared user ID is enabled. * java/res/values/strings.xml (shared_user_name): New string resource. * src/android.c (android_blit_copy): Don't check for overflow where not required. * java/org/gnu/emacs/EmacsInputConnection.java (getSurroundingText): Don't print debug information if DEBUG_IC is off. * lisp/calc/calc.el (calc): Fix typo. 2023-07-13 Po Lu * etc/NEWS: Announce the new tool bar. * etc/images/last-page.xpm: * etc/images/last-page.pbm: New images. Mirrored from next-page.xpm. * lisp/doc-view.el (doc-view-menu): Use `doc-view-new-search' instead of an anonymous function. (doc-view-tool-bar-map): New keymap. (doc-view-search): Update the tool bar after initiating a search. (doc-view-new-search): New command. (doc-view-mode): Set the tool bar map appropriately. Restore hardware acceleration, as a small degree of tearing is preferable towards large slowdowns on some specific devices. The slight tearing remains, but a workaround for the GPU texture remaining partially updated has been introduced. * java/AndroidManifest.xml.in: * java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Don't change hardware acceleration state. * java/org/gnu/emacs/EmacsNative.java (notifyPixelsChanged): New function. * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): New field `bitmapChanged'. (copyToFrontBuffer): Signal that the bitmap has changed. (onDraw): If the bitmap has changed, increment the generation ID. * src/android.c (JNICALL): Implement new function. 2023-07-13 Po Lu Disable hardware acceleration on Android. It serves no purpose and causes tearing. Uploading the bitmap to the GPU takes about as long as it does to incrementally update the surface in software. * java/AndroidManifest.xml.in: Disable hardware acceleration. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): Make lastClosedMenu static. * java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Enable hardware acceleration within alert dialogs. * java/org/gnu/emacs/EmacsSurfaceView.java (onDraw): Describe why hardware acceleration is disabled. * java/org/gnu/emacs/EmacsWindow.java (run): Remove redundant call. 2023-07-12 Po Lu * src/android.c (android_run_select_thread): Fix typo. * src/android.c (android_run_select_thread): Correctly return the set of ready read and write descriptors on __ANDROID_API__ < 16 systems. (android_select): Clear the set of ready file descriptors if events from the event queue are present despite pselect failing. * src/androidterm.c (android_android_to_emacs_modifiers) (android_emacs_to_android_modifiers): Fix statement precedence bugs. * src/doc.c (doc_close): Remove unused macro. * java/org/gnu/emacs/EmacsWindow.java (whatButtonWasIt): Handle back and forward buttons along with styluses. * src/doc.c (close_file_unwind_android_fd): New function. (get_doc_string, Fsnarf_documentation): Don't create a temporary fd if it can be avoided. 2023-07-11 Po Lu * .gitignore: Ignore cross/etc/DOC. * configure.ac: Make the directory `cross/etc'. * cross/Makefile.in (CLEAN_SUBDIRS): Clean files inside `etc' as well. * java/Makefile.in (install_temp): Copy cross/etc/DOC to the package if it is available. * src/Makefile.in (SOME_MACHINE_OBJECTS): Add androidselect.c, sfntfont-android.c and sfntfont.c. (libemacs.so): Depend on $(etc)/DOC. * src/sfnt.c (sfnt_fill_span): Correctly clip span to raster width, ensuring that the last pixel is filled. (main): Adjust test sizes. * java/org/gnu/emacs/EmacsView.java (onGenericMotionEvent): Call onGenericMotionEvent. * java/org/gnu/emacs/EmacsWindow.java (Coordinate): New fields `button' and `id'. (): Add new arguments to the constructor. (whatButtonWasIt): Return 0 if the button state has not changed. (buttonForEvent): New function. (figureChange): Return the Coordinate object associated to EVENT. Determine whether or not EVENT was accompanied by a change to the button state, and ascertain which button that was. (motionEvent): New function. (onGenericMotionEvent, onTouchEvent): Factor out touch and mouse event delivery to motionEvent. 2023-07-10 Po Lu * java/org/gnu/emacs/EmacsService.java (browseUrl): New argument SEND. Choose from a list of applications that want to share the URL if true. * lisp/net/browse-url.el (browse-url-android-share): New user option. (browse-url-default-android-browser): Respect said user option. * src/android.c (android_init_emacs_service, android_browse_url): Expose new option. * src/android.h: Update prototypes. * src/androidselect.c (Fandroid_browse_url): Likewise. * lib/vasnprintf.c: * m4/printf.m4: * m4/vasnprintf.m4: Update from Gnulib. 2023-07-09 Po Lu * java/org/gnu/emacs/EmacsWindow.java (eventModifiers) (motionEventModifiers): New functions. (onKeyDown, onKeyUp, onFocusChanged, onSomeKindOfMotionEvent): Don't record the previous modifier mask; instead, always use the modifier state specified in the event. * src/androidterm.c (handle_one_android_event): Don't dispatch button release events when a popup is active. * java/org/gnu/emacs/EmacsService.java (onStartCommand): Fix typo in notification message. * java/org/gnu/emacs/EmacsWindow.java (onFocusChanged): Reset the recorded modifier state upon a change to the window focus. * java/org/gnu/emacs/EmacsService.java (onCreate): Fix typo. * java/org/gnu/emacs/EmacsDrawPoint.java (perform): Don't fill an extra pixel. * java/org/gnu/emacs/EmacsService.java (onCreate): Make sure scaledDensity is always at least 160 dpi. 2023-07-08 Po Lu * java/org/gnu/emacs/EmacsDrawLine.java (perform): Symmetrically adjust coordinates to cover the last pixel. Then, fill the left most pixel of the line. * java/org/gnu/emacs/EmacsService.java (DEBUG_IC) (DEBUG_THREADS): Improve commentary. * src/androidterm.c (handle_one_android_event): Signal completion of IME events that have lost their frames. (requestCursorUpdates): Don't set an edit counter as this event won't be passed to the text conversion machinery. * src/android.c (android_blit_xor, android_check_query_urgent) (android_run_in_emacs_thread, android_update_extracted_text): Fix whitespace. 2023-07-07 Po Lu * java/org/gnu/emacs/EmacsSurfaceView.java (copyToFrontBuffer): Use fallback bit blit function on Android 7.0 as well, as crashes have been observed in drawBitmap. 2023-07-07 Po Lu * lisp/tool-bar.el (modifier-bar-modifier-list): New variable. (modifier-bar-button): New function. (tool-bar-event-apply-alt-modifier) (tool-bar-event-apply-super-modifier) (tool-bar-event-apply-hyper-modifier) (tool-bar-event-apply-shift-modifier) (tool-bar-event-apply-control-modifier) (tool-bar-event-apply-meta-modifier): Factor out modifier bar logic to that function, and redisplay the tool bar where necessary. (modifier-bar-available-p): New function. (modifier-bar-mode): Disable tool bar items corresponding to modifier keys that've already been pressed. * etc/images/shift.pbm: Regenerate using the same font as the other modifier button bitmaps. 2023-07-06 Po Lu * java/org/gnu/emacs/EmacsNative.java (scaledDensity): Announce new argument `scaledDensity'. * java/org/gnu/emacs/EmacsNoninteractive.java (main): Specify new argument. * java/org/gnu/emacs/EmacsService.java (onCreate): Compute an adjusted DPI for the font size based on the ratio between density and scaledDensity. (run): Specify that adjusted density. * src/android.c (setEmacsParams): Set `android_scaled_pixel_density'. * src/android.h (android_scaled_pixel_density) New variable. * src/androidterm.c (android_term_init): Set `font_resolution'. * src/androidterm.h (struct android_display_info): New field. * src/font.c (font_pixel_size, font_find_for_lface) (font_open_for_lface, Ffont_face_attributes, Fopen_font): Use FRAME_RES instead of FRAME_RES_Y. * src/frame.h (FRAME_RES): New macro. Use this to convert between font point and pixel sizes as opposed to FRAME_RES_Y. * src/w32font.c (fill_in_logfont): * src/xfaces.c (Fx_family_fonts, set_lface_from_font): Use FRAME_RES instead of FRAME_RES_Y. (bug#64444) 2023-07-05 Po Lu * doc/emacs/android.texi (Android Environment): Document that Emacs also receives READ_EXTERNAL_STORAGE by default on old versions of Android. * java/AndroidManifest.xml.in: Request READ_EXTERNAL_STORAGE. (bug#64445) * doc/emacs/emacs.texi (Emacs and Android): Fix menu. * doc/emacs/android.texi (Android): Fix discrepancies between menu and sectioning. * java/org/gnu/emacs/EmacsService.java (detectMouse): Don't use function that is not present on Android 4.0. * doc/lispref/commands.texi (Misc Events): Correctly index `set-text-conversion-style'. * lisp/tool-bar.el (tool-bar-event-apply-alt-modifier) (tool-bar-event-apply-super-modifier) (tool-bar-event-apply-hyper-modifier) (tool-bar-event-apply-shift-modifier) (tool-bar-event-apply-control-modifier) (tool-bar-event-apply-meta-modifier): Pass t when restoring text conversion style. * src/keyboard.c (restore_reading_key_sequence): New function. (read_key_sequence): Set `reading_key_sequence' where necessary. * src/keyboard.h: Declare variable. * src/textconv.c (check_postponed_buffers): New function. (Fset_text_conversion_style): New argument. If set, and a key sequence is being read, postpone resetting the IME until the key sequence is read. (syms_of_textconv): Clear new variable and add staticpro. * src/textconv.h: Update prototypes. 2023-07-04 Po Lu * doc/emacs/frames.texi (Tool Bars): Describe modifier bars. * doc/lispref/keymaps.texi (Extended Menu Items, Tool Bar): Document changes to tool bar menu item handling and secondary tool bars. * etc/NEWS: Announce changes. * lisp/simple.el (event-apply-modifier): Correctly apply Ctrl and Shift modifiers to lower case ASCII key events that already have other modifiers applied. * lisp/tool-bar.el (tool-bar--cache-key) (tool-bar--secondary-cache-key): New defsubsts. (tool-bar--flush-cache): Flush secondary tool bar cache. (tool-bar-make-keymap): Include secondary tool bar if necessary. (tool-bar-make-keymap-1): New arg MAP. Generate a keymap for that map if specified, else default to tool-bar-map. (set-text-conversion-style, tool-bar-apply-modifiers) (overriding-text-conversion-style) (tool-bar-event-apply-alt-modifier) (tool-bar-event-apply-super-modifier) (tool-bar-event-apply-hyper-modifier) (tool-bar-event-apply-shift-modifier) (tool-bar-event-apply-control-modifier) (tool-bar-event-apply-meta-modifier, modifier-bar-mode): New functions. * src/dispextern.h (enum tool_bar_item_idx): Add TOOL_BAR_ITEM_WRAP. * src/frame.c (make_frame): Clear new field `tool_bar_wraps_p'. * src/frame.h (struct frame): New field `tool_bar_wraps_p'. * src/keyboard.c (parse_tool_bar_item): Handle QCwrap properties in tool bar menu items. (syms_of_keyboard): New defsym QCwrap. * src/xdisp.c (build_desired_tool_bar_string): Clear f->tool_bar_wraps_p and set it appropriately. Insert new line characters in the tool bar string upon encountering a wrap character. (display_tool_bar_line): Stop at EOB, not line end. Reseat on the next line upon encountering EOL characters. (redisplay_tool_bar): Allow rows to be different heights if explicit new lines are present upon the tool bar string. * src/sfnt.c (sfnt_decompose_compound_glyph): Pacify warning. 2023-06-30 Po Lu * src/android.c (android_query_tree): Correctly return children. 2023-06-27 Po Lu * doc/emacs/android.texi (Android Environment): Improve wording. * doc/emacs/android.texi (Android Environment): Fix typos. * src/android.c (android_exception_check) (android_exception_check_1) (android_exception_check_2) (android_exception_check_nonnull) (android_exception_check_nonnull_1): Tell the compiler to expect that the object is non-NULL, or that no exception has been thrown. * exec/loader-mips64el.s (rest_of_exec): Fix typo in comment. 2023-06-26 Po Lu * doc/lispref/commands.texi (Touchscreen Events): Fix typo. 2023-06-26 Po Lu * lisp/calc/calc.el (calc-mode, calc): Make sure the on-screen keyboard is not hidden when a Calc buffer is created or a Calc Trail window is being created for the first time. * lisp/touch-screen.el (touch-screen-window-selection-changed): Take touch-screen-display-keyboard in to account. * src/sfnt.c (sfnt_decompose_compound_glyph) (sfnt_interpret_compound_glyph_1): Reset `defer_offsets' before processing each component. (sfnt_lerp_half): Avoid undefined shift of negative value. (sfnt_compute_tuple_scale): Pacify compiler warning. 2023-06-23 Po Lu * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): * java/org/gnu/emacs/EmacsSdk7FontDriver.java (Sdk7FontEntity): (hasChar): Clean up dead stores. * src/android.c (android_wc_lookup_string): Fix typo. (android_wc_lookup_string): Check that GetStringChars returns non-NULL, not if it throws an exception. 2023-06-21 Po Lu * src/androidfns.c (android_set_tool_bar_position) (frame_geometry): * src/androidterm.c (android_flash) (android_clear_under_internal_border): Synchronize with X. 2023-06-20 Po Lu * src/androidfns.c (android_frame_parm_handlers): Fix typo. (android_set_tool_bar_position): New function. (android_frame_parm_handlers): Add new frame param handler. 2023-06-19 Po Lu * lib-src/Makefile.in (seccomp-filter$(EXEEXT)): Link with Gnulib. * java/org/gnu/emacs/EmacsView.java (EmacsView, dimensionsLock): New field. (): Create new lock object. (handleDirtyBitmap, onLayout, onAttachedToWindow): Make sure measuredWidth and measuredHeight are extracted and set atomically. Send Expose upon layout changes if the view has grown. * exec/Makefile.in (clean): Add `exec1'. 2023-06-18 Po Lu * src/window.h (struct window): Improve documentation of `last_mark'. * src/xdisp.c (mark_window_display_accurate_1): Don't set `last_mark' to -1 if the mark is inactive. * lisp/textmodes/conf-mode.el (conf-mode-initialize): Set text-conversion-style. 2023-06-17 Po Lu * java/org/gnu/emacs/EmacsService.java (onCreate, run): Don't initialize signal mask here. * java/org/gnu/emacs/EmacsApplication.java (onCreate): Do it here instead. * src/android.c (JNICALL): Restore previous signal masks. * java/README: More documentation. 2023-06-16 Po Lu * src/android.c (android_write_event, JNICALL) (android_run_in_emacs_thread): Don't rely on raise to call deliver_process_signal. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): * java/org/gnu/emacs/EmacsApplication.java (findDumpFile): * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu) (addSubmenu, display): * java/org/gnu/emacs/EmacsDocumentsProvider.java (getNotificationUri, queryChildDocuments, deleteDocument): * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): * java/org/gnu/emacs/EmacsFillRectangle.java (perform): * java/org/gnu/emacs/EmacsOpenActivity.java (readEmacsClientLog) (checkReadableOrCopy): * java/org/gnu/emacs/EmacsSdk7FontDriver.java (EmacsSdk7FontDriver): * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): * java/org/gnu/emacs/EmacsView.java (EmacsView): * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow, onKeyUp): * java/org/gnu/emacs/EmacsWindowAttachmentManager.java (EmacsWindowAttachmentManager): Remove various unused arguments and variables, dead stores, and make minor cleanups and performance improvements. * src/androidmenu.c (FIND_METHOD_STATIC, android_menu_show): Adjust accordingly. 2023-06-15 Po Lu * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection, beginBatchEdit, reset, endBatchEdit): Keep track of the number of batch edits and return an appropriate value. (takeSnapshot): Implement function. * java/org/gnu/emacs/EmacsNative.java (takeSnapshot): New function. * java/org/gnu/emacs/EmacsService.java (resetIC): Improve debugging output. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Call `reset' to clear the UI side batch edit count. * src/androidterm.c (struct android_get_surrounding_text_context): New fields `conversion_start' and `conversion_end'. (android_get_surrounding_text): Return the conversion region. (android_get_surrounding_text_internal, NATIVE_NAME): Factor out `getSurroundingText'. (takeSnapshot): New function. 2023-06-14 Po Lu * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection): Reimplement as an InputConnection, not BaseInputConnection. * src/androidterm.c (performEditorAction): Sync prior to sending keyboard events. 2023-06-13 Po Lu * etc/NEWS: Fix typo. * lisp/gnus/gnus-score.el (gnus-read-char): New function. (gnus-summary-increase-score): Use it to display a dialog box on Android, where input methods have trouble with plain old read-char. 2023-06-12 Po Lu * java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Resolve dialog button style and use it instead. * java/org/gnu/emacs/EmacsView.java (EmacsView) (showOnScreenKeyboard, hideOnScreenKeyboard): Don't synchronize. * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow) (toggleOnScreenKeyboard): Revert to calling IMM functions from the main thread. * src/android.c (struct android_event_container) (android_pselect_nfds, android_pselect_readfds) (android_pselect_writefds, android_pselect_exceptfds) (android_pselect_timeout): Don't make volatile. (android_wait_event): Run queries if necessary. 2023-06-11 Po Lu * lisp/net/tramp.el (tramp-encoding-shell): * lisp/obsolete/terminal.el (terminal-emulator): * lisp/term.el (term-exec-1): * lisp/textmodes/artist.el (artist-figlet-get-font-list): * src/android.c (JNICALL): Where /bin/sh was previously used, use /system/bin/sh on Android. * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): Document member variables. (onDraw): Use separate Paint object on the UI thread. * src/textconv.c (really_commit_text, really_set_composing_text) (really_delete_surrounding_text): Run modification hooks when deleting text. * java/org/gnu/emacs/EmacsView.java (EmacsView) (showOnScreenKeyboard, hideOnScreenKeyboard) (onCheckIsTextEditor): Make synchronized. * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow) (toggleOnScreenKeyboard): Don't post to the main thread. 2023-06-10 Po Lu * src/keyboard.c (handle_input_available_signal): Don't generate instructions not available in arm mode. * src/android.c (android_select, android_check_query) (android_check_query_urgent, android_answer_query) (android_answer_query_spin, android_begin_query) (android_end_query) (android_run_in_emacs_thread): Use finer grained memory synchronization semantics. * src/androidterm.c (android_get_selection): Use the current selection, not its value at the time of the last redisplay. * src/keyboard.c (handle_input_available_signal): Place memory barrier. * src/textconv.c (really_commit_text) (really_set_composing_text): Improve behavior of certain fontification mechanisms by inheriting text properties from surrounding text. * src/android.c (android_select): Clear `android_urgent_query'. (android_check_query): Make static. Clear `android_urgent_query'. (android_check_query_urgent): New function; work like `android_check_query', but only answer urgent queries. (android_answer_query, android_end_query): Clear urgent query flag. (android_run_in_emacs_thread): Initially wait two seconds for the query to run from the keyboard loop; upon a timeout, set `android_urgent_query' to true and wait for it to run while reading async input. * src/android.h: Update prototypes. * src/keyboard.c (handle_async_input): Call `android_check_query_urgent'. 2023-06-09 Po Lu * src/textconv.c (really_commit_text) (handle_pending_conversion_events): Fix minor typos. * src/androidterm.c (handle_one_android_event): Don't answer queries here; just rely on the event interrupting android_select. This avoids exposing buffer contents to input methods while a command is being executed. * src/textconv.c (TEXTCONV_DEBUG, really_commit_text) (really_finish_composing_text, really_set_composing_text) (really_set_composing_region, really_delete_surrounding_text) (really_set_point_and_mark, get_extracted_text): Add debugging printouts. * lisp/progmodes/cc-mode.el (c-initialize-cc-mode): Always add text conversion hooks. * src/android.c (android_get_gc_values): Remove redundancy. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function `setupSystemThread'. * java/org/gnu/emacs/EmacsService.java (onCreate): Block all signals except for SIGBUS and SIGSEGV in the UI thread. * src/android.c (setupSystemThread): New function. * java/org/gnu/emacs/EmacsThread.java (run): Correct check against extraStartupArgument when an initial file is specified. 2023-06-08 Po Lu * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): Make subclasses final. * java/org/gnu/emacs/EmacsDialog.java (display1): Check if an instance of EmacsOpenActivity is open; if it is, try using it to display the pop up dialog. * java/org/gnu/emacs/EmacsDialogButtonLayout.java (EmacsDialogButtonLayout): Make final. * java/org/gnu/emacs/EmacsHolder.java (EmacsHolder): Likewise. * java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity): New field `currentActivity'. (onCreate, onDestroy, onWindowFocusChanged, onPause): Set that field as appropriate. * src/android.c (android_is_special_directory): New function. (android_get_asset_name, android_content_name_p) (android_get_content_name): * src/android.h (android_is_special_directory) (JNI_STACK_ALIGNMENT_PROLOGUE): * src/fileio.c (check_mutable_filename): * src/filelock.c (WTMP_FILE, make_lock_file_name): * src/inotify.c (IN_ONLYDIR, Finotify_add_watch): Factor out checks against asset and content directories to that function. 2023-06-07 Po Lu * doc/emacs/android.texi (Android Startup): Fix reference to non existent node. * java/org/gnu/emacs/EmacsInputConnection.java (beginBatchEdit) (endBatchEdit, commitCompletion, commitText) (deleteSurroundingText) (finishComposingText, getSelectedText, getTextAfterCursor) (getTextBeforeCursor, setComposingText, setComposingRegion) (performEditorAction, performContextMenuAction, getExtractedText) (setSelection, sendKeyEvent, deleteSurroundingTextInCodePoints) (requestCursorUpdates): Ensure that the input connection is up to date. (getSurroundingText): New function. * java/org/gnu/emacs/EmacsNative.java (getSurroundingText): Export new C function. * java/org/gnu/emacs/EmacsService.java (resetIC): Invalidate previously created input connections. * java/org/gnu/emacs/EmacsView.java (EmacsView) (onCreateInputConnection): Signify that input connections are now up to date. * src/androidterm.c (struct android_get_surrounding_text_context): New structure. (android_get_surrounding_text, NATIVE_NAME): * src/textconv.c (get_surrounding_text): * src/textconv.h: New functions. 2023-06-06 Po Lu * lisp/simple.el (analyze-text-conversion): Remove old workaround. 2023-06-06 Po Lu * java/org/gnu/emacs/EmacsContextMenu.java (display): Use `EmacsHolder' instead of `Holder'. * java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): Use `EmacsDialogButtonLayout' to ensure that buttons are wrapped properly. (display): Adjust for new holder class. * java/org/gnu/emacs/EmacsDialogButtonLayout.java (EmacsDialogButtonLayout, onMeasure, onLayout): New functions. * java/org/gnu/emacs/EmacsDrawLine.java: * java/org/gnu/emacs/EmacsFillPolygon.java: Remove redundant imports. * java/org/gnu/emacs/EmacsHolder.java (EmacsHolder): * java/org/gnu/emacs/EmacsService.java (class Holder) (getEmacsView, EmacsService): Rename `Holder' to `EmacsHolder' and make it public. 2023-06-06 Po Lu * lisp/simple.el (undo-auto-amalgamate): Update doc string to describe new amalgamating commands. (analyze-text-conversion): Make this an amalgamating command by default, unless a new line has been inserted. Also, shorten the undo boundary timer. * src/textconv.c (really_commit_text) (really_set_composing_text): Correctly report ephemeral deletions. (syms_of_textconv): Fix doc strings. 2023-06-05 Po Lu * src/androidterm.c (android_handle_ime_event): Clear batch edit state, in case the previous input method forgot to do so. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function clearInputFlags. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Stop reporting changes after a new input method connection is established. * src/androidterm.c (android_handle_ime_event): Implement that change. (JNICALL): New function. 2023-06-04 Po Lu * src/keyboard.c: Fix build without window system * configure.ac: Tune pty detection for Android. * java/debug.sh (gdbserver_cmd, is_root): Prefer TCP again. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function `queryAndSpin'. * java/org/gnu/emacs/EmacsService.java (EmacsService) (icBeginSynchronous, icEndSynchronous, viewGetSelection): New synchronization functions. (resetIC, updateCursorAnchorInfo): Call those instead. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Call viewGetSelection. * src/android.c (JNICALL, android_answer_query_spin): New functions. 2023-06-03 Po Lu * lisp/bindings.el (global-map): Bind cut, copy and paste. * src/androidterm.c (JNICALL): Use key. * src/textconv.c (really_commit_text) (really_set_composing_text): Delete text between mark and point if the mark is active. Don't record changes if the text is empty. * src/androidterm.c (struct android_get_extracted_text_context): New field `mark_active'. (android_get_extracted_text): Set that field. (struct android_extracted_text_class): New field `flags'. (android_build_extracted_text): New argument `mark_active'. Set flags appropriately. (NATIVE_NAME, android_update_selection): Likewise. * src/textconv.c (get_extracted_text): New argument `mark_active'. Set it if the mark is active. * src/textconv.h: Update prototypes. * etc/MACHINES: Fix reference to obsolete file. 2023-06-02 Po Lu * lisp/emacs-lisp/eldoc.el ("back-to-indentation"): Register touch screen and text conversion commands. * lisp/progmodes/cc-cmds.el (c-post-text-conversion): New function. * lisp/progmodes/cc-mode.el (c-initialize-cc-mode): Add it as the `post-texxt-conversion-hook'. * lisp/simple.el (post-text-conversion-hook): New hook. (analyze-text-conversion): Run it until success before trying post insert functions. * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection): Apply workarounds on Vivo devices as well. * src/android.c (sendKeyPress, sendKeyRelease): Clear counter. * src/androidgui.h (struct android_key_event): New field `counter'. * src/androidterm.c (handle_one_android_event): Generate barriers as appropriate. (JNICALL): Set `counter'. * src/frame.h (enum text_conversion_operation): * src/textconv.c (detect_conversion_events) (really_set_composing_text, handle_pending_conversion_events_1) (handle_pending_conversion_events, textconv_barrier): * src/textconv.h: Implement text conversion barriers and fix various typos. 2023-06-01 Po Lu * java/org/gnu/emacs/EmacsService.java (browseUrl): If uri's scheme is `file', rewrite it into a content URI. * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection, performContextMenuAction): New function. * java/org/gnu/emacs/EmacsNative.java (EmacsNative) (performContextMenuAction): New function. * src/android.c (android_get_gc_values): Implement more efficiently. * src/androidterm.c (android_handle_ime_event): Pass through `update' argument to `finish_composing_text'. Fix thinko. * src/textconv.c (really_finish_composing_text) (really_set_composing_text, really_set_composing_region) (handle_pending_conversion_events_1, finish_composing_text): New argument `update'. Notify IME of conversion region changes if set. * src/textconv.h: Update structs and prototypes. * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection): Add compatibility adjustments for Samsung devices. * src/androidterm.c (struct android_get_extracted_text_context): New field `start_offset' and `end_offset'. Delete `offset'. (android_get_extracted_text, android_build_extracted_text): Replace `offset' with new args `start_offset' and `end_offset'. (NATIVE_NAME): Set `start_offset' and `end_offset'. (android_update_selection): Likewise. * src/textconv.c (get_extracted_text): Likewise. * src/textconv.h: Update prototypes. 2023-05-31 Po Lu * configure.ac: Pass through `--enable-check-lisp-object-type' on Android. * src/alloc.c (android_make_lisp_symbol): * src/android.c: * src/androidfns.c (android_set_no_focus_on_map) (android_set_no_accept_focus): * src/androidfont.c (androidfont_match, androidfont_open_font): * src/androidselect.c (Fandroid_get_clipboard) (Fandroid_get_clipboard_targets): * src/keyboard.c (make_lispy_event, syms_of_keyboard): * src/sfntfont.c (sfnt_enum_font_1, sfntfont_list_1): * src/textconv.c (really_set_point_and_mark): Fix Lisp_Object and integer screw-ups. * doc/emacs/input.texi (Other Input Devices, Touchscreens) (On-Screen Keyboards): * doc/lispref/commands.texi (Misc Events): * src/android.c (android_faccessat): Improve word choices and commentary. * lisp/touch-screen.el (touch-screen-handle-scroll): Make precision scrolling work better with horizontal movement. * src/android.c (android_copy_area): Pacify compiler warning. * exec/exec.c (insert_args): New argument `arg3'. Replace argv[1] with that argument. (exec_0): Pass file name of script to `insert_args'. * doc/emacs/android.texi (What is Android?, Android Startup) (Android File System, Android Environment, Android Windowing) (Android Troubleshooting): Improve wording and various other issues. * java/debug.sh (is_root): Go back to using unix sockets; allow adb to forward them correctly. * java/org/gnu/emacs/EmacsInputConnection.java (getExtractedText): Don't print text if NULL. * java/org/gnu/emacs/EmacsService.java (EmacsService): New field `imSyncInProgress'. (updateIC): If an IM sync might be in progress, avoid deadlocks. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Set `imSyncInProgress' across synchronization point. * src/android.c (android_check_query): Use __atomic_store_n. (android_answer_query): New function. (android_begin_query): Set `android_servicing_query' to 2. Check once, and don't spin waiting for query to complete. (android_end_query): Use __atomic_store_n. (android_run_in_emacs_thread): Compare-and-exchange flag. If originally 1, fail. * src/textconv.c (really_set_composing_text): Clear conversion region if text is empty. 2023-05-29 Po Lu * src/android.c (android_blit_copy, android_blit_xor): Fix typos. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function `blitRect'. * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): Use it on Android 8.x. * src/android.c (blitRect): Implement new function. (android_neon_mask_line): Fix iteration over remainder. (android_blit_copy): Be more paranoid. * java/org/gnu/emacs/EmacsCopyArea.java: Remove file. * java/org/gnu/emacs/EmacsService.java (copyArea): Delete function. * src/android.c (struct android_emacs_service) (android_init_emacs_service): Remove `copy_area'. (android_create_gc, android_change_gc, android_get_gc_values): Record new GC values. (android_neon_mask_line): New function. (android_blit_copy, android_blit_xor): New functions. (android_copy_area): Implement in C. (android_lock_bitmap): Accept drawables instead of windows. * src/android.h: Adjust prototype for `android_lock_bitmap'. * src/androidgui.h (struct android_gc): Record last known GC values. 2023-05-27 Po Lu * java/org/gnu/emacs/EmacsService.java (EmacsService) (checkEmacsThread): New function. (fillPolygon, drawRectangle, drawLine, drawPoint, copyArea) (clearArea): * java/org/gnu/emacs/EmacsThread.java (EmacsThread): * java/org/gnu/emacs/EmacsView.java (EmacsView, swapBuffers): Call where appropriate. * java/org/gnu/emacs/EmacsView.java (EmacsView, swapBuffers): Remove unnecessary documentation. `damageRegion' is only changed from the Emacs thread. 2023-05-26 Po Lu * doc/emacs/android.texi (Android Troubleshooting): Document `debug-init' option. * java/AndroidManifest.xml.in (EmacsLauncherPreferencesActivity): New activity. Export on systems older than Android 7.0. * java/org/gnu/emacs/EmacsActivity.java (onCreate): Adjust for string startup argument. * java/org/gnu/emacs/EmacsLauncherPreferencesActivity.java: New file. * java/org/gnu/emacs/EmacsPreferencesActivity.java (EmacsPreferencesActivity): Don't make final. (startEmacsQ): Give start-up argument as an argument, not as a boolean. (startEmacsDebugInit): New function. (onCreate): Register new listener; make final. * java/org/gnu/emacs/EmacsService.java (onCreate): Pass extraStartupArgument. * java/org/gnu/emacs/EmacsThread.java (EmacsThread): Rename startDashQ to extraStartupArgument. (run): Adjust accordingly. * java/res/values-v24/bool.xml: * java/res/values/bool.xml: * java/res/values/strings.xml: New files. * java/res/xml/preferences.xml: Add new option. Move string resources around. 2023-05-24 Po Lu * src/sfnt.c (sfnt_decompose_compound_glyph): Allow decomposing up to 16 nested components. (CALL, LOOPCALL): Correctly error if no fdef storage exists. (sfnt_interpret_run): New label `next_instruction', for CALL. (sfnt_interpret_compound_glyph_1): Allow decomposing up to 16 nested components. Prevent crash if there are no end points or points. (sfnt_read_cvar_table): Prevent assigning uninitialized values. (sfnt_vary_simple_glyph): Update commentary. 2023-05-23 Po Lu * exec/exec.c (exec_0): Use strcpy. 2023-05-20 Po Lu * exec/trace.c (handle_clone_prepare, handle_clone): When !REENTRANT, use malloc to allocate tracees after running out of static ones. * java/org/gnu/emacs/EmacsView.java (swapBuffers): Restore missing damage rect code. (onDetachedFromWindow): Remove redundant synchronization. 2023-05-19 Po Lu * lisp/touch-screen.el (touch-screen-tap-header-line): New function. ([header-line touchscreen-begin]): Define to `touch-screen-tap-header-line'. 2023-05-18 Po Lu * make-dist (possibly_non_vc_files): Add Android-specific files. * doc/emacs/frames.texi (Tab Bars): Explain how to interact with the tab bar from a touch screen. * doc/emacs/input.texi (Touchscreens): Document exactly what a ``long press'' is. * doc/emacs/windows.texi (Tab Line): Likewise. * lisp/tab-line.el (tab-line-tab-map, tab-line-add-map) (tab-line-tab-close-map, tab-line-left-map, tab-line-right-map): Bind `touchscreen-begin' to each command. (tab-line-track-tap, tab-line-event-start): New functions. (tab-line-hscroll-right, tab-line-hscroll-left, tab-line-new-tab) (tab-line-select-tab, tab-line-close-tab): Use them. 2023-05-16 Po Lu * lisp/menu-bar.el (popup-menu-normalize-position): Normalize `touchscreen-begin' events correctly. * lisp/tab-bar.el (tab-bar-mouse-context-menu): New argument POSN. Use it if specified. (touch-screen-track-tap, tab-bar-handle-timeout) (tab-bar-touchscreen-begin): New functions. (tab-bar-map): Bind [tab-bar touchscreen-begin]. * lisp/touch-screen.el (touch-screen-track-drag): Fix doc string. * src/dispextern.h: Export `get_tab_bar_item_kbd'. * src/keyboard.c (coords_in_tab_bar_window): New function. (make_lispy_event): Adjust touchscreen begin event mouse position list for tab bar. * src/xdisp.c (tab_bar_item_info): Allow CLOSE_P to be NULL. (get_tab_bar_item): Adjust doc string. (get_tab_bar_item_kbd): New function. 2023-05-15 Po Lu * configure.ac: Also disable enable_year2038. * msdos/sed1v2.inp: Fix removal of ANDROID_BUILD_CFLAGS. * msdos/sedlibmk.inp: Clear DIR_HAS_FD_MEMBER and LOCALE_FR_UTF8. 2023-05-14 Po Lu * java/org/gnu/emacs/EmacsDocumentsProvider.java (notifyChangeByName): New function. (queryDocument1): Set FLAG_SUPPORTS_MOVE where necessary. (moveDocument): Implement new function. 2023-05-08 Po Lu * java/Makefile.in (install_temp/assets/version): Fix generation in out of tree builds. 2023-05-07 Po Lu * java/org/gnu/emacs/EmacsInputConnection.java (requestCursorUpdates): * java/org/gnu/emacs/EmacsNative.java (requestCursorUpdates): * java/org/gnu/emacs/EmacsService.java (updateCursorAnchorInfo): New functions. * src/android.c (struct android_emacs_service) (android_init_emacs_service): Add new method. (android_update_cursor_anchor_info): New function. * src/androidfns.c (android_set_preeditarea): New function. * src/androidgui.h (enum android_ime_operation): New operation `REQUEST_CURSOR_UPDATES'. (struct android_ime_event): Document new meaning of `length'. * src/androidterm.c (android_request_cursor_updates): New function. (android_handle_ime_event): Handle new operations. (handle_one_android_event, android_draw_window_cursor): Update the preedit area if needed, like on X. (requestCursorUpdates): New function. * src/androidterm.h (struct android_output): New field `need_cursor_updates'. 2023-05-06 Po Lu * configure.ac (LIBGMP_CFLAGS): Avoid non portable test expression. * cross/verbose.mk.android (AM_V_CC): Get rid of badly aligned ANDROID_CC messages. * java/org/gnu/emacs/EmacsInputConnection.java (syncAfterCommit) (extractAbsoluteOffsets): Add workarounds for several kinds of machines. (commitText, getExtractedText): Likewise. * src/textconv.c (really_commit_text): Improve definition of POSITION. (get_extracted_text): Default to providing at least 4 characters. 2023-05-05 Po Lu * exec/exec.h (struct exec_tracee): New field `new_child'. Also make `waiting_for_syscall' a bitfield. * exec/trace.c (PTRACE_GETEVENTMSG): New declaration. (MAX_TRACEES): Bump to 4096. (handle_clone_prepare): New function. (handle_clone): If required, set `new_child' and wait for a ptrace event describing the parent to arrive. (after_fork): Clear new field. (exec_waitpid): Upon a ptrace event describing a clone, create the child's tracee if it doesn't already exist. Otherwise, copy over the parent's cmdline and start running it. * doc/emacs/android.texi (Android Environment): Document lossage with SIGSTOP. * exec/exec.c (exec_0): Check X_OK on file being opened. Also handle /proc/self/exe. * exec/trace.c (SYS_SECCOMP): Define when not present. 2023-05-04 Po Lu * doc/emacs/android.texi (Android Environment): Describe how to turn off process killing. * exec/trace.c (check_signal): New function. (handle_exec, process_system_call): Handle signal-delivery-stop while waiting synchronously for syscall completion. 2023-05-03 Po Lu * exec/config.h.in: Update from new automatically generated headers. * exec/configure.ac: Check for siginfo_t.si_syscall. * exec/trace.c (exec_waitpid): If SIGSYS is received, and caused by seccomp, drop it should the call number be the invalid system call used by Emacs. * exec/configure.ac: Use system extensions. (HAVE_PROCESS_VM): Define if process_vm_readv and process_vm_writev are available. * exec/trace.c (read_memory, user_copy): Implement in terms of process_vm if possible. * exec/loader-mipsel.s (__start): Remove extraneous debugging code. * exec/Makefile.in: (.PHONY): Add `bootstrap-clean' and `extraclean'. (bootstrap-clean): New rule. * java/Makefile.in (FIND_DELETE): New substitution. (clean): Use FIND_DELETE. 2023-05-02 Po Lu * doc/emacs/android.texi (Android Environment): Improve doc. * exec/config.h.in (__bool_true_false_are_defined): * exec/configure.ac (REENTRANT): New definitions. (READLINKAT_SYSCALL, READLINK_SYSCALL): New defines. Set on all hosts. * exec/exec.c (MIN, MAX): Remove redundant declarations. Move to config.h. (exec_0): Copy name of executable into NAME when !REENTRANT. * exec/exec.h (struct exec_tracee): New struct `exec_file'. * exec/trace.c (remove_tracee, handle_exec, handle_readlinkat) (process_system_call, after_fork): Handle readlinkat system calls. * exec/Makefile.in (.SUFFIXES): Include ., then `srcdir'. * exec/loader-aarch64.s (_start): * exec/loader-armeabi.s (_start): * exec/loader-mips64el.s (__start): * exec/loader-mipsel.s (__start): * exec/loader-x86.s (_start): * exec/loader-x86_64.s (_start): Get basename of opened exec file and make it the command name. Fix envp skipping on x86 and various leaks. * exec/configure.ac: Check for declarations of stpcpy and stpncpy. * exec/exec.c (stpcpy, stpncpy): Use replacements if declarations are not present; this happens when a new Android NDK is building for an old version of Android. 2023-05-01 Po Lu * exec/config.h.in: Update config.h.in. * exec/configure.ac: Check for stpcpy and stpncpy. * exec/exec.c (rpl_stpcpy, rpl_stpncpy): Define replacements when they are not present on the system. (process_program_header): Fill comment. * src/term.c (syms_of_term): Pretend Android uses TERMINFO. * exec/exec.c (format_pid): New function. (exec_0): Make cwd relative file names relative to /proc/pid/cwd. * exec/trace.c (handle_exec): Handle EINTR. (process_system_call): Report failure without clobbering x0. * README: Describe `exec' directory. * lisp/subr.el (use-dialog-box-p): Always prefer dialog boxes. * src/android.c (android_write_event, JNICALL): Raise SIGIO on key press and window action events. * exec/trace.c (process_system_call): Save and restore x0, x1 and x2 regs after replacing them with an invalid file descriptor. * Makefile.in (extraclean): Clean in exec as well. * configure.ac: Fix detection of absolute srcdir. Also, pass CFLAGS. * exec/Makefile.in: (.c.o): Add -I. so config.h can be found. (.s.o): Don't create m4 temporary in srcdir. * exec/config-mips.m4.in (DADDI2, DADDI3): New macros. Define to substitute if as cannot assemble daddi. * exec/configure.ac (user_h): Look for user.h in asm/ as well. Use new user.h. Also look in ptrace.h on arm systems. Check if as supports daddi on mips64. * exec/exec.c (check_interpreter): Fix char signedness bug. * exec/loader-mips64el.s (__start): Use DADDI2 and DADDI3 for two- and 3-operand daddi. * exec/mipsel-user.h: Don't include sgidefs.h. * java/INSTALL: Document that m4 is now required. * src/android.c (android_rewrite_spawn_argv): Add missing NULL. * doc/emacs/android.texi (Android Environment): Document `android-use-exec-loader'. * exec/exec1.c (main): Set program group of child process. * src/android.c (android_rewrite_spawn_argv): New function. * src/android.h: Update prototypes. * src/androidfns.c (syms_of_androidfns): New variable `android_use_exec_loader'. * src/callproc.c (emacs_spawn): Rewrite the argument vector to use exec1 if necessary. * .gitignore: Add exec/configure. 2023-04-30 Po Lu * .gitignore: New files. * Makefile.in (mostlyclean_dirs): Add libexec, if its Makefile exists. * autogen.sh (do_git): Autoreconf in exec as well. * configure.ac: Configure libexec on Android. * exec/Makefile.in: * exec/README: * exec/config-mips.m4.in: * exec/config.guess: * exec/config.h.in: * exec/config.sub: * exec/configure: * exec/configure.ac: * exec/deps.mk: * exec/exec.c (MIN, struct exec_open_command) (struct exec_map_command, struct exec_jump_command) (write_open_command, write_load_command, process_interpreter_1) (process_interpreter, process_program_header, insert_args) (exec_0): * exec/exec.h (_EXEC_H_, struct elf_header_32) (struct program_header_32, struct dt_entry_32) (struct elf_header_64, struct program_header_64) (struct dt_entry_64, struct exec_tracee): * exec/exec1.c (main): * exec/install-sh (scriptversion): * exec/loader-aarch64.s (_start): * exec/loader-armeabi.s (_start): * exec/loader-mips64el.s (__start): * exec/loader-mipsel.s (__start): * exec/loader-x86.s (_start): * exec/loader-x86_64.s (_start): * exec/mipsel-user.h (_MIPSEL_USER_H_): * exec/mipsfpu.c (MIPS_ABI_FP_ANY, fpu_reqs, valid_abi_p) (fp_mode_for_abi, cpu_supports_fr0_p, determine_fpu_mode): * exec/mipsfpu.h (_MIPSFPU_H_, FP_FR0): * exec/test.c (print_usage, main): * exec/trace.c (MAX_TRACEES, aarch64_set_regs, read_memory) (user_alloca, user_copy, remove_tracee, handle_clone) (syscall_trap_p, handle_exec, process_system_call, tracing_execve) (after_fork, find_tracee, exec_waitpid, exec_init): New files. * java/Makefile.in (CROSS_EXEC_BINS): Add exec1 and loader. ($(CROSS_EXEC_BINS) &): New target. 2023-04-29 Po Lu * build-aux/ndk-build-helper.mk (TARGET_ARCH): Define variable. * configure.ac (ENABLE_CHECKING, CHECK_STRUCTS) (GC_CHECK_STRING_OVERRUN, GC_CHECK_STRING_FREE_LIST, GLYPH_DEBUG) (GC_CHECK_STRING_BYTES): Enable checking correctly on Android. * java/README: Fix typos. * m4/ndk-build.m4 (ndk_run_test): Pass target arch. * src/android.c (android_get_content_name, android_close) (android_fclose, android_check_string): Fix various typos caught by checking. * src/charset.c (load_charset_map_from_file): Call emacs_fclose, not fclose. * src/image.c (image_set_transform): Fix thinko. (png_load_body, jpeg_load_body, gif_load): Call emacs_fclose, not fclose. Use open instead of fdopen. * src/xfaces.c (Fx_load_color_file): Likewise. 2023-04-27 Po Lu * src/image.c (image_create_bitmap_from_data): Fix typo in preprocessor conditionals. * doc/emacs/android.texi (Android File System, Android Windowing): Make Emacs manual more portable. * doc/lispref/commands.texi (Misc Events): * doc/lispref/frames.texi (Accessing Selections, X Selections): Fix pieces of the Info manual. 2023-04-26 Po Lu * lisp/play/doctor.el (text-conversion-style, doctor-mode): * lisp/play/dunnet.el (text-conversion-style, dun-mode): Set `text-conversion-style' to `action'. 2023-04-13 Po Lu * doc/emacs/android.texi (Android Fonts): Update documentation. * doc/lispref/frames.texi (Accessing Selections, X Selections): Fix typos. * src/sfntfont-android.c (system_font_directories) (init_sfntfont_android): Add `/product/fonts'. 2023-04-08 Po Lu * doc/lispref/elisp.texi (Top): * doc/lispref/frames.texi (Frames): Add ``Accessing Selections'' to menu. (Accessing Selections, X Selections, Other Selections): New nodes. 2023-04-06 Po Lu * doc/emacs/android.texi (Android Windowing): Update selection restrictions. * java/org/gnu/emacs/EmacsClipboard.java (EmacsClipboard): New functions `getClipboardTargets' and `getClipboardData'. * java/org/gnu/emacs/EmacsSdk11Clipboard.java (EmacsSdk11Clipboard, getClipboardTargets, getClipboardData): Implement these virtual functions defined in EmacsClipboard. * java/org/gnu/emacs/EmacsSdk8Clipboard.java: Stub out new functions. * lisp/term/android-win.el (android-get-clipboard-1): Implement MIME type targets. * src/android.c (android_exception_check) (android_exception_check_1, android_exception_check_2): Fix punctuation in warning message. (android_exception_check_nonnull_1): New function. * src/android.h: Update prototypes. * src/androidselect.c (struct android_emacs_clipboard): New methods. (android_init_emacs_clipboard): Initialize new methods. (Fandroid_get_clipboard_targets, android_xfree_inside) (Fandroid_get_clipboard_data): New functions. (syms_of_androidselect): Define new subrs. 2023-04-04 Po Lu * lisp/subr.el (read-char-from-minibuffer): Don't use undefined variable. Reported by Robert Pluim. 2023-04-03 Po Lu * src/sfnt.c (sfnt_normalize_vector): Don't rely on undefined sign extension semantics. 2023-03-30 Po Lu * src/sfntfont.c: Adjust font cache size constants. * src/sfnt.c (GETINFO): Fix typo. * src/sfnt.h: Fix typo. * src/sfnt.c (sfnt_make_interpreter): New argument `fvar'. Set axis count. (SCANCTRL): Implement selector bit 8. (GXAXIS): New instruction. (SFVTPV): Validate graphics state after changing freedom vector. (sfnt_line_to_vector): Implement `original'. (sfnt_move): Remove redundant division. (sfnt_interpret_run): Implement distortable font related GXAXIS instruction (0x91). (sfnt_vary_interpreter): Set naxis and norm_coords. (sfnt_make_test_interpreter, pushb_test_args, pushw_test_args) (sfnt_name_instruction, main): Adjust accordingly. * src/sfnt.h (struct sfnt_interpreter): * src/sfntfont.c (sfntfont_setup_interpreter, sfntfont_open): Set up distortion information. 2023-03-29 Po Lu * doc/emacs/android.texi (Android Fonts): Document distortable font replacement rules. * src/sfntfont.c (sfnt_replace_fonts_p): New function. (sfnt_enum_font_1): Call it. * src/sfnt.c (sfnt_move_x, sfnt_move_y, sfnt_move): Set N flags and don't forget to set N points too. (sfnt_read_avar_table): Fix sequencing problem. * src/sfntfont.c (sfntfont_setup_interpreter): Don't create interpreter for blatantly broken fonts. (sfntfont_open): Avoid specifying redundant blends. * src/sfnt.c (sfnt_validate_gs): Fix validation of projection vector. 2023-03-28 Po Lu * src/sfnt.c (sfnt_vary_compound_glyph): * src/sfntfont.c (sfntfont_get_glyph) (sfntfont_get_glyph_outline): Avoid clobbering offset size flag when varying compound glyph. * src/sfnt.c (sfnt_vary_simple_glyph, sfnt_vary_compound_glyph): Fix application of intermediate tuples. * src/sfntfont.c (sfntfont_open): Set xlfd name after applying distortion. * src/sfnt.h (SFNT_ROUND_FIXED): * src/sfntfont.c (sfntfont_probe_widths): (sfntfont_measure_pcm): Round lbearing properly. (sfnt_open_tables): Fix typos in non-HarfBuzz code. * src/androidterm.c (android_draw_image_glyph_string): Restore potentially clobbered GC clipping. * src/sfnt.c (sfnt_large_integer_add, sfnt_multiply_divide_round) (sfnt_mul_fixed_round): New functions. (sfnt_build_glyph_outline): Take unscaled glyph metrics. (sfnt_prepare_raster, sfnt_vary_simple_glyph) (sfnt_vary_compound_glyph, sfnt_vary_interpreter): Use rounding multiplication to scale deltas. (main): Adjust tests. * src/sfntfont.c (sfntfont_get_glyph_outline) (sfntfont_probe_widths, sfntfont_open, sfntfont_measure_pcm) (sfntfont_draw): More minor fixes to variable fonts. 2023-03-27 Po Lu * src/sfnt.c (sfnt_normalize_blend): Don't crash when axis variations are not present. * configure.ac (HAVE_OTF_GET_VARIATION_GLYPHS): Check for `hb_font_set_var_named_instance'. * src/sfnt.c (main): Update tests. * src/sfntfont-android.c (Fandroid_enumerate_fonts): Blacklist bad font. * src/sfntfont.c (struct sfnt_font_tables, struct sfnt_font_desc) (sfnt_decode_instance_name, sfnt_weight_descriptions) (sfnt_enum_font_1, sfntfont_list_1, sfntfont_desc_to_entity) (sfntfont_list, struct sfntfont_get_glyph_outline_dcontext) (sfntfont_get_glyph, sfntfont_get_glyph_outline) (struct sfnt_font_info, sfnt_close_tables, sfnt_open_tables) (sfntfont_open, sfntfont_measure_pcm, sfntfont_close) (sfntfont_draw, sfntfont_begin_hb_font, syms_of_sfntfont) (mark_sfntfont): Handle variable fonts correctly. * src/sfnt.c (sfnt_build_glyph_outline): Take scale, not head and pixel size. (sfnt_scale_metrics_to_pixel_size): Delete function. (sfnt_get_scale): New function. (main): Update tests. * src/sfnt.h: Update prototypes. * src/sfntfont.c (struct sfnt_outline_cache) (sfntfont_get_glyph_outline, struct sfnt_font_info) (sfntfont_open): Save scale in font information and use it. (sfntfont_measure_instructed_pcm): Delete function. (sfntfont_measure_pcm): Make this the only ``measure pcm'' function. (sfntfont_draw): Rely on sfntfont_get_glyph_outline for the scale. (struct sfnt_font_tables): New structure. (struct sfnt_font_desc): New field `tables'. (struct sfnt_font_info): New field `desc'. (sfntfont_setup_interpreter): Drop fd arguments and don't try to load interpreter tables. (sfnt_open_tables, sfnt_close_tables): New functions. (sfnt_reference_font_tables, sfnt_dereference_font_tables): New functions. (sfntfont_open, sfntfont_close): Implement in terms of those functions in order to share tables. 2023-03-26 Po Lu * src/sfnt.c (sfnt_table_names): Add avar. (sfnt_read_glyph): Clear distortion fields. (sfnt_build_glyph_outline): Calculate the outline origin point. (sfnt_prepare_raster): Apply the origin point to the X axis offset. (sfnt_scale_metrics_to_pixel_size): New function. (sfnt_build_instructed_outline): Use instructed origin phantom point to determine the outline origin. (sfnt_compute_phantom_points): Apply origin and advance distortion. (struct sfnt_variation_axis, struct sfnt_instance) (struct sfnt_fvar_table, sfnt_read_fvar_table) (struct sfnt_gvar_table, sfnt_read_gvar_table) (sfnt_read_avar_table, struct sfnt_blend, sfnt_init_blend) (sfnt_free_blend, sfnt_normalize_blend, struct sfnt_tuple_header) (struct sfnt_gvar_glyph_header, sfnt_read_packed_deltas) (sfnt_compute_tuple_scale, sfnt_read_cvar_table) (sfnt_infer_deltas_1, sfnt_vary_simple_glyph, sfnt_infer_deltas) (sfnt_vary_glyph, sfnt_vary_compound_glyph) (sfnt_vary_interpreter): New functions. Add structs to sfntfont.h. (struct sfnt_test_dcontext, sfnt_test_get_glyph, main): Test distortable font handling. * src/sfnt.h (SFNT_ENABLE_HINTING, enum sfnt_table) (struct sfnt_glyph, struct sfnt_glyph_outline, struct sfnt_raster) (struct sfnt_default_uvs_table, struct sfnt_unicode_value_range) (struct sfnt_nondefault_uvs_table, struct sfnt_uvs_mapping) (struct sfnt_mapped_variation_selector_record) (struct sfnt_table_offset_rec, struct sfnt_uvs_context) (struct sfnt_mapped_table, struct sfnt_variation_axis) (struct sfnt_instance, struct sfnt_fvar_table) (struct sfnt_short_frac_correspondence) (struct sfnt_short_frac_segment, struct sfnt_avar_table) (struct sfnt_tuple_variation, struct sfnt_cvar_table) (struct sfnt_gvar_table, struct sfnt_blend) (struct sfnt_metrics_distortion): Update prototypes. * src/sfntfont.c (sfntfont_get_glyph_outline) (sfntfont_measure_pcm): Adjust calls. 2023-03-24 Po Lu * src/sfnt.c (sfnt_table_names): Add fvar, gvar, cvar. (sfnt_read_maxp_table): Call xmalloc, not malloc. (sfnt_read_simple_glyph): Avoid use-after-free if simple is invalid. (sfnt_fill_span): Fix max coverage. (sfnt_normalize_vector): Fail if magnitude is zero. (sfnt_measure_distance): Fix opcode order. (sfnt_dot_fix_14): Fix implementation. (struct sfnt_variation_axis, struct sfnt_instance) (struct sfnt_fvar_table, struct sfnt_gvar_table) (sfnt_read_fvar_table, sfnt_read_gvar_table, struct sfnt_blend) (sfnt_init_blend, sfnt_free_blend, sfnt_normalize_blend) (struct sfnt_tuple_header, struct sfnt_gvar_glyph_header) (sfnt_read_packed_points, sfnt_read_packed_deltas) (sfnt_compute_tuple_scale, sfnt_infer_deltas_1, sfnt_infer_deltas) (sfnt_vary_glyph): Add WIP variation glyph implementation. * src/sfnt.h (enum sfnt_table, struct sfnt_simple_glyph): Likewise. 2023-03-20 Po Lu * java/INSTALL: Fix typo. * configure.ac: Add support for HarfBuzz on Android. * java/INSTALL: Document where to get Emacs with HarfBuzz. * lisp/subr.el (overriding-text-conversion-style, y-or-n-p): Correctly set text conversion style if y-or-n-p is called inside the minibuffer. * src/sfnt.c (sfnt_read_cmap_format_8) (sfnt_read_cmap_format_12): Fix typos. (sfnt_read_24, sfnt_read_cmap_format_14): New function. (sfnt_read_cmap_table_1, sfnt_read_cmap_table): Handle format 14 cmap tables. (sfnt_read_default_uvs_table, sfnt_read_nondefault_uvs_table) (sfnt_compare_table_offsets, sfnt_create_uvs_context) (sfnt_free_uvs_context, sfnt_compare_uvs_mapping) (sfnt_variation_glyph_for_char, sfnt_map_table, sfnt_unmap_table) (sfnt_read_table, sfnt_test_uvs): New functions. (main): Add UVS tests. * src/sfnt.h (struct sfnt_cmap_format_14) (struct sfnt_variation_selector_record) (struct sfnt_default_uvs_table, struct sfnt_unicode_value_range) (struct sfnt_nondefault_uvs_table, struct sfnt_uvs_mapping) (struct sfnt_mapped_variation_selector_record) (struct sfnt_table_offset_rec, struct sfnt_uvs_context) (struct sfnt_mapped_table): New structures. Update prototypes. * src/sfntfont-android.c (android_sfntfont_driver): Register HarfBuzz callbacks where required. * src/sfntfont.c (sfntfont_select_cmap): Look for a format 14 table. Save it in new arg FORMAT14. (sfntfont_read_cmap): Adjust accordingly. (struct sfnt_font_info): New field `uvs'. New fields `hb_font', `fd' and `directory'. (sfntfont_open): Open uvs context. Under HarfBuzz, don't close the fd or subtable, but save them in the font info instead. (sfntfont_close): Free UVS context. Close font fd and table directory and HarfBuzz font. (sfntfont_draw): Handle case where s->padding_p. (sfntfont_get_variation_glyphs): New function. (sfntfont_unmap_blob, sfntfont_get_font_table) (sfntfont_begin_hb_font): New functions. * src/sfntfont.h: Update prototypes. * src/textconv.c (Fset_text_conversion_style): Fix doc string. 2023-03-18 Po Lu * java/org/gnu/emacs/EmacsView.java (onAttachedToWindow): Send measured width and height in exposures again. * src/androidterm.c (handle_one_android_event): Don't log expose events. * src/android.c (android_run_select_thread): New flag. Use it rather than the rc of pselect and errno to determine whether or not it has been interrupted. (android_handle_sigusr1): Set said flag. * java/org/gnu/emacs/EmacsView.java (prepareForLayout): New function. Call this prior to mapping the view. (onGlobalLayout): New function. Register as global layout listener. * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow) (notifyContentRectPosition): New function. Use specified xPosition and yPosition when reporting the offsets of children of the root window. * java/org/gnu/emacs/EmacsWindowAttachmentManager.java (registerWindow): Specify activity launch bounds if necessary. * src/androidterm.c (handle_one_android_event): Send MOVE_FRAME_EVENT where necessary. 2023-03-17 Po Lu * src/androidfns.c (Fx_server_vendor, Fx_server_version): New functions. (syms_of_androidfns): Define new functions. * src/androidterm.c (android_set_build_fingerprint) (syms_of_androidterm): Set new variable Vandroid_build_manufacturer. * src/xfns.c (Fx_server_vendor, Fx_server_version): Update doc strings. * src/fileio.c (emacs_fd_to_int): Don't define on WINDOWSNT. * src/image.c (image_create_bitmap_from_data): Don't abort if !defined HAVE_ANDROID. * configure.ac: * m4/ndk-build.m4 (ndk_INIT, ndk_LATE): Avoid AC_REQUIRE magic. * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): New field `lastGroupId'. (Item): New field `isRadio'. (addItem): New arg `isRadio'. (inflateMenuItems): Apply an empty radio button group if required. * src/androidmenu.c (android_init_emacs_context_menu): Adjust accordingly. (android_menu_show): Likewise. * java/org/gnu/emacs/EmacsView.java (cancelPopupMenu): Dismiss context menu correctly. (isOpaque): New function. * java/org/gnu/emacs/EmacsWindowAttachmentManager.java: Make consumer list public. * configure.ac: Add missing precious variable. 2023-03-16 Po Lu * lisp/frame.el (android-detect-mouse): * lisp/term/android-win.el (android-get-connection): Add function declarations. * configure.ac: Remove unnecessary escape. * configure.ac (AUTO_DEPEND, ANDROID_STUBIFY, ANDROID_LDFLAGS): * lib/Makefile.in (ANDROID_CFLAGS, ANDROID_BUILD_CFLAGS) (ALL_CFLAGS): * lib/gnulib.mk.in (AM_DEFAULT_VERBOSITY): * msdos/sed1v2.inp: * msdos/sedlibmk.inp: * src/Makefile.in (ANDROID_OBJ, EMACS_CFLAGS): Make those variables precious. Rename ANDROID_CFLAGS substitution to ANDROID_BUILD_CFLAGS. * nt/mingw-cfg.site: Suppress build of Gnulib printf. * java/org/gnu/emacs/EmacsDocumentsProvider.java (queryRoots): Add icon to document root. * lisp/loadup.el (current-load-list): Set to empty load list after startup. * src/lread.c (build_load_history): Revert earlier changes. 2023-03-15 Po Lu * configure.ac: Improve portability. 2023-03-15 Robert Pluim * src/fileio.c (Finsert_file_contents): * src/window.c (replace_buffer_in_windows): Call Fboundp, not boundp. 2023-03-15 Po Lu * cross/Makefile.in (lib/gnulib.mk): Edit out build-aux stuff. * m4/ndk-build.m4: Also look for cross ranlib. * src/sfntfont.c (sfntfont_close): Fix warning w/o mmap. * lib-src/asset-directory-tool.c (main_2): Port to systems without htole32. 2023-03-15 Po Lu * configure.ac (XCONFIGURE): Disable NS. * cross/Makefile.in (lib-src/config.h, lib/libgnu.a) (src/android-emacs): Port sed invocation to Mac OS without GNU sed. 2023-03-15 Po Lu * doc/lispref/commands.texi (Misc Events): Document variable `disable-inhibit-text-conversion'. * java/org/gnu/emacs/EmacsDialog.java (display1): Try an activity that is certain to be focused first. * lisp/touch-screen.el (touch-screen-track-tap) (touch-screen-track-drag): Bind `disable-inhibit-text-conversion'. * src/keyboard.c (read_key_sequence): Only disable text conversion if an actual function or numeric key is found in the key sequence. (syms_of_keyboard): New variable `disable-inhibit-text-conversion'. * src/lread.c (read_filtered_event): Check new variable. * src/textconv.c (textconv_query): Remove unused label. * nt/gnulib-cfg.mk: Omit new gnulib modules. 2023-03-14 Po Lu * lisp/minibuffer.el (minibuffer-setup-on-screen-keyboard): Handle cases where last-event-frame is a kbd macro. * src/keyboard.c (lispy_function_keys): Remove duplicates. * msdos/sed1v2.inp: * msdos/sed3v2.inp: * msdos/sedlibcf.inp: * msdos/sedlibmk.inp: Update for Android port and new Gnulib modules. * java/org/gnu/emacs/EmacsWindow.java (figureChange): Detect mice on up events as well. (onSomeKindOfMotionEvent): Work past framework bug. * src/androidterm.c (android_perform_conversion_query): * src/textconv.c (textconv_query): * src/textconv.h (TEXTCONV_SKIP_ACTIVE_REGION): Remove unused code. * doc/emacs/android.texi (Android Windowing): Document how to display dialogs when Emacs is in the background. * java/org/gnu/emacs/EmacsDialog.java (display1): Use system dialogs if possible. 2023-03-13 Po Lu * etc/NEWS: Announce new option. * lisp/menu-bar.el (menu-bar-close-window): New option. (kill-this-buffer, kill-this-buffer-enabled-p): Adjust accordingly. * src/keyboard.c (lispy_function_keys): Add more silly keys. * src/android.c (android_check_string, android_build_string): Reduce consing when building menu bar strings. * etc/MACHINES (Android): Update with more recent information. * doc/emacs/android.texi (Android Startup): Document changes to emacsclient wrapper. * java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity) (startEmacsClient): Open EmacsActivity if the service is not running. * java/org/gnu/emacs/EmacsService.java (onCreate): * java/org/gnu/emacs/EmacsThread.java (run): Pass any file to open to Emacs. * lisp/term/android-win.el (handle-args-function): Implement. * src/image.c (image_create_bitmap_from_file, image_find_image_fd) (close_android_fd, slurp_file): Return and use `struct android_fd_or_asset' on Android. (xbm_load, xpm_load, pbm_load, png_load_body, jpeg_load_body) (webp_load, svg_load): Adjust accordingly. 2023-03-12 Po Lu * src/android.c (android_get_screen_width) (android_get_screen_height, android_get_mm_width) (android_get_mm_height, android_detect_mouse): Correctly handle Java exceptions. * src/android.c (android_check_if_event): New function. * src/androidgui.h: Update prototypes. * src/androidterm.c (android_event_is_for_frame): New function. (android_reset_conversion): Free and unqueue all text conversion events for the given frame. * src/androidterm.c (NATIVE_NAME, JNICALL) (android_build_extracted_text, android_update_selection): Use 0-based indices for Android buffer positions. Also, report surrounding text relative to the region, not to the cursor. * src/textconv.c (textconv_query): Accept new values of position. (really_set_composing_text): Use ephemeral last point. * java/org/gnu/emacs/EmacsOpenActivity.java (onCancel): New function. (displayFailureDialog): Handle dialog cancellation. * src/sfntfont.c (sfnt_parse_languages): Look for SLNG tag if DLNG is not present. * src/androidgui.h (enum android_modifier_mask): New modifier ANDROID_SUPER_MASK. * src/androidterm.c (android_android_to_emacs_modifiers) (android_emacs_to_android_modifiers): Add new modifier. * src/androidterm.c (syms_of_androidterm): Initialize Vandroid_build_fingerprint in case GC happens. * src/emacs-module.c (module_reset_handlerlist): Fix macro conflict. * src/emacs-module.c (MODULE_HANDLE_NONLOCAL_EXIT) (module_make_global_ref, module_free_global_ref) (module_make_function, module_get_function_finalizer) (module_set_function_finalizer, module_make_interactive) (module_funcall, module_intern, module_type_of) (module_extract_integer, module_make_integer, module_extract_float) (module_make_float, module_copy_string_contents) (module_make_string, module_make_unibyte_string) (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr) (module_get_user_finalizer, module_set_user_finalizer) (module_vec_set, module_vec_get, module_vec_size) (module_process_input, module_extract_time, module_make_time) (module_extract_big_integer, module_make_big_integer) (module_open_channel, module_reset_handlerlist): Adjust as recommended by Paul Eggert . * configure.ac: Take option `--with-shared-user-id' and give it to AndroidManifest.xml.in. * java/AndroidManifest.xml.in: Substitute that into the application info. * java/INSTALL (BUILDING WITH A SHARED USER ID): New section. 2023-03-11 Po Lu * configure.ac (with_mailutils): Default to off on Android. (HAVE_MAILUTILS, with_mailutils, ANDROID_SDK_8_OR_EARLIER) (XCONFIGURE): Fix POP and mailutils configuration on Android. * java/Makefile.in: * src/callproc.c (syms_of_callproc): Avoid using built-in movemail when --with-mailutils. * src/android.c (android_resolve_handle) (android_resolve_handle2): Don't perform checking done by CheckJNI by default. (android_copy_area): Check for errors here because CopyArea can perform a lot of consing. (android_define_cursor): Remove redundant code. * java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed): Process submenu closing normally if it happens more than 300 ms after a submenu item was selected. * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu) (onMenuItemClick, display1): Give `wasSubmenuSelected' different values depending on how the submenu was selected. * lib/gnulib.mk.in: Update from gnulib. * configure.ac: Default modules to on. Remove check for __attribute__((cleanup)). However, keep the new `ifavailable' value for systems without dlopen. * src/emacs-module.c (MODULE_HANDLE_NONLOCAL_EXIT): Don't rely on cleanup attribute and correctly reset handlerlist upon longjmp. (MODULE_INTERNAL_CLEANUP): New macro. (module_make_global_ref, module_free_global_ref) (module_make_function, module_get_function_finalizer) (module_set_function_finalizer, module_make_interactive) (module_funcall, module_intern, module_type_of) (module_extract_integer, module_make_integer, module_extract_float) (module_make_float, module_copy_string_contents) (module_make_string, module_make_unibyte_string) (module_make_user_ptr, module_get_user_ptr, module_set_user_ptr) (module_get_user_finalizer, module_set_user_finalizer) (module_vec_set, module_vec_get, module_vec_size) (module_process_input, module_extract_time, module_make_time) (module_extract_big_integer, module_make_big_integer) (module_open_channel): Call MODULE_INTERNAL_CLEANUP prior to returning. * lisp/term/android-win.el (x-pointer-arrow, x-pointer-left-ptr) (x-pointer-left-side, x-pointer-sb-h-double-arrow) (x-pointer-sb-v-double-arrow, x-pointer-watch, x-pointer-xterm) (x-pointer-invisible): New constants. * src/androidterm.c (android_show_hourglass) (android_hide_hourglass): New functions. (android_toggle_visible_pointer, android_define_frame_cursor): Define or don't define hourglass cursor if x->hourglass. (android_redisplay_interface): Add new functions. * src/androidterm.h (struct android_output): New field `hourglass'. 2023-03-10 Po Lu * doc/emacs/android.texi (Android Windowing): Document how to pass multimedia keys to the system. * java/org/gnu/emacs/EmacsNative.java (shouldForwardMultimediaButtons): New function. * java/org/gnu/emacs/EmacsView.java (onKeyDown, onKeyMultiple) (onKeyUp): Check that function. * java/org/gnu/emacs/EmacsWindow.java (defineCursor): Handle cases where cursor is NULL. * src/android.c (NATIVE_NAME): New function. * src/androidfns.c (syms_of_androidfns): New variable. * src/keyboard.c (lispy_function_keys): Add volume keys. * java/org/gnu/emacs/EmacsCursor.java: New file. * java/org/gnu/emacs/EmacsWindow.java (defineCursor): New function. * src/android.c (struct android_emacs_cursor): New struct. (android_init_emacs_cursor): New function. (initEmacs): Call it. (android_create_font_cursor, android_define_cursor) (android_free_cursor): New functions. * src/android.h (enum android_handle_type): Add cursor handle type. * src/androidfns.c (Fx_create_frame, android_create_tip_frame) (enum mouse_cursor, struct mouse_cursor_types, mouse_cursor_types) (struct mouse_cursor_data, android_set_mouse_color) (syms_of_androidfns): * src/androidgui.h (enum android_cursor_shape): * src/androidterm.c (make_invisible_cursor) (android_toggle_invisible_pointer, android_free_frame_resources) (android_define_frame_cursor): * src/androidterm.h (struct android_display_info) (struct android_output): Port mouse cursor code over from X. * java/org/gnu/emacs/EmacsNative.java: Add missing dependency. * lisp/battery.el (battery-status-function): Don't look for /sys or /proc* on Android. Explain why. * java/org/gnu/emacs/EmacsService.java (queryBattery19): New function. (queryBattery): Call it on old systems. Also, return AC line status and temperature. * lisp/battery.el (battery-android): Implement more format directives. * src/android.c (android_query_battery): Handle new status fields. * src/android.h (struct android_battery_state): Add `plugged' and `temperature'. * src/androidfns.c (Fandroid_query_battery): Return new fields. 2023-03-09 Po Lu * src/android.c (android_destroy_handle): Handle OOM errors in android_destroy_handle. * textconv.c: Remove out-of-date comment. * java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed): * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu) (onMenuItemClick, run): * java/org/gnu/emacs/EmacsDialog.java (onClick, createDialog) (onDismiss): Take menu event serial, and pass it along in context menu events. * java/org/gnu/emacs/EmacsNative.java (sendContextMenu): New argument. * src/android.c (sendContextMenu): Pass serial number in event. * src/androidgui.h (struct android_menu_event): New field `menu_event_serial'. * src/androidmenu.c (android_init_emacs_dialog): Adjust method declarations. (android_menu_show, android_dialog_show): * src/androidterm.c (handle_one_android_event): Expect serial in context menu events. * src/androidterm.h: Update prototypes. * configure.ac (HAVE_WEBP): Disable WebPGetInfo check when REALLY_ANDROID. * java/debug.sh (is_root): Port to Android versions which don't support `chmod +x'. * src/android.c (android_content_name_p): Disable before API level 19. * java/org/gnu/emacs/EmacsContextMenu.java (addItem): New argument `tooltip'. * src/android.c (android_build_string): Convert the text to UTF-16, and create the Java string using that. (android_build_jstring): Update comment. * src/androidmenu.c (android_init_emacs_context_menu): Add String argument to `addItem'. (android_menu_show): Correctly pass help strings in regular menu items. * src/sfnt.c (_sfnt_swap16, _sfnt_swap32): Avoid reserved names. * src/android.c (android_set_input_focus): Don't call method on window using service class. * src/sfnt.c (ODD): Use PUSH_UNCHECKED. 2023-03-08 Po Lu * src/fileio.c (Fcopy_file): On Android, ignore ENOSYS and ENOTSUP when restoring file times, as many old kernel versions encountered on Android devices omit support for the relevant system calls. * src/androidterm.c (android_build_extracted_text): Return NULL if text class not initialized. (android_update_selection): Check that EXTRACTED is not NULL. * doc/emacs/android.texi (Android File System): Document what `temp~unlinked' means in the temporary files directory. * java/org/gnu/emacs/EmacsService.java (updateExtractedText): New function. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Ask the input method nicely to not display the extracted text UI. * src/android.c (struct android_emacs_service): New method `updateExtractedText'. (android_hack_asset_fd_fallback): Improve naming convention. Fix typo. (android_init_emacs_service): Add new method. (android_update_extracted_text): New function. (android_open_asset): Fix typo. * src/androidgui.h: Update prototypes. * src/androidterm.c (struct android_get_extracted_text_context): New field `flags'. (android_get_extracted_text): Set flags on the frame's output data. (android_build_extracted_text): New function. (getExtractedText): Move out class structures. (android_update_selection): Send updates to extracted text if the input method asked for them. (android_reset_conversion): Clear extracted text flags. * src/androidterm.h (struct android_output): New fields for storing extracted text data. * src/sfnt.c (sfnt_read_cmap_table): Don't allocate too big data. Also, free elements of (*data), not offsets into data itself. 2023-03-07 Po Lu * java/Makefile.in (install_temp/assets/build_info): New rule. (emacs.apk-in): Depend on that file. * lisp/version.el (android-read-build-system) (android-read-build-time): New functions. (emacs-build-system, emacs-build-time): Use those functions on Android, as dumping is done after installation on Android. * src/fileio.c (Finsert_file_contents): * src/window.c (replace_buffer_in_windows): Don't call functions if they are not defined, which can happen during loadup. * java/org/gnu/emacs/EmacsWindow.java (onSomeKindOfMotionEvent): Dismiss splurious LeaveNotify events from button presses. * src/android.c (android_change_window_attributes) (android_change_gc, android_set_clip_rectangles) (android_reparent_window, android_clear_window) (android_map_window, android_unmap_window, android_resize_window) (android_move_window, android_swap_buffers) (android_fill_rectangle, android_copy_area) (android_fill_polygon, android_draw_rectangle, android_draw_point) (android_draw_line, android_clear_area, android_bell) (android_set_input_focus, android_raise_window) (android_lower_window, android_set_dont_focus_on_map) (android_set_dont_accept_focus, android_get_keysym_name) (android_toggle_on_screen_keyboard, android_restart_emacs) (android_display_toast, android_update_ic, android_reset_ic) (android_set_fullscreen): Optimize by specifying the class explicitly when calling a method. * src/lread.c (lread_fd, file_tell, infile, skip_dyn_bytes) (skip_dyn_eof, readbyte_from_stdio, safe_to_load_version) (close_infile_unwind, close_file_unwind_android_fd): New function. (Fload, Flocate_file_internal, openp): New argument PLATFORM. All callers changed. (skip_lazy_string): Add optimized versions of various functions for accessing Android assets. 2023-03-06 Po Lu * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New function requestSelectionUpdate. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Call it instead of losing if getting the current selection fails. * src/android-asset.h (AAsset_seek): Define stub. * src/android.c (android_open): Take mode_t MODE instead of int. (android_open_asset, android_close_asset, android_asset_read_quit) (android_asset_read, android_asset_lseek, android_asset_fstat): New functions. * src/android.h (struct android_fd_or_asset): Update prototypes. * src/androidgui.h (enum android_ime_operation): Add new operation to update the selection position. * src/androidterm.c (android_handle_ime_event): Handle new operation. (requestSelectionUpdate): New function. * src/fileio.c (close_file_unwind_emacs_fd): New function. (Fcopy_file, union read_non_regular, read_non_regular) (Finsert_file_contents): Use optimized codepath to insert Android asset files. * src/frame.h (enum text_conversion_operation): New operation. * src/textconv.c (really_request_point_update) (handle_pending_conversion_events_1, request_point_update): New functions. * src/textconv.h: Update prototypes. * src/conf_post.h: Avoid macro redeclaration. * java/org/gnu/emacs/EmacsService.java (sync): Delete function. * java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap): Erase with window background. (onDetachedFromWindow): Only recycle bitmap if non-NULL. * java/org/gnu/emacs/EmacsWindow.java (background): New field. (changeWindowBackground): Set it. * src/android.c (struct android_emacs_service): Remove `sync'. (android_init_emacs_service): Likewise. (android_sync): Delete function. * src/androidfns.c (android_create_tip_frame): Set frame background color correctly. (Fx_show_tip): Make the tip frame visible. * src/androidgui.h: Update prototypes. * src/androidterm.c (handle_one_android_event): Handle tooltip movement correctly. 2023-03-05 Po Lu * java/org/gnu/emacs/EmacsActivity.java (onCreate): * java/org/gnu/emacs/EmacsContextMenu.java: * java/org/gnu/emacs/EmacsDocumentsProvider.java (getMimeType): * java/org/gnu/emacs/EmacsDrawLine.java (perform): * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): * java/org/gnu/emacs/EmacsFillPolygon.java: * java/org/gnu/emacs/EmacsFontDriver.java: * java/org/gnu/emacs/EmacsHandleObject.java: * java/org/gnu/emacs/EmacsInputConnection.java: * java/org/gnu/emacs/EmacsMultitaskActivity.java: * java/org/gnu/emacs/EmacsNative.java: * java/org/gnu/emacs/EmacsNoninteractive.java (main): * java/org/gnu/emacs/EmacsOpenActivity.java (startEmacsClient): * java/org/gnu/emacs/EmacsSdk7FontDriver.java: * java/org/gnu/emacs/EmacsSdk8Clipboard.java: * java/org/gnu/emacs/EmacsService.java (onCreate): * java/org/gnu/emacs/EmacsView.java (onLayout): * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): * java/org/gnu/emacs/EmacsWindowAttachmentManager.java: Remove redundant includes. Reorganize some functions, remove duplicate `getLibDir' functions, and remove unused local variables. * java/org/gnu/emacs/EmacsOpenActivity.java (onCreate): Don't set the style here. * java/res/values-v11/style.xml: * java/res/values-v14/style.xml: * java/res/values-v29/style.xml: * java/res/values/style.xml: Define styles for the emacsclient wrapper. * src/keyboard.c (read_key_sequence): Don't disable text conversion if use_mouse_menu or if a menu bar prefix key is being displayed. * etc/PROBLEMS: Document problem with default monospace font. * src/fileio.c (check_mutable_filename): Check if the file is a constituent of /content as well. (Fcopy_file, Fdelete_directory_internal, Fdelete_file) (Frename_file, Fadd_name_to_file, Fmake_symbolic_link) (Fset_file_modes, Fset_file_times, Ffile_newer_than_file_p) (write_region): Adjust accordingly. (Fset_visited_file_modtime): Remove unnecessary restriction. * src/filelock.c (make_lock_file_name): Don't interlock files under /assets and /content. * src/inotify.c (Finotify_add_watch): Fix typo. * cross/Makefile.in (config.status): Depend on top_builddir/config.status instead. * configure.ac: Fix another typo. * cross/Makefile.in (builddir): Define. * cross/README: Update. * cross/lib: Delete. Make configure generate it instead. * .gitignore: Simplify cross/lib rule. * admin/merge-gnulib (avoided_flags): Stop copying to cross/lib. * configure.ac: Link gnulib source and header files to cross/lib. * cross/Makefile.in (LIB_SRCDIR): Make relative to builddir. (maintainer-clean): Merge with distclean. Remove links created by configure. 2023-03-04 Po Lu * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: Specify right ELF format for 64 bit executables. * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: Ensure nasm generates ELF objects. * src/sfnt.c (sfnt_fill_span): Specifically handle spans that span a single pixel by computing the coverage in the center. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): New field `lastClosedMenu'. (onContextMenuClosed): Don't send event if a menu is closed twice in a row. Also, clear wasSubmenuSelected immediately. * java/org/gnu/emacs/EmacsContextMenu.java: Display submenus manually in Android 6.0 and earlier. * java/org/gnu/emacs/EmacsView.java (onCreateContextMenu) (popupMenu): Adjust accordingly. * configure.ac: Check for __ctype_get_mb_cur_max. Then see if MB_CUR_MAX is defined to it, and define REPLACEMENT_MB_CUR_MAX if so and it does not link. * java/INSTALL: Update documentation. * src/conf_post.h (MB_CUR_MAX): Define replacement if necessary. * m4/ndk-build.m4 (ndk_INIT): Fix typo. * configure.ac: Call ndk_LATE after gl_EARLY. * cross/ndk-build/Makefile.in (NDK_BUILD_CXX): New variable. * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: Use it. * java/INSTALL: Describe how to build C++ dependencies. * m4/ndk-build.m4 (ndk_LATE): New macro. (ndk_INIT): Try to find a suitable C++ compiler. (ndk_CHECK_MODULES): Make sure the C++ compiler works before allowing C++ dependencies. * cross/ndk-build/Makefile.in (NDK_BUILD_CFLAGS_CXX): New variable. * cross/ndk-build/ndk-build-shared-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))): * cross/ndk-build/ndk-build-static-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))): Use it to build C++ code. 2023-03-03 Po Lu * configure.ac (ANDROID_SDK_8_OR_EARLIER): Pass through `--with-ndk-cxx-shared'. * m4/ndk-build.m4 (ndk_INIT): Fix quoting of $CC. * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: Include ndk-resolve.mk in srcdir. * cross/ndk-build/README: Update accordingly. * build-aux/ndk-build-helper.mk: Define in terms of BUILD_AUXDIR. * m4/ndk-build.m4 (ndk_INIT): Find right build-aux directory. Remove uses of unportable shell constructs. * java/org/gnu/emacs/EmacsService.java (checkContentUri): Improve debug output. * lisp/files.el (basic-save-buffer): Check whether or not file itself exists before checking for the existence of the directory containing it. * src/android.c (android_open): Don't forget to set errno after open_content_uri fails. * java/org/gnu/emacs/EmacsActivity.java (onCreate): Add view tree observer. (onGlobalLayout): Sync fullscreen state. (syncFullscreenWith): Improve visibility flag setting. * src/textconv.c (select_window): New function. (textconv_query, restore_selected_window, really_commit_text) (really_set_composing_text, really_set_composing_region) (really_delete_surrounding_text, really_set_point_and_mark) (get_extracted_text): Call it instead of Fselect_window to avoid selecting the mini window if it is no longer active. 2023-03-02 Po Lu * doc/emacs/input.texi (On-Screen Keyboards): Fix indexing. * INSTALL: Document where to find Android installation instructions. * configure.ac (CHECK_LISP_OBJECT_TYPE): Pacify -Wsuggest-attribute=noreturn only on Android. * cross/ndk-build/README: New file. * doc/emacs/android.texi (Android): * doc/emacs/emacs.texi (Top): * doc/emacs/input.texi (Other Input Devices): Untabify menus. * etc/NEWS: Move INSTALL.android to java/INSTALL. * java/INSTALL: New file. * java/README: * src/coding.c (from_unicode_buffer): Make Android specific code only build on Android. * INSTALL.android: Remove file. * configure.ac: Make cross/* and related directories. * cross/Makefile.in (src/verbose.mk, lib/libgnu.a) (src/config.h): Stop making directories here. (lib-src/config.h): New config.h rule. ($(LIBSRC_BINARIES)): Add it. (clean): Don't remove CLEAN_SUBDIRS, but clean inside. * src/android.c (android_alloc_id): Return correct values upon wraparound. * java/Makefile.in ($(CLASS_FILES) &): Touch all class files, even those the Java compiler elected not to rebuild. * java/org/gnu/emacs/EmacsActivity.java (onWindowFocusChanged): Restore fullscreen state here. (onResume): And not here. * doc/emacs/android.texi (Android): * doc/emacs/emacs.texi (Top, GNU Free Documentation License): Rearrange menu and sectioning. * doc/emacs/android.texi (Android Windowing): Reword documentation. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): * java/org/gnu/emacs/EmacsFontDriver.java (EmacsFontDriver): * java/org/gnu/emacs/EmacsSdk7FontDriver.java (EmacsSdk7FontDriver): * java/org/gnu/emacs/EmacsService.java (queryBattery): * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): Make functions final and classes static where possible. This subsequently brings a small speed-up as the JVM can optimize vtable dispatch away at run-time. * src/android.c (struct android_emacs_service): New method `display_toast'. (android_init_emacs_service): Load new method. (android_display_toast): New function. * src/android.h (android_display_toast): Export that new function. * src/androidfns.c (Fandroid_detect_mouse): * src/androidselect.c (Fandroid_clipboard_owner_p) (Fandroid_set_clipboard, Fandroid_get_clipboard) (Fandroid_browse_url): Prevent crashes when called from libandroid-emacs.so, where the Emacs service object is not present. * src/androidterm.c (handle_one_android_event): Fix out of date commentary. 2023-03-01 Po Lu * configure.ac (JAVA_PUSH_LINT): Push to WARN_JAVAFLAGS instead of JAVAFLAGS. (cross/lib): Always AS_MKDIR_P. * cross/Makefile.in (srcdir): New variable. (LIB_SRCDIR): Take realpath relative to srcdir, not. (src/verbose.mk): Depend on verbose.mk.android in srcdir. (lib/Makefile): Edit srcdir and VPATH to LIB_SRCDIR. (src/Makefile): Edit -I$$(top_srcdir) to -I../$(srcdir)/lib, instead of omitting it. (clean): Allow ndk-build clean to fail. * java/Makefile.in (builddir): New variable. (WARN_JAVAFLAGS): Likewise. (JAVAFLAGS): Define in terms of WARN_JAVAFLAGS. (SIGN_EMACS, SIGN_EMACS_V2): Use emacs.keystore relative to srcdir. Allow inclusion of ndk-build.mk to fail. (install_temp, emacs.apk-in) (../config.status): Depend relative to top_srcdir. (AndroidManifest.xml, $(APK_NAME)): Likewise. (RESOURCE_FILE, CLASS_FILES, classes.dex): Output class files to $(srcdir); these are arch independents, so this is okay. 2023-03-01 Po Lu * cross/Makefile.in: Remove outdated comment. * src/Makefile.in (.PHONY): Clean android-emacs and libemacs.so, not emacs.so and aemacs. * doc/emacs/android.texi (Android File System): Document new behavior of starting a subprocess from /assets. * java/org/gnu/emacs/EmacsWindow.java (onSomeKindOfMotionEvent): Don't use isFromSource where not present. * src/androidterm.c (android_scroll_run): Avoid undefined behavior writing to bitfields. * src/callproc.c (get_current_directory): When trying to run a subprocess inside /assets, run it from the home directory instead. * java/AndroidManifest.xml.in: Specify @style/EmacsStyle. * java/org/gnu/emacs/EmacsActivity.java (onCreate): Stop setting the theme here. * java/res/values-v11/style.xml: * java/res/values-v14/style.xml: * java/res/values-v29/style.xml: * java/res/values/style.xml: Extract style resources into res/values. * java/Makefile.in (ETAGS, clean): New rules to generate tags. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): * java/org/gnu/emacs/EmacsApplication.java (EmacsApplication): * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): * java/org/gnu/emacs/EmacsCopyArea.java (EmacsCopyArea): * java/org/gnu/emacs/EmacsDialog.java (EmacsDialog): * java/org/gnu/emacs/EmacsDocumentsProvider.java (EmacsDocumentsProvider): * java/org/gnu/emacs/EmacsDrawLine.java (EmacsDrawLine): * java/org/gnu/emacs/EmacsDrawPoint.java (EmacsDrawPoint): * java/org/gnu/emacs/EmacsDrawRectangle.java (EmacsDrawRectangle): * java/org/gnu/emacs/EmacsFillPolygon.java (EmacsFillPolygon): * java/org/gnu/emacs/EmacsFillRectangle.java (EmacsFillRectangle): * java/org/gnu/emacs/EmacsGC.java (EmacsGC): * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection): * java/org/gnu/emacs/EmacsNative.java (EmacsNative): * java/org/gnu/emacs/EmacsNoninteractive.java (EmacsNoninteractive): * java/org/gnu/emacs/EmacsOpenActivity.java (EmacsOpenActivity): * java/org/gnu/emacs/EmacsPixmap.java (EmacsPixmap): * java/org/gnu/emacs/EmacsPreferencesActivity.java (EmacsPreferencesActivity): * java/org/gnu/emacs/EmacsSdk11Clipboard.java (EmacsSdk11Clipboard): * java/org/gnu/emacs/EmacsSdk23FontDriver.java (EmacsSdk23FontDriver): * java/org/gnu/emacs/EmacsSdk8Clipboard.java (EmacsSdk8Clipboard): * java/org/gnu/emacs/EmacsService.java (EmacsService): * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): * java/org/gnu/emacs/EmacsView.java (EmacsView): * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): * java/org/gnu/emacs/EmacsWindowAttachmentManager.java (EmacsWindowAttachmentManager): Make classes final where appropriate. The Java virtual machine is capable of removing vtable dispatch when a virtual function call is being performed on an instance of a final class. * src/android.c (android_query_tree, android_get_geometry) (android_translate_coordinates, android_query_battery): Correctly verify the results of calls to JNI GetArrayElements functions. (android_exception_check_nonnull): New function. * src/androidselect.c (Fandroid_get_clipboard): Also check the return values of calls to JNI array extraction functions. 2023-02-28 Po Lu * src/sfnt.c (main): * src/sfntfont.c (sfntfont_get_glyph_outline): Remove outdated commentary. 2023-02-26 Po Lu * 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 wasteful. * cross/lib/unistd.in.h: * lib/gnulib.mk.in: * m4/gnulib-comp.m4: Update from gnulib. * doc/lispref/commands.texi (Misc Events): Update documentation. * java/org/gnu/emacs/EmacsService.java (onStartCommand): Improve notification message. * src/android.c (android_hack_asset_fd): Detect if ashmem is available dynamically. (android_detect_ashmem): New function. * src/textconv.c (record_buffer_change): Use markers to represent BEG and END instead. (syms_of_textconv): Update doc string. 2023-02-25 Po Lu * java/debug.sh (is_root): Fix tee detection again for old systems which don't return exit codes from adb shell. * src/android.c (android_run_select_thread, initEmacs): * src/android.h: * src/androidterm.c: Apply stack alignment to all JNICALL functions. * src/android.c (android_open): Clean up unused variables. * java/org/gnu/emacs/EmacsNoninteractive.java (main): Port to Android 2.2. * src/android-asset.h (AAsset_openFileDescriptor): Delete stub function. * src/android.c (android_check_compressed_file): Delete function. (android_open): Stop trying to find compressed files or to use the system provided file descriptor. Explain why. * doc/emacs/android.texi (Android Startup, Android File System) (Android Environment, Android Windowing, Android Troubleshooting): Improve documentation; fix typos. * doc/lispref/commands.texi (Misc Events): Likewise. * java/org/gnu/emacs/EmacsService.java (queryBattery): New function. * lisp/battery.el (battery-status-function): Set appropriately for Android. (battery-android): New function. * src/android.c (struct android_emacs_service): New method `query_battery'. (android_check_content_access): Improve exception checking. (android_init_emacs_service): Look up new method. (android_destroy_handle, android_create_window) (android_init_android_rect_class, android_init_emacs_gc_class) (android_set_clip_rectangles) (android_create_pixmap_from_bitmap_data, android_fill_polygon) (android_get_image, android_put_image, android_bell) (android_set_input_focus, android_raise_window) (android_lower_window, android_query_tree, android_get_geometry) (android_translate_coordinates, android_wc_lookup_string) (android_damage_window, android_build_string) (android_build_jstring, android_exception_check_1) (android_exception_check_2): New functions. (android_browse_url): Improve exception handling. Always use android_exception_check and don't leak local refs. (android_query_battery): New function. * src/android.h (struct android_battery_state): New struct. * src/androidfns.c (Fandroid_query_battery, syms_of_androidfns): New functions. * src/androidfont.c (androidfont_from_lisp, DO_SYMBOL_FIELD) (DO_CARDINAL_FIELD, androidfont_list, androidfont_match) (androidfont_draw, androidfont_open_font) (androidfont_close_font): * src/androidselect.c (Fandroid_set_clipboard) (Fandroid_get_clipboard): * src/sfnt.c (sfnt_map_glyf_table): * src/sfntfont.c (sfntfont_free_outline_cache) (sfntfont_free_raster_cache, sfntfont_close): Allow calling font close functions twice. 2023-02-24 Po Lu * configure.ac (JAVA_PUSH_LINT): New macro. (JAVAFLAGS): New variable. Check for various lint flags and macros and enable them. * java/Makefile.in (ANDROID_ABI): * java/org/gnu/emacs/EmacsSdk7FontDriver.java: Remove compiler warning. * lisp/frame.el (display-symbol-keys-p): * lisp/simple.el (normal-erase-is-backspace-setup-frame): Return appropriate values on Android. * src/inotify.c (Finotify_add_watch): Handle asset files by returning nil. * src/keyboard.c (lispy_function_keys): Add missing delete key. 2023-02-23 Po Lu * lisp/loadup.el: Update commentary. * src/androidterm.c (syms_of_androidterm): Define Vx_toolkit_scroll_bars. * src/xterm.c (syms_of_xterm): Update doc string. * INSTALL.android: * build-aux/ndk-build-helper-1.mk: (NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES) (NDK_CXX_FLAG_$(LOCAL_MODULE)): * build-aux/ndk-build-helper-2.mk: (NDK_$(LOCAL_MODULE)_STATIC_LIBRARIES) (NDK_CXX_FLAG_$(LOCAL_MODULE)): * cross/ndk-build/ndk-build-shared-library.mk (objname) ($(call objname,$(LOCAL_MODULE),$(basename $(1)))) (ALL_OBJECT_FILES$(LOCAL_MODULE)): * cross/ndk-build/ndk-build-static-library.mk (objname) ($(call objname,$(LOCAL_MODULE),$(basename $(1)))) (ALL_OBJECT_FILES$(LOCAL_MODULE)): (ALL_SOURCE_FILES): Update ImageMagick build instructions and C++ module detection. * src/android.c (android_run_select_thread): Fix typos. (android_run_select_thread): Lock select_mutex before signaling condition variable. (android_select): Unlock event queue mutex prior to waiting for it. 2023-02-22 Po Lu * cross/ndk-build/ndk-build-shared-library.mk: Fix typo. * src/image.c (imagemagick_load_image): Check HAVE_DECL_xxx. * INSTALL.android: Document ImageMagick and caveats. * build-aux/ndk-build-helper-1.mk (NDK_SO_NAMES): * build-aux/ndk-build-helper-2.mk (NDK_A_NAMES): * build-aux/ndk-build-helper.mk (TARGET_ARCH_ABI): Define architecture and don't respect explicitly specified library names. * configure.ac: Enable ImageMagick and lcms2 on Android. * cross/ndk-build/ndk-build-shared-library.mk (objname) ($(call objname,$(LOCAL_MODULE),$(basename $(1)))) (ALL_OBJECT_FILES$(LOCAL_MODULE)): * cross/ndk-build/ndk-build-static-library.mk (objname) ($(call objname,$(LOCAL_MODULE),$(basename $(1)))) (NDK_CFLAGS, ALL_SOURCE_FILES): Handle source files whose names begin with $(LOCAL_PATH). * cross/ndk-build/ndk-clear-vars.mk: Don't undefine; clear variables instead. * m4/ndk-build.m4 (ndk_SEARCH_MODULE): Redirect make stderr to config.log. * src/androidmenu.c (android_menu_show): Fix typo. * doc/emacs/input.texi (On-Screen Keyboards): Document changes to text conversion. * java/org/gnu/emacs/EmacsInputConnection.java (getExtractedText): * src/keyboard.c (read_key_sequence): Disable text conversion after reading prefix key. * src/textconv.c (get_extracted_text): Fix returned value when request length is zero. * configure.ac: Per title. * INSTALL.android: Port to MIPS. * configure.ac (modules): Default to ifavailable. Write actual test for __attribute__((cleanup)). * m4/ndk-build.m4: Recognize mips and mips64. * src/emacs-module.c: Remove broken HAS_ATTRIBUTE test. 2023-02-21 Po Lu * java/org/gnu/emacs/EmacsContextMenu.java (addSubmenu) (inflateMenuItems): Handle tooltips correctly. * src/android.c (android_scan_directory_tree): Fix limit generation for root directory. * src/androidmenu.c (android_init_emacs_context_menu) (android_menu_show): Implement menu item help text on Android 8.0 and later. * admin/merge-gnulib (GNULIB_MODULES): Add gnulib module stpncpy. * m4, lib: Update from Gnulib. * src/android.c: Include string.h. * doc/emacs/android.texi (Android Startup): Document `content' special directory. * java/debug.sh (is_root): Improve /bin/tee detection. * java/org/gnu/emacs/EmacsNative.java (dup): New function. * java/org/gnu/emacs/EmacsOpenActivity.java (checkReadableOrCopy) (onCreate): Create content directory names when the file is not readable. * java/org/gnu/emacs/EmacsService.java (openContentUri) (checkContentUri): New functions. * src/android.c (struct android_emacs_service): New methods. (android_content_name_p, android_get_content_name) (android_check_content_access): New function. (android_fstatat, android_open): Implement opening content URIs. (dup): Export to Java. (android_init_emacs_service): Initialize new methods. (android_faccessat): Implement content file names. 2023-02-20 Po Lu * INSTALL.android: Explain where to get tree-sitter. * configure.ac: Add support for dynamic modules and tree-sitter. * doc/emacs/android.texi (Android Windowing): * java/org/gnu/emacs/EmacsSdk11Clipboard.java (ownsClipboard): Enhance the treatment of the clipboard and the documentation addressing that subject. 2023-02-20 Po Lu * src/androidfont.c (androidfont_list_family): Don't unconditionally initialize the Android font driver. * src/fontset.c (fontset_find_font): Add compatibility test to registry strangeness case. * src/sfnt.c (sfnt_read_cmap_table): Don't read subtable data if DATA is NULL. * src/sfntfont.c (struct sfnt_font_desc): New field `registry'. (sfnt_registry_for_subtable): New function. (sfntfont_identify_cmap): Move above sfnt_grok_registry. (sfnt_grok_registry): New function. (sfnt_enum_font_1): Call it. (sfntfont_registries_compatible_p): New function. (sfntfont_list_1): Check registry compatibility. (sfntfont_registry_for_desc): New function. (mark_sfntfont): Mark desc->registry. * java/Makefile.in ($(CLASS_FILES)): Depend on the Java compiler's internal dependency tracking. * src/fontset.c (fontset_find_font): Work around TrueType performance problem. * cross/Makefile.in (src/libemacs.so): Depend on libgnu.a. * cross/ndk-build/ndk-build.mk.in (NDK_BUILD_MODULES) (NDK_BUILD_SHARED, NDK_BUILD_STATIC): Define group rule to build all files so that they are built within one make process. * java/Makefile.in: Reorganize cross compilation and make sure there is only one make subprocess for each subdirectory of cross. * cross/Makefile.in (.PHONY): * java/Makefile.in (.PHONY): * src/Makefile.in (libemacs.so): Avoid calling ndk-build from two places at once. Build android-emacs separately from libemacs.so. * cross/Makefile.in ($(top_builddir)/lib/libgnu.a): * java/Makefile.in (CROSS_LIBS): Explicitly depend on Gnulib to prevent it from being built at the same time from different jobs. * src/sfntfont.c (sfntfont_close): Don't unlink font if mmap is not available. * INSTALL.android: Say where building Emacs is supported. * doc/emacs/android.texi (Android Startup): Describe how to connect via ADB. * java/org/gnu/emacs/EmacsNative.java (getSelection): Return array of ints. * java/org/gnu/emacs/EmacsView.java (onCreateInputConnection): Adjust accordingly. * src/androidterm.c (struct android_get_selection_context): New field `mark'. (android_get_selection): Set the mark field as appropriate. (getSelection): Adjust accordingly. * lisp/play/gamegrid.el (gamegrid-setup-default-font): Clamp font size at eight. * java/org/gnu/emacs/EmacsOpenActivity.java (checkReadableOrCopy): New function. (onCreate): If the file specified is not readable from C, read it into a temporary file and ask Emacs to open that. * doc/emacs/android.texi (Android Windowing): Document what new frame parameters are now supported. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): New field `isFullscreen'. (detachWindow, attachWindow): Sync fullscreen state. (onWindowFocusChanged): Add more logging. (onResume): Restore previous fullscreen state. (syncFullscreen): New function. * java/org/gnu/emacs/EmacsWindow.java (setFullscreen): New function. * src/android.c (struct android_emacs_window): Add new method. (android_init_emacs_window): Look up new method. (android_set_fullscreen): New function. * src/androidgui.h: * src/androidterm.c (android_fullscreen_hook): Implement accordingly. * lisp/subr.el (overriding-text-conversion-style, y-or-n-p): Disable text conversion when reading from minibuffer. * src/androidfns.c (android_make_monitor_attribute_list): New function. (Fandroid_display_monitor_attributes_list): Call it to set monitor_frames, which avoids a NULL pointer dereference. Reported by Angelo Graziosi . 2023-02-18 Po Lu * lisp/loadup.el: Fix merge typos. * doc/emacs/input.texi (On-Screen Keyboards): Document `touch-screen-always-display'. * doc/lispref/commands.texi (Misc Events): Improve documentation of text conversion events. * java/org/gnu/emacs/EmacsDialog.java (toAlertDialog, display1): Reorder buttons to make more sense. * lisp/elec-pair.el (electric-pair-analyze-conversion): New function. * lisp/simple.el (analyze-text-conversion): Improve integration with electric pair modes. * lisp/term.el (term-mode): Always display the onscreen keyboard. * lisp/touch-screen.el (touch-screen-display-keyboard) (touch-screen-handle-point-up): Respect new options. * src/textconv.c (really_set_composing_text): Stop widenining unnecessarily. (really_delete_surrounding_text): Really delete surrounding text. Give text conversion analyzers the buffer text. (syms_of_textconv): Update doc string. * INSTALL.android: Clarify build instructions. * src/textconv.c (struct complete_edit_check_context): New structure. (complete_edit_check): New function. (handle_pending_conversion_events_1): If the window is known, then ensure that any editing failures are reported to the input method. * configure.ac: Fix typo. Check for madvise. * lisp/international/fontset.el (script-representative-chars): Improve detection of CJK fonts. * src/pdumper.c (dump_discard_mem): Use madvise if possible. * src/sfnt.c (sfnt_map_glyf_table, sfnt_unmap_glyf_table): New functions. * src/sfnt.h (struct sfnt_glyf_table): New field. * src/sfntfont.c (struct sfnt_font_info, sfntfont_open) (sfntfont_close, sfntfont_detect_sigbus): Map fonts into memory if possible. * src/sfntfont.h: Update prototypes. * src/sysdep.c (handle_sigbus, init_sigbus, init_signals): Initialize SIGBUS correctly. 2023-02-17 Po Lu * src/androidterm.c (android_get_selection): Use ephemeral last point. * src/textconv.c (report_selected_window_change): Set w->ephemeral_last_point to the window's point now. * java/Makefile.in (install_temp/assets/version): New generated file. * lisp/loadup.el: Set Emacs versions appropriately prior to dumping on Android. * lisp/mail/emacsbug.el (emacs-build-description): Insert Android build fingerprint. * lisp/version.el (emacs-repository-version-android) (emacs-repository-get-version, emacs-repository-get-branch): Implement for Android. * src/androidterm.c (android_set_build_fingerprint): New function. (syms_of_androidterm): New variable `android-build-fingerprint'. * src/android.c (android_exception_check): Fix typo. (android_exception_check): Print more detailed information. * java/org/gnu/emacs/EmacsService.java (nameKeysym): Implement stub on Android 3.0 and earlier. * INSTALL.android: Document that Android 2.2 is now supported) (with caveats. * configure.ac (ANDROID_MIN_SDK, ANDROID_SDK_18_OR_EARLIER) (SYSTEM_TYPE, ANDROID_STUBIFY, SIZEOF_LONG): Correctly detect things missing on Android 2.2. * java/Makefile.in (ANDROID_JAR, JARSIGNER_FLAGS): * java/debug.sh (jdb, gdbserver, line): * java/org/gnu/emacs/EmacsApplication.java (findDumpFile): * java/org/gnu/emacs/EmacsService.java (onCreate): * java/org/gnu/emacs/EmacsThread.java (run): Run parameter initialization on main thread. * src/android-asset.h (struct android_asset_manager) (struct android_asset, AAssetManager_fromJava, AAssetManager_open) (AAsset_close, android_asset_create_stream) (android_asset_read_internal, AAsset_openFileDescriptor) (AAsset_getLength, AAsset_getBuffer, AAsset_read): New file. Write substitutes for functions that aren't present within the NDK on Android 2.2. * src/android.c: Arrange to include android-asset.h if the minimum supported Android version is 2.2. (android_user_full_name, android_hack_asset_fd) (android_check_compressed_file): Implement for Android 2.2. * src/process.c (Fprocess_send_eof): Don't call tcdrain if unavailable. * src/sfntfont-android.c (system_font_directories): Fix compiler warning. * src/sfntfont.c (sfntfont_read_cmap): Correctly test rc of emacs_open. * src/textconv.c (handle_pending_conversion_events_1): Mark buffer UNINIT. 2023-02-16 Po Lu * doc/emacs/android.texi (Android Fonts): * doc/emacs/input.texi (On-Screen Keyboards): * doc/lispref/commands.texi (Misc Events): Update documentation. * java/org/gnu/emacs/EmacsInputConnection.java (setSelection): New function. * java/org/gnu/emacs/EmacsSurfaceView.java (reconfigureFrontBuffer): Make bitmap references weak references. * java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap): Don't clear surfaceView bitmap. * lisp/comint.el (comint-mode): Set text-conversion-style to `action' so on screen keyboards' Return buttons send an actual key press event. * lisp/international/fontset.el (script-representative-chars) (setup-default-fontset): Improve detection of CJK fonts. * lisp/isearch.el (set-text-conversion-style): New variable. (isearch-mode, isearch-done): Save and restore the text conversion style. * lisp/minibuffer.el (minibuffer-mode): Set an appropriate text conversion style. * lisp/simple.el (analyze-text-conversion): Run post-self-insert-hook properly. * lisp/subr.el (read-char-from-minibuffer): Disable text conversion when reading character. * src/androidterm.c (show_back_buffer): Don't check that F is not garbaged. (android_update_selection, android_reset_conversion): Use the ephemeral last point and handle text conversion being disabled. * src/buffer.c (syms_of_buffer): Convert old style DEFVAR. * src/keyboard.c (kbd_buffer_get_event): Handle text conversion first. * src/lisp.h: Update prototypes. * src/lread.c (read_filtered_event): Temporarily disable text conversion. * src/sfnt.c (sfnt_decompose_glyph_1, sfnt_decompose_glyph_2): New functions. (sfnt_decompose_glyph, sfnt_decompose_instructed_outline): Refactor contour decomposition to those two functions. (main): Update tests. * src/sfntfont-android.c (system_font_directories): Add empty field. (Fandroid_enumerate_fonts, init_sfntfont_android): Enumerate fonts in a user fonts directory. * src/sfntfont.c (struct sfnt_font_desc): New field `num_glyphs'. (sfnt_enum_font_1): Set num_glyphs and avoid duplicate fonts. (sfntfont_glyph_valid): New function. (sfntfont_lookup_char, sfntfont_list_1): Make sure glyphs found are valid. * src/textconv.c (sync_overlay, really_commit_text) (really_set_composing_text, really_set_composing_region) (really_delete_surrounding_text, really_set_point_and_mark) (handle_pending_conversion_events_1) (handle_pending_conversion_events, conversion_disabled_p) (disable_text_conversion, resume_text_conversion) (Fset_text_conversion_style, syms_of_textconv): Update to respect new options. * src/window.h (GCALIGNED_STRUCT): New field `ephemeral_last_point'. * src/xdisp.c (mark_window_display_accurate_1): Set it. 2023-02-15 Po Lu * doc/emacs/input.texi (On-Screen Keyboards): * doc/lispref/commands.texi (Misc Events): Improve documentation of text conversion stuff. * java/org/gnu/emacs/EmacsInputConnection.java (beginBatchEdit) (endBatchEdit, commitCompletion, commitText) (deleteSurroundingText) (finishComposingText, getSelectedText, getTextAfterCursor) (EmacsInputConnection, setComposingRegion, performEditorAction) (getExtractedText): Condition debug code on DEBUG_IC. * java/org/gnu/emacs/EmacsService.java (EmacsService, updateIC): Likewise. * lisp/bindings.el (global-map): * lisp/electric.el (global-map): Make `text-conversion' `analyze-text-conversion'. * lisp/progmodes/prog-mode.el (prog-mode): Enable text conversion in input methods. * lisp/simple.el (analyze-text-conversion): New function. * lisp/textmodes/text-mode.el (text-conversion-style) (text-mode): Likewise. * src/androidterm.c (android_handle_ime_event): Handle set_point_and_mark. (android_sync_edit): Give Emacs 100 ms instead. (android_perform_conversion_query): Skip the active region, not the conversion region. (getSelectedText): Implement properly. (android_update_selection): Expose mark to input methods. (android_reset_conversion): Handle `text-conversion-style'. * src/buffer.c (init_buffer_once, syms_of_buffer): Add buffer local variable `text-conversion-style'. * src/buffer.h (struct buffer, bset_text_conversion_style): New fields. * src/emacs.c (android_emacs_init): Call syms_of_textconv. * src/frame.h (enum text_conversion_operation): Rename TEXTCONV_SET_POINT. * src/lisp.h (syms_of_textconv): Export syms_of_textconv. * src/marker.c (set_marker_internal): Force redisplay when the mark is set and the buffer is visible on builds that use text conversion. Explain why. * src/textconv.c (copy_buffer): Fix copying past gap. (get_mark): New function. (textconv_query): Implement new flag. (sync_overlay): New function. Display conversion text in an overlay. (record_buffer_change, really_commit_text) (really_set_composing_text, really_set_composing_region) (really_delete_surrounding_text, really_set_point) (handle_pending_conversion_events_1, decrement_inside) (handle_pending_conversion_events, textconv_set_point) (get_extracted_text, register_textconv_interface): Various fixes and improvements. * src/textconv.h (struct textconv_interface): Update documentation. * src/window.h (GCALIGNED_STRUCT): New field `prev_mark'. * src/xdisp.c (mark_window_display_accurate_1): Handle prev_mark. * java/debug.sh: Run gdbserver directly if possible. * src/androidterm.c (android_handle_ime_event): Pacify compiler warnings. * src/textconv.c (really_set_composing_text) (handle_pending_conversion_events, get_extracted_text): Fix reentrancy problems and uses of uninitialized values. * configure.ac (HAVE_TEXT_CONVERSION): Define on Android. * doc/emacs/input.texi (On-Screen Keyboards): Document ``text conversion'' slightly. * doc/lispref/commands.texi (Misc Events): Document new `text-conversion' event. * java/org/gnu/emacs/EmacsContextMenu.java (display): Use `syncRunnable'. * java/org/gnu/emacs/EmacsDialog.java (display): Likewise. * java/org/gnu/emacs/EmacsEditable.java: Delete file. * java/org/gnu/emacs/EmacsInputConnection.java (EmacsInputConnection): Reimplement from scratch. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): Add new functions. * java/org/gnu/emacs/EmacsService.java (getEmacsView) (getLocationOnScreen, sync, getClipboardManager, restartEmacs): Use syncRunnable. (syncRunnable): New function. (updateIC, resetIC): New functions. * java/org/gnu/emacs/EmacsView.java (EmacsView): New field `inputConnection' and `icMode'. (onCreateInputConnection): Update accordingly. (setICMode, getICMode): New functions. * lisp/bindings.el (global-map): Ignore text conversion events. * src/alloc.c (mark_frame): Mark text conversion data. * src/android.c (struct android_emacs_service): New fields `update_ic' and `reset_ic'. (event_serial): Export. (android_query_sem): New function. (android_init_events): Initialize new semaphore. (android_write_event): Export. (android_select): Check for UI thread code. (setEmacsParams, android_init_emacs_service): Initialize new methods. (android_check_query, android_begin_query, android_end_query) (android_run_in_emacs_thread): (android_update_ic, android_reset_ic): New functions for managing synchronous queries from one thread to another. * src/android.h: Export new functions. * src/androidgui.h (enum android_event_type): Add input method events. (enum android_ime_operation, struct android_ime_event) (union android_event, enum android_ic_mode): New structs and enums. * src/androidterm.c (android_window_to_frame): Allow DPYINFO to be NULL. (android_decode_utf16, android_handle_ime_event) (handle_one_android_event, android_sync_edit) (android_copy_java_string, beginBatchEdit, endBatchEdit) (commitCompletion, deleteSurroundingText, finishComposingText) (getSelectedtext, getTextAfterCursor, getTextBeforeCursor) (setComposingText, setComposingRegion, setSelection, getSelection) (performEditorAction, getExtractedText): New functions. (struct android_conversion_query_context) (android_perform_conversion_query, android_text_to_string) (android_get_selection_context, android_get_selection) (android_get_extracted_text_context, android_get_extracted_text) (android_extracted_text_request_class) (android_extracted_text_class, android_update_selection) (android_reset_conversion, android_set_point) (android_compose_region_changed, android_notify_conversion) (text_conversion_interface): New functions and structures. (android_term_init): Initialize text conversion. * src/coding.c (syms_of_coding): Define Qutf_16le on Android. * src/frame.c (make_frame): Clear conversion data. (delete_frame): Reset conversion state. * src/frame.h (enum text_conversion_operation) (struct text_conversion_action, struct text_conversion_state) (GCALIGNED_STRUCT): Update structures. * src/keyboard.c (read_char, readable_events, kbd_buffer_get_event) (syms_of_keyboard): Handle text conversion events. * src/lisp.h: * src/process.c: Fix includes. * src/textconv.c (enum textconv_batch_edit_flags, textconv_query) (reset_frame_state, detect_conversion_events) (restore_selected_window, really_commit_text) (really_finish_composing_text, really_set_composing_text) (really_set_composing_region, really_delete_surrounding_text) (really_set_point, complete_edit) (handle_pending_conversion_events_1) (handle_pending_conversion_events, start_batch_edit) (end_batch_edit, commit_text, finish_composing_text) (set_composing_text, set_composing_region, textconv_set_point) (delete_surrounding_text, get_extracted_text) (report_selected_window_change, report_point_change) (register_texconv_interface): New functions. * src/textconv.h (struct textconv_interface) (TEXTCONV_SKIP_CONVERSION_REGION): Update prototype. * src/xdisp.c (mark_window_display_accurate_1): * src/xfns.c (xic_string_conversion_callback): * src/xterm.c (init_xterm): Adjust accordingly. 2023-02-12 Po Lu * doc/emacs/android.texi (Android Environment): Mention that Emacs also requests the notifications permission. * java/org/gnu/emacs/EmacsEditable.java: * java/org/gnu/emacs/EmacsInputConnection.java: New files. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): Load library dependencies in a less verbose fashion. * java/org/gnu/emacs/EmacsView.java (EmacsView): Make imManager public. (onCreateInputConnection): Set InputType to TYPE_NULL for now. * java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp) (getEventUnicodeChar): Correctly handle key events with strings. * lisp/term/android-win.el (android-clear-preedit-text) (android-preedit-text): New special event handlers. * src/android.c (struct android_emacs_window): Add function lookup_string. (android_init_emacs_window): Adjust accordingly. (android_wc_lookup_string): New function. * src/androidgui.h (struct android_key_event): Improve commentary. (enum android_lookup_status): New enum. * src/androidterm.c (handle_one_android_event): Synchronize IM lookup code with X. * src/coding.c (from_unicode_buffer): Implement on Android. * src/coding.h: * src/sfnt.c: Fix commentary. 2023-02-11 Po Lu * java/org/gnu/emacs/EmacsActivity.java (onDestroy) (onWindowFocusChanged): Keep track of the last focused activity. * java/org/gnu/emacs/EmacsDialog.java (display1): Use it if there is no current focus. 2023-02-10 Po Lu * .gitignore: Add org/gnu/emacs/R.java. * cross/Makefile.in (top_builddir): Include verbose.mk. Rewrite rules to print nice looking statements. * doc/emacs/android.texi (Android, Android Startup) (Android Environment, Android Windowing, Android Fonts): * doc/emacs/emacs.texi (Top): Add an extra ``Android Troubleshooting'' node and move troubleshooting details there. * java/Makefile.in: Generate R.java; improve appearance by using verbose.mk. * java/org/gnu/emacs/EmacsPreferencesActivity.java: Reimplement in terms of PreferencesActivity. * java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap): Avoid flicker. * java/res/xml/preferences.xml: New file. * src/verbose.mk.in (AM_V_AAPT, AM_V_SILENT): New variables. * java/org/gnu/emacs/EmacsDocumentsProvider.java (queryRoots): Implement isChild. (getNotificationUri, notifyChange): New functions. (queryDocument1): Set rename and remove flags. (queryDocument, queryChildDocuments): Allow the requester to detect changes in the directory hierarchy. (createDocument, deleteDocument, removeDocument): Signal changes to the directory hierarchy. * java/org/gnu/emacs/EmacsCopyArea.java (perform): Fix typo. * java/org/gnu/emacs/EmacsSurfaceView.java (reconfigureFrontBuffer): Don't use function only present on Android 8.0 and later. * doc/emacs/android.texi (Android Windowing): Remove yet another limitation. * java/debug.sh: Make this work on systems which prohibit attaching to app processes from adbd. * java/org/gnu/emacs/EmacsCopyArea.java (perform): Avoid creating copies whenever possible. * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): Remove SurfaceView based implementation and use manual double buffering with invalidate instead. * java/org/gnu/emacs/EmacsView.java (EmacsView, handleDirtyBitmap) (raise, lower, onDetachedFromWindow): Adjust accordingly. * java/org/gnu/emacs/EmacsWindow.java (windowUpdated): Remove function. * src/sfntfont.c (sfntfont_open): Set font->max_width correctly. * src/sfnt.c (IUP_SINGLE_PAIR): If i is initially more than end, make it start. (sfnt_verbose): Handle cases where interpreter->glyph_zone is NULL. (main): Update tests. (sfnt_read_cmap_table): Fix typo. (main): Update tests. 2023-02-09 Po Lu * java/AndroidManifest.xml.in: Declare the new documents provider. * java/README: Describe the meaning of files in res/values. * java/org/gnu/emacs/EmacsDocumentsProvider.java: New file. * java/res/values-v19/bool.xml: * java/res/values/bool.xml: New files. * src/sfnt.c (main): Update tests. * src/sfnt.c (sfnt_read_simple_glyph, sfnt_read_compound_glyph) (sfnt_read_glyph): Take size_t offsets. (struct sfnt_compound_glyph_context) (sfnt_expand_compound_glyph_context) (sfnt_decompose_compound_glyph): Take size_t contour offsets. (sfnt_decompose_glyph): Always close contour even if the first point isn't on-curve. (sfnt_build_outline_edges): Fix coding style. (sfnt_interpret_iup): Skip phantom points during IUP. (sfnt_decompose_instructed_outline): Clarify documentation. Always close contour even if the first point isn't on-curve. (struct sfnt_test_dcontext, sfnt_test_move_to, sfnt_test_line_to) (sfnt_test_curve_to, sfnt_transform_f26dot6, sfnt_test_get_glyph) (sfnt_test_free_glyph, sfnt_test_span, sfnt_test_edge_ignore) (sfnt_interpret_compound_glyph_2, sfnt_test_edges, main): Update tests. * src/sfnt.h: Export new function. * src/sfntfont.c (sfntfont_get_glyph_outline): Handle compound glyphs. (sfntfont_measure_instructed_pcm, sfntfont_measure_pcm) (sfntfont_draw): Update accordingly. 2023-02-08 Po Lu * src/sfnt.c (SCFS): Fix order of arguments. (sfnt_normalize_vector): Make sure vx and vy are within a reasonable range. (sfnt_move): Don't move when vectors are orthogonal. (main): Update. * doc/emacs/android.texi (Android Startup): Fix typos. * src/sfnt.c (sfnt_interpret_msirp): Fix order in which operands to MSIRP are popped. (main): Reduce ppem values. * doc/lispref/frames.texi (On-Screen Keyboards): Describe return value of `frame-toggle-on-screen-keyboard'. * java/org/gnu/emacs/EmacsSurfaceView.java (surfaceChanged) (surfaceCreated): Remove purposeless synchronization code. The framework doesn't seem to consult this at all. * java/org/gnu/emacs/EmacsView.java (onLayout): Lay out the window after children. (swapBuffers): Properly implement `force'. (windowUpdated): Delete function. * lisp/frame.el (frame-toggle-on-screen-keyboard): Return whether or not the on screen keyboard might've been displayed. * lisp/minibuffer.el (minibuffer-on-screen-keyboard-timer) (minibuffer-on-screen-keyboard-displayed) (minibuffer-setup-on-screen-keyboard) (minibuffer-exit-on-screen-keyboard): Improve OSK dismissal when there are consecutive minibuffers. * lisp/touch-screen.el (touch-screen-window-selection-changed): New function. (touch-screen-handle-point-up): Register it as a window selection changed function. * src/android.c (struct android_emacs_window) (android_init_emacs_window): Remove references to `windowUpdated'. (android_window_updated): Delete function. * src/android.h (struct android_output): Remove `last_configure_serial'. * src/androidterm.c (handle_one_android_event) (android_frame_up_to_date): * src/androidterm.h (struct android_output): Remove frame synchronization, as that does not work on Android. * src/sfntfont.c (sfntfont_get_glyph_outline): Take new argument STATE and restore it prior to instructing the glyph. (sfntfont_measure_instructed_pcm, sfntfont_measure_pcm) (sfntfont_draw): Adjust accordingly. (sfntfont_measure_instructed_pcm) (sfntfont_measure_pcm): Ceil rbearing value. * src/sfnt.c (sfnt_build_glyph_outline): Clear build_outline_context. (sfnt_poly_coverage): Extend coverage map. (sfnt_prepare_raster): Always floor coordinates, since the increase in coverage makes this hack unnecessary. (sfnt_build_outline_edges): Likewise. (sfnt_compare_edges): Remove function. (sfnt_edge_sort): New function. Since edges are already partially sorted, and there are not many, insertion sort suffices. (sfnt_poly_edges): Use sfnt_edge_sort. (sfnt_fill_span): Stop rounding x0 and x1 to the grid, and make coverage computation static. (sfnt_lookup_glyph_metrics): Fix return code for unscaled metrics. (sfnt_scale_metrics): New function. (SFNT_ENABLE_HINTING): Remove define. (struct sfnt_cvt_table, struct sfnt_fpgm_table) (struct sfnt_prep_table): Move to sfnt.h. (sfnt_read_cvt_table, sfnt_read_fpgm_table, sfnt_read_prep_table): Make TEST_STATIC. (struct sfnt_unit_vector, struct sfnt_interpreter_definition) (struct sfnt_interpreter_zone, struct sfnt_graphics_state): (struct sfnt_interpreter): Move to sfnt.h. (sfnt_make_interpreter): Make TEST_STATIC. (POP, PUSH, DELTAP1, DELTAP2, DELTAP3): When TEST, define to regular push and pop. (sfnt_deltac, sfnt_deltap): Fix order of arguments. (IUP_SINGLE_PAIR): Fix interpolation loop wraparound. (sfnt_interpret_font_program) (sfnt_interpret_control_value_program): Make TEST_STATIC. (struct sfnt_instructed_outline): Move to sfnt.h. (sfnt_build_instructed_outline): Make TEST_STATIC. (sfnt_interpret_simple_glyph, sfnt_x_raster, sfnt_test_raster) (all_tests, sfnt_verbose, main): Improve test code. * src/sfnt.h (SFNT_ENABLE_HINTING, struct sfnt_cvt_table) (struct sfnt_fpgm_table, struct sfnt_prep_table) (struct sfnt_unit_vector, struct sfnt_interpreter_definition) (struct sfnt_interpreter_zone, struct sfnt_graphics_state) (struct sfnt_interpreter, struct sfnt_instructed_outline) (PROTOTYPE): New definitions. * src/sfntfont-android.c (sfntfont_android_put_glyphs): Make coordinate generation more straightforward. * src/sfntfont.c (sfntfont_get_glyph_outline): New arguments INTERPRETER and METRICS. (struct sfnt_font_info): New tables. (sfntfont_setup_interpreter): New function. (sfntfont_open): Avoid memory leak. Set up interpreter. (sfntfont_measure_instructed_pcm): New function. (sfntfont_measure_pcm): Delegate to measure_instructed_pcm where appropriate. (sfntfont_close): Free new tables. (sfntfont_draw): Scale metrics properly. 2023-02-07 Po Lu * src/sfnt.c (sfnt_name_instruction): Remove junk from instruction table. (sfnt_step_edge, sfnt_step_edge_n) (sfnt_build_outline_edges, sfnt_test_edge, main): * src/sfnt.h (struct sfnt_edge): Stop using error corrected line drawing, as it's actually slower. * INSTALL.android: Describe patches for BoringSSL on ARM. * src/sfnt.c (sfnt_build_glyph_outline): Remove redundant multiplication. (sfnt_prepare_raster): Update offset calculation for changes. (sfnt_step_edge, sfnt_step_edge_n): Handle bresenham terms. (sfnt_build_outline_edges): Don't subtract floored xmin, just xmin. (sfnt_saturate_short): Make clang generate better code. (sfnt_fill_span): Stop rounding coordinates. (sfnt_poly_span): Poly consecutive on transitions all in one go. (sfnt_lookup_glyph_metrics): Remove redundant multiplication. (struct sfnt_interpreter): New hooks for debugging. (sfnt_large_integer_add): New function. (sfnt_mul_f26dot6_fixed): Round product. (sfnt_make_interpreter): Remove redundant multiplication. (CHECK_STACK_ELEMENTS, POP_UNCHECKED, PUSH_UNCHECKED): New macros. (MOVE, POP, SWAP, CINDEX, RS, RCVT, LT, LTEQ, GT, GTEQ, EQ, NEQ) (EVEN, AND, OR, NOT, ADD, SUB, DIV, MUL, ABS, NEG, FLOOR, CEILING) (GETINFO, ROLL, _MAX, _MIN, ROUND, NROUND, GC, MD): Don't check SP redundantly, especially when pushing an element right after popping one. (sfnt_move_glyph_zone): Don't touch points by passing NULL as flags. (sfnt_direct_move_zp2): Touch P in the directions of the movement. (sfnt_interpret_scfs): Fix coding style. (sfnt_interpret_simple_glyph): Don't round Y coordinates. (sfnt_test_span, sfnt_test_edges, sfnt_debug_edges) (sfnt_test_edge) (sfnt_x_raster, sfnt_test_raster, rcvt_test_args) (deltac1_test_args, deltac2_test_args, deltac3_test_args) (roll_1_test_args, sfnt_run_hook, sfnt_identify_instruction) (sfnt_verbose, main): Improve debug code and tests. * src/sfnt.h (struct sfnt_edge): Add bresenham terms. 2023-02-06 Po Lu * java/org/gnu/emacs/EmacsNative.java (EmacsNative) : Load every native library on which Emacs depends prior to loading libemacs itself. * java/org/gnu/emacs/EmacsOpenActivity.java (readEmacsClientLog) (startEmacsClient): Don't use redirectError on Android 7.1 and earlier. * configure.ac: Pass ANDROID_CFLAGS to ndk_INIT. * cross/ndk-build/Makefile.in (NDK_BUILD_CFLAGS): * cross/ndk-build/ndk-build-shared-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))): ($$(error Unsupported suffix): * cross/ndk-build/ndk-build-static-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))): ($$(error Unsupported suffix): Use NDK_BUILD_CFLAGS. * m4/ndk-build.m4 (ndk_INIT): Accept cflags. (ndk_CONFIG_FILES): Export NDK_BUILD_CFLAGS. * java/AndroidManifest.xml.in: Prevent the Emacs activity from being overlaid by the emacsclient wrapper. * java/org/gnu/emacs/EmacsOpenActivity.java (run): Likewise. (onCreate): Set an appropriate theme on ICS and up. * java/org/gnu/emacs/EmacsWindow.java (onTouchEvent): Handle ACTION_CANCEL correctly. * src/sfnt.c (struct sfnt_build_glyph_outline_context) (sfnt_build_glyph_outline, sfnt_fill_span): Improve glyph appearance by rounding coordinate values. (struct sfnt_interpreter): New fields `twilight_original_x', `twilight_original_y'. (sfnt_make_interpreter): Set new fields. (DELTAP1, DELTAP2, DELTAP3, SVTCAy, SPVTL, SFVTL, MD): Implement instructions. (sfnt_save_projection_vector): New argument `dual_only'. All callers changed. (sfnt_address_zp2, sfnt_address_zp1, sfnt_address_zp0): Obtain original positions in the twilight zone as well. (sfnt_check_zp1, sfnt_interpret_fliprgoff) (sfnt_interpret_fliprgon) (sfnt_interpret_flippt, sfnt_interpret_scfs, sfnt_interpret_miap) (sfnt_interpret_alignrp, sfnt_line_to_vector, P) (sfnt_interpret_msirp, sfnt_interpret_ip, sfnt_interpret_call) (load_point, sfnt_interpret_iup_1, sfnt_interpret_iup) (sfnt_interpret_run, struct sfnt_scaled_outline) (struct sfnt_instructed_outline) (sfnt_decompose_instructed_outline) (sfnt_build_instructed_outline, sfnt_compute_phantom_points) (sfnt_interpret_simple_glyph, all_tests, sfnt_setup_debugger) (sfnt_name_instruction, sfnt_draw_debugger, sfnt_run_hook) (sfnt_verbose, main): Make glyph instructing work. * src/sfnt.h (SFNT_POLY_ROUND): New enumerator. 2023-02-05 Po Lu * INSTALL.android: Explain how to build selinux. * configure.ac: Enable selinux on Android. * cross/ndk-build/ndk-build-shared-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))) ($$(error Unsupported suffix)) (NDK_CFLAGS_$(LOCAL_MODULE)): * cross/ndk-build/ndk-build-static-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))) ($$(error Unsupported suffix)) (NDK_CFLAGS_$(LOCAL_MODULE)): Correctly handle files with a .cc suffix, and clang-specific asflags. * cross/ndk-build/ndk-clear-vars.mk: Handle AOSP extensions LOCAL_ADDITIONAL_DEPENDENCIES, LOCAL_CLANG_ASFLAGS_$(NDK_BUILD_ARCH) and LOCAL_IS_HOST_MODULE. * doc/emacs/android.texi (Android Startup): Explain emacsclient wrapper. * java/org/gnu/emacs/EmacsView.java (EmacsView): New flag `isCurrentlyTextEditor'. (showOnScreenKeyboard, hideOnScreenKeyboard): Set as appropriate. (onCheckIsTextEditor): Return its value. * lisp/touch-screen.el (touch-screen-handle-scroll): Don't ding at buffer limits. * m4/ndk-build.m4: Improve doc. * src/Makefile.in (LIBSELINUX_CFLAGS): New variable. (EMACS_CFLAGS): Add it. 2023-02-05 Po Lu * m4, lib: Update from Gnulib. * src/sfnt.c (struct sfnt_graphics_state, LOOPCALL, DELTAC3) (PROJECT, SHPIX, sfnt_save_projection_vector, sfnt_check_zp0) (sfnt_dual_project_vector, sfnt_interpret_scfs) (sfnt_round_symmetric, sfnt_interpret_miap) (sfnt_interpret_alignrp_1, sfnt_interpret_alignrp) (sfnt_measure_distance, sfnt_interpret_msirp, sfnt_interpret_ip) (sfnt_interpret_mdap, sfnt_deltap) (sfnt_dual_project_onto_any_vector, sfnt_validate_gs) (sfnt_set_projection_vector, sfnt_interpret_shp) (sfnt_interpret_run, sfnt_check_sloop, main): Check in more WIP font code. 2023-02-04 Po Lu * doc/emacs/android.texi (Android File System): * java/AndroidManifest.xml.in: Update with new activity. Remove Android 10 restrictions through a special flag. * java/org/gnu/emacs/EmacsNative.java (getProcName): New function. * java/org/gnu/emacs/EmacsOpenActivity.java: New file. * java/org/gnu/emacs/EmacsService.java (getLibraryDirection): Remove unused annotation. * lib-src/emacsclient.c (decode_options): Set alt_display on Android. * src/android.c (android_proc_name): New function. (getProcName): Export via JNI. * doc/emacs/android.texi (Android Environment): * java/AndroidManifest.xml.in: Add network state permissions. * src/sfnt.c (sfnt_multiply_divide_signed) (struct sfnt_interpreter_zone, struct sfnt_graphics_state) (struct sfnt_interpreter, sfnt_mul_f2dot14) (sfnt_interpret_trap, WCVTF) (ALIGNPTS, sfnt_scale_by_freedom_vector, sfnt_interpret_utp) (sfnt_address_zp2, sfnt_address_zp1, sfnt_address_zp0) (sfnt_check_zp2, sfnt_move_zp0, sfnt_move_zp1) (sfnt_move_glyph_zone, sfnt_move_twilight_zone) (sfnt_direct_move_zp2, sfnt_interpret_alignpts) (sfnt_interpret_isect, sfnt_line_to_vector, sfnt_deltac) (sfnt_interpret_mdap, sfnt_interpret_call, sfnt_dot_fix_14) (sfnt_move_x, sfnt_move_y, sfnt_move, sfnt_validate_gs) (sfnt_interpret_shz, sfnt_interpret_shc, sfnt_interpret_shp) (sfnt_interpret_iup_1, sfnt_interpret_iup, sfnt_interpret_run) (sfnt_interpret_font_program) (sfnt_interpret_control_value_program) (sfnt_interpret_simple_glyph, jrot_test_args, jrof_test_args) (all_tests, main): Check in more WIP code. 2023-02-02 Po Lu * java/AndroidManifest.xml.in: Add new icon. * java/Makefile.in (srcdir): New variable. (JAVA_FILES, RESOURCE_FILES): Update variables. (emacs.apk-in): Apply resources. * java/README: Describe directory tree. * java/res/drawable/emacs.png: New file. * src/android.c (android_get_current_api_level): New function. * src/android.h: Export it. * src/sfntfont-android.c (init_sfntfont_android): Make device API level detection always work. * src/sfnt.c (sfnt_multiply_divide_signed): Add MAYBE_UNUSED. * src/sfnt.c (xmalloc, xrealloc): Improve behavior upon allocation failures during test. (sfnt_table_names): Add prep. (sfnt_transform_coordinates): Allow applying offsets during coordinate transform. (sfnt_decompose_compound_glyph): Defer offset computation until any component compound glyph is loaded, then apply it during the transform process. (sfnt_multiply_divide): Make available everywhere. Implement on 64 bit systems. (sfnt_multiply_divide_signed): New function. (sfnt_mul_fixed): Fix division overflow. (sfnt_curve_to_and_build_1, sfnt_build_glyph_outline): Remove outdated comment. (sfnt_build_outline_edges): Fix coding style. (sfnt_lookup_glyph_metrics): Allow looking up metrics without scaling. (struct sfnt_cvt_table): Fix type of cvt values. (struct sfnt_prep_table): New structure. (sfnt_read_cvt_table): Read cvt values in terms of fwords, not longs (as Apple's doc seems to say). (sfnt_read_fpgm_table): Fix memory allocation for font program table. (sfnt_read_prep_table): New function. (struct sfnt_interpreter_zone): New structure. (struct sfnt_interpreter_graphics_state): New fields `project', `move', `vector_dot_product'. Rename to `sfnt_graphics_state'. (struct sfnt_interpreter, sfnt_mul_f26dot6): Stop doing rounding division. (sfnt_init_graphics_state, sfnt_make_interpreter, MOVE, SSW, RAW) (SDS, ADD, SUB, ABS, NEG, WCVTF, _MIN, S45ROUND, SVTCAx) (sfnt_set_srounding_state, sfnt_skip_code) (sfnt_interpret_unimplemented, sfnt_interpret_fdef) (sfnt_interpret_idef, sfnt_interpret_if, sfnt_interpret_else) (sfnt_round_none, sfnt_round_to_grid, sfnt_round_to_double_grid) (sfnt_round_down_to_grid, sfnt_round_up_to_grid) (sfnt_round_to_half_grid, sfnt_round_super, sfnt_validate_gs) (sfnt_interpret_run, sfnt_interpret_font_program) (struct sfnt_test_dcontext, sfnt_test_move_to, sfnt_test_line_to) (sfnt_test_curve_to, sfnt_test_get_glyph, sfnt_test_free_glyph) (sfnt_test_span, sfnt_test_edge_ignore, sfnt_test_edge) (sfnt_test_raster, test_interpreter_profile, test_cvt_values) (test_interpreter_cvt, test_interpreter_head) (sfnt_make_test_interpreter, struct sfnt_interpreter_test) (sfnt_run_interpreter_test, struct sfnt_generic_test_args) (sfnt_generic_check, sfnt_check_srp0, sfnt_check_szp0) (sfnt_check_sloop, struct sfnt_rounding_test_args) (sfnt_check_rounding, sfnt_check_smd, sfnt_check_scvtci) (sfnt_check_sswci, sfnt_check_ssw, sfnt_check_flipon) (sfnt_check_flipoff, npushb_test_args, npushw_test_args) (pushb_test_args, pushw_test_args, stack_overflow_test_args) (stack_underflow_test_args, rtg_test_args) (rtg_symmetric_test_args, rtg_1_test_args) (rtg_1_symmetric_test_args, rthg_test_args, rthg_1_test_args) (rtdg_test_args, rtdg_1_test_args, rtdg_2_test_args) (rtdg_3_test_args, else_test_args, jmpr_test_args, dup_test_args) (pop_test_args, clear_test_args, swap_test_args, depth_test_args) (cindex_test_args, mindex_test_args, raw_test_args) (loopcall_test_args, call_test_args, fdef_test_args) (fdef_1_test_args, endf_test_args, ws_test_args, rs_test_args) (wcvtp_test_args, rcvt_test_args, mppem_test_args, mps_test_args) (debug_test_args, lt_test_args, all_tests, main): Implement more instructions. * src/sfnt.h (enum sfnt_table, struct sfnt_glyph_metrics): Add new tables. Add comment. 2023-01-30 Po Lu * cross/ndk-build/ndk-build-shared-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))): * cross/ndk-build/ndk-build-static-library.mk ($(call objname,$(LOCAL_MODULE),$(basename $(1)))): Revert broken typo fixes. * src/sfnt.c (TEST_STATIC): Define ARRAYELTS. (sfnt_table_names): New CVT and FPGM tables. (sfnt_decompose_compound_glyph, sfnt_decompose_glyph) (struct sfnt_large_integer, sfnt_multiply_divide_1) (sfnt_count_leading_zero_bits, sfnt_multiply_divide_2) (sfnt_multiply_divide, sfnt_mul_fixed, sfnt_div_fixed) (sfnt_ceil_fixed, sfnt_build_glyph_outline): Fix fixed point multiplication routines on systems without 64 bit long long type. (SFNT_ENABLE_HINTING, struct sfnt_test_dcontext, sfnt_test_move_to) (sfnt_test_line_to, sfnt_test_curve_to, sfnt_test_get_glyph) (sfnt_test_free_glyph, sfnt_test_span, sfnt_test_edge_ignore) (sfnt_read_cvt_table, sfnt_test_edge, sfnt_test_raster) (sfnt_read_fpgm_table, struct sfnt_unit_vector) (struct sfnt_interpreter_definition) (struct sfnt_interpreter_graphics_state, struct sfnt_interpreter) (sfnt_div_f26dot6, sfnt_mul_f26dot6, sfnt_floor_f26dot6) (sfnt_ceil_f26dot6, sfnt_round_f26dot6, sfnt_init_graphics_state) (sfnt_make_interpreter, enum sfnt_interpreter_run_context) (sfnt_interpret_trap, STACKSIZE, sfnt_set_srounding_state) (sfnt_skip_code, sfnt_interpret_unimplemented, sfnt_interpret_fdef) (sfnt_interpret_idef, sfnt_interpret_if, sfnt_interpret_else) (sfnt_round_none, sfnt_round_to_grid, sfnt_round_to_double_grid) (sfnt_round_down_to_grid, sfnt_round_up_to_grid) (sfnt_round_to_half_grid, sfnt_round_super, sfnt_validate_gs) (sfnt_interpret_run, sfnt_interpret_font_program) (test_interpreter_profile, test_cvt_values, test_interpreter_cvt) (test_interpreter_head, sfnt_make_test_interpreter) (struct sfnt_interpreter_test, sfnt_run_interpreter_test) (struct sfnt_generic_test_args, sfnt_generic_check) (sfnt_check_srp0, sfnt_check_szp0, sfnt_check_sloop) (struct sfnt_rounding_test_args, sfnt_check_rounding) (sfnt_check_smd, sfnt_check_scvtci, sfnt_check_sswci) (sfnt_check_ssw, sfnt_check_flipon, sfnt_check_flipoff) (npushb_test_args, npushw_test_args, pushb_test_args) (pushw_test_args, stack_overflow_test_args) (stack_underflow_test_args, rtg_test_args, rtg_symmetric_test_args) (rtg_1_test_args, rtg_1_symmetric_test_args, rthg_test_args) (rthg_1_test_args, rtdg_test_args, rtdg_1_test_args) (rtdg_2_test_args, rtdg_3_test_args, else_test_args) (jmpr_test_args, dup_test_args, pop_test_args, clear_test_args) (swap_test_args, depth_test_args, cindex_test_args) (mindex_test_args, raw_test_args, loopcall_test_args) (call_test_args, fdef_test_args, fdef_1_test_args, endf_test_args) (ws_test_args, rs_test_args, wcvtp_test_args, rcvt_test_args) (mppem_test_args, mps_test_args, debug_test_args, lt_test_args) (all_tests, main): Check in WIP hinting code. * src/sfnt.h (enum sfnt_table): Add `cvt ' and `fpgm' tables. 2023-01-29 Po Lu * .gitignore: Add missing Gnulib files. * INSTALL.android (module_target): Clarify documentation. * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: Fix building Neon objects. * java/AndroidManifest.xml.in: Add a version code. 2023-01-28 Po Lu * java/org/gnu/emacs/EmacsService.java (restartEmacs): New function. * src/android.c (struct android_emacs_service) (android_init_emacs_service): Add new method. (android_restart_emacs): New function. * src/android.h: Update prototypes. * src/emacs.c (Fkill_emacs): Call android_restart_emacs whenever appropriate. * INSTALL.android: Document how to build with libtiff. * build-aux/ndk-build-helper-1.mk (NDK_SO_NAME): * build-aux/ndk-build-helper-2.mk (NDK_A_NAME): * build-aux/ndk-build-helper-4.mk: Decrease number of duplicate dependencies found. * configure.ac (ANDROID_SDK_18_OR_EARLIER, XCONFIGURE, PNG_CFLAGS) (HAVE_TIFF): Allow using libtiff on Android. * cross/ndk-build/ndk-clear-vars.mk: Undefine additional variables. * cross/ndk-build/ndk-resolve.mk: Split CFLAGS resolution from a-name resolution, and do not recursively add archive or shared object names for dependencies of shared libraries. * src/Makefile.in (TIFF_CFLAGS): New variable. (EMACS_CFLAGS): Use it. 2023-01-28 Po Lu * src/image.c (syms_of_image): Fix typo. * doc/emacs/android.texi (Android File System): Describe an easier way to disable scoped storage. * java/AndroidManifest.xml.in: Add new permission to allow that. * java/README: Add more text describing Java. * java/org/gnu/emacs/EmacsContextMenu.java (Item): New fields `isCheckable' and `isChecked'. (EmacsContextMenu, addItem): New arguments. (inflateMenuItems): Set checked status as appropriate. * java/org/gnu/emacs/EmacsCopyArea.java (perform): Disallow operations where width and height are less than or equal to zero. * lisp/menu-bar.el (menu-bar-edit-menu): Make execute-extended-command available as a menu item. * src/androidmenu.c (android_init_emacs_context_menu) (android_menu_show): Implement menu check boxes. * src/menu.c (have_boxes): Treat Android builds as providing menu checkboxes. 2023-01-28 Po Lu * lisp/term/android-win.el (window-system-initialization): Create default fontset. * src/sfntfont.c (sfntfont_read_cmap, sfntfont_open): Fix leaks of file descriptors. * m4, lib: Update from Gnulib. * INSTALL.android: Document support for gnutls and libgmp. * build-aux/ndk-build-helper-1.mk (NDK_SO_NAMES, NDK_INCLUDES) (SYSTEM_LIBRARIES): * build-aux/ndk-build-helper-2.mk: Recursively resolve and add shared library dependencies; even those of static libraries. * build-aux/ndk-module-extract.awk: Fix makefile_imports code. * configure.ac (ANDROID_SDK_18_OR_EARLIER, XCONFIGURE) (LIBGMP_CFLAGS): Enable GMP and gnutls on Android. * cross/ndk-build/Makefile.in (LOCAL_EXPORT_C_INCLUDES): * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-clear-vars.mk: * cross/ndk-build/ndk-resolve.mk (NDK_SYSTEM_LIBRARIES): (NDK_LOCAL_EXPORT_C_INCLUDES_$(LOCAL_MODULE)): (NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE)): Implement ``LOCAL_ASM_RULE'' and ``LOCAL_C_ADDITIONAL_FLAGS'' extensions for libgmp. * doc/emacs/input.texi (Touchscreens): Document how to horizontally scroll. * java/org/gnu/emacs/EmacsActivity.java (attachWindow): Give the view focus again if necessary. (onPause): Call right super function. * java/org/gnu/emacs/EmacsPreferencesActivity.java (onClick): Clear dumpFileName lest Emacs try to load a nonexistent dump file. * java/org/gnu/emacs/EmacsView.java (onDetachedFromWindow) (onAttachedToWindow): Call super functions. (onCreateInputConnection): Make sure the IME never obscures Emacs. * java/org/gnu/emacs/EmacsWindow.java (onKeyDown, onKeyUp): Improve tracking of quit keys. * lisp/isearch.el (isearch-mode): Bring up the onscreen keyboard. * lisp/touch-screen.el (touch-screen-current-tool): Add three fields. (touch-screen-handle-scroll): Allow hscrolling as well. (touch-screen-handle-touch): Add additional fields to `touch-screen-current-tool'. * src/Makefile.in (LIBGMP_CFLAGS, EMACS_CFLAGS): Add new variable. * src/android.c (android_run_select_thread, android_write_event): Use pthread_cond_broadcast because pthread_cond_signal does nothing on some Android versions/devices? 2023-01-26 Po Lu * doc/emacs/input.texi (On-Screen Keyboards): Fix typo. * INSTALL.android: Mention that apksigner is also required. * configure.ac: Correctly add cross/Makefile to SUBDIR_MAKEFILES. * cross/Makefile.in (config.status): Depend on $(top_srcdir)/config.status. * doc/emacs/input.texi (On-Screen Keyboards): Document how to quit without a physical keyboard. * java/org/gnu/emacs/EmacsNative.java (quit): New function `quit'. * java/org/gnu/emacs/EmacsWindow.java (EmacsWindow): New field `lastVolumeButtonPress'. (onKeyDown): Quit if necessary. * m4/ndk-build.m4 (ndk_where_cc): Fix search if CC is not a single word. * src/android.c (android_open): Remove unused variable. (quit): New function. * src/androidmenu.c (android_process_events_for_menu): Allow quitting the menu. * src/xterm.c (handle_one_xevent, x_term_init, syms_of_xterm): Implement features illustrated above, so they work on free operating systems. * src/xterm.h (struct x_display_info): New fields `quit_keysym', `quit_keysym_time'. 2023-01-26 Po Lu * INSTALL.android: Document how to install sqlite3. * build-aux/ndk-build-helper-1.mk (SYSTEM_LIBRARIES): * build-aux/ndk-build-helper-2.mk (SYSTEM_LIBRARIES): Add liblog and libandroid. * configure.ac (SQLITE3_LIBS, HAVE_SQLITE3) (HAVE_SQLITE3_LOAD_EXTENSION): Support on Android. (APKSIGNER): Look for this new required binary. * cross/ndk-build/ndk-build-shared-library.mk (objname): * cross/ndk-build/ndk-build-static-library.mk (objname): Avoid duplicate rules by prefixing objects with module type. * cross/ndk-build/ndk-build.mk.in (NDK_BUILD_SHARED): Fix definition. * cross/ndk-build/ndk-resolve.mk (NDK_SO_EXTRA_FLAGS_$(LOCAL_MODULE)): Handle new system libraries. * doc/emacs/android.texi (Android File System): Document Android 10 system restriction. * java/AndroidManifest.xml.in: Target Android API 33, not 28. * java/Makefile.in (SIGN_EMACS_V2, APKSIGNER): New variables. ($(APK_NAME)): Make sure to apply a ``version 2 signature'' to the package as well. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): New argument apiLevel. * java/org/gnu/emacs/EmacsNoninteractive.java (main): * java/org/gnu/emacs/EmacsThread.java (run): Pass API level. * m4/ndk-build.m4 (ndk_package_mape): Add package mapping for sqlite3. * src/Makefile.in (SQLITE3_CFLAGS): New substitution. (EMACS_CFLAGS): Add that variable. * src/android.c (android_api_level): New variable. (initEmacs): Set it. (android_file_access_p): Make static. (android_hack_asset_fd): Adjust for restrictions in Android 29 and later. (android_close_on_exec): New function. (android_open): Adjust to not duplicate file descriptor even if CLOEXEC. (android_faccessat): Use fstatat at-func emulation. * src/android.h: Update prototypes. * src/dired.c (file_name_completion_dirp): * src/fileio.c (file_access_p, Faccess_file): Now that sys_faccessat takes care of everything, stop calling android_file_access_p. 2023-01-26 Po Lu * .gitignore: Ignore lib/math.h. * INSTALL.android: Update accordingly. * build-aux/ndk-build-helper-1.mk: * build-aux/ndk-build-helper-2.mk: * build-aux/ndk-build-helper.mk: * build-aux/ndk-module-extract.awk: Handle C++ modules. * configure.ac: Enable libxml2 on Android. * cross/ndk-build/Makefile.in: * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: * cross/ndk-build/ndk-build.mk.in: * cross/ndk-build/ndk-resolve.mk: Fix dependency resolution of includes. * java/org/gnu/emacs/EmacsView.java (popupMenu): Fix minimum SDK version for actual popup menus. * lib/math.h: Delete file. * m4/ndk-build.m4 (ndk_SEARCH_MODULE, ndk_CHECK_MODULES): Look for nasm and C++ libraries. * src/android.c (faccessat): Rename to `android_faccessat'. * src/android.h: Update prototypes. * src/dired.c (file_name_completion_dirp): * src/fileio.c (file_access_p, Faccess_file, file_directory_p): * src/lisp.h: * src/lread.c (openp): * src/process.c (allocate_pty): Use sys_faccessat. * src/sysdep.c (sys_faccessat): New function. 2023-01-26 Po Lu * cross/ndk-build/ndk-build.in: Delete unused file. 2023-01-25 Po Lu * java/org/gnu/emacs/EmacsDrawLine.java: Fix this again. * java/org/gnu/emacs/EmacsNoninteractive.java (main): Port to Android 2.3.3. * java/org/gnu/emacs/EmacsSdk11Clipboard.java: Port to Android 4.0.3. * java/org/gnu/emacs/EmacsService.java (getClipboardManager): New function. * src/alloc.c (find_string_data_in_pure): Fix Android alignment issue. * src/android-emacs.c (main): Port to Android 4.4. * src/android.c (initEmacs): Align stack to 32 bytes, so it ends up aligned to 16 even though gcc thinks the stack is already aligned to 16 bytes. * src/callproc.c (init_callproc): Use /system/bin/sh instead of /bin/sh by default. * cross/lib/math.h: Delete header. * java/Makefile.in (emacs.apk-in): Don't call cp with empty args. * java/org/gnu/emacs/EmacsDrawLine.java (perform): Fix for PostScript filling semantics. * src/Makefile.in (android-emacs): Build android-emacs directly. * doc/emacs/android.texi (Android Startup, Android Environment): Document that restrictions on starting Emacs have been lifted. * java/README: Document Java for Emacs developers and how the Android port works. * java/org/gnu/emacs/EmacsApplication.java (EmacsApplication) (findDumpFile): New function. (onCreate): Factor out dump file finding functions to there. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): Update function declarations. * java/org/gnu/emacs/EmacsNoninteractive.java: New class. * java/org/gnu/emacs/EmacsService.java (getApkFile) (onCreate): Pass classpath to setEmacsParams. * java/org/gnu/emacs/EmacsThread.java (run): Label as an @Override. * lisp/loadup.el: Don't dump on Android when noninteractive. * lisp/shell.el (shell--command-completion-data): Handle inaccessible directories. * src/Makefile.in (android-emacs): Link with Gnulib. * src/android-emacs.c (main): Implement to launch app-process and then EmacsNoninteractive. * src/android.c (setEmacsParams): New argument `class_path'. Don't set stuff up when running noninteractive. * src/android.h (initEmacs): Likewise. * src/androidfont.c (init_androidfont): * src/androidselect.c (init_androidselect): Don't initialize when running noninteractive. * src/emacs.c (load_pdump): New argument `dump_file'. (android_emacs_init): Give new argument `dump_file' to `load_pdump'. * src/sfntfont-android.c (init_sfntfont_android): Don't initialize when running noninteractive. * admin/merge-gnulib (GNULIB_MODULES): Add printf-posix and vasprintf-posix. * m4, lib: Update from Gnulib. * configure.ac (CFLAGS): Add -DHAVE_CONFIG_H. 2023-01-24 Po Lu * doc/lispref/processes.texi (Subprocess Creation): Document variables containing program names. * etc/NEWS: Document new variables. * java/Makefile.in (CROSS_BINS): Add missing etags binary. * lisp/cedet/semantic/db-ebrowse.el (semanticdb-create-ebrowse-database): * lisp/gnus/mail-source.el (mail-source-movemail-program): * lisp/hexl.el (hexl-program): * lisp/htmlfontify.el (hfy-etags-bin): * lisp/ielm.el (inferior-emacs-lisp-mode): * lisp/mail/rmail.el (rmail-autodetect): (rmail-insert-inbox-text): * lisp/org/org-ctags.el (org-ctags-path-to-ctags): * lisp/progmodes/cperl-mode.el (cperl-etags): * lisp/speedbar.el (speedbar-fetch-etags-command): * lisp/textmodes/reftex-global.el (reftex-create-tags-file): Use new variables. * src/callproc.c (syms_of_callproc): Introduce new variables naming binaries redistributed with Emacs. * INSTALL.android: Update documentation. * build-aux/ndk-build-helper-1.mk: When building shared libraries, do not link libemacs.so with dependent archive files. * build-aux/ndk-build-helper-2.mk: Add whole archive dependencies as well. * configure.ac (HAVE_JPEG): Enable on Android. * cross/ndk-build/ndk-build-shared-library.mk: Link the shared object with archive file dependencies. * cross/ndk-build/ndk-build-static-library.mk: Build all code position-independently. * cross/ndk-build/ndk-resolve.mk: Separately resolve a names of archive and whole archive dependencies. * src/Makefile.in (JPEG_CFLAGS): New variable. (EMACS_CFLAGS): Add it. 2023-01-24 Po Lu * INSTALL.android: Update. * build-aux/ndk-build-helper-1.mk: Fix typo. * configure.ac: Enable --with-json on Android. * cross/ndk-build/ndk-build-shared-library.mk: (NDK_CFLAGS_$(LOCAL_MODULE)): (LOCAL_MODULE_FILENAME): * cross/ndk-build/ndk-build-static-library.mk: (ALL_OBJECT_FILES$(LOCAL_MODULE)): (LOCAL_MODULE_FILENAME): Recursively resolve dependencies. * cross/ndk-build/ndk-resolve.mk: New function. * doc/emacs/android.texi (Android Startup): Document how Emacs is dumped during initial startup. * java/Makefile.in (filename): Fix build with multiple shared libraries. * java/README: Improve commentary. * java/org/gnu/emacs/EmacsApplication.java (onCreate): Look and set dump file. * java/org/gnu/emacs/EmacsNative.java (getFingerprint): New function getFingerprint. * java/org/gnu/emacs/EmacsPreferencesActivity.java (onCreate): Add option to erase the dump file. * java/org/gnu/emacs/EmacsService.java (browseUrl): New function. * java/org/gnu/emacs/EmacsThread.java (run): Specify dump file if found. * lisp/loadup.el: Always dump during loadup on Android. * lisp/net/browse-url.el (browse-url--browser-defcustom-type) (browse-url-default-browser, browse-url-default-android-browser): New browse url type. * m4/ndk-build.m4 (ndk_package_map): Map jansson to libjansson. * src/android.c (struct android_emacs_service): New method `browse_url'. (getFingerprint): New function. (android_init_emacs_service): Initialize new method. (android_browse_url): New function. * src/android.h: Update prototypes. * src/androidselect.c (Fandroid_browse_url): New function. (syms_of_androidselect): Define it. * src/emacs.c (load_pdump): Eschew excessively elaborate dump file location code on on Android. * src/pdumper.c (Fdump_emacs_portable): Allow dumping while interactive on Android. (syms_of_pdumper): New variable `pdumper-fingerprint'. * src/sfntfont-android.c (sfntfont_android_composite_bitmap): Fix unused variables. 2023-01-24 Po Lu * admin/merge-gnulib: Fix paths for rename. * lib-src/Makefile.in (DONT_INSTALL, clean): Correctly define asset-directory-tool. * cross/Makefile.in (distclean bootstrap-clean): Remove Makefile. 2023-01-24 Po Lu * .gitignore: Update with new files. Do not ignore std*.in.h. * INSTALL.android: Explain how to build Emacs with external dependencies. * Makefile.in (xcompile, cross): Rename to `cross'. (clean_dirs): Clean cross, not xcompile. * README: Document new directories. * build-aux/ndk-build-helper-1.mk: * build-aux/ndk-build-helper-2.mk: * build-aux/ndk-build-helper-3.mk: * build-aux/ndk-build-helper-4.mk: * build-aux/ndk-build-helper.mk (NDK_BUILD_DIR, my-dir): * build-aux/ndk-module-extract.awk: New files. * configure.ac: Set up libgif, libwebp, and libpng for ndk-build. * cross/ndk-build/Makefile.in: * cross/ndk-build/ndk-build-executable.mk: * cross/ndk-build/ndk-build-shared-library.mk: * cross/ndk-build/ndk-build-static-library.mk: * cross/ndk-build/ndk-build.in: * cross/ndk-build/ndk-build.mk.in: * cross/ndk-build/ndk-clear-vars.mk: * cross/ndk-build/ndk-prebuilt-shared-library.mk: * cross/ndk-build/ndk-prebuilt-static-library.mk: New files. * doc/emacs/android.texi (Android, Android Environment): Document clipboard support on Android. * doc/emacs/emacs.texi (Top): Update menus. * etc/MACHINES: Document Android. * java/AndroidManifest.xml.in: Respect new `--with-android-debug' option. * java/Makefile.in (CROSS_BINS, CROSS_LIBS): Adjust for rename. Include ndk-build.mk. (emacs.apk-in): Depend on shared libraries. Then, package shared libraries. * java/org/gnu/emacs/EmacsClipboard.java: New file. * java/org/gnu/emacs/EmacsFontDriver.java: Update comment to say this is unused. * java/org/gnu/emacs/EmacsNative.java (sendExpose): New function `sendExpose'. * java/org/gnu/emacs/EmacsSdk11Clipboard.java: * java/org/gnu/emacs/EmacsSdk8Clipboard.java: New files. * java/org/gnu/emacs/EmacsView.java (handleDirtyBitmap) (onDetachedFromWindow): When window is reattached, expose the frame. * lib/Makefile.in (VPATH, ALL_CFLAGS): Adjust for rename. * lisp/term/android-win.el (android-clipboard-exists-p) (android-get-clipboard, android-set-clipboard) (android-clipboard-owner-p, android-primary-selection) (android-get-clipboard-1, android-get-primary) (android-selection-bounds, android-encode-select-string) (gui-backend-get-selection, gui-backend-selection-exists-p) (gui-backend-selection-owner-p, gui-backend-set-selection): New functions. * m4/ndk-build.m4: New file. * src/Makefile.in (GIF_CFLAGS, ANDROID_LDFLAGS): New variables. (EMACS_CFLAGS): Add GIF_CFLAGS. Include ndk-build.mk. (libemacs.so): Depend on and link with required libraries. * src/android.c (android_check_compressed_file): New function. (android_open): Work around Android platform bug. (sendExpose): New function. (android_readdir): Set d_type if this is a directory. * src/androidgui.h (enum android_event_type) (struct android_expose_event, union android_event): Add expose events. * src/androidselect.c: New file. * src/androidterm.c (handle_one_android_event) : Handle exposures. * src/androidterm.h: Update prototypes. * src/emacs.c (android_emacs_init): Initialize androidselect. * xcompile: Move to cross. * cross: New directory. 2023-01-21 Po Lu * doc/lispref/commands.texi (Touchscreen Events): Document changes. * lisp/touch-screen.el (touch-screen-current-tool): Update doc string. (touch-screen-precision-scroll): New user option. (touch-screen-handle-scroll): Use traditional scrolling by default. (touch-screen-handle-touch): Adjust format of touch-screen-current-tool. (touch-screen-track-tap): Don't print waiting for events. (touch-screen-track-drag): Likewise. Also, don't call UPDATE until threshold is reached. (touch-screen-drag-mode-line-1, touch-screen-drag-mode-line): Improve window dragging. * src/fileio.c (Fverify_visited_file_modtime): Fix fs check. 2023-01-21 Po Lu * doc/emacs/android.texi (Android File System): Document that ls-lisp is now used by default. * java/org/gnu/emacs/EmacsThread.java (EmacsThread): Name the thread something meaningful. * lisp/loadup.el (featurep): Load ls-lisp on Android. * lisp/ls-lisp.el (ls-lisp-use-insert-directory-program): Default to off on Android. * src/android.c (android_is_directory): New function. (android_fstatat): Handle directories created by `android_opendir'. (android_open): Return meaningful file mode. (struct android_dir): New fields `next', `asset_file' and `fd'. (android_opendir): Populate those fields. (android_dirfd): New function. (android_closedir): Close file descriptor if set. (android_lookup_asset_directory_fd): New function. * src/android.h: Update prototypes. * src/androidfont.c (androidfont_check_init): New function. (androidfont_list, androidfont_match, androidfont_draw) (androidfont_open_font, androidfont_close_font) (androidfont_has_char, androidfont_encode_char) (androidfont_text_extents, androidfont_list_family): Initialize font driver if necessary. (init_androidfont): Don't initialize Java font if necessary. * src/dired.c (open_directory): Return android_dirfd if appropriate. (directory_files_internal, file_name_completion_dirp): Implement correctly for Android. * src/fileio.c (check_mutable_filename): New function. (Fcopy_file, Fdelete_directory_internal, Fdelete_file) (Frename_file, Fadd_name_to_file, Fmake_symbolic_link) (Fset_file_modes, Fset_file_times, Ffile_newer_than_file_p) (Fverify_visited_file_modtime, Fset_visited_file_modtime): Check that files being written to do not lie in /assets. * src/sfntfont-android.c (GET_SCANLINE_BUFFER) (sfntfont_android_u255to256, sfntfont_android_over_8888_1) (sfntfont_android_over_8888, sfntfont_android_composite_bitmap): Optimize for 64-bit ARM devices. (sfntfont_android_put_glyphs): Optimize away memset if background need not be filled. 2023-01-20 Po Lu * src/android.c (android_run_select_thread, android_select) (android_ftruncate): * src/android.h (ftruncate): Fix compilation on Android 16 and up. * src/android.c (android_run_select_thread, android_init_events) (android_select): Add alternative android_select implementation for API 16 and lower. * src/androidterm.c (handle_one_android_event): Fix use-after-frees. * xcompile/lib/gnulib.mk.in: Delete. 2023-01-20 Po Lu * .gitignore: Don't ignore verbose.mk.android. * doc/emacs/Makefile.in (EMACSSOURCES): Add android.texi and input.texi. * doc/emacs/android.texi (Android): Document support for the on-screen keyboard. (Android Startup): Document how to start Emacs with -Q on Android. (Android Environment): Document how Emacs circumvents the system ``task killer''. Document changes to frame deletion behavior. * doc/emacs/emacs.texi (Top): * doc/emacs/input.texi (Other Input Devices) (On-Screen Keyboards): Document how to use Emacs with virtual keyboards. * doc/lispref/commands.texi (Touchscreen Events): Document changes to `touch-screen-track-drag'. * doc/lispref/frames.texi (Frames, On-Screen Keyboards): New node. * java/AndroidManifest.xml.in: Add settings activity and appropriate OSK adjustment mode. * java/org/gnu/emacs/EmacsActivity.java (onCreate): Allow creating Emacs with -Q. (onDestroy): Don't remove if killed by the system. * java/org/gnu/emacs/EmacsContextMenu.java (inflateMenuItems): Fix context menus again. * java/org/gnu/emacs/EmacsNative.java (EmacsNative): Make all event sending functions return long. * java/org/gnu/emacs/EmacsPreferencesActivity.java: New file. * java/org/gnu/emacs/EmacsService.java (EmacsService) (onStartCommand, onCreate, startEmacsService): Start as a foreground service if necessary to bypass system restrictions. * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView): * java/org/gnu/emacs/EmacsThread.java (run): * java/org/gnu/emacs/EmacsView.java (onLayout) (onDetachedFromWindow): * java/org/gnu/emacs/EmacsWindow.java (viewLayout): Implement frame resize synchronization. * java/org/gnu/emacs/EmacsWindowAttachmentManager.java (removeWindowConsumer): Adjust accordingly for changes to frame deletion behavior. * lisp/frame.el (android-toggle-on-screen-keyboard) (frame-toggle-on-screen-keyboard): New functions. * lisp/minibuffer.el (minibuffer-setup-on-screen-keyboard) (minibuffer-exit-on-screen-keyboard): New functions. (minibuffer-setup-hook, minibuffer-exit-hook): Add new functions to hooks. * lisp/touch-screen.el (touch-screen-relative-xy): Accept new value of window `frame'. Return frame coordinates in that case. (touch-screen-set-point-commands): New variable. (touch-screen-handle-point-up): Respect that variable. (touch-screen-track-drag): Return `no-drag' where appropriate. (touch-screen-drag-mode-line-1, touch-screen-drag-mode-line): Refactor to use `no-drag'. * src/android.c (struct android_emacs_window): New methods. Make all event sending functions return the event serial. (android_toggle_on_screen_keyboard, android_window_updated): New functions. * src/android.h: Update prototypes. * src/androidfns.c (Fandroid_toggle_on_screen_keyboard) (syms_of_androidfns): New functions. * src/androidgui.h (struct android_any_event) (struct android_key_event, struct android_configure_event) (struct android_focus_event, struct android_window_action_event) (struct android_crossing_event, struct android_motion_event) (struct android_button_event, struct android_touch_event) (struct android_wheel_event, struct android_iconify_event) (struct android_menu_event): Add `serial' fields. * src/androidterm.c (handle_one_android_event) (android_frame_up_to_date): * src/androidterm.h (struct android_output): Implement frame resize synchronization. * xcompile/verbose.mk.android: New file. 2023-01-19 Po Lu * .gitignore: Add new files. * INSTALL.android: Explain how to build Emacs for ancient versions of Android. * admin/merge-gnulib (GNULIB_MODULES): Add getdelim. * build-aux/config.guess (timestamp, version): * build-aux/config.sub (timestamp, version): Autoupdate. * configure.ac (BUILD_DETAILS, ANDROID_MIN_SDK): (ANDROID_STUBIFY): Allow specifying CFLAGS via ANDROID_CFLAGS. Add new configure tests for Android API version when not explicitly specified. * doc/emacs/android.texi (Android): Add reference to ``Other Input Devices''. (Android File System): Remove restrictions on directory-files on the assets directory. * doc/emacs/emacs.texi (Top): Add Other Input Devices to menu. * doc/emacs/input.texi (Other Input Devices): New node. * doc/lispref/commands.texi (Touchscreen Events): Document changes to touchscreen input events. * doc/lispref/frames.texi (Pop-Up Menus): Likewise. * etc/NEWS: Announce changes. * java/Makefile.in: Use lib-src/asset-directory-tool to generate an `directory-tree' file placed in /assets. * java/debug.sh: Large adjustments to support Android 2.2 and later. * java/org/gnu/emacs/EmacsContextMenu.java (inflateMenuItems): * java/org/gnu/emacs/EmacsCopyArea.java (perform): * java/org/gnu/emacs/EmacsDialog.java (toAlertDialog): * java/org/gnu/emacs/EmacsDrawLine.java (perform): * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): * java/org/gnu/emacs/EmacsDrawable.java (EmacsDrawable): * java/org/gnu/emacs/EmacsFillPolygon.java (perform): * java/org/gnu/emacs/EmacsFillRectangle.java (perform): * java/org/gnu/emacs/EmacsGC.java: * java/org/gnu/emacs/EmacsPixmap.java (destroyHandle): * java/org/gnu/emacs/EmacsSdk7FontDriver.java (draw): Avoid redundant canvas saves and restores. * java/org/gnu/emacs/EmacsService.java (run): * java/org/gnu/emacs/EmacsView.java (EmacsView): (handleDirtyBitmap): * java/org/gnu/emacs/EmacsWindow.java (changeWindowBackground) (EmacsWindow): Make compatible with Android 2.2 and later. * lib-src/Makefile.in (DONT_INSTALL): Add asset-directory-tool on Android. (asset-directory-tool${EXEEXT}): New target. * lib-src/asset-directory-tool.c (struct directory_tree, xmalloc) (main_1, main_2, main): New file. * lib, m4: Merge from gnulib. This will be reverted before merging to master. * lisp/button.el (button-map, push-button): * lisp/frame.el (display-popup-menus-p): Improve touchscreen support. * lisp/subr.el (event-start, event-end): Handle touchscreen events. * lisp/touch-screen.el (touch-screen-handle-timeout) (touch-screen-handle-point-update, touch-screen-handle-point-up) (touch-screen-track-tap, touch-screen-track-drag) (touch-screen-drag-mode-line-1, touch-screen-drag-mode-line): New function ([mode-line touchscreen-begin]) ([bottom-divider touchscreen-begin]): Bind new events. * lisp/wid-edit.el (widget-event-point, widget-keymap) (widget-event-start, widget-button--check-and-call-button) (widget-button-click): Improve touchscreen support. * src/alloc.c (make_lisp_symbol): Avoid ICE on Android NDK GCC. (mark_pinned_symbols): Likewise. * src/android.c (struct android_emacs_window): New struct. (window_class): New variable. (android_run_select_thread): Add workaround for Android platform bug. (android_extract_long, android_scan_directory_tree): New functions. (android_file_access_p): Use those functions instead. (android_init_emacs_window): New function. (android_init_emacs_gc_class): Update signature of `markDirty'. (android_change_gc, android_set_clip_rectangles): Tell the GC whether or not clip rects were dirtied. (android_swap_buffers): Do not look up method every time. (struct android_dir): Adjust for new directory tree lookup. (android_opendir, android_readdir, android_closedir): Likewise. (android_four_corners_bilinear): Fix coding style. (android_ftruncate): New function. * src/android.h: Update prototypes. Replace ftruncate with android_ftruncate when necessary. * src/androidterm.c (handle_one_android_event): Pacify GCC. Fix touch screen tool bar bug. * src/emacs.c (using_utf8): Fix compilation error. * src/fileio.c (Ffile_system_info): Return Qnil when fsusage.o is not built. * src/filelock.c (BOOT_TIME_FILE): Fix definition for Android. * src/frame.c (Fx_parse_geometry): Fix uninitialized variable uses. * src/keyboard.c (lispy_function_keys): Fix `back'. * src/menu.c (x_popup_menu_1): Handle touch screen events. (Fx_popup_menu): Document changes. * src/sfnt.c (main): Improve tests. * src/sfntfont-android.c (sfntfont_android_put_glyphs): Fix minor problem. (init_sfntfont_android): Check for HAVE_DECL_ANDROID_GET_DEVICE_API_LEVEL. * src/sfntfont.c (struct sfnt_font_desc): New fields `adstyle' and `languages'. (sfnt_parse_style): Append tokens to adstyle. (sfnt_parse_languages): New function. (sfnt_enum_font_1): Parse supported languages and adstyle. (sfntfont_list_1): Handle new fields. (sfntfont_text_extents): Fix uninitialized variable use. (syms_of_sfntfont, mark_sfntfont): Adjust accordingly. 2023-01-17 Po Lu * doc/emacs/android.texi (Android Fonts): Document that TTC format fonts are now supported. * doc/emacs/emacs.texi (Top): Fix menus. * doc/lispref/commands.texi (Touchscreen Events) (Key Sequence Input): Document changes to touchscreen events. * etc/DEBUG: Describe how to debug 64 bit binaries on Android. * java/org/gnu/emacs/EmacsCopyArea.java (perform): Explicitly recycle copy bitmap. * java/org/gnu/emacs/EmacsDialog.java (EmacsDialog): New class. * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Use 5 point PolyLine like X, because Android behaves like Postscript on some devices and X elsewhere. * java/org/gnu/emacs/EmacsFillRectangle.java (perform): Explicitly recycle copy bitmap. * java/org/gnu/emacs/EmacsPixmap.java (destroyHandle): Explicitly recycle bitmap and GC if it is big. * java/org/gnu/emacs/EmacsView.java (EmacsView): Make `bitmapDirty' a boolean. (handleDirtyBitmap): Reimplement in terms of that boolean. Explicitly recycle old bitmap and GC. (onLayout): Fix lock up. (onDetachedFromWindow): Recycle bitmap and GC. * java/org/gnu/emacs/EmacsWindow.java (requestViewLayout): Update call to explicitlyDirtyBitmap. * src/android.c (android_run_select_thread, android_select): Really fix android_select. (android_build_jstring): New function. * src/android.h: Update prototypes. * src/androidmenu.c (android_process_events_for_menu): Totally unblock input before process_pending_signals. (android_menu_show): Remove redundant unblock_input and debugging code. (struct android_emacs_dialog, android_init_emacs_dialog) (android_dialog_show, android_popup_dialog, init_androidmenu): Implement popup dialogs on Android. * src/androidterm.c (android_update_tools) (handle_one_android_event, android_frame_up_to_date): Allow tapping tool bar items. (android_create_terminal): Add dialog hook. (android_wait_for_event): Adjust call to android_select. * src/androidterm.h (struct android_touch_point): New field `tool_bar_p'. * src/keyboard.c (read_key_sequence, head_table) (syms_of_keyboard): Prefix touchscreen events with posn. * src/keyboard.h (EVENT_HEAD): Handle touchscreen events. * src/process.c (wait_reading_process_output): Adjust call to android_select. * src/sfnt.c (sfnt_read_table_directory): If the first long turns out to be ttcf, return -1. (sfnt_read_ttc_header): New function. (main): Test TTC support. * src/sfnt.h (struct sfnt_ttc_header): New structure. (enum sfnt_ttc_tag): New enum. * src/sfntfont-android.c (struct sfntfont_android_scanline_buffer): New structure. (GET_SCANLINE_BUFFER): New macro. Try to avoid so much malloc upon accessing the scanline buffer. (sfntfont_android_put_glyphs): Do not use SAFE_ALLOCA to allocate the scaline buffer. (Fandroid_enumerate_fonts): Enumerate ttc fonts too. * src/sfntfont.c (struct sfnt_font_desc): New field `offset'. (sfnt_enum_font_1): Split out enumeration code from sfnt_enum_font. (sfnt_enum_font): Read TTC tables and enumerate each font therein. (sfntfont_open): Seek to the offset specified. * xcompile/Makefile.in (maintainer-clean): Fix depends here. 2023-01-16 Po Lu * src/sfnt.c (sfnt_decompose_compound_glyph): Correct treatment of the Y offset in components with ARG_1_AND_2_ARE_WORDS. (main): Update debugging code. * doc/emacs/android.texi (Android, Android Environment): Improve documentation. * doc/lispref/commands.texi (Touchscreen Events): Document changes to touchscreen support. * doc/lispref/display.texi (Defining Faces, Window Systems): * doc/lispref/frames.texi (Frame Layout) (Font and Color Parameters): * doc/lispref/os.texi (System Environment): Document Android in various places. * java/org/gnu/emacs/EmacsWindow.java (figureChange): Fix crash. * lisp/loadup.el ("touch-screen"): Load touch-screen.el. * lisp/pixel-scroll.el: Autoload two functions. * lisp/term/android-win.el: Add require 'touch-screen. * lisp/touch-screen.el (touch-screen-current-tool) (touch-screen-current-timer, touch-screen-delay) (touch-screen-relative-xy, touch-screen-handle-scroll) (touch-screen-handle-timeout, touch-screen-handle-point-update) (touch-screen-handle-point-up, touch-screen-handle-touch) (global-map, touch-screen): New file. * src/android.c (android_run_debug_thread): Fix build on 64 bit systems. (JNICALL, android_put_pixel): Likewise. (android_transform_coordinates, android_four_corners_bilinear) (android_fetch_pixel_bilinear, android_project_image_bilinear) (android_fetch_pixel_nearest_24, android_fetch_pixel_nearest_1) (android_project_image_nearest): New functions. * src/androidgui.h (struct android_transform): New structure. * src/androidterm.c (android_note_mouse_movement): Remove obsolete TODO. (android_get_scale_factor): New function. (android_draw_underwave): Scale underwave correctly. * src/dispextern.h: Support native image transforms on Android. * src/image.c (matrix_identity, matrix_rotate) (matrix_mirror_horizontal, matrix_translate): New functions. (image_set_transform): Implement native image transforms on Android. (Fimage_transforms_p): Implement on Android. * src/keyboard.c (make_lispy_event, syms_of_keyboard): Handle touch screen menu bar events. * src/sfnt.c: Fix typo in comment. * src/sfntfont-android.c (sfntfont_android_blend, U255TO256) (sfntfont_android_put_glyphs): Prevent redundant swizzling. * src/sfntfont.c (sfntfont_lookup_char): Fix build on 64 bit systems. 2023-01-15 Po Lu * java/org/gnu/emacs/EmacsActivity.java (onCreate): Set the default theme to Theme.DeviceDefault.NoActionBar if possible. (onContextMenuClosed): Add hack for Android bug. * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu) (onMenuItemClick): Set flag upon submenu selection. (inflateMenuItems): Set onClickListener for submenus as well. (display1): Clear new flag. * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Fix rectangle bounds. * java/org/gnu/emacs/EmacsNative.java (setEmacsParams): New argument for the cache directory. * java/org/gnu/emacs/EmacsService.java (onCreate): Pass cache directory. (sync): New function. * src/android.c (struct android_emacs_service): New method `sync'. (setEmacsParams, initEmacs): Handle cache directory. (android_init_emacs_service): Initialize new method `sync'. (android_sync): New function. * src/androidfns.c (Fx_show_tip): Call both functions. * src/androidgui.h: Update prototypes. * src/androidmenu.c (struct android_menu_subprefix) (android_free_subprefixes, android_menu_show): Handle submenu prefixes correctly. * src/androidterm.c (handle_one_android_event): Clear help echo on MotionNotify like on X. * src/menu.c (single_menu_item): Enable submenus on Android. 2023-01-15 Po Lu * java/org/gnu/emacs/EmacsActivity.java (onContextMenuClosed): New function. * java/org/gnu/emacs/EmacsContextMenu.java (EmacsContextMenu): New field `itemAlreadySelected'. (onMenuItemClick): New function. (inflateMenuItems): Attach onClickListener as appropriate. (display1): Clear itemAlreadySelected. (display): Fix runnable synchronization. * java/org/gnu/emacs/EmacsNative.java (sendContextMenu): New function. * java/org/gnu/emacs/EmacsView.java (popupMenu): (cancelPopupMenu): Set popupactive correctly. * src/android.c (android_run_select_thread): Fix android_select again. (android_wait_event): New function. * src/android.h: Update prototypes. * src/androidgui.h (enum android_event_type): New `ANDROID_CONTEXT_MENU' event. (struct android_menu_event, union android_event): Add new event. * src/androidmenu.c (struct android_emacs_context_menu): New structure. (android_init_emacs_context_menu): Add `dismiss' method. (struct android_dismiss_menu_data): New structure. (android_dismiss_menu, android_process_events_for_menu): New functions. (android_menu_show): Set an actual item ID. (popup_activated): Define when stubify as well. (Fmenu_or_popup_active_p): New function. (syms_of_androidmenu): New function. * src/androidterm.c (handle_one_android_event): Handle context menu events. * src/androidterm.h (struct android_display_info): New field for menu item ID. * src/emacs.c (android_emacs_init): Call syms_of_androidmenu. * src/xdisp.c (note_mouse_highlight): Return if popup_activated on Android as well. 2023-01-14 Po Lu * src/android.c (android_run_select_thread, android_select): Handle EINTR in sem_wait and fix sigsets. * xcompile/lib/fpending.c (__fpending): Fix gnulib problem. * xcompile/lib/fpending.c (__fpending): * xcompile/lib/open.c: * xcompile/lib/unistd.c (_GL_UNISTD_INLINE): Remove Android patches. 2023-01-14 Po Lu * java/Makefile.in (clean): Fix distclean and bootstrap-clean rules. * java/debug.sh (jdb_port, attach_existing, num_pids, line): Add new options to upload a gdbserver binary to the device. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): Make focusedActivities public. * java/org/gnu/emacs/EmacsContextMenu.java: New file. * java/org/gnu/emacs/EmacsDrawRectangle.java (perform): Fix bounds computation. * java/org/gnu/emacs/EmacsGC.java (markDirty): Expressly provide stroke width. * java/org/gnu/emacs/EmacsService.java (getLocationOnScreen) (nameKeysym): New functions. * java/org/gnu/emacs/EmacsView.java (): Disable focus highlight. (onCreateContextMenu, popupMenu, cancelPopupMenu): New functions. * java/org/gnu/emacs/EmacsWindow.java: Implement a kind of ``override redirect'' window for tooltips. * src/android.c (struct android_emacs_service): New method `name_keysym'. (android_run_select_thread, android_init_events): (android_select): Release select thread on semaphores instead of signals to avoid one nasty race on SIGUSR2 delivery. (android_init_emacs_service): Initialize new method. (android_create_window): Handle CW_OVERRIDE_REDIRECT. (android_move_resize_window, android_map_raised) (android_translate_coordinates, android_get_keysym_name) (android_build_string, android_exception_check): New functions. * src/android.h: Update prototypes. * src/androidfns.c (android_set_parent_frame, Fx_create_frame) (unwind_create_tip_frame, android_create_tip_frame) (android_hide_tip, compute_tip_xy, Fx_show_tip, Fx_hide_tip) (syms_of_androidfns): Implement tooltips and iconification reporting. * src/androidgui.h (enum android_window_value_mask): Add CWOverrideRedirect. (struct android_set_window_attributes): Add `override_redirect'. (ANDROID_IS_MODIFIER_KEY): Recognize Caps Lock. * src/androidmenu.c (struct android_emacs_context_menu): New struct. (android_init_emacs_context_menu, android_unwind_local_frame) (android_push_local_frame, android_menu_show, init_androidmenu): New functions. * src/androidterm.c (handle_one_android_event): Fix NULL pointer dereference. (android_fullscreen_hook): Handle fullscreen correctly. (android_draw_box_rect): Fix top line. (get_keysym_name): Implement function. (android_create_terminal): Remove scroll bar stubs and add menu hook. * src/androidterm.h: Update prototypes. * src/emacs.c (android_emacs_init): Initialize androidmenu.c. * xcompile/Makefile.in: Fix clean rules. 2023-01-14 Po Lu * .gitignore: Add new files. * INSTALL.android: New file. * Makefile.in (clean_dirs): Clean xcompile as well. * admin/merge-gnulib (avoided_flags): Import Gnulib into Android directory as well. * doc/emacs/android.texi (Android): * doc/emacs/emacs.texi (Top): New node `Android'. * java/org/gnu/emacs/EmacsThread.java (run): Use right executable name. * lib/Makefile.in (ANDROID_CFLAGS): Use better way to refer to /src. (vpath): Delete ugly block of vpath statements. (mostlyclean): Remove Makefile.android. * lib/fpending.c (__fpending): * lib/open.c: * lib/unistd.c (_GL_UNISTD_INLINE): Revert changes to gnulib in lib/. * src/android.h: * src/androidterm.c: Fix build. * xcompile/Makefile.in (LIB_SRCDIR, LIBSRC_BINARIES) (src/verbose.mk, PRE_BUILD_DEPS, PHONY): Use gnulib in xcompile/lib/ as opposed to lib/. * xcompile/README: Adjust README. * xcompile/lib: Check-in Gnulib with patches for Android. 2023-01-13 Po Lu * java/org/gnu/emacs/EmacsService.java (queryTree): Fix NULL pointer dereference. * src/android.c (android_query_tree): Set *nchildren_return. * .gitignore: Add AndroidManifest.xml. * java/AndroidManifest.xml: Remove file that is now generated. * src/frame.c (make_monitor_attribute_list): Allow source to be NULL. * configure.ac (ANDROID_MIN_SDK): New variable. (DX): Remove and replace with D8. (XCONFIGURE): Check for the minimum version of Android the cross compiler compiles for. Generate java/AndroidManifest.xml from java/AndroidManifest.xml.in. Allow using Zlib on Android. * java/AndroidManifest.xml.in: New file. Use the minimum SDK detected by configure. * java/Makefile.in (top_srcdir, version): New variables. (DX, D8): Replace with D8. (ANDROID_MIN_SDK, APK_NAME): New variables. (.PHONY, .PRECIOUS, classes.dex, emacs.apk): Generate $(APK_NAME) rather than `emacs.apk'. * java/debug.sh: New option --attach-existing. Attach to an existing Emacs instance when specified. * java/org/gnu/emacs/EmacsActivity.java (EmacsActivity): New field `isPaused'. (invalidateFocus1): Fix infinite recursion. (detachWindow): Deiconify window. (attachWindow): Iconify the window if the activity is paused. (onCreate): Use the ``no title bar'' theme. (onPause, onResume): New functions. * java/org/gnu/emacs/EmacsNative.java (sendTouchUp, sendTouchDown) (sendTouchMove, sendWheel, sendIconified, sendDeiconified): New functions. * java/org/gnu/emacs/EmacsSdk7FontDriver.java (Sdk7Typeface): (list): Remove logging for code that is mostly going to be unused. * java/org/gnu/emacs/EmacsService.java (ringBell, queryTree) (getScreenWidth, getScreenHeight, detectMouse): New functions. * java/org/gnu/emacs/EmacsSurfaceView.java (EmacsSurfaceView) (surfaceChanged, surfaceCreated, surfaceDestroyed): Add extra debug logging. Avoid deadlock in surfaceCreated. * java/org/gnu/emacs/EmacsView.java (EmacsView): Try very hard to make the SurfaceView respect Z order. It didn't work. (handleDirtyBitmap): Copy over the contents from the old bitmap. (explicitlyDirtyBitmap): New function. (onLayout): Don't dirty bitmap if unnecessary. (damageRect, swapBuffers): Don't synchronize so hard. (onTouchEvent): Call window.onTouchEvent instead. (moveChildToBack, raise, lower): New functions. * java/org/gnu/emacs/EmacsWindow.java (Coordinate): New subclass. (pointerMap, isMapped, isIconified, dontFocusOnMap) (dontAcceptFocus): New fields. (EmacsWindow): Don't immediately register unmapped window. (viewLayout): Send configure event outside the lock. (requestViewLayout): Explicitly dirty the bitmap. (mapWindow): Register the window now. Respect dontFocusOnMap. (unmapWindow): Unregister the window now. (figureChange, onTouchEvent): New functions. (onSomeKindOfMotionEvent): Handle scroll wheel events. (reparentTo, makeInputFocus, raise, lower, getWindowGeometry) (noticeIconified, noticeDeiconified, setDontAcceptFocus) (setDontFocusOnMap, getDontFocusOnMap): New functions. * java/org/gnu/emacs/EmacsWindowAttachmentManager.java (registerWindow, detachWindow): Synchronize. (noticeIconified, noticeDeiconified): New functions. (copyWindows): New function. * lisp/frame.el (frame-geometry, frame-edges) (mouse-absolute-pixel-position, set-mouse-absolute-pixel-position) (frame-list-z-order, frame-restack, display-mouse-p) (display-monitor-attributes-list): Implement on Android. * lisp/mwheel.el (mouse-wheel-down-event, mouse-wheel-up-event) (mouse-wheel-left-event, mouse-wheel-right-event): Define on Android. * src/android.c (struct android_emacs_service): New methods `ringBell', `queryTree', `getScreenWidth', `getScreenHeight', and `detectMouse'. (struct android_event_queue, android_init_events) (android_next_event, android_write_event): Remove write limit. (android_file_access_p): Handle directories correctly. (android_close): Fix coding style. (android_fclose): New function. (android_init_emacs_service): Initialize new methods. (android_reparent_window): Implement function. (android_bell, android_set_input_focus, android_raise_window) (android_lower_window, android_query_tree, android_get_geometry) (android_get_screen_width, android_get_screen_height) (android_get_mm_width, android_get_mm_height) (android_detect_mouse) (android_set_dont_focus_on_map, android_set_dont_accept_focus): New functions. (struct android_dir): New structure. (android_opendir, android_readdir, android_closedir): New functions. (emacs_abort): Implement here on Android and poke debuggerd into generating a tombstone. * src/android.h: Update prototypes. * src/androidfns.c (android_set_parent_frame): New function. (android_default_font_parameter): Use sane font size by default. (Fx_display_pixel_width, Fx_display_pixel_height) (Fx_display_mm_width, Fx_display_mm_height) (Fx_display_monitor_attributes_list): Rename to start with `android-'. Implement. Fiddle with documentation to introduce Android specific nuances. (Fandroid_display_monitor_attributes_list): New function. (Fx_frame_geometry, frame_geometry): New function. (Fandroid_frame_geometry): Implement correctly. (Fx_frame_list_z_order): Rename to start with `android-'. (android_frame_list_z_order, Fandroid_frame_list_z_order): Implement. (Fx_frame_restack): Rename to start with `android-'. (Fandroid_frame_restack): ``Implement''. (Fx_mouse_absolute_pixel_position): Rename to start with `android-'. (Fandroid_mouse_absolute_pixel_position): ``Implement''. (Fx_set_mouse_absolute_pixel_position): Rename to start with `android-'. (Fandroid_set_mouse_absolute_pixel_position): ``Implement''. (Fandroid_detect_mouse): New function. (android_set_menu_bar_lines): Use FRAME_ANDROID_DRAWABLE when clearing area. (android_set_no_focus_on_map, android_set_no_accept_focus): New functions. (android_frame_parm_handlers): Register new frame parameter handlers. (syms_of_androidfns): Update appropriately. * src/androidfont.c (androidfont_draw): Use FRAME_ANDROID_DRAWABLE instead of FRAME_ANDROID_WINDOW. * src/androidgui.h (enum android_event_type): New events. (struct android_touch_event, struct android_wheel_event) (struct android_iconify_event): New structures. (union android_event): Add new events. * src/androidterm.c (android_clear_frame): Use FRAME_ANDROID_DRAWABLE instead of FRAME_ANDROID_WINDOW. (android_flash, android_ring_bell): Implement bell ringing. (android_toggle_invisible_pointer): Don't TODO function that can't be implemented. (show_back_buffer, android_flush_dirty_back_buffer_on): Check if a buffer flip is required before doing the flip. (android_lower_frame, android_raise_frame): Implement functions. (android_update_tools, android_find_tool): New functions. (handle_one_android_event): Handle new iconification, wheel and touch events. (android_read_socket): Implement pending-autoraise-frames. (android_frame_up_to_date): Implement bell ringing. (android_buffer_flipping_unblocked_hook): Check if a buffer flip is required before doing the flip. (android_focus_frame, android_frame_highlight) (android_frame_unhighlight): New function. (android_frame_rehighlight): Implement functions. (android_iconify_frame): Always display error. (android_set_alpha): Update commentary. (android_free_frame_resources): Free frame touch points. (android_scroll_run, android_flip_and_flush) (android_clear_rectangle, android_draw_fringe_bitmap) (android_draw_glyph_string_background, android_fill_triangle) (android_clear_point, android_draw_relief_rect) (android_draw_box_rect, android_draw_glyph_string_bg_rect) (android_draw_image_foreground, android_draw_stretch_glyph_string) (android_draw_underwave, android_draw_glyph_string_foreground) (android_draw_composite_glyph_string_foreground) (android_draw_glyphless_glyph_string_foreground) (android_draw_glyph_string, android_clear_frame_area) (android_clear_under_internal_border, android_draw_hollow_cursor) (android_draw_bar_cursor, android_draw_vertical_window_border) (android_draw_window_divider): Use FRAME_ANDROID_DRAWABLE instead of FRAME_ANDROID_WINDOW for drawing operations. * src/androidterm.h (struct android_touch_point): New structure. (struct android_output): New fields. (FRAME_ANDROID_NEED_BUFFER_FLIP): New macro. * src/dired.c (emacs_readdir, open_directory) (directory_files_internal_unwind, read_dirent) (directory_files_internal, file_name_completion): Add indirection over readdir and opendir. Use android variants on Android. * src/dispnew.c (Fopen_termscript): * src/fileio.c (fclose_unwind): Use emacs_fclose. (Faccess_file): Call android_file_access_p. (file_accessible_directory_p): Append right suffix to Android assets directory. (do_auto_save_unwind): Use emacs_fclose. * src/keyboard.c (lispy_function_keys): Use right function key for page up and page down. (Fopen_dribble_file): Use emacs_fclose. * src/lisp.h: New prototype emacs_fclose. * src/lread.c (close_infile_unwind): Use emacs_fclose. * src/sfnt.c (sfnt_curve_is_flat): Fix area-squared computation. (sfnt_prepare_raster): Compute raster width and height consistently with outline building. (sfnt_build_outline_edges): Use the same offsets used to set offy and offx. (main): Adjust debug code. * src/sfntfont-android.c (sfntfont_android_saturate32): Delete function. (sfntfont_android_blend, sfntfont_android_blendrgb): Remove unnecessary debug code. (sfntfont_android_composite_bitmap): Prevent out of bounds write. (sfntfont_android_put_glyphs): Use FRAME_ANDROID_DRAWABLE. (init_sfntfont_android): Initialize Monospace Serif font to something sensible. * src/sfntfont.c (sfntfont_text_extents): Clear glyph metrics before summing up pcm. (sfntfont_draw): Use s->font instead of s->face->font. * src/sysdep.c (emacs_fclose): Wrap around android_fclose on Android. * src/term.c (Fsuspend_tty, delete_tty): Use emacs_fclose. * src/verbose.mk.in (AM_V_DX): Replace with D8 version. 2023-01-11 Po Lu Bring up the sfnt-android font driver * configure.ac (ANDROID_CFLAGS): Add sfnt-related font objects to ANDROID_OBJ when not building stubs. * lisp/startup.el (android-fonts-enumerated): New variable. (normal-top-level): Set it. Also enumerate fonts as early as possible upon startup. * src/alloc.c (cleanup_vector): Only finalize Android font entities. (garbage_collect): Mark sfntfont.c. * src/android.c (struct android_emacs_drawable): New field `damage_rect'. (android_init_emacs_drawable): Initialize Lorg/gnu/emacs/EmacsDrawable;#damageRect(Landroid/graphics/rect;)V. (android_create_gc): Initialize cached GC fields. (android_free_gc): Free cached GC clip rectangles. (android_change_gc): Cache fields as appropriate. (android_set_clip_rectangles): Set cached clip rectangles for easy access from C. (android_get_gc_values): Use cached values. (android_get_image): Remove obsolete comment. (android_lock_bitmap, android_damage_window): New functions that don't parallel anything on X. * src/android.h: Update prototypes. * src/androidfns.c (android_default_font_parameter): Set Droid Sans Mono as the default monospace font. (Fx_create_frame): Register the sfntfont driver. * src/androidgui.h (struct android_gc): Add C side caches for clip rectangles and the foreground and background colors. * src/androidterm.h: Update prototypes. * src/dispextern.h (struct gui_box): New struct. (gui_union_rectangles): New function. * src/emacs.c (android_emacs_init): Initialize Android font stuff late. * src/font.c (font_make_entity): Clear `is_android' field on Android. (font_make_entity_android): Set `is_android' field. * src/font.h (struct font_entity): New field `is_android'. * src/print.c (print_vectorlike): Don't print private data, which could include Lisp_Misc. * src/sfnt.c (sfnt_read_cmap_format_0, sfnt_read_cmap_format_2) (sfnt_read_cmap_format_4, sfnt_read_cmap_format_6) (sfnt_read_cmap_format_8, sfnt_read_cmap_format_12): Remove buggy pragmas. (sfnt_lookup_glyph_4_1): New function. (sfnt_lookup_glyph_4): Handle malformed lookup tables found on Android. (sfnt_lookup_glyph): Fix overflow problems in glyph checks. (sfnt_read_glyph): Handle empty glyphs. This implements some behavior which everyone else seems to as well, but I can't find documented in the TrueType Reference Manual. (sfnt_free_glyph): Export correctly. (sfnt_transform_coordinates): Make faster. (sfnt_lerp_half): Fix lerping in some cases. (sfnt_decompose_glyph): Handle empty glyphs correctly. Close contours manually instead of waiting for the edge building process to do that. This lets curves be handled correctly. (struct sfnt_build_glyph_outline_context): Move internal struct back to sfnt.c. (sfnt_build_append): Fix detection of initial entry. (sfnt_curve_to_and_build_1): Fix De Casteljau implementation. (sfnt_curve_to_and_build): Use fixed point arithmetic to scale outlines. (sfnt_build_glyph_outline): Clear reference counts. Use fixed point arithmetic. (sfnt_prepare_raster): Align rasters to 4 bytes, SFNT_POLY_ALIGNMENT. Fix calculation of offx and offy. (sfnt_step_edge_by): Step edge by previously computed step_x. (sfnt_build_outline_edges): Adjust for already closed contours. Ignore edges abandoned after grid fit. Also precompute step_x to avoid multiplication on each span rastered. (sfnt_poly_edges): Improve alignment. (sfnt_fill_span): Rewrite to avoid control flow in while loop. (sfnt_poly_span): Remove unnecessary code. (sfnt_raster_glyph_outline): Use raster stride instead of width. (sfnt_test_edge, sfnt_test_raster, main): Improve debugging code. * src/sfnt.h (struct sfnt_glyph_outline): Add refcount field to outline. (struct sfnt_build_glyph_outline_context): Remove private struct. (struct sfnt_raster): Add refcount field to raster. (struct sfnt_edge): Improve doc. Add `source_x' field used when built with TEST. (SFNT_CEIL_FIXED): New macro. * src/sfntfont-android.c (sfntfont_android_saturate32) (sfntfont_android_scale32, sfntfont_android_mul8x2) (sfntfont_android_blend, U255TO256) (sfntfont_android_composite_bitmap, sfntfont_android_union_boxes) (sfntfont_android_put_glyphs, sfntfont_android_get_cache): New functions. (android_sfntfont_driver): New font driver. (Fandroid_enumerate_fonts): New function. (syms_of_sfntfont_android_for_pdumper, init_sfntfont_android) (syms_of_sfntfont_android): Initialize default fonts, special family mapping and font driver. * src/sfntfont.c (struct sfnt_font_desc): New fields `char_cache', `cmap_invalid' and `subtable'. (sfnt_setup_coding_system): Improve commentary. Add default branch. Fix return value. (sfnt_safe_encode_coding_object_1) (sfnt_safe_encode_coding_object_2): (sfnt_safe_encode_coding_object): Use decode_coding_object instead of encode_coding_object. (sfnt_decode_font_string): Adjust for rename. (sfnt_decode_foundry_name): New function. (sfnt_weight_descriptions, sfnt_slant_descriptions) (sfnt_width_descriptions): Fix definitions. (sfnt_parse_style): Make function work. (sfnt_enum_font): Initialize designer, char-cache and subtable platform ID. (sfntfont_charset_for_name, mark_sfntfont) (sfntfont_charset_for_cmap): New functions. (syms_of_sfntfont): New variable `sfnt-default-family-alist'. * src/sfntfont.h (_SFNTFONT_H_): Update prototypes. * src/xdisp.c (gui_union_rectangles): New function. 2023-01-08 Po Lu * configure.ac (ANDROID_OBJS): Add sfntfont files. * src/sfnt.h: * src/sfntfont-android.c: * src/sfntfont.c: * src/sfntfont.h: New files. 2023-01-08 Po Lu * src/android.c (android_change_gc): Fix situations where clip rects are cleared. (android_create_pixmap_from_bitmap_data): Fix bitmap data iteration. * src/androidfns.c (Fx_show_tip, Fx_hide_tip): Remove annoying errors. * src/androidgui.h (enum android_event_type) (struct android_crossing_event) (struct android_motion_event) (struct android_button_event, union android_event): New crossing, motion and button events. * src/androidterm.c (android_note_mouse_movement) (mouse_or_wdesc_frame, android_construct_mouse_click) (handle_one_android_event, android_mouse_position) (android_wait_for_event, android_set_window_size_1) (android_bitmap_icon, android_free_frame_resources) (syms_of_androidterm): New functions. Handle crossing, motion and button events. * src/androidterm.h (struct android_display_info): New field `last_mouse_movement_time'. (struct android_output): Remove unused `need_buffer_flip' field. * src/emacs.c (android_emacs_init): Initialize sfntfont. * src/frame.c (syms_of_frame): Set frame_inhibit_implied_resize to some reasonable value. * src/frame.h (GCALIGNED_STRUCT): Set wait_event_type on Android. * src/sfnt.c (eassert, TEST_STATIC, available, enum sfnt_table) (sfnt_table_names, SFNT_ENDOF, struct sfnt_table_directory) (sfnt_scaler_type, sfnt_coerce_fixed, struct sfnt_hhea_table) (struct sfnt_cmap_table, enum sfnt_platform_id) (enum sfnt_unicode_platform_specific_id) (enum sfnt_macintosh_platform_specific_id) (enum sfnt_microsoft_platform_specific_id) (struct sfnt_cmap_encoding_subtable) (struct sfnt_cmap_encoding_subtable_data) (struct sfnt_cmap_format_0) (struct sfnt_cmap_format_2_subheader, struct sfnt_cmap_format_2) (struct sfnt_cmap_format_4, struct sfnt_cmap_format_6) (struct sfnt_cmap_format_8_or_12_group, struct sfnt_cmap_format_8) (struct sfnt_cmap_format_12, struct sfnt_maxp_table) (struct sfnt_loca_table_short, struct sfnt_loca_table_long) (struct sfnt_glyf_table, struct sfnt_simple_glyph) (struct sfnt_compound_glyph_component, struct sfnt_compound_glyph) (struct sfnt_glyph, sfnt_read_table_directory, file) (sfnt_read_cmap_table) (sfnt_read_head_table, success, sfnt_read_hhea_table) (sfnt_read_loca_table_short, sfnt_read_loca_table_long) (sfnt_read_maxp_table, sfnt_read_glyf_table) (sfnt_read_compound_glyph, sfnt_read_glyph, struct sfnt_point) (sfnt_expand_compound_glyph_context) (sfnt_decompose_compound_glyph, struct sfnt_glyph_outline) (enum sfnt_glyph_outline_flags) (struct sfnt_build_glyph_outline_context) (sfnt_build_append, sfnt_build_glyph_outline, struct sfnt_raster) (struct sfnt_edge, sfnt_prepare_raster, sfnt_build_outline_edges) (sfnt_raster_glyph_outline): Move structures to sfnt.h. (struct sfnt_long_hor_metric, sfnt_read_hmtx_table) (sfnt_lookup_glyph_metrics, sfnt_read_name_table, sfnt_find_name) (sfnt_read_meta_table, sfnt_find_metadata, sfnt_test_edge_ignore): New functions. (main): Add new tests. 2023-01-08 Po Lu * java/org/gnu/emacs/EmacsPaintQueue.java * java/org/gnu/emacs/EmacsPaintReq.java: Remove files. * java/org/gnu/emacs/EmacsCopyArea.java (perform, paintTo): * java/org/gnu/emacs/EmacsDrawLine.java: * java/org/gnu/emacs/EmacsDrawPoint.java: * java/org/gnu/emacs/EmacsDrawRectangle.java (paintTo): * java/org/gnu/emacs/EmacsDrawable.java: * java/org/gnu/emacs/EmacsFillPolygon.java: * java/org/gnu/emacs/EmacsFillRectangle.java: * java/org/gnu/emacs/EmacsFontDriver.java: * java/org/gnu/emacs/EmacsGC.java: * java/org/gnu/emacs/EmacsNative.java: * java/org/gnu/emacs/EmacsPixmap.java: * java/org/gnu/emacs/EmacsSdk23FontDriver.java: * java/org/gnu/emacs/EmacsSdk7FontDriver.java (textExtents1) (textExtents, draw): * java/org/gnu/emacs/EmacsService.java (copyArea): * java/org/gnu/emacs/EmacsSurfaceView.java: * java/org/gnu/emacs/EmacsView.java (onLayout, onFocusChanged): * java/org/gnu/emacs/EmacsWindow.java (run, resizeWindow) (lockCanvas, getBitmap, onKeyDown, onKeyUp) (onActivityDetached): Move rendering to main thread. Make drawing operations completely static. * src/androidmenu.c: New file. 2023-01-07 Po Lu * src/sfnt.c (xmalloc, xrealloc, xfree, eassert, MIN) (sfnt_table_names, SFNT_ENDOF, struct sfnt_table_directory) (enum sfnt_scaler_type, sfnt_coerce_fixed, struct sfnt_hhea_table) (struct sfnt_cmap_table, enum sfnt_platform_id) (enum sfnt_unicode_platform_specific_id) (enum sfnt_macintosh_platform_specific_id) (enum sfnt_microsoft_platform_specific_id) (struct sfnt_cmap_encoding_subtable) (struct sfnt_cmap_encoding_subtable_data) (struct sfnt_cmap_format_0, struct sfnt_cmap_format_2_subheader) (struct sfnt_cmap_format_2, struct sfnt_cmap_format_4) (struct sfnt_cmap_format_6, struct sfnt_cmap_format_8_or_12_group) (struct sfnt_cmap_format_8, struct sfnt_cmap_format_12) (struct sfnt_maxp_table, struct sfnt_loca_table_short) (struct sfnt_loca_table_long, struct sfnt_glyf_table) (struct sfnt_simple_glyph, struct sfnt_compound_glyph_component) (struct sfnt_compound_glyph, struct sfnt_glyph, _sfnt_swap16) (_sfnt_swap32, sfnt_swap16, sfnt_find_table) (sfnt_read_cmap_format_0, sfnt_read_cmap_format_2) (sfnt_read_cmap_format_4, sfnt_read_cmap_format_6) (sfnt_read_cmap_format_8, sfnt_read_cmap_format_12) (sfnt_read_cmap_table_1, sfnt_read_cmap_table) (sfnt_lookup_glyph_0) (sfnt_lookup_glyph_2, sfnt_bsearch_above, sfnt_compare_uint16) (sfnt_lookup_glyph_4, sfnt_lookup_glyph_6, sfnt_lookup_glyph_8) (sfnt_lookup_glyph_12, sfnt_lookup_glyph, sfnt_read_head_table) (sfnt_read_hhea_table, sfnt_read_loca_table_short) (sfnt_read_loca_table_long, sfnt_read_maxp_table) (sfnt_read_glyf_table, sfnt_read_simple_glyph) (sfnt_read_compound_glyph, sfnt_read_glyph, sfnt_free_glyph) (struct sfnt_point, sfnt_transform_coordinates) (struct sfnt_compound_glyph_context) (sfnt_expand_compound_glyph_context, sfnt_round_fixed) (sfnt_decompose_compound_glyph, sfnt_lerp_half) (sfnt_decompose_glyph, struct sfnt_glyph_outline) (enum sfnt_glyph_outline_flags) (struct sfnt_build_glyph_outline_context, sfnt_build_append) (sfnt_move_to_and_build, sfnt_line_to_and_build, sfnt_mul_fixed) (sfnt_div_fixed, sfnt_ceil_fixed, sfnt_floor_fixed) (sfnt_curve_is_flat, sfnt_curve_to_and_build_1) (sfnt_curve_to_and_build, sfnt_build_glyph_outline) (struct sfnt_raster, struct sfnt_edge, sfnt_poly_coverage) (sfnt_poly_grid_ceil, sfnt_prepare_raster, sfnt_step_edge_by) (sfnt_build_outline_edges, sfnt_compare_edges, sfnt_poly_edges) (sfnt_saturate_short, sfnt_fill_span, sfnt_poly_span) (sfnt_raster_span, sfnt_raster_edge, sfnt_raster_glyph_outline) (struct sfnt_long_hor_metric, struct sfnt_hmtx_table) (struct sfnt_glyph_metrics, sfnt_read_hmtx_table) (sfnt_lookup_glyph_metrics, struct sfnt_test_dcontext) (sfnt_test_move_to, sfnt_test_line_to, sfnt_test_curve_to) (sfnt_test_get_glyph, sfnt_test_free_glyph, sfnt_test_span) (sfnt_test_edge, sfnt_test_raster, main): New file, meant to read TrueType fonts and OpenType fonts using TrueType outlines. 2023-01-02 Po Lu * Makefile.in (java): Depend on info. (MAKEFILE_NAME, config.status): Remove unneeded changes. * configure.ac (BUILD_DETAILS, ANDROID_STUBIFY): Don't require a C++ compiler on Android. * java/AndroidManifest.xml : Set launchMode appropriately. : New activity. * java/Makefile.in (CROSS_BINS): Add Emacsclient to the list of binaries that will be copied into the app package. * java/org/gnu/emacs/EmacsActivity.java (onCreate): Use the window attachment manager. * java/org/gnu/emacs/EmacsCopyArea.java (paintTo): Implement clip masks correctly. * java/org/gnu/emacs/EmacsDrawRectangle.java (getRect, paintTo): Fix damage tracking rectangles. * java/org/gnu/emacs/EmacsFontDriver.java (toString): New function. (FontMetrics): Fix signature of textExtents. * java/org/gnu/emacs/EmacsMultitaskActivity.java: New file. * java/org/gnu/emacs/EmacsNative.java (sendFocusIn, sendFocusOut) (sendWindowAction): New functions. * java/org/gnu/emacs/EmacsPaintQueue.java (run): Correct treatment of the clip rectangle list. * java/org/gnu/emacs/EmacsPixmap.java: Add constructor for mutable pixmaps. * java/org/gnu/emacs/EmacsSdk23FontDriver.java: New file. * java/org/gnu/emacs/EmacsSdk7FontDriver.java (Sdk7Typeface) (Sdk7FontEntity, Sdk7FontObject, checkMatch, hasChar, encodeChar): Implement text display and fix font metrics semantics. * java/org/gnu/emacs/EmacsService.java (EmacsService): Remove availableChildren. (getLibraryDirectory, onCreate): Pass pixel density to Emacs. (clearArea): Fix arguments. Switch to using the window attachment manager. * java/org/gnu/emacs/EmacsSurfaceView.java (surfaceChanged) (surfaceCreated): Flip buffers on surface attachment. * java/org/gnu/emacs/EmacsView.java (swapBuffers): New argument FORCE. Always swap if it is true. (onKeyMultiple, onFocusChanged): New functions. * java/org/gnu/emacs/EmacsWindow.java (destroyHandle, run): Switch to using the window attachment manager. * java/org/gnu/emacs/EmacsWindowAttachmentManager.java: New file. * lisp/cus-edit.el (custom-button, custom-button-mouse) (custom-button-pressed): * lisp/faces.el (tool-bar): Define faces correctly on Android. * src/android.c (struct android_emacs_pixmap): Add mutable constructor. (struct android_emacs_drawable): New structure. (android_write_event): Check if event queue hasn't yet been initialized. (android_select): Set errno to EINTR if pselect fails. (android_close): Remove unused debugging code. (android_get_home_directory): New function. (Java_org_gnu_emacs_EmacsNative_setEmacsParams): Set pixel density and compute game path. (android_init_emacs_drawable): New function. (Java_org_gnu_emacs_EmacsNative_sendKeyPress): New argument `unicode_char'. Pass it in events. (Java_org_gnu_emacs_EmacsNative_sendKeyRelease): Likewise. (Java_org_gnu_emacs_EmacsNative_sendFocusIn) (Java_org_gnu_emacs_EmacsNative_sendFocusOut) (Java_org_gnu_emacs_EmacsNative_sendWindowAction): New functions. (android_resolve_handle): Export function. (android_change_gc): Clear clip rects under the right circumstances. Set right clip mask field. (android_create_pixmap_from_bitmap_data): Use correct alpha channels. (android_create_pixmap): Create mutable pixmap and avoid redundant color array allocation. (android_create_bitmap_from_data, android_create_image) (android_destroy_image, android_put_pixel, android_get_pixel) (android_get_image, android_put_image, faccessat): New functions. * src/android.h: Update prototypes. * src/androidfns.c (android_default_font_parameter): Prefer monospace to Droid Sans Mono. * src/androidfont.c (struct android_emacs_font_driver): New method `draw'. (struct android_emacs_font_spec): New field `dpi'. (struct androidfont_info): Add font metrics cache. (android_init_font_driver, android_init_font_spec): Adjust accordingly. (androidfont_from_lisp, androidfont_from_java): Handle new fields. (androidfont_draw): Implement function. (androidfont_open_font): Set pixel size correctly. (androidfont_close_font): Free metrics cache. (androidfont_cache_text_extents) (androidfont_check_cached_extents): New functions. (androidfont_text_extents): Cache glyph metrics somewhere for future use. (androidfont_list_family): Implement function. * src/androidgui.h (enum android_event_type): New focus and window action events. (enum android_modifier_mask): New masks. (struct android_key_event): New field `unicode_char'. (ANDROID_IS_MODIFIER_KEY): Newmacro. (struct android_focus_event, struct android_window_action_event): New structs. (union android_event): Add new fields. (enum android_image_format, struct android_image): New enums and structs. * src/androidterm.c (android_android_to_emacs_modifiers) (android_emacs_to_android_modifiers, android_lower_frame) (android_raise_frame, android_new_focus_frame) (android_focus_changed, android_detect_focus_change): New functions. (handle_one_android_event): Implement focus and key event handling. (android_frame_rehighlight): New function. (android_frame_raise_lower): Implement accordingly. (android_make_frame_invisible): Clear highlight_frame if required. (android_free_frame_resources): Clear x_focus_event_frame if required. (android_draw_fringe_bitmap, android_draw_image_foreground) (android_draw_image_foreground_1) (android_draw_image_glyph_string): Remove unnecessary code. (android_create_terminal, android_term_init): Set the baud rate to something sensible. * src/androidterm.h (struct android_bitmap_record): Make structure the same as on X. (struct android_display_info): New focus tracking fields. (struct android_output): Likewise. * src/dispextern.h (struct image): Add ximg and mask_img on Android. * src/emacs.c (android_emacs_init): Fix argc sorting iteration. * src/fileio.c (user_homedir, get_homedir): Implement correctly on Android. * src/font.h (PT_PER_INCH): Define correctly on Android. * src/fringe.c (X, swap_nibble, init_fringe_bitmap): Swap fringe bitmaps correctly on Android. * src/image.c (GET_PIXEL, image_create_bitmap_from_data) (image_create_bitmap_from_file, free_bitmap_record) (image_unget_x_image_or_dc, struct image_type) (prepare_image_for_display, image_clear_image_1) (image_size_in_bytes, x_check_image_size) (x_create_x_image_and_pixmap, x_destroy_x_image) (image_check_image_size, image_create_x_image_and_pixmap_1) (image_destroy_x_image, gui_put_x_image, image_put_x_image) (image_get_x_image, image_unget_x_image) (Create_Pixmap_From_Bitmap_Data, image_pixmap_draw_cross) (MaskForeground, image_types, syms_of_image): Implement all of the above on Android in terms of an API very similar to X. * src/keyboard.c (FUNCTION_KEY_OFFSET, lispy_function_keys): Define to something sensible under Android. * src/lread.c (build_load_history): Fix problem. 2022-12-31 Po Lu * .dir-locals.el (c-mode): Add ANDROID_EXPORT noise macro. * .gitignore: Add new files to ignore. * Makefile.in: Adjust for Android. * admin/merge-gnulib: Add new warning. * configure.ac: Detect Android. Run cross-configuration for Android when appropriate. * etc/DEBUG: Document how to debug Emacs on Android. * java/AndroidManifest.xml: * java/Makefile.in: * java/README: * java/debug.sh: * java/org/gnu/emacs/EmacsActivity.java: * java/org/gnu/emacs/EmacsApplication.java: * java/org/gnu/emacs/EmacsCopyArea.java: * java/org/gnu/emacs/EmacsDrawLine.java: * java/org/gnu/emacs/EmacsDrawPoint.java: * java/org/gnu/emacs/EmacsDrawRectangle.java: * java/org/gnu/emacs/EmacsDrawable.java: * java/org/gnu/emacs/EmacsFillPolygon.java: * java/org/gnu/emacs/EmacsFillRectangle.java: * java/org/gnu/emacs/EmacsFontDriver.java: * java/org/gnu/emacs/EmacsGC.java: * java/org/gnu/emacs/EmacsHandleObject.java: * java/org/gnu/emacs/EmacsNative.java: * java/org/gnu/emacs/EmacsPaintQueue.java: * java/org/gnu/emacs/EmacsPaintReq.java: * java/org/gnu/emacs/EmacsPixmap.java: * java/org/gnu/emacs/EmacsSdk7FontDriver.java: * java/org/gnu/emacs/EmacsService.java: * java/org/gnu/emacs/EmacsSurfaceView.java: * java/org/gnu/emacs/EmacsThread.java: * java/org/gnu/emacs/EmacsView.java: * java/org/gnu/emacs/EmacsWindow.java: New files and classes. * lib-src/Makefile.in (srcdir): * lib/Makefile.in (VPATH, HAVE_NATIVE_COMP, libgnu_a_SOURCES): (DEPFLAGS): Configure correctly for cross-compiling. * lib/faccessat.c: * lib/fpending.c (__fpending): * lib/open.c: * lib/unistd.c (_GL_UNISTD_INLINE): Temporary adjustments to Gnulib. * lisp/frame.el (display-graphic-p, display-screens) (display-pixel-height, display-pixel-width, display-mm-height) (display-mm-width, display-backing-store, display-save-under) (display-planes, display-color-cells, display-visual-class): Adjust for new window system `android'. * lisp/image/wallpaper.el (x-open-connection): Add declaration. * lisp/loadup.el (featurep): Load files for Android. * lisp/net/eww.el (eww-form-submit, eww-form-file) (eww-form-checkbox, eww-form-select): Adjust faces for android. * lisp/term/android-win.el: New file. * src/Makefile.in: Add new targets emacs.so and android-emacs, then adjust for cross compilation. * src/alloc.c (cleanup_vector): Clean up Android font entities as well. (garbage_collect): Mark androidterm. * src/android-emacs.c (main): * src/android.c (ANDROID_THROW, enum android_fd_table_entry_flags) (struct android_emacs_service, struct android_emacs_pixmap) (struct android_graphics_point, struct android_event_container) (struct android_event_queue, android_run_select_thread) (android_handle_sigusr1, android_init_events, android_pending) (android_next_event, android_write_event, android_select) (android_run_debug_thread, android_user_full_name) (android_get_asset_name, android_fstat, android_fstatat) (android_file_access_p, android_hack_asset_fd, android_open) (android_close, JNICALL, android_init_emacs_service) (android_init_emacs_pixmap, android_init_graphics_point) (MAX_HANDLE, struct android_handle_entry, android_alloc_id) (android_destroy_handle, android_resolve_handle) (android_resolve_handle2, android_change_window_attributes) (android_create_window, android_set_window_background) (android_destroy_window, android_init_android_rect_class) (android_init_emacs_gc_class, android_create_gc, android_free_gc) (android_change_gc, android_set_clip_rectangles) (android_reparent_window, android_lookup_method) (android_clear_window, android_map_window, android_unmap_window) (android_resize_window, android_move_window, android_swap_buffers) (android_get_gc_values, android_set_foreground) (android_fill_rectangle, android_create_pixmap_from_bitmap_data) (android_set_clip_mask, android_set_fill_style, android_copy_area) (android_free_pixmap, android_set_background) (android_fill_polygon) (android_draw_rectangle, android_draw_point, android_draw_line) (android_create_pixmap, android_set_ts_origin) (android_clear_area): * src/android.h (ANDROID_EXPORT): * src/androidfns.c (android_display_info_for_name) (check_android_display_info, check_x_display_info, gamma_correct) (android_defined_color, android_decode_color) (android_implicitly_set_name, android_explicitly_set_name) (android_set_tool_bar_lines, android_change_tool_bar_height) (android_set_tab_bar_lines, android_change_tab_bar_height) (android_set_scroll_bar_default_height) (android_set_scroll_bar_default_width, android_icon_verify) (android_icon, android_make_gc, android_free_gcs) (unwind_create_frame, do_unwind_create_frame) (android_default_font_parameter, android_create_frame_window) (Fx_create_frame, Fxw_color_defined_p, Fxw_color_values) (Fxw_display_color_p, Fx_display_grayscale_p) (Fx_display_pixel_width, Fx_display_pixel_height) (Fx_display_planes, Fx_display_color_cells, Fx_display_screens) (Fx_display_mm_width, Fx_display_mm_height) (Fx_display_backing_store, Fx_display_visual_class) (Fx_display_monitor_attributes_list, Fx_frame_geometry) (Fx_frame_list_z_order, Fx_frame_restack) (Fx_mouse_absolute_pixel_position) (Fx_set_mouse_absolute_pixel_position, Fandroid_get_connection) (Fx_display_list, Fx_show_tip, Fx_hide_tip) (android_set_background_color, android_set_border_color) (android_set_cursor_color, android_set_cursor_type) (android_set_foreground_color) (android_set_child_frame_border_width) (android_set_internal_border_width, android_set_menu_bar_lines) (android_set_mouse_color, android_set_title, android_set_alpha) (android_frame_parm_handlers, syms_of_androidfns): * src/androidfont.c (struct android_emacs_font_driver) (struct android_emacs_font_spec) (struct android_emacs_font_metrics) (struct android_emacs_font_object, struct android_integer) (struct androidfont_info, struct androidfont_entity) (android_init_font_driver, android_init_font_spec) (android_init_font_metrics, android_init_integer) (android_init_font_object, androidfont_get_cache) (androidfont_from_lisp, androidfont_from_java, androidfont_list) (androidfont_match, androidfont_draw, androidfont_open_font) (androidfont_close_font, androidfont_has_char) (androidfont_encode_char, androidfont_text_extents) (androidfont_list_family, androidfont_driver) (syms_of_androidfont_for_pdumper, syms_of_androidfont) (init_androidfont, android_finalize_font_entity): * src/androidgui.h (_ANDROID_GUI_H_, struct android_rectangle) (struct android_point, enum android_gc_function) (enum android_gc_value_mask, enum android_fill_style) (enum android_window_value_mask) (struct android_set_window_attributes, struct android_gc_values) (struct android_gc, enum android_swap_action, enum android_shape) (enum android_coord_mode, struct android_swap_info) (NativeRectangle, struct android_any_event) (struct android_key_event, struct android_configure_event) (union android_event): * src/androidterm.c (android_window_to_frame, android_clear_frame) (android_ring_bell, android_toggle_invisible_pointer) (android_update_begin, android_update_end, show_back_buffer) (android_flush_dirty_back_buffer_on, handle_one_android_event) (android_read_socket, android_frame_up_to_date) (android_buffer_flipping_unblocked_hook) (android_query_frame_background_color, android_parse_color) (android_alloc_nearest_color, android_query_colors) (android_mouse_position, android_get_focus_frame) (android_focus_frame, android_frame_rehighlight) (android_frame_raise_lower, android_make_frame_visible) (android_make_frame_invisible) (android_make_frame_visible_invisible, android_fullscreen_hook) (android_iconify_frame, android_set_window_size_1) (android_set_window_size, android_set_offset, android_set_alpha) (android_new_font, android_bitmap_icon, android_free_pixmap_hook) (android_free_frame_resources, android_delete_frame) (android_delete_terminal, android_scroll_run) (android_after_update_window_line, android_flip_and_flush) (android_clear_rectangle, android_reset_clip_rectangles) (android_clip_to_row, android_draw_fringe_bitmap) (android_set_cursor_gc, android_set_mouse_face_gc) (android_set_mode_line_face_gc, android_set_glyph_string_gc) (android_set_glyph_string_clipping) (android_set_glyph_string_clipping_exactly) (android_compute_glyph_string_overhangs) (android_clear_glyph_string_rect) (android_draw_glyph_string_background, android_fill_triangle) (android_make_point, android_inside_rect_p, android_clear_point) (android_draw_relief_rect, android_draw_box_rect) (HIGHLIGHT_COLOR_DARK_BOOST_LIMIT, android_setup_relief_color) (android_setup_relief_colors, android_draw_glyph_string_box) (android_draw_glyph_string_bg_rect, android_draw_image_relief) (android_draw_image_foreground, android_draw_image_foreground_1) (android_draw_image_glyph_string) (android_draw_stretch_glyph_string, android_draw_underwave) (android_draw_glyph_string_foreground) (android_draw_composite_glyph_string_foreground) (android_draw_glyphless_glyph_string_foreground) (android_draw_glyph_string, android_define_frame_cursor) (android_clear_frame_area, android_clear_under_internal_border) (android_draw_hollow_cursor, android_draw_bar_cursor) (android_draw_window_cursor, android_draw_vertical_window_border) (android_draw_window_divider, android_redisplay_interface) (frame_set_mouse_pixel_position, get_keysym_name) (android_create_terminal, android_term_init, syms_of_androidterm) (mark_androidterm): * src/androidterm.h (_ANDROID_TERM_H_) (struct android_display_info) (struct android_output, FRAME_ANDROID_OUTPUT, XSCROLL_BAR): New files. * src/dired.c (file_attributes): Do not use openat on Android. * src/dispextern.h (No_Cursor): Define appropriately on Android. (struct glyph_string, struct face): Make gc field of type struct android_gc on Android. * src/dispnew.c (clear_current_matrices, clear_desired_matrices) (adjust_frame_glyphs_for_window_redisplay, free_glyphs) (update_frame, scrolling, char_ins_del_cost, update_frame_line) (init_display_interactive): Disable text terminal support completely on Android. Fix non-toolkit menus for non-X systems. * src/editfns.c (Fuser_full_name): Call android_user_full_name. * src/emacs.c (android_emacs_init): Make main this on Android. Prohibit argv sorting from exceeding end of argv. * src/epaths.in: Add path definitions for Android. * src/fileio.c (file_access_p): Call android_file_access_p. (file_name_directory): Avoid using openat on Android. (Fcopy_file): Adjust to call sys_fstat instead. (file_directory_p, Finsert_file_contents, write_region): Likewise. * src/filelock.c: * src/fns.c (Flocale_info): Pacify warning on Android. * src/font.c (font_make_entity_android): New function. * src/font.h: * src/frame.c (Fframep, Fwindow_system): Handle new window system `android'. Update doc strings. (Fmake_terminal_frame): Disable on Android. (gui_display_get_resource): Disable get_string_resource_hook on Android. (syms_of_frame): New defsym `android'. * src/frame.h (GCALIGNED_STRUCT): Add new output data for Android. (ENUM_BF): Expand enumerator size. (FRAME_ANDROID_P, FRAME_WINDOW_P, MOUSE_HL_INFO): Add definitions for Android. * src/image.c (GET_PIXEL, image_create_bitmap_from_file) (image_create_x_image_and_pixmap_1, image_get_x_image, slurp_file) (lookup_rgb_color, image_to_emacs_colors, image_from_emacs_colors) (image_pixmap_draw_cross, image_disable_image, MaskForeground) (gif_load): Add stubs for Android. * src/lisp.h: * src/lread.c (safe_to_load_version, maybe_swap_for_eln1, openp): * src/pdumper.c (pdumper_load): Call sys_fstat instead of fstat. * src/process.c (wait_reading_process_output): Use android_select instead of pselect. * src/scroll.c: Disable on Android. * src/sysdep.c (widen_foreground_group, reset_sys_modes) (init_signals, emacs_fstatat, sys_fstat): New function. (emacs_open, emacs_open_noquit, emacs_close): Implement differently on Android. (close_output_streams): Disable what is not required on Android. * src/term.c (OUTPUT1_IF, encode_terminal_code, string_cost) (string_cost_one_line, per_line_cost, calculate_costs) (struct fkey_table, tty_append_glyph, produce_glyphs) (tty_capable_p, Fsuspend_tty, Fresume_tty, device, init_tty) (maybe_fatal, syms_of_term): Disable text terminal support on Android. * src/termhooks.h (enum output_method): Add android output method. (GCALIGNED_STRUCT, TERMINAL_FONT_CACHE): Define for Android. * src/terminal.c (Fterminal_live_p): Implement for Android. * src/verbose.mk.in (AM_V_GLOBALS): Add JAVAC and DX. * src/xdisp.c (redisplay_internal): Disable text terminals on Android. (display_menu_bar, display_tty_menu_item) (draw_row_with_mouse_face, expose_frame): Make the non toolkit menu bar work on Android. * src/xfaces.c (GCGraphicsExposures, x_create_gc, x_free_gc) (Fx_load_color_file): Define for Android. * xcompile/Makefile.in: * xcompile/README: * xcompile/langinfo.h (nl_langinfo): New files. 2022-12-29 Po Lu Development of the Android port starts... This ChangeLog only chronicles changes constituting the initial development of the Android port. Refer to other ChangeLog files for a narrative of unrelated modifications made to Emacs during that time, and those made after the Android port was installed. ;; Local Variables: ;; coding: utf-8 ;; End: Copyright (C) 2023-2024 Free Software Foundation, Inc. This file is part of GNU Emacs. GNU Emacs is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNU Emacs is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see .