summaryrefslogtreecommitdiff
path: root/src/gtkutil.c
AgeCommit message (Collapse)Author
2026-05-26Omit useless casts found by GCC 16Paul Eggert
GCC 16’s -Wuseless-cast warning can be useful. Fix the useless casts it identifies, and also fix false positives by using compound literals, which are safer anyway than casts. * src/composite.c (composition_adjust_point) (Ffind_composition_internal): * lwlib/xlwmenu.c (xlwMenuResources, xlwMenuClassRec) (resource_widget_value, XlwMenuDestroy, Select): * src/alloc.c (process_mark_stack): * src/data.c (Faref): * src/emacs-module.c (module_extract_big_integer): * src/fileio.c (Finsert_file_contents): * src/frame.h (FRAME_MESSAGE_BUF_SIZE): * src/gtkutil.c (xg_tool_item_stale_p, update_frame_tool_bar): * src/image.c (pbm_load, png_load_body, jpeg_load_body) (tiff_load, gif_load): * src/pdumper.c (ptrdiff_t_to_dump_off, dump_queue_dequeue) (field_relpos, dump_field_emacs_ptr) (dump_object_start_pseudovector, pdumper_remember_scalar_impl) (pdumper_load, syms_of_pdumper): * src/regex-emacs.c (BUF_PUSH, BUF_PUSH_2, POINTER_TO_OFFSET): * src/xdisp.c (remember_mouse_glyph, pint2str): * src/xterm.c (cvt_string_to_pixel, handle_one_xevent): Omit useless casts. Perhaps they were formerly needed, but they should not be needed now. * src/alloc.c (Fmemory_info): * src/category.c (Fdefine_category, Fmodify_category_entry): * src/data.c (Fash): * src/dispextern.h (GLYPH_CODE_P): * src/emacs.c (load_seccomp): * src/fns.c (Flocale_info, maybe_resize_hash_table): * src/indent.c (check_display_width): * src/json.c (symset_size): * src/lisp.h (XUNTAG, BOOL_VECTOR_LENGTH_MAX, obarray_size) (hash_table_index_size): * src/lread.c (make_obarray, grow_obarray, Fobarray_clear): * src/menu.c (digest_single_submenu, x_popup_menu_1): * src/term.c (init_tty): * src/widget.c (update_wm_hints): * src/xdisp.c (truncate_echo_area): * src/xfns.c (x_set_border_pixel): * src/xfont.c (xfont_match, xfont_open): * src/xmenu.c (set_frame_menubar): * test/src/emacs-module-resources/mod-test.c (emacs_module_init): Use compound literal instead of a cast that is useless in some platforms but not others. * src/dispextern.h, src/haikugui.h, src/w32gui.h: (WINDOW_HANDLE_UINTPTR): New macro. * src/frame.c (gui_report_frame_params): * src/xterm.c (x_try_cr_xlib_drawable): Use it. * src/lisp.h (XUNTAG): And tag with UINTPTR_MAX to pacify gcc warning about a constant out of range. (hash_idx_t): Make it int_least32_t, as it need not be exactly 32 bits. (PRIdHASH_IDX): New macro. * src/pdumper.c (dump_queue_dequeue): Use it. * src/profiler.c (setup_cpu_timer): Make a local EMACS_INT rather than int, to avoid need for casting later. * src/syntax.c (uninitialized_interval): Use 1u rather than 1 so the cast is always useful. A compound literal wouldn’t do here, as this macro needs to be an integer constant expression. * src/xfns.c (XICCallback, XICProc): Remove macros. (Xxic_preedit_start_callback): Use a cleaner way to specify it, avoiding the need for type macros, and for a cast if HAVE_XICCALLBACK_CALLBACK. * src/xterm.c (handle_one_xevent): 2nd arg is now XEvent * on all platforms, as there is no need to diverge, and diverging meant we needed lots of unnecessary casts.
2026-05-23New function memory_full_upPaul Eggert
* src/alloc.c (memory_full_up): New function. Replace all callers of memory_full (SIZE_MAX) with callers to this function. This simplifies callers and should make future changes easier. It also saves a whopping 296 bytes in executable size with gcc 16.1.1 20260515 (Red Hat 16.1.1-2) x86-64.
2026-05-22Fix "assertion 'GTK_IS_WINDOW (window)' failed"Dmitry Gutov
* src/gtkutil.c (xg_frame_set_size_and_position): Remove a gtk_window_resize call which used a wrong value type (GdkX11Window instead of GtkWindow). The original motivation for that line seems to be fixed by later changes (bug#80662).
2026-05-11[GTK3, HiDPI] Fix width/height round-trip through ConfigureNotifyDmitry Gutov
* src/gtkutil.c (xg_frame_set_char_size) (xg_frame_set_size_and_position): Truncate WIDTH and HEIGHT to be multiples of the scale factor (bug#80662).
2026-05-07[GTK3] Improve the resize -> hide -> show scenarioDmitry Gutov
* src/gtkutil.c (xg_frame_set_char_size) (xg_frame_set_size_and_position): Call gtk_window_resize for child frames too, to record _GtkWindowGeometryInfo#resize_width and resize_height. They are later looked up by gtk_widget_show_all in x_make_frame_visible (bug#80662). Without this the widgets go back and forth between the remembered and actual sizes after make-visible.
2026-05-01Resize child frames with GTK3 immediately tooDmitry Gutov
* src/gtkutil.c (xg_frame_set_char_size): Resize child frame and its GTK widget hierarchy immediately. Update the "desired" Cairo surface dimensions. Skip waiting for events. (bug#80662) Remove the unnecessary call to clear_under_internal_border.
2026-05-01Simplify the fullscreen adjustment in xg_frame_set_char_sizeDmitry Gutov
* src/gtkutil.c (xg_frame_set_char_size): Simplify. Use the fullscreen value check to alter the values of outer_width and outer_height rather than have several larger branches (bug#80662).
2026-05-01Remove the effect of x_gtk_resize_child_frames=hideDmitry Gutov
* src/gtkutil.c (xg_frame_set_char_size): Remove the effect of x_gtk_resize_child_frames, effectively reverting that part of c49d379f17bc (bug#80662). * src/pgtkfns.c (syms_of_pgtkfns): Remove defsyms Qhide and Qresize_mode, never used with PGTK. * src/xfns.c (x-gtk-resize-child-frames): Update docstring.
2026-05-01Try to resize or resize-and-move child frames in one updateDmitry Gutov
This pertains to X11 toolkit builds. Other ports (including PGTK) seem to have mostly atomic window updates already. * src/xterm.c (x_set_window_size_1): Resize the Xt widget eagerly, so the next redraw is not clipped. Update the "desired" Cairo surface dimensions. Skip waiting for next XEvent. Do all that for child frames only. Update old comments (bug#80662). (x_set_window_size_and_position_1): Same. Also clear the widget's cached position coordinates (we don't keep them up to date). (x_set_window_size, x_set_window_size_and_position): Skip redrawing the border on child frames, it will happen during redisplay anyway. * src/gtkutil.c (xg_frame_set_size_and_position): On child frames, resize the GTK widget hierarchy immediately. Update the "desired" Cairo surface dimensions. Skip waiting for events. * src/widget.c (EmacsFrameResize): When resize should be a no-op, exit early (minor optimization). (EmacsFrameExpose): Redraw the border on the last Expose event. * src/xdisp.c (clear_garbaged_frames): Don't redraw borders here. * src/xfns.c (x_window): Undo the previous change in bit_gravity in the no-toolkit build. StaticGravity works the best for it thanks to no nesting in window configuration.
2026-02-12Scale position values in xg_frame_set_size_and_positionMartin Rudalics
* src/gtkutil.c (xg_frame_set_size_and_position): Scale position values.
2026-01-01; Add 2026 to copyright years.Sean Whitton
2025-12-22Add functions to set frame size and position in one compound stepMartin Rudalics
* lisp/frame.el (set-frame-size-and-position): New function. * src/frame.c (adjust_frame_size): Handle requests to set size and position. (Fset_frame_size_and_position_pixelwise): New function. * src/gtkutil.c (xg_frame_set_size_and_position): New function. (xg_wm_set_size_hint): Handle any non-NorthWestGravity values for child frames only. Some GTK implementations don't like them. * src/gtkutil.h (xg_frame_set_size_and_position.): Add external declaration. * src/termhooks.h (set_window_size_and_position_hook): New hook. * src/w32term.c (w32_set_window_size_and_position): New function. (w32_create_terminal): Make it the Microsoft Windows API set_window_size_and_position_hook. * src/xterm.c (x_set_window_size_and_position_1) (x_set_window_size_and_position): New functions. (x_create_terminal): Make x_set_window_size_and_position the set_window_size_and_position_hook for the X protocol. * src/xterm.h (x_set_window_size_and_position): Add external declaration. * etc/NEWS: Announce new functions.
2025-11-25Port to glibc 2.43+ with GCC 15+Paul Eggert
Port to planned glibc 2.43 (scheduled for February 2026), which will support qualifier-generic standard functions; see: https://sourceware.org/git/?p=glibc.git;a=commit;h=cd748a63ab1a7ae846175c532a3daab341c62690 For example, strchr (P, C) will return pointer to const if P is pointer to const. The idea is to catch dumb programming errors when a program mistakenly uses strchr to convert a pointer to const to an unrestricted pointer. This feature is required by C23, and will be enabled by default in GCC 15. * src/callint.c (Fcall_interactively): Respect constness of pointer when calling memchr. * src/gtkutil.c (xg_get_font): 2nd arg is char *, not const char *. * src/xfaces.c (parse_float_color_comp): Return bool, not double. New arg DST. All callers changed. This makes it easier for callers to use char const *. (parse_color_spec): Respect constness of pointer when calling strchr.
2025-11-24; * src/gtkutil.c (xg_update_dark_mode_for_all_displays): Typo.Po Lu
2025-11-24Support `toolkit-theme-set-functions' on Android and execute hooks safelyPo Lu
* java/org/gnu/emacs/EmacsNative.java (setEmacsParams): New arg UIMODE. (sendConfigurationChanged): New args DETAIL and UI_MODE. * java/org/gnu/emacs/EmacsNoninteractive.java (main1): Provide an undefined UI mode. * java/org/gnu/emacs/EmacsService.java (EmacsService): New field uiMode. (onCreate): Initialize this field at start-up and provide the same to setEmacsParams. (onConfigurationChanged): If the UI mode has been altered, generate a configuration changed event to match. * src/android.c (android_ui_mode): New variable. (setEmacsParams): New argument UI_MODE. Initialize the same from this variable. * src/androidgui.h (enum android_configuration_changed): New enum. (struct android_configuration_changed_event): New field `DETAIL'. Convert fields providing specifics into a union of display density information and a UI mode integer. * src/androidterm.c (handle_one_android_event): Handle both manners of configuration change events. (android_term_init): Initialize Vtoolkit_theme from UI mode provided at start-up. * src/frame.c (syms_of_frame): Always define Vtoolkit_theme. Define Qtoolkit_theme_set_functions. * src/gtkutil.c (xg_update_dark_mode_for_all_displays): * src/w32term.c (w32_read_socket): Generate special toolkit theme events, rather than executing hooks directly within the read_socket callback. * src/keyboard.c (kbd_buffer_get_event) <TOOLKIT_THEME_CHANGED_EVENT>: Run Qtoolkit_theme_set_functions and set Vtoolkit_theme from event->ie.arg. * src/termhooks.h (enum event_kind): New event TOOLKIT_THEME_CHANGED_EVENT.
2025-11-22Add `toolkit-theme' and 'toolkit-theme-set-functions'Ahmed Khanzada
* etc/NEWS: Document `toolkit-theme' and 'toolkit-theme-set-functions' * lisp/frame.el: Add 'toolkit-theme-set-functions' * src/frame.c: Add `toolkit-theme' Elisp variable * src/gtkutil.c: (xg_update_dark_mode_for_all_displays): Set `toolkit-theme' and call 'toolkit-theme-set-functions' * src/w32fns.c: (w32_applytheme): Send WM_EMACS_SET_TOOLKIT_THEME message to Lisp thread. * src/w32term.h: Declare WM_EMACS_SET_TOOLKIT_THEME * src/w32term.c: (w32_read_socket): Receive WM_EMACS_SET_TOOLKIT_THEME message and set `toolkit-theme' and call 'toolkit-theme-set-functions'
2025-11-02Fix PGTK build without HSETTINGS, broken by recent changesEli Zaretskii
* src/xsettings.c (store_tool_bar_style_changed): Compile only under HAVE_GSETTINGS. (xg_get_system_dark_mode): Compile only under HAVE_GSETTINGS. * src/gtkutil.c (xg_set_gtk_theme_dark_mode) (xg_update_dark_mode_for_all_displays, xg_set_initial_dark_mode): Only compile when HAVE_GSETTINGS is defined. (xg_create_frame_widgets): Call 'xg_set_initial_dark_mode' only under HAVE_GSETTINGS. (xg_create_frame_outer_widgets): Remove unused code. Call 'xg_set_initial_dark_mode' only under HAVE_GSETTINGS. * src/pgtkselect.c (pgtk_reply_selection_request): Remove unused variable.
2025-11-02Automatically toggle between dark and light mode PGTK widgetsAhmed Khanzada
* src/gtkutil.h: Declare 'xg_set_gtk_theme_dark_mode', 'xg_update_dark_mode_for_all_displays', 'xg_set_initial_dark_mode'. * src/gtkutil.c (xg_set_gtk_theme_dark_mode): Toggle PGTK dark mode. (xg_update_dark_mode_for_all_displays): Toggle PGTK dark mode for all displays. (xg_set_initial_dark_mode): Determine PGTK dark mode preference and set. (xg_create_frame_widgets): Set PGTK dark mode preference for widgets. (xg_create_frame_outer_widgets): Set PGTK dark mode preference for outer widgets. * src/xsettings.h: Declare 'xg_get_system_dark_mode'. * src/xsettings.c (something_changed_gsettingsCB): Update PGTK dark mode setting. (xg_get_system_dark_mode): Determine PGTK dark mode preference. GSETTINGS_COLOR_SCHEME: Defined and set to "color-scheme". * etc/NEWS: Document automatic dark mode toggling. (Bug#79689)
2025-03-10Fix handling of frame position valuesMartin Rudalics
* src/frame.c (tty_child_pos_param): Handle additional position values. New SIZE argument. (tty_child_frame_rect): Process size before position. (Fmake_terminal_frame): Do not store calculated size/position values in parameters to avoid that a negative absolute position is later interpreted as position relative to bottom/right edge of parent. (Fmodify_frame_parameters): For tty child frames process size before position values so the latter can take a new size into account. * src/frame.h: Adjust declaration of tty_child_pos_param. * src/gtkutil.c (xg_set_geometry): Handle negative frame position specifications. * src/msdos.c (IT_set_frame_parameters): For tty child frames process size before position parameters. * src/xfns.c (x_window): In the non-GTK toolkit variant leave negative position values unchanged - the toolkit should know how to handle them. Process child frame position parameters separately. In the non-toolkit variant process child frame parameters separately.
2025-03-03Revert “Avoid some union buffered_input_event uses”Paul Eggert
Revert my commit 29a9fd4f4ba17822eca0f00c2037da3868bd874e and the following commit 1ec0889e7b786d79351cee3ed4964d82295f059f. This fixes a bug where ‘emacs -nw’ would sometimes freeze when Emacs is configured with ‘--with-pgtk --enable-link-time-optimization --disable-gc-mark-trace’ on GNU/Linux x86-64 (Bug#76729). As it is not yet clear whether this freeze is due to an Emacs bug that I introduced, or due to GCC bug 117423 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117423>, play it safe for now and revert to the previous state.
2025-03-03Avoid some union buffered_input_event usesPaul Eggert
Simplify by using separate local vars for struct input_event and struct selection_input_event, rather than a single local var that is the union of the two. This makes the code easier to follow by the human reader, and should help avoid GCC bug 117423 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=117423> and therefore work around Emacs bug 76559 <https://bugs.gnu.org/76559>. * src/androidterm.c (handle_one_android_event): * src/gtkutil.c (xg_widget_key_press_event_cb): * src/pgtkterm.c (evq_flush): * src/xterm.c (handle_one_xevent): Use struct input_event and kbd_buffer_store_event_hold, or struct selection_input_event and kbd_buffer_store_selection_event_hold, rather than union buffered_input_event and union buffered_input_event. * src/keyboard.c (beware_long_paste, maybe_quit_while_no_input): New functions, broken out from kbd_buffer_store_buffered_event. (kbd_buffer_store_event_hold): Define here, with a simplified version of the body of the old kbd_buffer_store_buffered_event, rather than defining in keyboard.h. Specialize to struct input_event. (kbd_buffer_store_selection_event_hold): New function; it is a simplified version of the old kbd_buffer_store_buffered_event, specialized to struct selection_input_event. (is_ignored_event_kind): Accept enum event_kind instead of union buffered_input_event. All callers changed. * src/keyboard.h (kbd_buffer_store_event_hold): Remove definition, as keyboard.c now defines it. * src/pgtkterm.c (evq_grow_if_needed): New function. (evq_enqueue, evq_selection_enqueue): Two functions now, not one. Args are now struct input_event const * or struct selection_input_event const *, not union buffered_input_event *. All callers changed. This lets us simplify the callers so that they need not use the union.
2025-01-26Fix unlikely eassert failure in xg_set_widget_bgPaul Eggert
* src/gtkutil.c (xg_set_widget_bg): Simplify by using sprintf with a big-enough buffer.
2025-01-22Destroy GTK tool bar widget if it was never attached (bug#75636)Pip Cet
* src/gtkutil.c (xg_free_frame_widgets): Call gtk_widget_destroy on an unpacked toolbar widget.
2025-01-21; * src/gtkutil.c (free_frame_tool_bar): Remove redundant assignment.Pip Cet
2025-01-19Replace call[1-8] with callnStefan Kangas
Since the introduction of the 'calln' macro, the 'call1', 'call2', ..., 'call8' macros are just aliases for the former. This is slightly misleading and potentially unhelpful. The number of arguments N can also easily go out-of-synch with the used alias callN. There is no reason not to replace these aliases with using 'calln' directly. To reduce the risk for mistakes, the tool Coccinelle was used to make these changes. See <https://coccinelle.gitlabpages.inria.fr/website/>. * src/alloc.c, src/androidvfs.c, src/androidfns.c, src/buffer.c: * src/callint.c, src/callproc.c, src/casefiddle.c, src/charset.c: * src/chartab.c, src/cmds.c, src/coding.c, src/composite.c: * src/data.c, src/dbusbind.c, src/dired.c, src/doc.c: * src/emacs.c, src/eval.c, src/fileio.c, src/filelock.c: * src/fns.c, src/frame.c, src/gtkutil.c, src/haikufns.c: * src/haikumenu.c, src/image.c, src/insdel.c, src/intervals.c: * src/keyboard.c, src/keymap.c, src/lisp.h, src/lread.c: * src/minibuf.c, src/nsfns.m, src/nsselect.m, src/pgtkfns.c: * src/pgtkselect.c, src/print.c, src/process.c, src/sort.c: * src/syntax.c, src/textconv.c, src/textprop.c, src/undo.c: * src/w32fns.c, src/window.c, src/xfaces.c, src/xfns.c: * src/xmenu.c, src/xselect.c, src/xterm.c: Replace all uses of 'call1', 'call2', ..., 'call8' with 'calln'.
2025-01-19Fix a GTK memory leak (Bug#75636)Pip Cet
* src/gtkutil.c (xg_create_frame_widgets): Don't call g_object_ref.
2025-01-01Update copyright year to 2025Paul Eggert
Run "TZ=UTC0 admin/update-copyright".
2024-12-20On GTK do not inhibit implied resizing until tool bar was drawn (Bug#74750)Martin Rudalics
* src/frame.c (frame_inhibit_resize): Under GTK do not inhibit implied resizing as long as the tool bar has not been drawn yet so the frame gets its intended initial height (Bug#74750). * src/gtkutil.c (update_frame_tool_bar): Set tool_bar_resized slot of frame f to true regardless of whether a tool bar was made or not. This will make inhibiting implied resizes work again from now on.
2024-06-01Implement touch screen events on PGTKPo Lu
* etc/NEWS: Better qualify entry for touch screen events. * lisp/loadup.el (featurep 'pgtk): Load touch-screen.el. * lisp/touch-screen.el: Revise list of systems where touch screen events are reported. * src/gtkutil.c (xg_create_frame_widgets): Request GDK_TOUCH_MASK. * src/pgtkfns.c (pgtk_frame_parm_handlers, tip_window): Pacify compiler warning. * src/pgtkterm.c (pgtk_free_frame_resources): Free touch points linked to this frame. (pgtk_link_touch_point, pgtk_unlink_touch_point) (pgtk_unlink_touch_points, pgtk_find_touch_point): New functions, ported from X. (touch_event_cb): New event callback. (pgtk_set_event_handler): Register `touch_event_cb' as handler for `touch-event'. (pgtk_delete_display): Free residual touch points on this display. * src/pgtkterm.h (struct pgtk_touch_point): New structure. (struct pgtk_display_info) <touchpoints>: New field.
2024-05-09Replace calls to intern with a constant string with DEFSYMsPo Lu
* src/alloc.c (display_malloc_warning, syms_of_alloc): * src/buffer.c (Fmake_indirect_buffer, Fbuffer_local_variables) (Frename_buffer, Fkill_buffer, Fset_buffer_major_mode) (Fset_buffer_multibyte, syms_of_buffer): * src/callint.c (read_file_name, Fcall_interactively) (syms_of_callint): * src/callproc.c (call_process, create_temp_file) (syms_of_callproc): * src/charset.c (Fdefine_charset_internal, syms_of_charset): * src/cmds.c (internal_self_insert, syms_of_cmds): * src/coding.c (record_conversion_result) (Fdefine_coding_system_internal, syms_of_coding): * src/dbusbind.c (xd_signature, Fdbus_message_internal) (syms_of_dbusbind): * src/dispnew.c (init_faces_initial): * src/doc.c (Fsnarf_documentation, syms_of_doc): * src/dosfns.c (system_process_attributes, syms_of_dosfns): * src/emacs.c (init_cmdargs, Fdump_emacs, decode_env_path) (syms_of_emacs): * src/eval.c (call_debugger, Fdefvaralias, syms_of_eval): * src/fileio.c (barf_or_query_if_file_exists) (Finsert_file_contents, auto_save_error, Fdo_auto_save) (syms_of_fileio): * src/filelock.c (lock_file_1, syms_of_filelock): * src/fontset.c (fontset_from_font, syms_of_fontset): * src/frame.c (make_frame_without_minibuffer, syms_of_frame): * src/gnutls.c (emacs_gnutls_certificate_details) (Fgnutls_peer_status_warning_describe, Fgnutls_peer_status) (gnutls_verify_boot, syms_of_gnutls): * src/gtkutil.c (style_changed_cb, find_rtl_image): * src/image.c (imagemagick_filename_hint, gs_load) (syms_of_image): * src/keyboard.c (command_loop_1, read_char, timer_start_idle) (read_char_minibuf_menu_prompt, Fsuspend_emacs) (syms_of_keyboard): * src/keymap.c (Fmap_keymap, Flookup_key, Fdescribe_vector) (describe_vector, syms_of_keymap): * src/lread.c (Fread, Fread_positioning_symbols, syms_of_lread): * src/minibuf.c (Fabort_minibuffers, Fread_buffer) (Fcompleting_read, syms_of_minibuf): * src/msdos.c (XMenuActivate, run_msdos_command, syms_of_msdos): * src/nsfns.m (Fx_display_backing_store, Fx_display_visual_class) (Fns_hide_emacs, Fsystem_move_file_to_trash, ns_create_tip_frame) (x_hide_tip, Fx_show_tip, syms_of_nsfns): * src/nsfont.m (ns_spec_to_descriptor, ns_descriptor_to_entity) (syms_of_nsfont): * src/pdumper.c (Fdump_emacs_portable): * src/pgtkfns.c (Fx_display_visual_class, x_create_tip_frame) (Fx_show_tip, syms_of_pgtkfns): * src/pgtkterm.c (syms_of_pgtkterm, pgtk_cr_export_frames): * src/term.c (term_get_fkeys_1, set_tty_color_mode, Fsuspend_tty) (Fresume_tty, tty_menu_activate, syms_of_term): * src/terminal.c (create_terminal, syms_of_terminal): * src/w32fns.c (Fx_display_backing_store) (Fx_display_visual_class, Fset_message_beep, Fx_open_connection) (Fx_show_tip, Fx_file_dialog, Fsystem_move_file_to_trash) (Fw32_toggle_lock_key, syms_of_w32fns): * src/w32font.c (w32_enumfont_pattern_entity, syms_of_w32font): * src/w32term.c (w32_bitmap_icon, syms_of_w32term): * src/xdisp.c (message_dolog, define_frame_cursor1) (syms_of_xdisp): * src/xfaces.c (tty_lookup_color, syms_of_xfaces): * src/xml.c (make_dom, syms_of_xml): * src/xterm.c (syms_of_xterm): * src/xwidget.c (store_xwidget_download_callback_event) (store_xwidget_js_callback_event, syms_of_xwidget): Define symbols for symbols interned with `intern' from a constant string, delete duplicate DEFSYM directives, and substitute them for such calls to intern. This excludes only those symbols which are interned and referenced only once during Emacs's initialization, the timing of whose interning is inconsequential, and symbols in w32.c, which would need to be transferred to a new syms_of_w32 function that I cannot test.
2024-01-20Be more systematic about parens in C source codePaul Eggert
Be more systematic about putting space before paren in calls, and in avoiding unnecessary parentheses in macros. This was partly inspired by my wading through gcc -E output while debugging something else, and seeing too many parens. This patch does not change the generated .o files on my platform.
2024-01-02Merge from savannah/emacs-29Po Lu
dc4e6b13296 ; Update copyright years in more files 64b37776318 ; Run set-copyright from admin.el 8e1c56ae467 ; Add 2024 to copyright years # Conflicts: # doc/misc/modus-themes.org # doc/misc/texinfo.tex # etc/NEWS # etc/refcards/ru-refcard.tex # etc/themes/modus-operandi-theme.el # etc/themes/modus-themes.el # etc/themes/modus-vivendi-theme.el # lib/alloca.in.h # lib/binary-io.h # lib/c-ctype.h # lib/c-strcasecmp.c # lib/c-strncasecmp.c # lib/careadlinkat.c # lib/cloexec.c # lib/close-stream.c # lib/diffseq.h # lib/dup2.c # lib/filemode.h # lib/fpending.c # lib/fpending.h # lib/fsusage.c # lib/getgroups.c # lib/getloadavg.c # lib/gettext.h # lib/gettime.c # lib/gettimeofday.c # lib/group-member.c # lib/malloc.c # lib/md5-stream.c # lib/md5.c # lib/md5.h # lib/memmem.c # lib/memrchr.c # lib/nanosleep.c # lib/save-cwd.h # lib/sha1.c # lib/sig2str.c # lib/stdlib.in.h # lib/strtoimax.c # lib/strtol.c # lib/strtoll.c # lib/time_r.c # lib/xalloc-oversized.h # lisp/auth-source-pass.el # lisp/emacs-lisp/lisp-mnt.el # lisp/emacs-lisp/timer.el # lisp/info-look.el # lisp/jit-lock.el # lisp/loadhist.el # lisp/mail/rmail.el # lisp/net/ntlm.el # lisp/net/webjump.el # lisp/progmodes/asm-mode.el # lisp/progmodes/project.el # lisp/progmodes/sh-script.el # lisp/textmodes/flyspell.el # lisp/textmodes/reftex-toc.el # lisp/textmodes/reftex.el # lisp/textmodes/tex-mode.el # lisp/url/url-gw.el # m4/alloca.m4 # m4/clock_time.m4 # m4/d-type.m4 # m4/dirent_h.m4 # m4/dup2.m4 # m4/euidaccess.m4 # m4/fchmodat.m4 # m4/filemode.m4 # m4/fsusage.m4 # m4/getgroups.m4 # m4/getloadavg.m4 # m4/getrandom.m4 # m4/gettime.m4 # m4/gettimeofday.m4 # m4/gnulib-common.m4 # m4/group-member.m4 # m4/inttypes.m4 # m4/malloc.m4 # m4/manywarnings.m4 # m4/mempcpy.m4 # m4/memrchr.m4 # m4/mkostemp.m4 # m4/mktime.m4 # m4/nproc.m4 # m4/nstrftime.m4 # m4/pathmax.m4 # m4/pipe2.m4 # m4/pselect.m4 # m4/pthread_sigmask.m4 # m4/readlink.m4 # m4/realloc.m4 # m4/sig2str.m4 # m4/ssize_t.m4 # m4/stat-time.m4 # m4/stddef_h.m4 # m4/stdint.m4 # m4/stdio_h.m4 # m4/stdlib_h.m4 # m4/stpcpy.m4 # m4/strnlen.m4 # m4/strtoimax.m4 # m4/strtoll.m4 # m4/time_h.m4 # m4/timegm.m4 # m4/timer_time.m4 # m4/timespec.m4 # m4/unistd_h.m4 # m4/warnings.m4 # nt/configure.bat # nt/preprep.c # test/lisp/register-tests.el
2024-01-02; Add 2024 to copyright yearsPo Lu
2023-09-07Remedy bug#63395Po Lu
* src/gtkutil.c (xg_update_frame_menubar): Avoid scaling the requisiton height twice. (bug#63395)
2023-05-17Prefer C23 ckd_* to Gnulib *_WRAPV macrosPaul Eggert
C23 has added ckd_add etc. macros with functionality equivalent to the older Gnulib INT_ADD_WRAPV macros, so switch to the more-standard names. * admin/merge-gnulib (GNULIB_MODULES): Add stdckdint. This merely makes the dependency explicit, as we were already using this Gnulib module indirectly. * lib-src/etags.c, src/lisp.h: Include stdckdint.h. * lib-src/etags.c (xnmalloc, xnrealloc): * src/alloc.c (xnmalloc, xnrealloc, xpalloc, Fmake_string) (mark_memory): * src/bignum.c (emacs_mpz_pow_ui): * src/buffer.c (record_overlay_string, overlay_strings): * src/bytecode.c (exec_byte_code): * src/casefiddle.c (do_casify_multibyte_string): * src/ccl.c (ccl_driver, Fccl_execute_on_string): * src/character.c (char_width, c_string_width) (lisp_string_width, count_size_as_multibyte) (string_escape_byte8): * src/cmds.c (internal_self_insert): * src/coding.c (coding_alloc_by_realloc, produce_chars): * src/data.c (arith_driver): * src/dispnew.c (realloc_glyph_pool, init_display_interactive): * src/doprnt.c (parse_format_integer): * src/editfns.c (Freplace_buffer_contents, str2num) (styled_format): * src/emacs-module.c (module_global_reference_p) (module_make_global_ref, module_funcall): * src/eval.c (max_ensure_room): * src/fileio.c (blocks_to_bytes): * src/fns.c (Ffillarray): * src/font.c (font_intern_prop): * src/frame.c (check_frame_pixels): * src/gnutls.c (gnutls_hex_string, gnutls_symmetric_aead): * src/gtkutil.c (get_utf8_string): * src/haikuterm.c (haiku_term_init): * src/image.c (xbm_scan, image_to_emacs_colors) (image_detect_edges, png_load_body): * src/keyboard.c (Frecursion_depth): * src/keymap.c (Flookup_key, Fkey_description): * src/lisp.h (modiff_incr, SAFE_ALLOCA_LISP_EXTRA): * src/lread.c (read_bool_vector): * src/pgtkterm.c (pgtk_term_init): * src/regex-emacs.c (regex_compile): * src/term.c (encode_terminal_code): * src/termcap.c (tputs): * src/textconv.c (textconv_query): * src/timefns.c (timespec_ticks, lisp_time_hz_ticks) (Fdecode_time, check_tm_member): * src/tparam.c (tparam1): * src/w32term.c (w32_initialize_display_info): * src/xdisp.c (fill_column_indicator_column, decode_mode_spec): * src/xselect.c (selection_data_size, x_property_data_to_lisp): * src/xsmfns.c (smc_save_yourself_CB): * src/xterm.c (xm_setup_dnd_targets, x_sync_get_monotonic_time) (x_sync_current_monotonic_time, x_sync_note_frame_times) (x_display_set_last_user_time, x_term_init): Prefer the C23 stdckdint macros to their Gnulib intprops.h counterparts, since C23 is standard.
2023-01-01Merge from origin/emacs-29Eli Zaretskii
cae528457c ; Add 2023 to copyright years. b394359261 Improve documentation of 'isearch-open-overlay-temporary' ab3210e709 Document 'use-package' in the 2 main manuals # Conflicts: # etc/refcards/ru-refcard.tex # lib/explicit_bzero.c # m4/explicit_bzero.m4
2023-01-01; Add 2023 to copyright years.Eli Zaretskii
2022-12-05Don't excessively sync in some other codePo Lu
* configure.ac (USE_XCB): Remove xcb-util dependency. * src/frame.h: Remove x_sync. * src/gtkutil.c (xg_frame_restack, xg_update_scrollbar_pos) (xg_update_horizontal_scrollbar_pos): Call XSync manually instead of x_sync. * src/xfns.c (x_sync): Delete unused function. * src/xterm.c (x_send_hourglass_message): New function. (x_show_hourglass, x_hide_hourglass): Avoid XSync in these two pieces of frequently used code. (handle_one_xevent): Handle hourglass messages. (x_make_frame_invisible): Stop using x_sync.
2022-08-07Revert "Improve X event timestamp tracking"Po Lu
This reverts commit 4b98a79a508ebdc719abfcf51ee6de32e46d0e1c. This change was installed without answering several important questions.
2022-08-06Improve X event timestamp trackingDaniel Colascione
Fix two problems with our handling of X timestamps 1) We're not properly updating the X interaction timestamp after receiving certain input events, and 2) X events sent in response to emacsclient commands get stale timestamps because the timestamp tracking doesn't take into account that interactions with the user can occur outside the X input event channel. * src/xterm.c: (x_display_set_last_user_time_1): New function. (x_display_set_last_user_time): Call it. (x_ewmh_activate_frame): Refactor. (x_focus_frame): Don't call XSetInputFocus if we can use EWMH activation. (server_timestamp_predicate): New function. (x_get_server_time): New function. (x_note_oob_interaction): New function. (x_create_terminal): Register new function as terminal hook. * src/termhooks.h: New hook: note_oob_interaction_hook. * src/gtkutil.h: (xg_set_user_timestamp): Declare. * src/gtkutil.c: (xg_set_user_timestamp): New function. * src/frame.c: (Fframe_note_oob_interaction): New function. (syms_of_frame): Register it. * lisp/server.el: (server-switch-buffer): Call frame-note-oob-interaction when user requests frame be raised.
2022-07-23Undo C parts of "Don't use the Gtk region face"Po Lu
This reverts commit a24f710395f9777cb9f8b000300e5e9c892d7794, apart from the change to faces.el and NEWS.
2022-07-23Don't use the Gtk region faceLars Ingebrigtsen
* lisp/faces.el (region): Don't use the Gtk region face, because it produces low contrast combinations (bug#46493). * src/gtkutil.h: * src/gtkutil.c (xg_check_special_colors): Remove. * src/xfns.c (x_defined_color): * src/pgtkterm.c (pgtk_defined_color): Don't call.
2022-07-14* src/gtkutil.c (xg_free_frame_widgets): Avoid compiler warning.Eli Zaretskii
2022-05-23Minor fixes to PGTK child framesPo Lu
* src/gtkutil.c (xg_check_special_colors): Handle child frames correctly. * src/pgtkfns.c (pgtk_set_child_frame_border_width): Synchronize code from X. (bug#55588) * src/pgtkmenu.c (pgtk_menu_show, pgtk_dialog_show): Allow in child frames. There are no problems here. * src/pgtkterm.c (pgtk_mouse_position): Clean up coding style.
2022-05-13Fix extraneous quit events processing GTK native input inside popupsPo Lu
* src/gtkutil.c (xg_widget_key_press_event_cb): Return immediately if a popup is active. * src/xterm.c (x_filter_event): Clear `xg_pending_quit_event' if a popup is active.
2022-04-18Minor cleanups to PGTK codePo Lu
* src/gtkutil.c (xg_set_geometry): (xg_frame_set_char_size): (x_wm_set_size_hint): Rename to `xg_wm_set_size_hint'. All callers changed. * src/gtkutil.h: Update prototypes. * src/pgtkfns.c (unwind_create_frame): (Fx_create_frame): (compute_tip_xy): * src/pgtkterm.c (x_free_frame_resources): (x_destroy_window): (x_calc_absolute_position): (x_set_offset): (pgtk_set_window_size): (x_display_pixel_height): (x_display_pixel_width): (x_set_parent_frame): Rename `x_foo' functions to `pgtk_foo'. Get rid of some copy-pasted code from various places. (pgtk_create_terminal): Clean up coding style. * src/pgtkterm.h: Update prototypes.
2022-04-11Fix event source attribution for GTK input methodsPo Lu
* src/gtkutil.c (xg_im_context_commit): Use pending keystroke source if it exists.
2022-04-11Fix IM event source attribution on GTKPo Lu
* src/xterm.c (handle_one_xevent): Set pending times on GTK as well. * src/gtkutil.c (xg_widget_key_press_event_cb): Respect pending keystroke time on XI2.
2022-03-16Fix build with GTK 3.18.0 or earlierPo Lu
* src/gtkutil.c (xg_update_scroll_bar_pos) (xg_update_horizontal_scrollbar_pos): Avoid gtk_widget_queue_allocate on older GTK versions.
2022-03-13Improve reliaibility of scroll bar dimensions adjustment on GTK 3Po Lu
* src/gtkutil.c (xg_scroll_bar_size_allocate_cb): New function. (xg_finish_scroll_bar_creation): Attach new signal. (xg_update_scrollbar_pos) (xg_update_horizontal_scrollbar_pos): Also set window dimensions for the event box. * src/xterm.c (x_scroll_bar_configure): New function. * src/xterm.h: Update prototypes.