annotate src/xselect.c @ 112364:42e22c4f06b7

Move all DEFVAR'd globals into a structure -- threading infrastructure * globals.h: New file. * xterm.h (Vx_pixel_size_width_font_regexp): Remove declaration. * window.h (Vinitial_window_system, Vminibuf_scroll_window) (Vwindow_system_version): Remove declaration. * w32term.h (Vw32_enable_palette) (Vx_pixel_size_width_font_regexp): Remove declaration. * w32menu.c (Voverriding_local_map) (Voverriding_local_map_menu_flag): Remove declaration. * w32inevt.c (Vw32_alt_is_meta, Vw32_apps_modifier) (Vw32_capslock_is_shiftlock, Vw32_enable_caps_lock) (Vw32_enable_num_lock, Vw32_lwindow_modifier) (Vw32_pass_lwindow_to_system, Vw32_pass_rwindow_to_system) (Vw32_phantom_key_code, Vw32_recognize_altgr) (Vw32_rwindow_modifier, Vw32_scroll_lock_modifier) (w32_use_full_screen_buffer): Remove declaration. * w32.c (Vsystem_configuration, Vw32_downcase_file_names) (Vw32_generate_fake_inodes, Vw32_get_true_file_attributes) (w32_num_mouse_buttons, w32_pipe_read_delay): Remove declaration. * termopts.h (Vtruncate_partial_width_windows, inverse_video) (no_redraw_on_reenter, visible_bell): Remove declaration. * sysdep.c (Vsystem_name): Remove declaration. * syntax.h (parse_sexp_lookup_properties): Remove declaration. * menu.h (Vmenu_updating_frame): Remove declaration. * macros.h (Vexecuting_kbd_macro, executing_kbd_macro_index): Remove declaration. * lisp.h (Vafter_init_time, Vafter_load_alist) (Vauto_save_list_file_name, Vbefore_init_time, Vcommand_history) (Vcompletion_regexp_list, Vcurrent_load_list) (Vcurrent_prefix_arg, Vdata_directory, Vdebug_on_error) (Vdoc_directory, Vdoc_file_name, Vdynamic_library_alist) (Vexec_directory, Vexec_path, Vexec_suffixes) (Vface_font_rescale_alist, Vface_ignored_fonts, Vfeatures) (Vhelp_form, Vhistory_length, Vinhibit_field_text_motion) (Vinhibit_quit, Vinhibit_read_only, Vinhibit_redisplay) (Vinstallation_directory, Vinvocation_directory) (Vinvocation_name, Vload_file_rep_suffixes, Vload_history) (Vload_suffixes, Vmark_even_if_inactive, Vmemory_full) (Vmessage_log_max, Vobarray, Vprint_length, Vprint_level) (Vpurify_flag, Vquit_flag, Vsaved_region_selection) (Vscalable_fonts_allowed, Vselect_active_regions) (Vshell_file_name, Vstandard_input, Vstandard_output) (Vsystem_name, Vtemporary_file_directory, Vthrow_on_input) (Vtop_level, Vtty_erase_char, Vundo_outer_limit) (Vuser_login_name, Vwindow_scroll_functions) (Vwindow_system_version, Vx_no_window_manager) (Vx_resource_class, Vx_resource_name, baud_rate) (completion_ignore_case, debug_on_next_call, gc_cons_threshold) (history_delete_duplicates, inhibit_x_resources) (last_nonmenu_event, load_in_progress, max_specpdl_size) (minibuffer_auto_raise, print_escape_newlines, scroll_margin) (use_dialog_box, use_file_dialog): Remove declaration. Include globals.h. * keymap.h (Voverriding_local_map) (Voverriding_local_map_menu_flag, meta_prefix_char): Remove declaration. * keyboard.h (Vdouble_click_time, Vfunction_key_map) (Vinput_method_function, Vkey_translation_map) (Vlucid_menu_bar_dirty_flag, Vthis_original_command) (do_mouse_tracking, extra_keyboard_modifiers) (num_nonmacro_input_events): Remove declaration. * intervals.h (Vchar_property_alias_alist) (Vdefault_text_properties, Vinhibit_point_motion_hooks) (Vtext_property_default_nonsticky): Remove declaration. * gtkutil.h (x_gtk_file_dialog_help_text) (x_gtk_show_hidden_files, x_gtk_use_old_file_dialog) (x_gtk_whole_detached_tool_bar): Remove declaration. * frame.h (Vdefault_frame_alist, Vframe_alpha_lower_limit) (Vmenu_bar_mode, Vmouse_highlight, Vterminal_frame) (Vtool_bar_mode, Vx_resource_class, Vx_resource_name) (focus_follows_mouse): Remove declaration. * fontset.h (Valternate_fontname_alist, Vfontset_alias_alist) (Vignore_relative_composition, Votf_script_alist) (Vuse_default_ascent, Vvertical_centering_font_regexp): Remove declaration. * font.h (Vfont_log): Remove declaration. * dosfns.h (Vdos_display_scancodes, Vdos_version) (Vdos_windows_version, dos_codepage, dos_country_code) (dos_decimal_point, dos_hyper_key, dos_keyboard_layout) (dos_keypad_mode, dos_super_key, dos_timezone_offset): Remove declaration. * disptab.h (Vglyph_table, Vstandard_display_table): Remove declaration. * dispextern.h (Vface_remapping_alist, Vglyphless_char_display) (Vmouse_autoselect_window, Voverflow_newline_into_fringe) (Vshow_trailing_whitespace, Vtool_bar_button_margin) (Vtool_bar_style, cursor_in_echo_area, display_hourglass_p) (inverse_video, mode_line_in_non_selected_windows) (tool_bar_button_relief, tool_bar_max_label_size) (underline_minimum_offset) (unibyte_display_via_language_environment, x_stretch_cursor_p): Remove declaration. * composite.h (Vauto_composition_function) (Vcomposition_function_table): Remove declaration. * commands.h (Vexecuting_kbd_macro) (Vminibuffer_local_completion_map) (Vminibuffer_local_filename_completion_map) (Vminibuffer_local_filename_must_match_map) (Vminibuffer_local_map, Vminibuffer_local_must_match_map) (Vminibuffer_local_ns_map, Vthis_command) (Vunread_command_events, cursor_in_echo_area) (last_command_event, last_nonmenu_event, unread_command_char): Remove declaration. * coding.h (Vcoding_system_for_read, Vcoding_system_for_write) (Vdefault_file_name_coding_system) (Vdefault_process_coding_system, Vfile_name_coding_system) (Vlast_coding_system_used, Vlocale_coding_system) (Vselect_safe_coding_system_function) (Vtranslation_table_for_input, coding_system_require_warning) (eol_mnemonic_dos, eol_mnemonic_mac, eol_mnemonic_undecided) (eol_mnemonic_unix, inherit_process_coding_system): Remove declaration. * charset.h (Vcharset_list, Vcurrent_iso639_language): Remove declaration. * character.h (Vauto_fill_chars, Vchar_direction_table) (Vchar_script_table, Vchar_width_table, Vprintable_chars) (Vscript_representative_chars, Vtranslation_table_vector) (Vunicode_category_table): Remove declaration. * ccl.h (Vfont_ccl_encoder_alist): Remove declaration. * buffer.h (Vafter_change_functions, Vbefore_change_functions) (Vdeactivate_mark, Vfirst_change_hook, Vtransient_mark_mode) (inhibit_modification_hooks): Remove declaration. * xterm.c (syms_of_xterm): Update. (Vx_alt_keysym, Vx_hyper_keysym, Vx_keysym_table) (Vx_meta_keysym, Vx_super_keysym, Vx_toolkit_scroll_bars) (x_mouse_click_focus_ignore_position) (x_underline_at_descent_line) (x_use_underline_position_properties): Remove. * xsmfns.c (syms_of_xsmfns): Update. (Vx_session_id, Vx_session_previous_id): Remove. * xsettings.c (syms_of_xsettings): Update. (Vxft_settings, use_system_font): Remove. * xselect.c (syms_of_xselect): Update. (Vselection_converter_alist, Vx_lost_selection_functions) (Vx_sent_selection_functions, x_selection_timeout): Remove. * xfns.c (syms_of_xfns): Update. (Vgtk_version_string, Vmotif_version_string) (Vx_cursor_fore_pixel, Vx_hourglass_pointer_shape) (Vx_max_tooltip_size, Vx_mode_pointer_shape) (Vx_no_window_manager, Vx_nontext_pointer_shape) (Vx_pixel_size_width_font_regexp, Vx_pointer_shape) (Vx_sensitive_text_pointer_shape) (Vx_window_horizontal_drag_shape, x_gtk_file_dialog_help_text) (x_gtk_show_hidden_files, x_gtk_use_old_file_dialog) (x_gtk_use_system_tooltips, x_gtk_whole_detached_tool_bar): Remove. * xfaces.c (syms_of_xfaces): Update. (Vface_default_stipple, Vface_font_rescale_alist) (Vface_ignored_fonts, Vface_new_frame_defaults) (Vface_remapping_alist, Vfont_list_limit) (Vscalable_fonts_allowed, Vtty_defined_color_alist): Remove. * xdisp.c (syms_of_xdisp): Update. (Vauto_resize_tool_bars, Vblink_cursor_alist) (Vdisplay_pixels_per_inch, Vfontification_functions) (Vframe_title_format, Vglobal_mode_string) (Vglyphless_char_display, Vhourglass_delay, Vhscroll_step) (Vicon_title_format, Vinhibit_redisplay) (Vline_number_display_limit, Vline_prefix) (Vmax_mini_window_height, Vmenu_bar_update_hook) (Vmenu_updating_frame, Vmessage_log_max) (Vmouse_autoselect_window, Vnobreak_char_display) (Voverlay_arrow_position, Voverlay_arrow_string) (Voverlay_arrow_variable_list, Vredisplay_end_trigger_functions) (Vresize_mini_windows, Vshow_trailing_whitespace) (Vtool_bar_border, Vtool_bar_button_margin, Vtool_bar_style) (Vtruncate_partial_width_windows, Vvoid_text_area_pointer) (Vwindow_scroll_functions, Vwindow_size_change_functions) (Vwindow_text_change_functions, Vwrap_prefix) (auto_raise_tool_bar_buttons_p, automatic_hscrolling_p) (debug_end_pos, display_hourglass_p, emacs_scroll_step) (highlight_nonselected_windows, hscroll_margin) (inhibit_eval_during_redisplay, inhibit_free_realized_faces) (inhibit_menubar_update, inhibit_try_cursor_movement) (inhibit_try_window_id, inhibit_try_window_reusing) (line_number_display_limit_width) (make_cursor_line_fully_visible_p, message_truncate_lines) (mode_line_inverse_video, multiple_frames, overline_margin) (scroll_conservatively, scroll_margin, tool_bar_button_relief) (tool_bar_max_label_size, underline_minimum_offset) (unibyte_display_via_language_environment, x_stretch_cursor_p): Remove. * window.c (syms_of_window): Update. (Vminibuf_scroll_window, Vother_window_scroll_buffer) (Vrecenter_redisplay, Vscroll_preserve_screen_position) (Vtemp_buffer_show_function, Vwindow_configuration_change_hook) (Vwindow_point_insertion_type, auto_window_vscroll_p) (mode_line_in_non_selected_windows, next_screen_context_lines) (window_min_height, window_min_width): Remove. (scroll_margin): Remove declaration. * w32term.c (syms_of_w32term): Update. (Vw32_capslock_is_shiftlock, Vw32_grab_focus_on_raise) (Vw32_recognize_altgr, Vw32_swap_mouse_buttons) (Vx_toolkit_scroll_bars, w32_num_mouse_buttons) (w32_use_visible_system_caret, x_underline_at_descent_line) (x_use_underline_position_properties): Remove. (Vcommand_line_args, Vsystem_name, extra_keyboard_modifiers): Remove declaration. * w32select.c (syms_of_w32select): Update. (Vnext_selection_coding_system, Vselection_coding_system): Remove. * w32proc.c (syms_of_ntproc): Update. (Vw32_downcase_file_names, Vw32_generate_fake_inodes) (Vw32_get_true_file_attributes, Vw32_quote_process_args) (Vw32_start_process_inherit_error_mode) (Vw32_start_process_share_console) (Vw32_start_process_show_window, w32_pipe_read_delay): Remove. (Vsystem_name): Remove declaration. * w32font.c (syms_of_w32font): Update. (Vw32_charset_info_alist): Remove. * w32fns.c (globals_of_w32fns, syms_of_w32fns): Update. (Vw32_alt_is_meta, Vw32_apps_modifier, Vw32_bdf_filename_alist) (Vw32_color_map, Vw32_enable_caps_lock, Vw32_enable_num_lock) (Vw32_enable_palette, Vw32_lwindow_modifier) (Vw32_pass_alt_to_system, Vw32_pass_lwindow_to_system) (Vw32_pass_rwindow_to_system, Vw32_phantom_key_code) (Vw32_rwindow_modifier, Vw32_scroll_lock_modifier) (Vx_cursor_fore_pixel, Vx_hourglass_pointer_shape) (Vx_max_tooltip_size, Vx_mode_pointer_shape) (Vx_no_window_manager, Vx_nontext_pointer_shape) (Vx_pixel_size_width_font_regexp, Vx_pointer_shape) (Vx_sensitive_text_pointer_shape) (Vx_window_horizontal_drag_shape, w32_ansi_code_page) (w32_enable_synthesized_fonts, w32_mouse_button_tolerance) (w32_mouse_move_interval) (w32_pass_extra_mouse_buttons_to_system) (w32_pass_multimedia_buttons_to_system, w32_quit_key) (w32_strict_fontnames, w32_strict_painting): Remove. (Vhourglass_delay, Vmenu_bar_mode, Vtool_bar_mode) (Vw32_recognize_altgr, Vwindow_system_version) (w32_num_mouse_buttons, w32_use_visible_system_caret): Remove declaration. * w32console.c (syms_of_ntterm): Update. (w32_use_full_screen_buffer): Remove. (Vtty_defined_color_alist): Remove declaration. * w16select.c (syms_of_win16select): Update. (Vnext_selection_coding_system, Vselection_coding_system): Remove. * undo.c (syms_of_undo): Update. (Vundo_outer_limit, Vundo_outer_limit_function) (undo_inhibit_record_point, undo_limit, undo_strong_limit): Remove. * textprop.c (syms_of_textprop): Update. (Vchar_property_alias_alist, Vdefault_text_properties) (Vinhibit_point_motion_hooks, Vtext_property_default_nonsticky): Remove. * terminal.c (syms_of_terminal): Update. (Vdelete_terminal_functions, Vring_bell_function): Remove. * term.c (syms_of_term): Update. (Vresume_tty_functions, Vsuspend_tty_functions) (no_redraw_on_reenter, system_uses_terminfo, visible_cursor): Remove. * syntax.c (syms_of_syntax): Update. (Vfind_word_boundary_function_table, multibyte_syntax_as_symbol) (open_paren_in_column_0_is_defun_start) (parse_sexp_ignore_comments, parse_sexp_lookup_properties) (words_include_escapes): Remove. * search.c (syms_of_search): Update. (Vinhibit_changing_match_data, Vsearch_spaces_regexp): Remove. * process.c (syms_of_process): Update. (Vprocess_adaptive_read_buffering, Vprocess_connection_type) (delete_exited_processes): Remove. * print.c (syms_of_print): Update. (Vfloat_output_format, Vprint_charset_text_property) (Vprint_circle, Vprint_continuous_numbering, Vprint_gensym) (Vprint_length, Vprint_level, Vprint_number_table) (Vstandard_output, print_escape_multibyte) (print_escape_newlines, print_escape_nonascii, print_quoted): Remove. * msdos.c (syms_of_msdos): Update. (Vdos_unsupported_char_glyph): Remove. (unibyte_display_via_language_environment): Remove declaration. * minibuf.c (syms_of_minibuf): Update. (Vcompletion_regexp_list, Vhistory_add_new_input) (Vhistory_length, Vminibuffer_completing_file_name) (Vminibuffer_completion_confirm) (Vminibuffer_completion_predicate, Vminibuffer_completion_table) (Vminibuffer_exit_hook, Vminibuffer_help_form) (Vminibuffer_history_position, Vminibuffer_history_variable) (Vminibuffer_prompt_properties, Vminibuffer_setup_hook) (Vread_buffer_function, Vread_expression_map) (completion_ignore_case, enable_recursive_minibuffers) (history_delete_duplicates, minibuffer_allow_text_properties) (minibuffer_auto_raise, read_buffer_completion_ignore_case): Remove. * marker.c (syms_of_marker): Update. (byte_debug_flag): Remove. * macros.c (syms_of_macros): Update. (Vexecuting_kbd_macro, executing_kbd_macro_index): Remove. * lread.c (syms_of_lread): Update. (Vafter_load_alist, Vbyte_boolean_vars) (Vbytecomp_version_regexp, Vcurrent_load_list) (Veval_buffer_list, Vload_file_name, Vload_file_rep_suffixes) (Vload_history, Vload_path, Vload_read_function) (Vload_source_file_function, Vload_suffixes, Vobarray) (Vold_style_backquotes, Vpreloaded_file_list, Vread_circle) (Vread_symbol_positions_list, Vread_with_symbol_positions) (Vsource_directory, Vstandard_input, Vuser_init_file, Vvalues) (force_load_messages, load_convert_to_unibyte) (load_dangerous_libraries, load_force_doc_strings) (load_in_progress): Remove. * keymap.c (syms_of_keymap): Update. (Vdefine_key_rebound_commands, Vemulation_mode_map_alists) (Vminibuffer_local_completion_map) (Vminibuffer_local_filename_completion_map) (Vminibuffer_local_filename_must_match_map) (Vminibuffer_local_map, Vminibuffer_local_must_match_map) (Vminibuffer_local_ns_map, Vminor_mode_map_alist) (Vminor_mode_overriding_map_alist, Vwhere_is_preferred_modifier): Remove. * keyboard.c (syms_of_keyboard): Update. (Vauto_save_timeout, Vcommand_error_function) (Vcommand_hook_internal, Vdeactivate_mark) (Vdeferred_action_function, Vdeferred_action_list) (Vdisable_point_adjustment, Vdouble_click_time) (Vecho_keystrokes, Venable_disabled_menus_and_buttons) (Vfunction_key_map, Vglobal_disable_point_adjustment) (Vhelp_char, Vhelp_event_list, Vhelp_form) (Vinput_method_function, Vinput_method_previous_message) (Vkey_translation_map, Vlast_event_frame) (Vlucid_menu_bar_dirty_flag, Vmenu_bar_final_items) (Vminibuffer_message_timeout, Voverriding_local_map) (Voverriding_local_map_menu_flag, Vpost_command_hook) (Vpre_command_hook, Vprefix_help_command) (Vsaved_region_selection, Vselect_active_regions) (Vshow_help_function, Vspecial_event_map, Vsuggest_key_bindings) (Vthis_command, Vthis_command_keys_shift_translated) (Vthis_original_command, Vthrow_on_input, Vtimer_idle_list) (Vtimer_list, Vtool_bar_separator_image_expression, Vtop_level) (Vtty_erase_char, Vunread_command_events) (Vunread_input_method_events, Vunread_post_input_method_events) (auto_save_interval, cannot_suspend, do_mouse_tracking) (double_click_fuzz, extra_keyboard_modifiers) (inhibit_local_menu_bar_menus, last_command_event) (last_input_event, last_nonmenu_event, menu_prompt_more_char) (menu_prompting, meta_prefix_char, num_input_keys) (num_nonmacro_input_events, polling_period, unread_command_char): Remove. * insdel.c (syms_of_insdel): Update. (Vcombine_after_change_calls, check_markers_debug_flag): Remove. * indent.c (syms_of_indent): Update. (indent_tabs_mode): Remove. * image.c (syms_of_image): Update. (Vimage_cache_eviction_delay, Vimage_types) (Vimagemagick_render_type, Vmax_image_size, Vx_bitmap_file_path) (cross_disabled_images): Remove. * fringe.c (syms_of_fringe): Update. (Vfringe_bitmaps, Voverflow_newline_into_fringe): Remove. * frame.c (syms_of_frame): Update. (Vdefault_frame_alist, Vdefault_frame_scroll_bars) (Vdelete_frame_functions, Vframe_alpha_lower_limit) (Vmake_pointer_invisible, Vmenu_bar_mode, Vmouse_highlight) (Vmouse_position_function, Vterminal_frame, Vtool_bar_mode) (Vx_resource_class, Vx_resource_name, focus_follows_mouse): Remove. * fontset.c (syms_of_fontset): Update. (Valternate_fontname_alist, Vfont_encoding_charset_alist) (Vfontset_alias_alist, Vignore_relative_composition) (Votf_script_alist, Vuse_default_ascent) (Vvertical_centering_font_regexp): Remove. * font.c (syms_of_font): Update. (Vfont_encoding_alist, Vfont_log, Vfont_slant_table) (Vfont_weight_table, Vfont_width_table): Remove. * fns.c (syms_of_fns): Update. (Vfeatures, use_dialog_box, use_file_dialog): Remove. * filelock.c (syms_of_filelock): Update. (Vtemporary_file_directory): Remove. * fileio.c (syms_of_fileio): Update. (Vafter_insert_file_functions, Vauto_save_include_big_deletions) (Vauto_save_list_file_name, Vauto_save_visited_file_name) (Vdefault_file_name_coding_system, Vfile_name_coding_system) (Vfile_name_handler_alist, Vinhibit_file_name_handlers) (Vinhibit_file_name_operation, Vset_auto_coding_function) (Vwrite_region_annotate_functions) (Vwrite_region_annotations_so_far) (Vwrite_region_post_annotation_function) (delete_by_moving_to_trash, write_region_inhibit_fsync): Remove. (Vw32_get_true_file_attributes): Remove declaration. * eval.c (syms_of_eval): Update. (Vdebug_ignored_errors, Vdebug_on_error, Vdebug_on_signal) (Vdebugger, Vinhibit_quit, Vmacro_declaration_function) (Vquit_flag, Vsignal_hook_function, Vstack_trace_on_error) (debug_on_next_call, debug_on_quit, debugger_may_continue) (max_lisp_eval_depth, max_specpdl_size): Remove. * emacs.c (syms_of_emacs): Update. (Vafter_init_time, Vbefore_init_time, Vcommand_line_args) (Vdynamic_library_alist, Vemacs_copyright, Vemacs_version) (Vinstallation_directory, Vinvocation_directory) (Vinvocation_name, Vkill_emacs_hook, Vpath_separator) (Vprevious_system_messages_locale, Vprevious_system_time_locale) (Vsystem_configuration, Vsystem_configuration_options) (Vsystem_messages_locale, Vsystem_time_locale, Vsystem_type) (inhibit_x_resources, noninteractive1): Remove. * editfns.c (syms_of_editfns): Update. (Vbuffer_access_fontified_property) (Vbuffer_access_fontify_functions, Vinhibit_field_text_motion) (Voperating_system_release, Vsystem_name, Vuser_full_name) (Vuser_login_name, Vuser_real_login_name): Remove. * dosfns.c (syms_of_dosfns): Update. (Vdos_display_scancodes, Vdos_version, Vdos_windows_version) (dos_codepage, dos_country_code, dos_decimal_point) (dos_hyper_key, dos_keyboard_layout, dos_keypad_mode) (dos_super_key, dos_timezone_offset): Remove. * doc.c (syms_of_doc): Update. (Vbuild_files, Vdoc_file_name): Remove. * dispnew.c (syms_of_display): Update. (Vglyph_table, Vinitial_window_system) (Vredisplay_preemption_period, Vstandard_display_table) (Vwindow_system_version, baud_rate, cursor_in_echo_area) (inverse_video, redisplay_dont_pause, visible_bell): Remove. * dired.c (syms_of_dired): Update. (Vcompletion_ignored_extensions): Remove. (Vw32_get_true_file_attributes): Remove declaration. * dbusbind.c (syms_of_dbusbind): Update. (Vdbus_debug, Vdbus_registered_buses) (Vdbus_registered_objects_table): Remove. * data.c (syms_of_data): Update. (Vmost_negative_fixnum, Vmost_positive_fixnum): Remove. * composite.c (syms_of_composite): Update. (Vauto_composition_function, Vauto_composition_mode) (Vcompose_chars_after_function, Vcomposition_function_table): Remove. * coding.c (syms_of_coding): Update. (Vcharset_revision_table, Vcoding_category_list) (Vcoding_system_alist, Vcoding_system_for_read) (Vcoding_system_for_write, Vcoding_system_list) (Vdefault_process_coding_system, Venable_character_translation) (Vfile_coding_system_alist, Vlast_code_conversion_error) (Vlast_coding_system_used, Vlatin_extra_code_table) (Vlocale_coding_system, Vnetwork_coding_system_alist) (Vprocess_coding_system_alist) (Vselect_safe_coding_system_function) (Vstandard_translation_table_for_decode) (Vstandard_translation_table_for_encode) (Vtranslation_table_for_input, coding_system_require_warning) (eol_mnemonic_dos, eol_mnemonic_mac, eol_mnemonic_undecided) (eol_mnemonic_unix, inherit_process_coding_system) (inhibit_eol_conversion, inhibit_iso_escape_detection) (inhibit_null_byte_detection): Remove. * cmds.c (syms_of_cmds): Update. (Vpost_self_insert_hook): Remove. * charset.c (syms_of_charset): Update. (Vcharset_list, Vcharset_map_path, Vcurrent_iso639_language) (inhibit_load_charset_map): Remove. * character.c (syms_of_character): Update. (Vauto_fill_chars, Vchar_direction_table, Vchar_script_table) (Vchar_width_table, Vprintable_chars) (Vscript_representative_chars, Vtranslation_table_vector) (Vunicode_category_table): Remove. * ccl.c (syms_of_ccl): Update. (Vcode_conversion_map_vector, Vfont_ccl_encoder_alist) (Vtranslation_hash_table_vector): Remove. * category.c (syms_of_category): Update. (Vword_combining_categories, Vword_separating_categories): Remove. * callproc.c (syms_of_callproc): Update. (Vconfigure_info_directory, Vdata_directory, Vdoc_directory) (Vexec_directory, Vexec_path, Vexec_suffixes) (Vinitial_environment, Vprocess_environment) (Vshared_game_score_directory, Vshell_file_name): Remove. * callint.c (syms_of_callint): Update. (Vcommand_debug_status, Vcommand_history, Vcurrent_prefix_arg) (Vmark_even_if_inactive, Vmouse_leave_buffer_hook): Remove. * bytecode.c (syms_of_bytecode): Update. (Vbyte_code_meter, byte_metering_on): Remove. * buffer.c (syms_of_buffer): Update. (Vafter_change_functions, Vbefore_change_functions) (Vchange_major_mode_hook, Vfirst_change_hook) (Vinhibit_read_only, Vkill_buffer_query_functions) (Vtransient_mark_mode, inhibit_modification_hooks): Remove. * alloc.c (syms_of_alloc): Update. (Vgc_cons_percentage, Vgc_elapsed, Vmemory_full) (Vmemory_signal_data, Vpost_gc_hook, Vpurify_flag) (cons_cells_consed, floats_consed, garbage_collection_messages) (gc_cons_threshold, gcs_done, intervals_consed) (misc_objects_consed, pure_bytes_used, string_chars_consed) (strings_consed, symbols_consed, vector_cells_consed): Remove. * lisp.h (DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL) (DEFVAR_INT): Assume global is in `globals'. * alloc.c (globals): Define.
author Tom Tromey <tromey@redhat.com>
date Tue, 18 Jan 2011 13:45:37 -0700
parents 56d3e9c28eb0
children 4d90cea362a3
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9617
3ea6ce042453 Log omitted from previous checkin:
Richard M. Stallman <rms@gnu.org>
parents: 9616
diff changeset
1 /* X Selection processing for Emacs.
64770
a0d1312ede66 Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 64252
diff changeset
2 Copyright (C) 1993, 1994, 1995, 1996, 1997, 2000, 2001, 2002, 2003,
112218
376148b31b5e Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106815
diff changeset
3 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
4
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
5 This file is part of GNU Emacs.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
6
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91607
diff changeset
7 GNU Emacs is free software: you can redistribute it and/or modify
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91607
diff changeset
9 the Free Software Foundation, either version 3 of the License, or
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91607
diff changeset
10 (at your option) any later version.
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
11
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
15 GNU General Public License for more details.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
16
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
94963
8971ddf55736 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 91607
diff changeset
18 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
19
2961
e94a593c3952 Updated copyright years.
Jim Blandy <jimb@redhat.com>
parents: 2797
diff changeset
20
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
21 /* Rewritten by jwz */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
22
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 4636
diff changeset
23 #include <config.h>
53818
a3c89ed1aac5 * xselect.c: Include stdio,h.
Jan Djärv <jan.h.d@swipnet.se>
parents: 53786
diff changeset
24 #include <stdio.h> /* termhooks.h needs this */
105669
68dd71358159 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 103624
diff changeset
25 #include <setjmp.h>
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
26
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
27 #ifdef HAVE_SYS_TYPES_H
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
28 #include <sys/types.h>
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
29 #endif
112317
7df2e30d72ec Include <unistd.h> unilaterally.
Paul Eggert <eggert@cs.ucla.edu>
parents: 111540
diff changeset
30
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
31 #include <unistd.h>
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
32
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
33 #include "lisp.h"
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
34 #include "xterm.h" /* for all of the X includes */
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
35 #include "dispextern.h" /* frame.h seems to want this */
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
36 #include "frame.h" /* Need this to get the X window of selected_frame */
2439
b6c62e4abf59 Put interrupt input blocking in a separate file from xterm.h.
Jim Blandy <jimb@redhat.com>
parents: 2372
diff changeset
37 #include "blockinput.h"
20104
6128508b0c31 Include buffer.h.
Kenichi Handa <handa@m17n.org>
parents: 19195
diff changeset
38 #include "buffer.h"
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21330
diff changeset
39 #include "process.h"
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
40 #include "termhooks.h"
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
41 #include "keyboard.h"
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
42
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
43 #include <X11/Xproto.h>
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
44
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
45 struct prop_location;
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
46
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
47 static Lisp_Object x_atom_to_symbol (Display *dpy, Atom atom);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
48 static Atom symbol_to_x_atom (struct x_display_info *, Display *,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
49 Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
50 static void x_own_selection (Lisp_Object, Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
51 static Lisp_Object x_get_local_selection (Lisp_Object, Lisp_Object, int);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
52 static void x_decline_selection_request (struct input_event *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
53 static Lisp_Object x_selection_request_lisp_error (Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
54 static Lisp_Object queue_selection_requests_unwind (Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
55 static Lisp_Object some_frame_on_display (struct x_display_info *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
56 static Lisp_Object x_catch_errors_unwind (Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
57 static void x_reply_selection_request (struct input_event *, int,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
58 unsigned char *, int, Atom);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
59 static int waiting_for_other_props_on_window (Display *, Window);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
60 static struct prop_location *expect_property_change (Display *, Window,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
61 Atom, int);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
62 static void unexpect_property_change (struct prop_location *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
63 static Lisp_Object wait_for_property_change_unwind (Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
64 static void wait_for_property_change (struct prop_location *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
65 static Lisp_Object x_get_foreign_selection (Lisp_Object,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
66 Lisp_Object,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
67 Lisp_Object);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
68 static void x_get_window_property (Display *, Window, Atom,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
69 unsigned char **, int *,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
70 Atom *, int *, unsigned long *, int);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
71 static void receive_incremental_selection (Display *, Window, Atom,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
72 Lisp_Object, unsigned,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
73 unsigned char **, int *,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
74 Atom *, int *, unsigned long *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
75 static Lisp_Object x_get_window_property_as_lisp_data (Display *,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
76 Window, Atom,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
77 Lisp_Object, Atom);
109555
05e7e7c46ff0 Use const, move declarations to header files.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109364
diff changeset
78 static Lisp_Object selection_data_to_lisp_data (Display *,
05e7e7c46ff0 Use const, move declarations to header files.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109364
diff changeset
79 const unsigned char *,
109100
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
80 int, Atom, int);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
81 static void lisp_data_to_selection_data (Display *, Lisp_Object,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
82 unsigned char **, Atom *,
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
83 unsigned *, int *, int *);
2bc9a0c04c87 Remove __P and P_ from .c and .m files and definition of P_
Jan D <jan.h.d@swipnet.se>
parents: 106815
diff changeset
84 static Lisp_Object clean_local_selection_data (Lisp_Object);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
85
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
86 /* Printing traces to stderr. */
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
87
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
88 #ifdef TRACE_SELECTION
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
89 #define TRACE0(fmt) \
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
90 fprintf (stderr, "%d: " fmt "\n", getpid ())
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
91 #define TRACE1(fmt, a0) \
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
92 fprintf (stderr, "%d: " fmt "\n", getpid (), a0)
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
93 #define TRACE2(fmt, a0, a1) \
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
94 fprintf (stderr, "%d: " fmt "\n", getpid (), a0, a1)
57948
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
95 #define TRACE3(fmt, a0, a1, a2) \
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
96 fprintf (stderr, "%d: " fmt "\n", getpid (), a0, a1, a2)
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
97 #else
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
98 #define TRACE0(fmt) (void) 0
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
99 #define TRACE1(fmt, a0) (void) 0
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
100 #define TRACE2(fmt, a0, a1) (void) 0
57948
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
101 #define TRACE3(fmt, a0, a1) (void) 0
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
102 #endif
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
103
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
104
109804
25de0a80ce75 Don't define QPRIMARY twice.
Jan D. <jan.h.d@swipnet.se>
parents: 109748
diff changeset
105 Lisp_Object QSECONDARY, QSTRING, QINTEGER, QCLIPBOARD, QTIMESTAMP,
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
106 QTEXT, QDELETE, QMULTIPLE, QINCR, QEMACS_TMP, QTARGETS, QATOM, QNULL,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
107 QATOM_PAIR;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
108
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
109 Lisp_Object QCOMPOUND_TEXT; /* This is a type of selection. */
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
110 Lisp_Object QUTF8_STRING; /* This is a type of selection. */
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
111
43559
244e1fe7e57f (Qcompound_text_with_extensions): Renamed from Qcompound_text_no_extensions.
Eli Zaretskii <eliz@gnu.org>
parents: 43474
diff changeset
112 Lisp_Object Qcompound_text_with_extensions;
43454
0ccb9431ca7b <Qcompound_text_with_extensions>: New variable.
Eli Zaretskii <eliz@gnu.org>
parents: 40656
diff changeset
113
51598
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
114 static Lisp_Object Qforeign_selection;
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
115
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
116 /* If this is a smaller number than the max-request-size of the display,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
117 emacs will use INCR selection transfer when the selection is larger
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
118 than this. The max-request-size is usually around 64k, so if you want
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
119 emacs to use incremental selection transfers when the selection is
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
120 smaller than that, set this. I added this mostly for debugging the
11702
afad0099d14b (Vx_sent_selection_hooks, Vx_lost_selection_hooks, Vselection_alist)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
121 incremental transfer stuff, but it might improve server performance. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
122 #define MAX_SELECTION_QUANTUM 0xFFFFFF
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
123
2372
ad7cb938ae08 * xselect.c (SELECTION_QUANTUM): Don't use XMaxRequestSize on R3;
Jim Blandy <jimb@redhat.com>
parents: 2255
diff changeset
124 #define SELECTION_QUANTUM(dpy) ((XMaxRequestSize(dpy) << 2) - 100)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
125
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
126 /* The timestamp of the last input event Emacs received from the X server. */
15705
2f5c1df12e01 (last_event_timestamp): Declare, but don't define.
Karl Heuer <kwzh@gnu.org>
parents: 15585
diff changeset
127 /* Defined in keyboard.c. */
2f5c1df12e01 (last_event_timestamp): Declare, but don't define.
Karl Heuer <kwzh@gnu.org>
parents: 15585
diff changeset
128 extern unsigned long last_event_timestamp;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
129
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
130 /* This is an association list whose elements are of the form
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
131 ( SELECTION-NAME SELECTION-VALUE SELECTION-TIMESTAMP FRAME)
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
132 SELECTION-NAME is a lisp symbol, whose name is the name of an X Atom.
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
133 SELECTION-VALUE is the value that emacs owns for that selection.
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
134 It may be any kind of Lisp object.
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
135 SELECTION-TIMESTAMP is the time at which emacs began owning this selection,
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
136 as a cons of two 16-bit numbers (making a 32 bit time.)
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
137 FRAME is the frame for which we made the selection.
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
138 If there is an entry in this alist, then it can be assumed that Emacs owns
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
139 that selection.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
140 The only (eq) parts of this list that are visible from Lisp are the
11702
afad0099d14b (Vx_sent_selection_hooks, Vx_lost_selection_hooks, Vselection_alist)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
141 selection-values. */
afad0099d14b (Vx_sent_selection_hooks, Vx_lost_selection_hooks, Vselection_alist)
Richard M. Stallman <rms@gnu.org>
parents: 11235
diff changeset
142 static Lisp_Object Vselection_alist;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
143
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
144
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
145
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
146 /* Define a queue to save up SELECTION_REQUEST_EVENT events for later
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
147 handling. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
148
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
149 struct selection_event_queue
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
150 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
151 struct input_event event;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
152 struct selection_event_queue *next;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
153 };
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
154
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
155 static struct selection_event_queue *selection_queue;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
156
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
157 /* Nonzero means queue up SELECTION_REQUEST_EVENT events. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
158
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
159 static int x_queue_selection_requests;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
160
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
161 /* Queue up an SELECTION_REQUEST_EVENT *EVENT, to be processed later. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
162
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
163 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
164 x_queue_event (struct input_event *event)
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
165 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
166 struct selection_event_queue *queue_tmp;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
167
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
168 /* Don't queue repeated requests.
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
169 This only happens for large requests which uses the incremental protocol. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
170 for (queue_tmp = selection_queue; queue_tmp; queue_tmp = queue_tmp->next)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
171 {
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
172 if (!memcmp (&queue_tmp->event, event, sizeof (*event)))
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
173 {
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
174 TRACE1 ("DECLINE DUP SELECTION EVENT %08lx", (unsigned long)queue_tmp);
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
175 x_decline_selection_request (event);
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
176 return;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
177 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
178 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
179
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
180 queue_tmp
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
181 = (struct selection_event_queue *) xmalloc (sizeof (struct selection_event_queue));
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
182
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
183 if (queue_tmp != NULL)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
184 {
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
185 TRACE1 ("QUEUE SELECTION EVENT %08lx", (unsigned long)queue_tmp);
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
186 queue_tmp->event = *event;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
187 queue_tmp->next = selection_queue;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
188 selection_queue = queue_tmp;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
189 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
190 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
191
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
192 /* Start queuing SELECTION_REQUEST_EVENT events. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
193
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
194 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
195 x_start_queuing_selection_requests (void)
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
196 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
197 if (x_queue_selection_requests)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
198 abort ();
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
199
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
200 x_queue_selection_requests++;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
201 TRACE1 ("x_start_queuing_selection_requests %d", x_queue_selection_requests);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
202 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
203
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
204 /* Stop queuing SELECTION_REQUEST_EVENT events. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
205
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
206 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
207 x_stop_queuing_selection_requests (void)
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
208 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
209 TRACE1 ("x_stop_queuing_selection_requests %d", x_queue_selection_requests);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
210 --x_queue_selection_requests;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
211
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
212 /* Take all the queued events and put them back
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
213 so that they get processed afresh. */
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
214
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
215 while (selection_queue != NULL)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
216 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
217 struct selection_event_queue *queue_tmp = selection_queue;
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
218 TRACE1 ("RESTORE SELECTION EVENT %08lx", (unsigned long)queue_tmp);
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
219 kbd_buffer_unget_event (&queue_tmp->event);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
220 selection_queue = queue_tmp->next;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
221 xfree ((char *)queue_tmp);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
222 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
223 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
224
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
225
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
226 /* This converts a Lisp symbol to a server Atom, avoiding a server
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
227 roundtrip whenever possible. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
228
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
229 static Atom
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
230 symbol_to_x_atom (struct x_display_info *dpyinfo, Display *display, Lisp_Object sym)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
231 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
232 Atom val;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
233 if (NILP (sym)) return 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
234 if (EQ (sym, QPRIMARY)) return XA_PRIMARY;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
235 if (EQ (sym, QSECONDARY)) return XA_SECONDARY;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
236 if (EQ (sym, QSTRING)) return XA_STRING;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
237 if (EQ (sym, QINTEGER)) return XA_INTEGER;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
238 if (EQ (sym, QATOM)) return XA_ATOM;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
239 if (EQ (sym, QCLIPBOARD)) return dpyinfo->Xatom_CLIPBOARD;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
240 if (EQ (sym, QTIMESTAMP)) return dpyinfo->Xatom_TIMESTAMP;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
241 if (EQ (sym, QTEXT)) return dpyinfo->Xatom_TEXT;
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
242 if (EQ (sym, QCOMPOUND_TEXT)) return dpyinfo->Xatom_COMPOUND_TEXT;
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
243 if (EQ (sym, QUTF8_STRING)) return dpyinfo->Xatom_UTF8_STRING;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
244 if (EQ (sym, QDELETE)) return dpyinfo->Xatom_DELETE;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
245 if (EQ (sym, QMULTIPLE)) return dpyinfo->Xatom_MULTIPLE;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
246 if (EQ (sym, QINCR)) return dpyinfo->Xatom_INCR;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
247 if (EQ (sym, QEMACS_TMP)) return dpyinfo->Xatom_EMACS_TMP;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
248 if (EQ (sym, QTARGETS)) return dpyinfo->Xatom_TARGETS;
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
249 if (EQ (sym, QNULL)) return dpyinfo->Xatom_NULL;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
250 if (!SYMBOLP (sym)) abort ();
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
251
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
252 TRACE1 (" XInternAtom %s", (char *) SDATA (SYMBOL_NAME (sym)));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
253 BLOCK_INPUT;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
254 val = XInternAtom (display, (char *) SDATA (SYMBOL_NAME (sym)), False);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
255 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
256 return val;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
257 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
258
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
259
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
260 /* This converts a server Atom to a Lisp symbol, avoiding server roundtrips
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
261 and calls to intern whenever possible. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
262
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
263 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
264 x_atom_to_symbol (Display *dpy, Atom atom)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
265 {
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
266 struct x_display_info *dpyinfo;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
267 char *str;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
268 Lisp_Object val;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
269
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
270 if (! atom)
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
271 return Qnil;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
272
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
273 switch (atom)
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
274 {
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
275 case XA_PRIMARY:
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
276 return QPRIMARY;
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
277 case XA_SECONDARY:
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
278 return QSECONDARY;
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
279 case XA_STRING:
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
280 return QSTRING;
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
281 case XA_INTEGER:
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
282 return QINTEGER;
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
283 case XA_ATOM:
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
284 return QATOM;
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
285 }
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
286
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
287 dpyinfo = x_display_info_for_display (dpy);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
288 if (atom == dpyinfo->Xatom_CLIPBOARD)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
289 return QCLIPBOARD;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
290 if (atom == dpyinfo->Xatom_TIMESTAMP)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
291 return QTIMESTAMP;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
292 if (atom == dpyinfo->Xatom_TEXT)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
293 return QTEXT;
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
294 if (atom == dpyinfo->Xatom_COMPOUND_TEXT)
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
295 return QCOMPOUND_TEXT;
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
296 if (atom == dpyinfo->Xatom_UTF8_STRING)
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
297 return QUTF8_STRING;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
298 if (atom == dpyinfo->Xatom_DELETE)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
299 return QDELETE;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
300 if (atom == dpyinfo->Xatom_MULTIPLE)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
301 return QMULTIPLE;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
302 if (atom == dpyinfo->Xatom_INCR)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
303 return QINCR;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
304 if (atom == dpyinfo->Xatom_EMACS_TMP)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
305 return QEMACS_TMP;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
306 if (atom == dpyinfo->Xatom_TARGETS)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
307 return QTARGETS;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
308 if (atom == dpyinfo->Xatom_NULL)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
309 return QNULL;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
310
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
311 BLOCK_INPUT;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
312 str = XGetAtomName (dpy, atom);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
313 UNBLOCK_INPUT;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
314 TRACE1 ("XGetAtomName --> %s", str);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
315 if (! str) return Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
316 val = intern (str);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
317 BLOCK_INPUT;
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
318 /* This was allocated by Xlib, so use XFree. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
319 XFree (str);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
320 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
321 return val;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
322 }
2255
ff870650d188 (cons_to_long, long_to_cons): No longer static.
Richard M. Stallman <rms@gnu.org>
parents: 2169
diff changeset
323
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
324 /* Do protocol to assert ourself as a selection owner.
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
325 Update the Vselection_alist so that we can reply to later requests for
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
326 our selection. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
327
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
328 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
329 x_own_selection (Lisp_Object selection_name, Lisp_Object selection_value)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
330 {
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
331 struct frame *sf = SELECTED_FRAME ();
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
332 Window selecting_window;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
333 Display *display;
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
334 Time time = last_event_timestamp;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
335 Atom selection_atom;
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
336 struct x_display_info *dpyinfo;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
337
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
338 if (! FRAME_X_P (sf))
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
339 return;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
340
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
341 selecting_window = FRAME_X_WINDOW (sf);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
342 display = FRAME_X_DISPLAY (sf);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
343 dpyinfo = FRAME_X_DISPLAY_INFO (sf);
109600
52a2d97e28e4 Adapt mouse-3 behavior to recent selection changes (Bug#6701).
Chong Yidong <cyd@stupidchicken.com>
parents: 109555
diff changeset
344
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
345 CHECK_SYMBOL (selection_name);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
346 selection_atom = symbol_to_x_atom (dpyinfo, display, selection_name);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
347
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
348 BLOCK_INPUT;
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
349 x_catch_errors (display);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
350 XSetSelectionOwner (display, selection_atom, selecting_window, time);
9701
26a60dd57b6e (x_own_selection, x_get_foreign_selection): Change calls
Richard M. Stallman <rms@gnu.org>
parents: 9691
diff changeset
351 x_check_errors (display, "Can't set selection: %s");
69173
fdee8318ddc9 * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary
Chong Yidong <cyd@stupidchicken.com>
parents: 69152
diff changeset
352 x_uncatch_errors ();
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
353 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
354
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
355 /* Now update the local cache */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
356 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
357 Lisp_Object selection_time;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
358 Lisp_Object selection_data;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
359 Lisp_Object prev_value;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
360
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
361 selection_time = long_to_cons ((unsigned long) time);
109600
52a2d97e28e4 Adapt mouse-3 behavior to recent selection changes (Bug#6701).
Chong Yidong <cyd@stupidchicken.com>
parents: 109555
diff changeset
362 selection_data = list4 (selection_name, selection_value,
52a2d97e28e4 Adapt mouse-3 behavior to recent selection changes (Bug#6701).
Chong Yidong <cyd@stupidchicken.com>
parents: 109555
diff changeset
363 selection_time, selected_frame);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
364 prev_value = assq_no_quit (selection_name, Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
365
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
366 Vselection_alist = Fcons (selection_data, Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
367
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
368 /* If we already owned the selection, remove the old selection data.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
369 Perhaps we should destructively modify it instead.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
370 Don't use Fdelq as that may QUIT. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
371 if (!NILP (prev_value))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
372 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
373 Lisp_Object rest; /* we know it's not the CAR, so it's easy. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84496
diff changeset
374 for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
375 if (EQ (prev_value, Fcar (XCDR (rest))))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
376 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
377 XSETCDR (rest, Fcdr (XCDR (rest)));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
378 break;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
379 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
380 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
381 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
382 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
383
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
384 /* Given a selection-name and desired type, look up our local copy of
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
385 the selection value and convert it to the type.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
386 The value is nil or a string.
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
387 This function is used both for remote requests (LOCAL_REQUEST is zero)
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
388 and for local x-get-selection-internal (LOCAL_REQUEST is nonzero).
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
389
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
390 This calls random Lisp code, and may signal or gc. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
391
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
392 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
393 x_get_local_selection (Lisp_Object selection_symbol, Lisp_Object target_type, int local_request)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
394 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
395 Lisp_Object local_value;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
396 Lisp_Object handler_fn, value, type, check;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
397 int count;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
398
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
399 local_value = assq_no_quit (selection_symbol, Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
400
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
401 if (NILP (local_value)) return Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
402
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
403 /* TIMESTAMP and MULTIPLE are special cases 'cause that's easiest. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
404 if (EQ (target_type, QTIMESTAMP))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
405 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
406 handler_fn = Qnil;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
407 value = XCAR (XCDR (XCDR (local_value)));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
408 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
409 #if 0
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
410 else if (EQ (target_type, QDELETE))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
411 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
412 handler_fn = Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
413 Fx_disown_selection_internal
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
414 (selection_symbol,
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
415 XCAR (XCDR (XCDR (local_value))));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
416 value = QNULL;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
417 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
418 #endif
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
419
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
420 #if 0 /* #### MULTIPLE doesn't work yet */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
421 else if (CONSP (target_type)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
422 && XCAR (target_type) == QMULTIPLE)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
423 {
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
424 Lisp_Object pairs;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
425 int size;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
426 int i;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
427 pairs = XCDR (target_type);
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
428 size = XVECTOR (pairs)->size;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
429 /* If the target is MULTIPLE, then target_type looks like
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
430 (MULTIPLE . [[SELECTION1 TARGET1] [SELECTION2 TARGET2] ... ])
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
431 We modify the second element of each pair in the vector and
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
432 return it as [[SELECTION1 <value1>] [SELECTION2 <value2>] ... ]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
433 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
434 for (i = 0; i < size; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
435 {
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
436 Lisp_Object pair;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
437 pair = XVECTOR (pairs)->contents [i];
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
438 XVECTOR (pair)->contents [1]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
439 = x_get_local_selection (XVECTOR (pair)->contents [0],
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
440 XVECTOR (pair)->contents [1],
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
441 local_request);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
442 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
443 return pairs;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
444 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
445 #endif
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
446 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
447 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
448 /* Don't allow a quit within the converter.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
449 When the user types C-g, he would be surprised
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
450 if by luck it came during a converter. */
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46285
diff changeset
451 count = SPECPDL_INDEX ();
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
452 specbind (Qinhibit_quit, Qt);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
453
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
454 CHECK_SYMBOL (target_type);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
455 handler_fn = Fcdr (Fassq (target_type, Vselection_converter_alist));
50473
d89a8e99c73b (x_handle_selection_request): Move UNGCPRO to very end.
Richard M. Stallman <rms@gnu.org>
parents: 50110
diff changeset
456 /* gcpro is not needed here since nothing but HANDLER_FN
d89a8e99c73b (x_handle_selection_request): Move UNGCPRO to very end.
Richard M. Stallman <rms@gnu.org>
parents: 50110
diff changeset
457 is live, and that ought to be a symbol. */
d89a8e99c73b (x_handle_selection_request): Move UNGCPRO to very end.
Richard M. Stallman <rms@gnu.org>
parents: 50110
diff changeset
458
3166
419d3bf1cb2b (x_get_local_selection): If no conversion function
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
459 if (!NILP (handler_fn))
419d3bf1cb2b (x_get_local_selection): If no conversion function
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
460 value = call3 (handler_fn,
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
461 selection_symbol, (local_request ? Qnil : target_type),
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
462 XCAR (XCDR (local_value)));
3166
419d3bf1cb2b (x_get_local_selection): If no conversion function
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
463 else
419d3bf1cb2b (x_get_local_selection): If no conversion function
Richard M. Stallman <rms@gnu.org>
parents: 2961
diff changeset
464 value = Qnil;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
465 unbind_to (count, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
466 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
467
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
468 /* Make sure this value is of a type that we could transmit
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
469 to another X client. */
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
470
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
471 check = value;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
472 if (CONSP (value)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
473 && SYMBOLP (XCAR (value)))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
474 type = XCAR (value),
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
475 check = XCDR (value);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
476
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
477 if (STRINGP (check)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
478 || VECTORP (check)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
479 || SYMBOLP (check)
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
480 || INTEGERP (check)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
481 || NILP (value))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
482 return value;
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
483 /* Check for a value that cons_to_long could handle. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
484 else if (CONSP (check)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
485 && INTEGERP (XCAR (check))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
486 && (INTEGERP (XCDR (check))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
487 ||
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
488 (CONSP (XCDR (check))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
489 && INTEGERP (XCAR (XCDR (check)))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
490 && NILP (XCDR (XCDR (check))))))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
491 return value;
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
492
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
493 signal_error ("Invalid data returned by selection-conversion function",
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
494 list2 (handler_fn, value));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
495 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
496
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
497 /* Subroutines of x_reply_selection_request. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
498
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
499 /* Send a SelectionNotify event to the requestor with property=None,
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
500 meaning we were unable to do what they wanted. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
501
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
502 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
503 x_decline_selection_request (struct input_event *event)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
504 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
505 XSelectionEvent reply;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
506
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
507 reply.type = SelectionNotify;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
508 reply.display = SELECTION_EVENT_DISPLAY (event);
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
509 reply.requestor = SELECTION_EVENT_REQUESTOR (event);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
510 reply.selection = SELECTION_EVENT_SELECTION (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
511 reply.time = SELECTION_EVENT_TIME (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
512 reply.target = SELECTION_EVENT_TARGET (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
513 reply.property = None;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
514
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
515 /* The reason for the error may be that the receiver has
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
516 died in the meantime. Handle that case. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
517 BLOCK_INPUT;
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
518 x_catch_errors (reply.display);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
519 XSendEvent (reply.display, reply.requestor, False, 0L, (XEvent *) &reply);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
520 XFlush (reply.display);
69173
fdee8318ddc9 * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary
Chong Yidong <cyd@stupidchicken.com>
parents: 69152
diff changeset
521 x_uncatch_errors ();
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
522 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
523 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
524
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
525 /* This is the selection request currently being processed.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
526 It is set to zero when the request is fully processed. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
527 static struct input_event *x_selection_current_request;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
528
35237
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
529 /* Display info in x_selection_request. */
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
530
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
531 static struct x_display_info *selection_request_dpyinfo;
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
532
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
533 /* Used as an unwind-protect clause so that, if a selection-converter signals
13942
b01288cb5fc8 (x_get_foreign_selection): Renamed local variables
Karl Heuer <kwzh@gnu.org>
parents: 13557
diff changeset
534 an error, we tell the requester that we were unable to do what they wanted
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
535 before we throw to top-level or go into the debugger or whatever. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
536
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
537 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
538 x_selection_request_lisp_error (Lisp_Object ignore)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
539 {
35237
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
540 if (x_selection_current_request != 0
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
541 && selection_request_dpyinfo->display)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
542 x_decline_selection_request (x_selection_current_request);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
543 return Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
544 }
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
545
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
546 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
547 x_catch_errors_unwind (Lisp_Object dummy)
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
548 {
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
549 BLOCK_INPUT;
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
550 x_uncatch_errors ();
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
551 UNBLOCK_INPUT;
69282
a072ac3cca3f (x_catch_errors_unwind): Fix missing return value.
Andreas Schwab <schwab@suse.de>
parents: 69209
diff changeset
552 return Qnil;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
553 }
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
554
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
555
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
556 /* This stuff is so that INCR selections are reentrant (that is, so we can
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
557 be servicing multiple INCR selection requests simultaneously.) I haven't
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
558 actually tested that yet. */
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
559
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
560 /* Keep a list of the property changes that are awaited. */
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
561
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
562 struct prop_location
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
563 {
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
564 int identifier;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
565 Display *display;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
566 Window window;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
567 Atom property;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
568 int desired_state;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
569 int arrived;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
570 struct prop_location *next;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
571 };
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
572
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
573 static struct prop_location *expect_property_change (Display *display, Window window, Atom property, int state);
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
574 static void wait_for_property_change (struct prop_location *location);
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
575 static void unexpect_property_change (struct prop_location *location);
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
576 static int waiting_for_other_props_on_window (Display *display, Window window);
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
577
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
578 static int prop_location_identifier;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
579
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
580 static Lisp_Object property_change_reply;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
581
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
582 static struct prop_location *property_change_reply_object;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
583
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
584 static struct prop_location *property_change_wait_list;
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
585
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
586 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
587 queue_selection_requests_unwind (Lisp_Object tem)
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
588 {
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
589 x_stop_queuing_selection_requests ();
11908
4f4034f45cbf (queue_selection_requests_unwind): Add return value.
Karl Heuer <kwzh@gnu.org>
parents: 11881
diff changeset
590 return Qnil;
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
591 }
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
592
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
593 /* Return some frame whose display info is DPYINFO.
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
594 Return nil if there is none. */
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
595
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
596 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
597 some_frame_on_display (struct x_display_info *dpyinfo)
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
598 {
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
599 Lisp_Object list, frame;
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
600
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
601 FOR_EACH_FRAME (list, frame)
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
602 {
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
603 if (FRAME_X_P (XFRAME (frame))
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
604 && FRAME_X_DISPLAY_INFO (XFRAME (frame)) == dpyinfo)
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
605 return frame;
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
606 }
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
607
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
608 return Qnil;
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
609 }
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
610
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
611 /* Send the reply to a selection request event EVENT.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
612 TYPE is the type of selection data requested.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
613 DATA and SIZE describe the data to send, already converted.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
614 FORMAT is the unit-size (in bits) of the data to be transmitted. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
615
78743
4c7b6a25a97b (x_reply_selection_request) <cnt>: Move static variable to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78401
diff changeset
616 #ifdef TRACE_SELECTION
78763
8110f4179a3a (cnt): Rename to x_reply_selection_request_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78743
diff changeset
617 static int x_reply_selection_request_cnt;
78743
4c7b6a25a97b (x_reply_selection_request) <cnt>: Move static variable to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78401
diff changeset
618 #endif /* TRACE_SELECTION */
4c7b6a25a97b (x_reply_selection_request) <cnt>: Move static variable to file scope.
Glenn Morris <rgm@gnu.org>
parents: 78401
diff changeset
619
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
620 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
621 x_reply_selection_request (struct input_event *event, int format, unsigned char *data, int size, Atom type)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
622 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
623 XSelectionEvent reply;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
624 Display *display = SELECTION_EVENT_DISPLAY (event);
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
625 Window window = SELECTION_EVENT_REQUESTOR (event);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
626 int bytes_remaining;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
627 int format_bytes = format/8;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
628 int max_bytes = SELECTION_QUANTUM (display);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
629 struct x_display_info *dpyinfo = x_display_info_for_display (display);
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
630 int count = SPECPDL_INDEX ();
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
631
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
632 if (max_bytes > MAX_SELECTION_QUANTUM)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
633 max_bytes = MAX_SELECTION_QUANTUM;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
634
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
635 reply.type = SelectionNotify;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
636 reply.display = display;
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
637 reply.requestor = window;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
638 reply.selection = SELECTION_EVENT_SELECTION (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
639 reply.time = SELECTION_EVENT_TIME (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
640 reply.target = SELECTION_EVENT_TARGET (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
641 reply.property = SELECTION_EVENT_PROPERTY (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
642 if (reply.property == None)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
643 reply.property = reply.target;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
644
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
645 BLOCK_INPUT;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
646 /* The protected block contains wait_for_property_change, which can
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
647 run random lisp code (process handlers) or signal. Therefore, we
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
648 put the x_uncatch_errors call in an unwind. */
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
649 record_unwind_protect (x_catch_errors_unwind, Qnil);
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
650 x_catch_errors (display);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
651
57948
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
652 #ifdef TRACE_SELECTION
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
653 {
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
654 char *sel = XGetAtomName (display, reply.selection);
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
655 char *tgt = XGetAtomName (display, reply.target);
78763
8110f4179a3a (cnt): Rename to x_reply_selection_request_cnt for clarity.
Glenn Morris <rgm@gnu.org>
parents: 78743
diff changeset
656 TRACE3 ("%s, target %s (%d)", sel, tgt, ++x_reply_selection_request_cnt);
57948
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
657 if (sel) XFree (sel);
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
658 if (tgt) XFree (tgt);
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
659 }
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
660 #endif /* TRACE_SELECTION */
481911368712 * xselect.c (TRACE3): New debug macro.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57777
diff changeset
661
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
662 /* Store the data on the requested property.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
663 If the selection is large, only store the first N bytes of it.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
664 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
665 bytes_remaining = size * format_bytes;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
666 if (bytes_remaining <= max_bytes)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
667 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
668 /* Send all the data at once, with minimal handshaking. */
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
669 TRACE1 ("Sending all %d bytes", bytes_remaining);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
670 XChangeProperty (display, window, reply.property, type, format,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
671 PropModeReplace, data, size);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
672 /* At this point, the selection was successfully stored; ack it. */
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
673 XSendEvent (display, window, False, 0L, (XEvent *) &reply);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
674 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
675 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
676 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
677 /* Send an INCR selection. */
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
678 struct prop_location *wait_object;
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
679 int had_errors;
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
680 Lisp_Object frame;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
681
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
682 frame = some_frame_on_display (dpyinfo);
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
683
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
684 /* If the display no longer has frames, we can't expect
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
685 to get many more selection requests from it, so don't
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
686 bother trying to queue them. */
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
687 if (!NILP (frame))
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
688 {
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
689 x_start_queuing_selection_requests ();
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
690
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
691 record_unwind_protect (queue_selection_requests_unwind,
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
692 Qnil);
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
693 }
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
694
11198
571306c7b038 New arg DPYINFO to all callers of x_window_to_frame, x_any_window_to_frame,
Karl Heuer <kwzh@gnu.org>
parents: 11161
diff changeset
695 if (x_window_to_frame (dpyinfo, window)) /* #### debug */
14134
a1ebbdb060b8 (x_handle_selection_notify): Give an indication
Karl Heuer <kwzh@gnu.org>
parents: 14031
diff changeset
696 error ("Attempt to transfer an INCR to ourself!");
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
697
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
698 TRACE2 ("Start sending %d bytes incrementally (%s)",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
699 bytes_remaining, XGetAtomName (display, reply.property));
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
700 wait_object = expect_property_change (display, window, reply.property,
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
701 PropertyDelete);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
702
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
703 TRACE1 ("Set %s to number of bytes to send",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
704 XGetAtomName (display, reply.property));
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
705 {
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
706 /* XChangeProperty expects an array of long even if long is more than
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
707 32 bits. */
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
708 long value[1];
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
709
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
710 value[0] = bytes_remaining;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
711 XChangeProperty (display, window, reply.property, dpyinfo->Xatom_INCR,
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
712 32, PropModeReplace,
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
713 (unsigned char *) value, 1);
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
714 }
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
715
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
716 XSelectInput (display, window, PropertyChangeMask);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
717
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
718 /* Tell 'em the INCR data is there... */
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
719 TRACE0 ("Send SelectionNotify event");
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
720 XSendEvent (display, window, False, 0L, (XEvent *) &reply);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
721 XFlush (display);
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
722
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
723 had_errors = x_had_errors_p (display);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
724 UNBLOCK_INPUT;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
725
13942
b01288cb5fc8 (x_get_foreign_selection): Renamed local variables
Karl Heuer <kwzh@gnu.org>
parents: 13557
diff changeset
726 /* First, wait for the requester to ack by deleting the property.
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
727 This can run random lisp code (process handlers) or signal. */
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
728 if (! had_errors)
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
729 {
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
730 TRACE1 ("Waiting for ACK (deletion of %s)",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
731 XGetAtomName (display, reply.property));
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
732 wait_for_property_change (wait_object);
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
733 }
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
734 else
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
735 unexpect_property_change (wait_object);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
736
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
737 TRACE0 ("Got ACK");
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
738 while (bytes_remaining)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
739 {
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
740 int i = ((bytes_remaining < max_bytes)
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
741 ? bytes_remaining
95313
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
742 : max_bytes) / format_bytes;
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
743
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
744 BLOCK_INPUT;
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
745
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
746 wait_object
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
747 = expect_property_change (display, window, reply.property,
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
748 PropertyDelete);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
749
95313
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
750 TRACE1 ("Sending increment of %d elements", i);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
751 TRACE1 ("Set %s to increment data",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
752 XGetAtomName (display, reply.property));
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
753
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
754 /* Append the next chunk of data to the property. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
755 XChangeProperty (display, window, reply.property, type, format,
95313
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
756 PropModeAppend, data, i);
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
757 bytes_remaining -= i * format_bytes;
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
758 if (format == 32)
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
759 data += i * sizeof (long);
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
760 else
42018959645c (x_reply_selection_request): Properly handle format ==
Andreas Schwab <schwab@suse.de>
parents: 94963
diff changeset
761 data += i * format_bytes;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
762 XFlush (display);
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
763 had_errors = x_had_errors_p (display);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
764 UNBLOCK_INPUT;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
765
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
766 if (had_errors)
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
767 break;
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
768
13942
b01288cb5fc8 (x_get_foreign_selection): Renamed local variables
Karl Heuer <kwzh@gnu.org>
parents: 13557
diff changeset
769 /* Now wait for the requester to ack this chunk by deleting the
74145
8eceefbbcde7 Space/tab mixup.
Juanma Barranquero <lekktu@gmail.com>
parents: 73931
diff changeset
770 property. This can run random lisp code or signal. */
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
771 TRACE1 ("Waiting for increment ACK (deletion of %s)",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
772 XGetAtomName (display, reply.property));
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
773 wait_for_property_change (wait_object);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
774 }
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
775
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
776 /* Now write a zero-length chunk to the property to tell the
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
777 requester that we're done. */
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
778 BLOCK_INPUT;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
779 if (! waiting_for_other_props_on_window (display, window))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
780 XSelectInput (display, window, 0L);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
781
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
782 TRACE1 ("Set %s to a 0-length chunk to indicate EOF",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
783 XGetAtomName (display, reply.property));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
784 XChangeProperty (display, window, reply.property, type, format,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
785 PropModeReplace, data, 0);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
786 TRACE0 ("Done sending incrementally");
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
787 }
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
788
49065
265dc22fb2c0 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 47281
diff changeset
789 /* rms, 2003-01-03: I think I have fixed this bug. */
35193
b317937fe5f8 (x_reply_selection_request): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 33963
diff changeset
790 /* The window we're communicating with may have been deleted
b317937fe5f8 (x_reply_selection_request): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 33963
diff changeset
791 in the meantime (that's a real situation from a bug report).
b317937fe5f8 (x_reply_selection_request): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 33963
diff changeset
792 In this case, there may be events in the event queue still
b317937fe5f8 (x_reply_selection_request): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 33963
diff changeset
793 refering to the deleted window, and we'll get a BadWindow error
b317937fe5f8 (x_reply_selection_request): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 33963
diff changeset
794 in XTread_socket when processing the events. I don't have
b317937fe5f8 (x_reply_selection_request): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 33963
diff changeset
795 an idea how to fix that. gerd, 2001-01-98. */
57050
d303ac34c1a0 * xselect.c (x_reply_selection_request): XSync and UNBLOCK before
Jan Djärv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
796 /* 2004-09-10: XSync and UNBLOCK so that possible protocol errors are
d303ac34c1a0 * xselect.c (x_reply_selection_request): XSync and UNBLOCK before
Jan Djärv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
797 delivered before uncatch errors. */
d303ac34c1a0 * xselect.c (x_reply_selection_request): XSync and UNBLOCK before
Jan Djärv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
798 XSync (display, False);
d303ac34c1a0 * xselect.c (x_reply_selection_request): XSync and UNBLOCK before
Jan Djärv <jan.h.d@swipnet.se>
parents: 56729
diff changeset
799 UNBLOCK_INPUT;
57053
abdfb8ccbb2b Must BLOCK/UNBLOCK around x_uncatch_errors.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57050
diff changeset
800
abdfb8ccbb2b Must BLOCK/UNBLOCK around x_uncatch_errors.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57050
diff changeset
801 /* GTK queues events in addition to the queue in Xlib. So we
abdfb8ccbb2b Must BLOCK/UNBLOCK around x_uncatch_errors.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57050
diff changeset
802 UNBLOCK to enter the event loop and get possible errors delivered,
abdfb8ccbb2b Must BLOCK/UNBLOCK around x_uncatch_errors.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57050
diff changeset
803 and then BLOCK again because x_uncatch_errors requires it. */
abdfb8ccbb2b Must BLOCK/UNBLOCK around x_uncatch_errors.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57050
diff changeset
804 BLOCK_INPUT;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
805 /* This calls x_uncatch_errors. */
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
806 unbind_to (count, Qnil);
57053
abdfb8ccbb2b Must BLOCK/UNBLOCK around x_uncatch_errors.
Jan Djärv <jan.h.d@swipnet.se>
parents: 57050
diff changeset
807 UNBLOCK_INPUT;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
808 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
809
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
810 /* Handle a SelectionRequest event EVENT.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
811 This is called from keyboard.c when such an event is found in the queue. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
812
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
813 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
814 x_handle_selection_request (struct input_event *event)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
815 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
816 struct gcpro gcpro1, gcpro2, gcpro3;
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
817 Lisp_Object local_selection_data;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
818 Lisp_Object selection_symbol;
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
819 Lisp_Object target_symbol;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
820 Lisp_Object converted_selection;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
821 Time local_selection_time;
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
822 Lisp_Object successful_p;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
823 int count;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
824 struct x_display_info *dpyinfo
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
825 = x_display_info_for_display (SELECTION_EVENT_DISPLAY (event));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
826
58096
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
827 TRACE2 ("x_handle_selection_request, from=0x%08lx time=%lu",
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
828 (unsigned long) SELECTION_EVENT_REQUESTOR (event),
b32fa5b7492d Include <sys/types.h> and <unistd.h> (for getpid).
Kim F. Storm <storm@cua.dk>
parents: 57952
diff changeset
829 (unsigned long) SELECTION_EVENT_TIME (event));
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
830
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
831 local_selection_data = Qnil;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
832 target_symbol = Qnil;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
833 converted_selection = Qnil;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
834 successful_p = Qnil;
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
835
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
836 GCPRO3 (local_selection_data, converted_selection, target_symbol);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
837
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
838 selection_symbol = x_atom_to_symbol (SELECTION_EVENT_DISPLAY (event),
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
839 SELECTION_EVENT_SELECTION (event));
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
840
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
841 local_selection_data = assq_no_quit (selection_symbol, Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
842
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
843 if (NILP (local_selection_data))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
844 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
845 /* Someone asked for the selection, but we don't have it any more.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
846 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
847 x_decline_selection_request (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
848 goto DONE;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
849 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
850
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
851 local_selection_time = (Time)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
852 cons_to_long (XCAR (XCDR (XCDR (local_selection_data))));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
853
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
854 if (SELECTION_EVENT_TIME (event) != CurrentTime
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
855 && local_selection_time > SELECTION_EVENT_TIME (event))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
856 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
857 /* Someone asked for the selection, and we have one, but not the one
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
858 they're looking for.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
859 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
860 x_decline_selection_request (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
861 goto DONE;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
862 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
863
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
864 x_selection_current_request = event;
46285
3f111801efb4 Rename BINDING_STACK_SIZE to SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45985
diff changeset
865 count = SPECPDL_INDEX ();
35237
387dc44657f0 (selection_request_dpyinfo): New variable.
Gerd Moellmann <gerd@gnu.org>
parents: 35193
diff changeset
866 selection_request_dpyinfo = dpyinfo;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
867 record_unwind_protect (x_selection_request_lisp_error, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
868
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
869 target_symbol = x_atom_to_symbol (SELECTION_EVENT_DISPLAY (event),
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
870 SELECTION_EVENT_TARGET (event));
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
871
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
872 #if 0 /* #### MULTIPLE doesn't work yet */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
873 if (EQ (target_symbol, QMULTIPLE))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
874 target_symbol = fetch_multiple_target (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
875 #endif
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
876
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
877 /* Convert lisp objects back into binary data */
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
878
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
879 converted_selection
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
880 = x_get_local_selection (selection_symbol, target_symbol, 0);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
881
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
882 if (! NILP (converted_selection))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
883 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
884 unsigned char *data;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
885 unsigned int size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
886 int format;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
887 Atom type;
4278
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
888 int nofree;
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
889
73427
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
890 if (CONSP (converted_selection) && NILP (XCDR (converted_selection)))
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
891 {
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
892 x_decline_selection_request (event);
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
893 goto DONE2;
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
894 }
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
895
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
896 lisp_data_to_selection_data (SELECTION_EVENT_DISPLAY (event),
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
897 converted_selection,
4278
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
898 &data, &type, &size, &format, &nofree);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
899
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
900 x_reply_selection_request (event, format, data, size, type);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
901 successful_p = Qt;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
902
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
903 /* Indicate we have successfully processed this event. */
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
904 x_selection_current_request = 0;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
905
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
906 /* Use xfree, not XFree, because lisp_data_to_selection_data
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
907 calls xmalloc itself. */
4278
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
908 if (!nofree)
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
909 xfree (data);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
910 }
73427
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
911
842c20ea5853 * xselect.c (x_handle_selection_request): If the converted_selection
Jan Djärv <jan.h.d@swipnet.se>
parents: 72352
diff changeset
912 DONE2:
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
913 unbind_to (count, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
914
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
915 DONE:
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
916
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
917 /* Let random lisp code notice that the selection has been asked for. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
918 {
6520
bbde44df8b9d (x_get_local_selection, x_handle_selection_request): Use assignment, not
Karl Heuer <kwzh@gnu.org>
parents: 5947
diff changeset
919 Lisp_Object rest;
57777
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
920 rest = Vx_sent_selection_functions;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
921 if (!EQ (rest, Qunbound))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
922 for (; CONSP (rest); rest = Fcdr (rest))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
923 call3 (Fcar (rest), selection_symbol, target_symbol, successful_p);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
924 }
50473
d89a8e99c73b (x_handle_selection_request): Move UNGCPRO to very end.
Richard M. Stallman <rms@gnu.org>
parents: 50110
diff changeset
925
d89a8e99c73b (x_handle_selection_request): Move UNGCPRO to very end.
Richard M. Stallman <rms@gnu.org>
parents: 50110
diff changeset
926 UNGCPRO;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
927 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
928
24163
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
929 /* Handle a SelectionClear event EVENT, which indicates that some
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
930 client cleared out our previously asserted selection.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
931 This is called from keyboard.c when such an event is found in the queue. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
932
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
933 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
934 x_handle_selection_clear (struct input_event *event)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
935 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
936 Display *display = SELECTION_EVENT_DISPLAY (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
937 Atom selection = SELECTION_EVENT_SELECTION (event);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
938 Time changed_owner_time = SELECTION_EVENT_TIME (event);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
939
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
940 Lisp_Object selection_symbol, local_selection_data;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
941 Time local_selection_time;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
942 struct x_display_info *dpyinfo = x_display_info_for_display (display);
24163
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
943 struct x_display_info *t_dpyinfo;
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
944
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
945 TRACE0 ("x_handle_selection_clear");
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
946
24163
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
947 /* If the new selection owner is also Emacs,
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
948 don't clear the new selection. */
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
949 BLOCK_INPUT;
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
950 /* Check each display on the same terminal,
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
951 to see if this Emacs job now owns the selection
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
952 through that display. */
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
953 for (t_dpyinfo = x_display_list; t_dpyinfo; t_dpyinfo = t_dpyinfo->next)
83431
76396de7f50a Rename `struct device' to `struct terminal'. Rename some terminal-related functions similarly.
Karoly Lorentey <lorentey@elte.hu>
parents: 83423
diff changeset
954 if (t_dpyinfo->terminal->kboard == dpyinfo->terminal->kboard)
24163
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
955 {
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
956 Window owner_window
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
957 = XGetSelectionOwner (t_dpyinfo->display, selection);
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
958 if (x_window_to_frame (t_dpyinfo, owner_window) != 0)
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
959 {
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
960 UNBLOCK_INPUT;
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
961 return;
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
962 }
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
963 }
719325fbe6a1 (x_handle_selection_clear): Don't clear the
Richard M. Stallman <rms@gnu.org>
parents: 23873
diff changeset
964 UNBLOCK_INPUT;
109600
52a2d97e28e4 Adapt mouse-3 behavior to recent selection changes (Bug#6701).
Chong Yidong <cyd@stupidchicken.com>
parents: 109555
diff changeset
965
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
966 selection_symbol = x_atom_to_symbol (display, selection);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
967
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
968 local_selection_data = assq_no_quit (selection_symbol, Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
969
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
970 /* Well, we already believe that we don't own it, so that's just fine. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
971 if (NILP (local_selection_data)) return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
972
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
973 local_selection_time = (Time)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
974 cons_to_long (XCAR (XCDR (XCDR (local_selection_data))));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
975
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
976 /* This SelectionClear is for a selection that we no longer own, so we can
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
977 disregard it. (That is, we have reasserted the selection since this
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
978 request was generated.) */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
979
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
980 if (changed_owner_time != CurrentTime
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
981 && local_selection_time > changed_owner_time)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
982 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
983
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
984 /* Otherwise, we're really honest and truly being told to drop it.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
985 Don't use Fdelq as that may QUIT;. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
986
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
987 if (EQ (local_selection_data, Fcar (Vselection_alist)))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
988 Vselection_alist = Fcdr (Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
989 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
990 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
991 Lisp_Object rest;
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84496
diff changeset
992 for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
993 if (EQ (local_selection_data, Fcar (XCDR (rest))))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
994 {
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
995 XSETCDR (rest, Fcdr (XCDR (rest)));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
996 break;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
997 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
998 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
999
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1000 /* Let random lisp code notice that the selection has been stolen. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1001
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1002 {
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1003 Lisp_Object rest;
57777
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
1004 rest = Vx_lost_selection_functions;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1005 if (!EQ (rest, Qunbound))
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1006 {
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1007 for (; CONSP (rest); rest = Fcdr (rest))
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1008 call1 (Fcar (rest), selection_symbol);
5244
c0bd54986550 (x_get_foreign_selection): Use x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 5131
diff changeset
1009 prepare_menu_bars ();
35336
002c02db42d3 Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents: 35237
diff changeset
1010 redisplay_preserve_echo_area (20);
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1011 }
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1012 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1013 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1014
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1015 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1016 x_handle_selection_event (struct input_event *event)
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1017 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1018 TRACE0 ("x_handle_selection_event");
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1019
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1020 if (event->kind == SELECTION_REQUEST_EVENT)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1021 {
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1022 if (x_queue_selection_requests)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1023 x_queue_event (event);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1024 else
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1025 x_handle_selection_request (event);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1026 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1027 else
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1028 x_handle_selection_clear (event);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1029 }
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1030
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1031
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1032 /* Clear all selections that were made from frame F.
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1033 We do this when about to delete a frame. */
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1034
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1035 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1036 x_clear_frame_selections (FRAME_PTR f)
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1037 {
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1038 Lisp_Object frame;
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1039 Lisp_Object rest;
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1040
9286
2accc8da0793 (x_clear_frame_selections, wait_for_property_change): Use new accessor macros
Karl Heuer <kwzh@gnu.org>
parents: 8355
diff changeset
1041 XSETFRAME (frame, f);
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1042
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1043 /* Otherwise, we're really honest and truly being told to drop it.
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1044 Don't use Fdelq as that may QUIT;. */
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1045
13555
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1046 /* Delete elements from the beginning of Vselection_alist. */
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1047 while (!NILP (Vselection_alist)
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1048 && EQ (frame, Fcar (Fcdr (Fcdr (Fcdr (Fcar (Vselection_alist)))))))
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1049 {
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1050 /* Let random Lisp code notice that the selection has been stolen. */
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1051 Lisp_Object hooks, selection_symbol;
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1052
57777
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
1053 hooks = Vx_lost_selection_functions;
13555
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1054 selection_symbol = Fcar (Fcar (Vselection_alist));
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1055
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1056 if (!EQ (hooks, Qunbound))
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1057 {
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1058 for (; CONSP (hooks); hooks = Fcdr (hooks))
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1059 call1 (Fcar (hooks), selection_symbol);
15585
335aa5c3ce34 (x_clear_frame_selections): Don't call redisplay_preserve_echo_area here.
Miles Bader <miles@gnu.org>
parents: 14372
diff changeset
1060 #if 0 /* This can crash when deleting a frame
335aa5c3ce34 (x_clear_frame_selections): Don't call redisplay_preserve_echo_area here.
Miles Bader <miles@gnu.org>
parents: 14372
diff changeset
1061 from x_connection_closed. Anyway, it seems unnecessary;
335aa5c3ce34 (x_clear_frame_selections): Don't call redisplay_preserve_echo_area here.
Miles Bader <miles@gnu.org>
parents: 14372
diff changeset
1062 something else should cause a redisplay. */
35336
002c02db42d3 Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents: 35237
diff changeset
1063 redisplay_preserve_echo_area (21);
15585
335aa5c3ce34 (x_clear_frame_selections): Don't call redisplay_preserve_echo_area here.
Miles Bader <miles@gnu.org>
parents: 14372
diff changeset
1064 #endif
13555
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1065 }
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1066
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1067 Vselection_alist = Fcdr (Vselection_alist);
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1068 }
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1069
e640f6afb190 (x_clear_frame_selections): Get selection_symbol properly.
Richard M. Stallman <rms@gnu.org>
parents: 12531
diff changeset
1070 /* Delete elements after the beginning of Vselection_alist. */
85372
f7d19cfed7da * xselect.c (x_own_selection, x_handle_selection_clear)
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 84496
diff changeset
1071 for (rest = Vselection_alist; CONSP (rest); rest = XCDR (rest))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1072 if (EQ (frame, Fcar (Fcdr (Fcdr (Fcdr (Fcar (XCDR (rest))))))))
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1073 {
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1074 /* Let random Lisp code notice that the selection has been stolen. */
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1075 Lisp_Object hooks, selection_symbol;
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1076
57777
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
1077 hooks = Vx_lost_selection_functions;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1078 selection_symbol = Fcar (Fcar (XCDR (rest)));
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1079
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1080 if (!EQ (hooks, Qunbound))
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1081 {
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1082 for (; CONSP (hooks); hooks = Fcdr (hooks))
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1083 call1 (Fcar (hooks), selection_symbol);
15585
335aa5c3ce34 (x_clear_frame_selections): Don't call redisplay_preserve_echo_area here.
Miles Bader <miles@gnu.org>
parents: 14372
diff changeset
1084 #if 0 /* See above */
35336
002c02db42d3 Call redisplay_preserve_echo_area with additional arg.
Gerd Moellmann <gerd@gnu.org>
parents: 35237
diff changeset
1085 redisplay_preserve_echo_area (22);
15585
335aa5c3ce34 (x_clear_frame_selections): Don't call redisplay_preserve_echo_area here.
Miles Bader <miles@gnu.org>
parents: 14372
diff changeset
1086 #endif
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1087 }
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
1088 XSETCDR (rest, Fcdr (XCDR (rest)));
8101
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1089 break;
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1090 }
77d5b5c8a71f (x_own_selection, x_get_foreign_selection):
Richard M. Stallman <rms@gnu.org>
parents: 7307
diff changeset
1091 }
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1092
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1093 /* Nonzero if any properties for DISPLAY and WINDOW
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1094 are on the list of what we are waiting for. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1095
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1096 static int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1097 waiting_for_other_props_on_window (Display *display, Window window)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1098 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1099 struct prop_location *rest = property_change_wait_list;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1100 while (rest)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1101 if (rest->display == display && rest->window == window)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1102 return 1;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1103 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1104 rest = rest->next;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1105 return 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1106 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1107
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1108 /* Add an entry to the list of property changes we are waiting for.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1109 DISPLAY, WINDOW, PROPERTY, STATE describe what we will wait for.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1110 The return value is a number that uniquely identifies
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1111 this awaited property change. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1112
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1113 static struct prop_location *
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1114 expect_property_change (Display *display, Window window, Atom property, int state)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1115 {
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1116 struct prop_location *pl = (struct prop_location *) xmalloc (sizeof *pl);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1117 pl->identifier = ++prop_location_identifier;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1118 pl->display = display;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1119 pl->window = window;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1120 pl->property = property;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1121 pl->desired_state = state;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1122 pl->next = property_change_wait_list;
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1123 pl->arrived = 0;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1124 property_change_wait_list = pl;
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1125 return pl;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1126 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1127
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1128 /* Delete an entry from the list of property changes we are waiting for.
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1129 IDENTIFIER is the number that uniquely identifies the entry. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1130
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1131 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1132 unexpect_property_change (struct prop_location *location)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1133 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1134 struct prop_location *prev = 0, *rest = property_change_wait_list;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1135 while (rest)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1136 {
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1137 if (rest == location)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1138 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1139 if (prev)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1140 prev->next = rest->next;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1141 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1142 property_change_wait_list = rest->next;
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1143 xfree (rest);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1144 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1145 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1146 prev = rest;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1147 rest = rest->next;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1148 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1149 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1150
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1151 /* Remove the property change expectation element for IDENTIFIER. */
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1152
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1153 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1154 wait_for_property_change_unwind (Lisp_Object loc)
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1155 {
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1156 struct prop_location *location = XSAVE_VALUE (loc)->pointer;
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1157
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1158 unexpect_property_change (location);
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1159 if (location == property_change_reply_object)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1160 property_change_reply_object = 0;
11908
4f4034f45cbf (queue_selection_requests_unwind): Add return value.
Karl Heuer <kwzh@gnu.org>
parents: 11881
diff changeset
1161 return Qnil;
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1162 }
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1163
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1164 /* Actually wait for a property change.
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1165 IDENTIFIER should be the value that expect_property_change returned. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1166
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1167 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1168 wait_for_property_change (struct prop_location *location)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1169 {
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1170 int secs, usecs;
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 46285
diff changeset
1171 int count = SPECPDL_INDEX ();
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1172
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1173 if (property_change_reply_object)
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1174 abort ();
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1175
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1176 /* Make sure to do unexpect_property_change if we quit or err. */
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1177 record_unwind_protect (wait_for_property_change_unwind,
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1178 make_save_value (location, 0));
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1179
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
1180 XSETCAR (property_change_reply, Qnil);
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
1181 property_change_reply_object = location;
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1182
10633
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
1183 /* If the event we are waiting for arrives beyond here, it will set
70ee88d09615 (wait_for_property_change): Avoid unlikely timing error.
Richard M. Stallman <rms@gnu.org>
parents: 9960
diff changeset
1184 property_change_reply, because property_change_reply_object says so. */
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1185 if (! location->arrived)
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1186 {
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1187 secs = x_selection_timeout / 1000;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1188 usecs = (x_selection_timeout % 1000) * 1000;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1189 TRACE2 (" Waiting %d secs, %d usecs", secs, usecs);
56729
e6e0caa7ec87 Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents: 56717
diff changeset
1190 wait_reading_process_output (secs, usecs, 0, 0,
e6e0caa7ec87 Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents: 56717
diff changeset
1191 property_change_reply, NULL, 0);
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1192
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1193 if (NILP (XCAR (property_change_reply)))
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1194 {
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1195 TRACE0 (" Timed out");
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1196 error ("Timed out waiting for property-notify event");
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1197 }
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1198 }
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1199
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1200 unbind_to (count, Qnil);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1201 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1202
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1203 /* Called from XTread_socket in response to a PropertyNotify event. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1204
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1205 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1206 x_handle_property_notify (XPropertyEvent *event)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1207 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1208 struct prop_location *prev = 0, *rest = property_change_wait_list;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1209
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1210 while (rest)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1211 {
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1212 if (!rest->arrived
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1213 && rest->property == event->atom
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1214 && rest->window == event->window
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1215 && rest->display == event->display
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1216 && rest->desired_state == event->state)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1217 {
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1218 TRACE2 ("Expected %s of property %s",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1219 (event->state == PropertyDelete ? "deletion" : "change"),
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1220 XGetAtomName (event->display, event->atom));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1221
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1222 rest->arrived = 1;
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1223
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1224 /* If this is the one wait_for_property_change is waiting for,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1225 tell it to wake up. */
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1226 if (rest == property_change_reply_object)
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
1227 XSETCAR (property_change_reply, Qt);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1228
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1229 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1230 }
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1231
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1232 prev = rest;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1233 rest = rest->next;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1234 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1235 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1236
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1237
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1238
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1239 #if 0 /* #### MULTIPLE doesn't work yet */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1240
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1241 static Lisp_Object
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1242 fetch_multiple_target (event)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1243 XSelectionRequestEvent *event;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1244 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1245 Display *display = event->display;
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
1246 Window window = event->requestor;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1247 Atom target = event->target;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1248 Atom selection_atom = event->selection;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1249 int result;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1250
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1251 return
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1252 Fcons (QMULTIPLE,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1253 x_get_window_property_as_lisp_data (display, window, target,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1254 QMULTIPLE, selection_atom));
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1255 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1256
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1257 static Lisp_Object
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1258 copy_multiple_data (obj)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1259 Lisp_Object obj;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1260 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1261 Lisp_Object vec;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1262 int i;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1263 int size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1264 if (CONSP (obj))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1265 return Fcons (XCAR (obj), copy_multiple_data (XCDR (obj)));
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1266
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
1267 CHECK_VECTOR (obj);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1268 vec = Fmake_vector (size = XVECTOR (obj)->size, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1269 for (i = 0; i < size; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1270 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1271 Lisp_Object vec2 = XVECTOR (obj)->contents [i];
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
1272 CHECK_VECTOR (vec2);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1273 if (XVECTOR (vec2)->size != 2)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1274 /* ??? Confusing error message */
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1275 signal_error ("Vectors must be of length 2", vec2);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1276 XVECTOR (vec)->contents [i] = Fmake_vector (2, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1277 XVECTOR (XVECTOR (vec)->contents [i])->contents [0]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1278 = XVECTOR (vec2)->contents [0];
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1279 XVECTOR (XVECTOR (vec)->contents [i])->contents [1]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1280 = XVECTOR (vec2)->contents [1];
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1281 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1282 return vec;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1283 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1284
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1285 #endif
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1286
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1287
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1288 /* Variables for communication with x_handle_selection_notify. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1289 static Atom reading_which_selection;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1290 static Lisp_Object reading_selection_reply;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1291 static Window reading_selection_window;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1292
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1293 /* Do protocol to read selection-data from the server.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1294 Converts this to Lisp data and returns it. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1295
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1296 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1297 x_get_foreign_selection (Lisp_Object selection_symbol, Lisp_Object target_type, Lisp_Object time_stamp)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1298 {
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
1299 struct frame *sf = SELECTED_FRAME ();
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1300 Window requestor_window;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1301 Display *display;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1302 struct x_display_info *dpyinfo;
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
1303 Time requestor_time = last_event_timestamp;
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1304 Atom target_property;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1305 Atom selection_atom;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1306 Atom type_atom;
3492
3e75726d76c7 (x_get_foreign_selection): Handle x_selection_timeout
Richard M. Stallman <rms@gnu.org>
parents: 3473
diff changeset
1307 int secs, usecs;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1308 int count = SPECPDL_INDEX ();
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1309 Lisp_Object frame;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1310
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1311 if (! FRAME_X_P (sf))
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1312 return Qnil;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1313
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1314 requestor_window = FRAME_X_WINDOW (sf);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1315 display = FRAME_X_DISPLAY (sf);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1316 dpyinfo = FRAME_X_DISPLAY_INFO (sf);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1317 target_property = dpyinfo->Xatom_EMACS_TMP;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1318 selection_atom = symbol_to_x_atom (dpyinfo, display, selection_symbol);
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
1319
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1320 if (CONSP (target_type))
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1321 type_atom = symbol_to_x_atom (dpyinfo, display, XCAR (target_type));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1322 else
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1323 type_atom = symbol_to_x_atom (dpyinfo, display, target_type);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1324
53911
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1325 if (! NILP (time_stamp))
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1326 {
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1327 if (CONSP (time_stamp))
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1328 requestor_time = (Time) cons_to_long (time_stamp);
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1329 else if (INTEGERP (time_stamp))
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1330 requestor_time = (Time) XUINT (time_stamp);
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1331 else if (FLOATP (time_stamp))
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59067
diff changeset
1332 requestor_time = (Time) XFLOAT_DATA (time_stamp);
53911
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1333 else
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1334 error ("TIME_STAMP must be cons or number");
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1335 }
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
1336
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1337 BLOCK_INPUT;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1338
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1339 /* The protected block contains wait_reading_process_output, which
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1340 can run random lisp code (process handlers) or signal.
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1341 Therefore, we put the x_uncatch_errors call in an unwind. */
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1342 record_unwind_protect (x_catch_errors_unwind, Qnil);
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
1343 x_catch_errors (display);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1344
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1345 TRACE2 ("Get selection %s, type %s",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1346 XGetAtomName (display, type_atom),
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1347 XGetAtomName (display, target_property));
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1348
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1349 XConvertSelection (display, selection_atom, type_atom, target_property,
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
1350 requestor_window, requestor_time);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1351 XFlush (display);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1352
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1353 /* Prepare to block until the reply has been read. */
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
1354 reading_selection_window = requestor_window;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1355 reading_which_selection = selection_atom;
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
1356 XSETCAR (reading_selection_reply, Qnil);
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1357
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1358 frame = some_frame_on_display (dpyinfo);
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1359
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1360 /* If the display no longer has frames, we can't expect
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1361 to get many more selection requests from it, so don't
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1362 bother trying to queue them. */
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1363 if (!NILP (frame))
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1364 {
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1365 x_start_queuing_selection_requests ();
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1366
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1367 record_unwind_protect (queue_selection_requests_unwind,
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1368 Qnil);
10674
ba12df743888 (x_get_foreign_selection, x_reply_selection_request):
Richard M. Stallman <rms@gnu.org>
parents: 10633
diff changeset
1369 }
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1370 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1371
3492
3e75726d76c7 (x_get_foreign_selection): Handle x_selection_timeout
Richard M. Stallman <rms@gnu.org>
parents: 3473
diff changeset
1372 /* This allows quits. Also, don't wait forever. */
3e75726d76c7 (x_get_foreign_selection): Handle x_selection_timeout
Richard M. Stallman <rms@gnu.org>
parents: 3473
diff changeset
1373 secs = x_selection_timeout / 1000;
3e75726d76c7 (x_get_foreign_selection): Handle x_selection_timeout
Richard M. Stallman <rms@gnu.org>
parents: 3473
diff changeset
1374 usecs = (x_selection_timeout % 1000) * 1000;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1375 TRACE1 (" Start waiting %d secs for SelectionNotify", secs);
56729
e6e0caa7ec87 Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents: 56717
diff changeset
1376 wait_reading_process_output (secs, usecs, 0, 0,
e6e0caa7ec87 Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents: 56717
diff changeset
1377 reading_selection_reply, NULL, 0);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1378 TRACE1 (" Got event = %d", !NILP (XCAR (reading_selection_reply)));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1379
5244
c0bd54986550 (x_get_foreign_selection): Use x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 5131
diff changeset
1380 BLOCK_INPUT;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1381 if (x_had_errors_p (display))
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1382 error ("Cannot get selection");
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
1383 /* This calls x_uncatch_errors. */
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
1384 unbind_to (count, Qnil);
5244
c0bd54986550 (x_get_foreign_selection): Use x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 5131
diff changeset
1385 UNBLOCK_INPUT;
c0bd54986550 (x_get_foreign_selection): Use x_catch_errors.
Richard M. Stallman <rms@gnu.org>
parents: 5131
diff changeset
1386
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1387 if (NILP (XCAR (reading_selection_reply)))
14134
a1ebbdb060b8 (x_handle_selection_notify): Give an indication
Karl Heuer <kwzh@gnu.org>
parents: 14031
diff changeset
1388 error ("Timed out waiting for reply from selection owner");
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1389 if (EQ (XCAR (reading_selection_reply), Qlambda))
97575
f188167016d0 (x_get_foreign_selection): Return nil if desired selection could not
Chong Yidong <cyd@stupidchicken.com>
parents: 97141
diff changeset
1390 return Qnil;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1391
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1392 /* Otherwise, the selection is waiting for us on the requested property. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1393 return
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
1394 x_get_window_property_as_lisp_data (display, requestor_window,
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1395 target_property, target_type,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1396 selection_atom);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1397 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1398
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1399 /* Subroutines of x_get_window_property_as_lisp_data */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1400
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1401 /* Use xfree, not XFree, to free the data obtained with this function. */
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1402
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1403 static void
109364
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1404 x_get_window_property (Display *display, Window window, Atom property,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1405 unsigned char **data_ret, int *bytes_ret,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1406 Atom *actual_type_ret, int *actual_format_ret,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1407 unsigned long *actual_size_ret, int delete_p)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1408 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1409 int total_size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1410 unsigned long bytes_remaining;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1411 int offset = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1412 unsigned char *tmp_data = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1413 int result;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1414 int buffer_size = SELECTION_QUANTUM (display);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1415
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1416 if (buffer_size > MAX_SELECTION_QUANTUM)
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1417 buffer_size = MAX_SELECTION_QUANTUM;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1418
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1419 BLOCK_INPUT;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1420
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1421 /* First probe the thing to find out how big it is. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1422 result = XGetWindowProperty (display, window, property,
11881
3c292d5eed59 (x_get_window_property): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11702
diff changeset
1423 0L, 0L, False, AnyPropertyType,
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1424 actual_type_ret, actual_format_ret,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1425 actual_size_ret,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1426 &bytes_remaining, &tmp_data);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1427 if (result != Success)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1428 {
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1429 UNBLOCK_INPUT;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1430 *data_ret = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1431 *bytes_ret = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1432 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1433 }
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1434
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1435 /* This was allocated by Xlib, so use XFree. */
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1436 XFree ((char *) tmp_data);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1437
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1438 if (*actual_type_ret == None || *actual_format_ret == 0)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1439 {
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1440 UNBLOCK_INPUT;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1441 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1442 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1443
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1444 total_size = bytes_remaining + 1;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1445 *data_ret = (unsigned char *) xmalloc (total_size);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1446
13942
b01288cb5fc8 (x_get_foreign_selection): Renamed local variables
Karl Heuer <kwzh@gnu.org>
parents: 13557
diff changeset
1447 /* Now read, until we've gotten it all. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1448 while (bytes_remaining)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1449 {
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1450 #ifdef TRACE_SELECTION
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1451 int last = bytes_remaining;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1452 #endif
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1453 result
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1454 = XGetWindowProperty (display, window, property,
11881
3c292d5eed59 (x_get_window_property): Cast args of XGetWindowProperty.
Karl Heuer <kwzh@gnu.org>
parents: 11702
diff changeset
1455 (long)offset/4, (long)buffer_size/4,
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1456 False,
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1457 AnyPropertyType,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1458 actual_type_ret, actual_format_ret,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1459 actual_size_ret, &bytes_remaining, &tmp_data);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1460
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1461 TRACE2 ("Read %ld bytes from property %s",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1462 last - bytes_remaining,
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1463 XGetAtomName (display, property));
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1464
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1465 /* If this doesn't return Success at this point, it means that
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1466 some clod deleted the selection while we were in the midst of
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1467 reading it. Deal with that, I guess.... */
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1468 if (result != Success)
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1469 break;
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1470
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1471 /* The man page for XGetWindowProperty says:
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1472 "If the returned format is 32, the returned data is represented
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1473 as a long array and should be cast to that type to obtain the
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1474 elements."
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1475 This applies even if long is more than 32 bits, the X library
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1476 converts from 32 bit elements received from the X server to long
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
1477 and passes the long array to us. Thus, for that case memcpy can not
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1478 be used. We convert to a 32 bit type here, because so much code
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1479 assume on that.
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1480
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1481 The bytes and offsets passed to XGetWindowProperty refers to the
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1482 property and those are indeed in 32 bit quantities if format is 32. */
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1483
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1484 if (*actual_format_ret == 32 && *actual_format_ret < BITS_PER_LONG)
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1485 {
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1486 unsigned long i;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1487 int *idata = (int *) ((*data_ret) + offset);
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1488 long *ldata = (long *) tmp_data;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1489
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1490 for (i = 0; i < *actual_size_ret; ++i)
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1491 {
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1492 idata[i]= (int) ldata[i];
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1493 offset += 4;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1494 }
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1495 }
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1496 else
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1497 {
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1498 *actual_size_ret *= *actual_format_ret / 8;
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
1499 memcpy ((*data_ret) + offset, tmp_data, *actual_size_ret);
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1500 offset += *actual_size_ret;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1501 }
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1502
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1503 /* This was allocated by Xlib, so use XFree. */
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1504 XFree ((char *) tmp_data);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1505 }
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1506
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1507 XFlush (display);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1508 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1509 *bytes_ret = offset;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1510 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1511
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1512 /* Use xfree, not XFree, to free the data obtained with this function. */
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1513
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1514 static void
109364
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1515 receive_incremental_selection (Display *display, Window window, Atom property,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1516 Lisp_Object target_type,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1517 unsigned int min_size_bytes,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1518 unsigned char **data_ret, int *size_bytes_ret,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1519 Atom *type_ret, int *format_ret,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1520 unsigned long *size_ret)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1521 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1522 int offset = 0;
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1523 struct prop_location *wait_object;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1524 *size_bytes_ret = min_size_bytes;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1525 *data_ret = (unsigned char *) xmalloc (*size_bytes_ret);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1526
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1527 TRACE1 ("Read %d bytes incrementally", min_size_bytes);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1528
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1529 /* At this point, we have read an INCR property.
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1530 Delete the property to ack it.
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1531 (But first, prepare to receive the next event in this handshake.)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1532
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1533 Now, we must loop, waiting for the sending window to put a value on
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1534 that property, then reading the property, then deleting it to ack.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1535 We are done when the sender places a property of length 0.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1536 */
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1537 BLOCK_INPUT;
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1538 XSelectInput (display, window, STANDARD_EVENT_SET | PropertyChangeMask);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1539 TRACE1 (" Delete property %s",
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1540 SDATA (SYMBOL_NAME (x_atom_to_symbol (display, property))));
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1541 XDeleteProperty (display, window, property);
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1542 TRACE1 (" Expect new value of property %s",
57952
a6f82b95d10b * xselect.c (struct selection_event_queue, selection_queue)
Kim F. Storm <storm@cua.dk>
parents: 57948
diff changeset
1543 SDATA (SYMBOL_NAME (x_atom_to_symbol (display, property))));
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1544 wait_object = expect_property_change (display, window, property,
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1545 PropertyNewValue);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1546 XFlush (display);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1547 UNBLOCK_INPUT;
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1548
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1549 while (1)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1550 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1551 unsigned char *tmp_data;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1552 int tmp_size_bytes;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1553
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1554 TRACE0 (" Wait for property change");
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1555 wait_for_property_change (wait_object);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1556
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1557 /* expect it again immediately, because x_get_window_property may
13942
b01288cb5fc8 (x_get_foreign_selection): Renamed local variables
Karl Heuer <kwzh@gnu.org>
parents: 13557
diff changeset
1558 .. no it won't, I don't get it.
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1559 .. Ok, I get it now, the Xt code that implements INCR is broken. */
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1560 TRACE0 (" Get property value");
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1561 x_get_window_property (display, window, property,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1562 &tmp_data, &tmp_size_bytes,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1563 type_ret, format_ret, size_ret, 1);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1564
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1565 TRACE1 (" Read increment of %d bytes", tmp_size_bytes);
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1566
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1567 if (tmp_size_bytes == 0) /* we're done */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1568 {
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1569 TRACE0 ("Done reading incrementally");
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1570
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1571 if (! waiting_for_other_props_on_window (display, window))
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1572 XSelectInput (display, window, STANDARD_EVENT_SET);
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1573 /* Use xfree, not XFree, because x_get_window_property
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1574 calls xmalloc itself. */
95481
4390d64d3328 Make "xfree (NULL)" a no-op; remove useless if-before-xfree.
Jim Meyering <jim@meyering.net>
parents: 95313
diff changeset
1575 xfree (tmp_data);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1576 break;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1577 }
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1578
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1579 BLOCK_INPUT;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1580 TRACE1 (" ACK by deleting property %s",
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1581 XGetAtomName (display, property));
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1582 XDeleteProperty (display, window, property);
4636
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1583 wait_object = expect_property_change (display, window, property,
bb0ec6a82089 (struct property_change): New field `arrived'.
Richard M. Stallman <rms@gnu.org>
parents: 4547
diff changeset
1584 PropertyNewValue);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1585 XFlush (display);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1586 UNBLOCK_INPUT;
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1587
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1588 if (*size_bytes_ret < offset + tmp_size_bytes)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1589 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1590 *size_bytes_ret = offset + tmp_size_bytes;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1591 *data_ret = (unsigned char *) xrealloc (*data_ret, *size_bytes_ret);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1592 }
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1593
109165
750db9f3e6d8 Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents: 109126
diff changeset
1594 memcpy ((*data_ret) + offset, tmp_data, tmp_size_bytes);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1595 offset += tmp_size_bytes;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1596
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1597 /* Use xfree, not XFree, because x_get_window_property
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1598 calls xmalloc itself. */
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1599 xfree (tmp_data);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1600 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1601 }
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1602
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1603
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1604 /* Once a requested selection is "ready" (we got a SelectionNotify event),
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1605 fetch value from property PROPERTY of X window WINDOW on display DISPLAY.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1606 TARGET_TYPE and SELECTION_ATOM are used in error message if this fails. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1607
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1608 static Lisp_Object
109364
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1609 x_get_window_property_as_lisp_data (Display *display, Window window,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1610 Atom property,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1611 Lisp_Object target_type,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1612 Atom selection_atom)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1613 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1614 Atom actual_type;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1615 int actual_format;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1616 unsigned long actual_size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1617 unsigned char *data = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1618 int bytes = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1619 Lisp_Object val;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1620 struct x_display_info *dpyinfo = x_display_info_for_display (display);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1621
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1622 TRACE0 ("Reading selection data");
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1623
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1624 x_get_window_property (display, window, property, &data, &bytes,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1625 &actual_type, &actual_format, &actual_size, 1);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1626 if (! data)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1627 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1628 int there_is_a_selection_owner;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1629 BLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1630 there_is_a_selection_owner
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1631 = XGetSelectionOwner (display, selection_atom);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1632 UNBLOCK_INPUT;
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1633 if (there_is_a_selection_owner)
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1634 signal_error ("Selection owner couldn't convert",
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1635 actual_type
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1636 ? list2 (target_type,
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1637 x_atom_to_symbol (display, actual_type))
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1638 : target_type);
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1639 else
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1640 signal_error ("No selection",
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1641 x_atom_to_symbol (display, selection_atom));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1642 }
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1643
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1644 if (actual_type == dpyinfo->Xatom_INCR)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1645 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1646 /* That wasn't really the data, just the beginning. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1647
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1648 unsigned int min_size_bytes = * ((unsigned int *) data);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1649 BLOCK_INPUT;
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1650 /* Use xfree, not XFree, because x_get_window_property
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1651 calls xmalloc itself. */
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1652 xfree ((char *) data);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1653 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1654 receive_incremental_selection (display, window, property, target_type,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1655 min_size_bytes, &data, &bytes,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1656 &actual_type, &actual_format,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1657 &actual_size);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1658 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1659
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1660 BLOCK_INPUT;
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
1661 TRACE1 (" Delete property %s", XGetAtomName (display, property));
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1662 XDeleteProperty (display, window, property);
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1663 XFlush (display);
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1664 UNBLOCK_INPUT;
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
1665
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1666 /* It's been read. Now convert it to a lisp object in some semi-rational
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1667 manner. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1668 val = selection_data_to_lisp_data (display, data, bytes,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1669 actual_type, actual_format);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1670
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1671 /* Use xfree, not XFree, because x_get_window_property
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1672 calls xmalloc itself. */
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1673 xfree ((char *) data);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1674 return val;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1675 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1676
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1677 /* These functions convert from the selection data read from the server into
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1678 something that we can use from Lisp, and vice versa.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1679
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1680 Type: Format: Size: Lisp Type:
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1681 ----- ------- ----- -----------
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1682 * 8 * String
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1683 ATOM 32 1 Symbol
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1684 ATOM 32 > 1 Vector of Symbols
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1685 * 16 1 Integer
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1686 * 16 > 1 Vector of Integers
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1687 * 32 1 if <=16 bits: Integer
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1688 if > 16 bits: Cons of top16, bot16
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1689 * 32 > 1 Vector of the above
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1690
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1691 When converting a Lisp number to C, it is assumed to be of format 16 if
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1692 it is an integer, and of format 32 if it is a cons of two integers.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1693
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1694 When converting a vector of numbers from Lisp to C, it is assumed to be
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1695 of format 16 if every element in the vector is an integer, and is assumed
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1696 to be of format 32 if any element is a cons of two integers.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1697
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1698 When converting an object to C, it may be of the form (SYMBOL . <data>)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1699 where SYMBOL is what we should claim that the type is. Format and
59993
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1700 representation are as above.
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1701
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1702 Important: When format is 32, data should contain an array of int,
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1703 not an array of long as the X library returns. This makes a difference
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1704 when sizeof(long) != sizeof(int). */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1705
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1706
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1707
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1708 static Lisp_Object
109555
05e7e7c46ff0 Use const, move declarations to header files.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109364
diff changeset
1709 selection_data_to_lisp_data (Display *display, const unsigned char *data,
05e7e7c46ff0 Use const, move declarations to header files.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109364
diff changeset
1710 int size, Atom type, int format)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1711 {
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1712 struct x_display_info *dpyinfo = x_display_info_for_display (display);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1713
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1714 if (type == dpyinfo->Xatom_NULL)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1715 return QNULL;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1716
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1717 /* Convert any 8-bit data to a string, for compactness. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1718 else if (format == 8)
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
1719 {
51598
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1720 Lisp_Object str, lispy_type;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1721
51598
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1722 str = make_unibyte_string ((char *) data, size);
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1723 /* Indicate that this string is from foreign selection by a text
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1724 property `foreign-selection' so that the caller of
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1725 x-get-selection-internal (usually x-get-selection) can know
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1726 that the string must be decode. */
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1727 if (type == dpyinfo->Xatom_COMPOUND_TEXT)
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1728 lispy_type = QCOMPOUND_TEXT;
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1729 else if (type == dpyinfo->Xatom_UTF8_STRING)
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1730 lispy_type = QUTF8_STRING;
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
1731 else
51598
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1732 lispy_type = QSTRING;
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1733 Fput_text_property (make_number (0), make_number (size),
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
1734 Qforeign_selection, lispy_type, str);
17049
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
1735 return str;
d58064f06282 Include charset.h and coding.h.
Karl Heuer <kwzh@gnu.org>
parents: 16485
diff changeset
1736 }
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1737 /* Convert a single atom to a Lisp_Symbol. Convert a set of atoms to
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1738 a vector of symbols.
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1739 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1740 else if (type == XA_ATOM)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1741 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1742 int i;
59993
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1743 /* On a 64 bit machine sizeof(Atom) == sizeof(long) == 8.
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1744 But the callers of these function has made sure the data for
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1745 format == 32 is an array of int. Thus, use int instead
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1746 of Atom. */
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1747 int *idata = (int *) data;
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1748
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1749 if (size == sizeof (int))
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1750 return x_atom_to_symbol (display, (Atom) idata[0]);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1751 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1752 {
59993
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1753 Lisp_Object v = Fmake_vector (make_number (size / sizeof (int)),
18734
a26b6aca56ca (selection_data_to_lisp_data): Convert Fmake_vector
Richard M. Stallman <rms@gnu.org>
parents: 18534
diff changeset
1754 make_number (0));
59993
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1755 for (i = 0; i < size / sizeof (int); i++)
18734
a26b6aca56ca (selection_data_to_lisp_data): Convert Fmake_vector
Richard M. Stallman <rms@gnu.org>
parents: 18534
diff changeset
1756 Faset (v, make_number (i),
59993
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
1757 x_atom_to_symbol (display, (Atom) idata[i]));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1758 return v;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1759 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1760 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1761
78401
627812b69d17 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 78260
diff changeset
1762 /* Convert a single 16-bit number or a small 32-bit number to a Lisp_Int.
627812b69d17 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 78260
diff changeset
1763 If the number is 32 bits and won't fit in a Lisp_Int,
627812b69d17 Comment change.
Richard M. Stallman <rms@gnu.org>
parents: 78260
diff changeset
1764 convert it to a cons of integers, 16 bits in each half.
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1765 */
50110
b8c1a5c8f9c0 (selection_data_to_lisp_data): Use int instead of
Andreas Schwab <schwab@suse.de>
parents: 49065
diff changeset
1766 else if (format == 32 && size == sizeof (int))
b8c1a5c8f9c0 (selection_data_to_lisp_data): Use int instead of
Andreas Schwab <schwab@suse.de>
parents: 49065
diff changeset
1767 return long_to_cons (((unsigned int *) data) [0]);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1768 else if (format == 16 && size == sizeof (short))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1769 return make_number ((int) (((unsigned short *) data) [0]));
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1770
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1771 /* Convert any other kind of data to a vector of numbers, represented
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1772 as above (as an integer, or a cons of two 16 bit integers.)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1773 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1774 else if (format == 16)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1775 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1776 int i;
18952
4e695c86585c (selection_data_to_lisp_data):
Richard M. Stallman <rms@gnu.org>
parents: 18734
diff changeset
1777 Lisp_Object v;
4e695c86585c (selection_data_to_lisp_data):
Richard M. Stallman <rms@gnu.org>
parents: 18734
diff changeset
1778 v = Fmake_vector (make_number (size / 2), make_number (0));
4e695c86585c (selection_data_to_lisp_data):
Richard M. Stallman <rms@gnu.org>
parents: 18734
diff changeset
1779 for (i = 0; i < size / 2; i++)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1780 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1781 int j = (int) ((unsigned short *) data) [i];
18734
a26b6aca56ca (selection_data_to_lisp_data): Convert Fmake_vector
Richard M. Stallman <rms@gnu.org>
parents: 18534
diff changeset
1782 Faset (v, make_number (i), make_number (j));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1783 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1784 return v;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1785 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1786 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1787 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1788 int i;
18734
a26b6aca56ca (selection_data_to_lisp_data): Convert Fmake_vector
Richard M. Stallman <rms@gnu.org>
parents: 18534
diff changeset
1789 Lisp_Object v = Fmake_vector (make_number (size / 4), make_number (0));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1790 for (i = 0; i < size / 4; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1791 {
50110
b8c1a5c8f9c0 (selection_data_to_lisp_data): Use int instead of
Andreas Schwab <schwab@suse.de>
parents: 49065
diff changeset
1792 unsigned int j = ((unsigned int *) data) [i];
18734
a26b6aca56ca (selection_data_to_lisp_data): Convert Fmake_vector
Richard M. Stallman <rms@gnu.org>
parents: 18534
diff changeset
1793 Faset (v, make_number (i), long_to_cons (j));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1794 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1795 return v;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1796 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1797 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1798
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1799
20255
8c8f90c95569 (x_handle_selection_request): Use xfree, not free.
Karl Heuer <kwzh@gnu.org>
parents: 20104
diff changeset
1800 /* Use xfree, not XFree, to free the data obtained with this function. */
14371
dfeae392adcd (x_get_window_property_as_lisp_data): Use xfree, not XFree.
Richard M. Stallman <rms@gnu.org>
parents: 14186
diff changeset
1801
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1802 static void
109364
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1803 lisp_data_to_selection_data (Display *display, Lisp_Object obj,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1804 unsigned char **data_ret, Atom *type_ret,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1805 unsigned int *size_ret,
89a16701cde1 Convert old-style definitions
Andreas Schwab <schwab@linux-m68k.org>
parents: 109179
diff changeset
1806 int *format_ret, int *nofree_ret)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1807 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1808 Lisp_Object type = Qnil;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1809 struct x_display_info *dpyinfo = x_display_info_for_display (display);
4278
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1810
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1811 *nofree_ret = 0;
889d81e3f507 (lisp_data_to_selection_data): New arg NOFREE_RET.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
1812
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1813 if (CONSP (obj) && SYMBOLP (XCAR (obj)))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1814 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1815 type = XCAR (obj);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1816 obj = XCDR (obj);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1817 if (CONSP (obj) && NILP (XCDR (obj)))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1818 obj = XCAR (obj);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1819 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1820
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1821 if (EQ (obj, QNULL) || (EQ (type, QNULL)))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1822 { /* This is not the same as declining */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1823 *format_ret = 32;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1824 *size_ret = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1825 *data_ret = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1826 type = QNULL;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1827 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1828 else if (STRINGP (obj))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1829 {
60030
e41b38ec1a82 (lisp_data_to_selection_data): If OBJ is a non-ASCII
Kenichi Handa <handa@m17n.org>
parents: 59993
diff changeset
1830 if (SCHARS (obj) < SBYTES (obj))
e41b38ec1a82 (lisp_data_to_selection_data): If OBJ is a non-ASCII
Kenichi Handa <handa@m17n.org>
parents: 59993
diff changeset
1831 /* OBJ is a multibyte string containing a non-ASCII char. */
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1832 signal_error ("Non-ASCII string must be encoded in advance", obj);
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
1833 if (NILP (type))
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
1834 type = QSTRING;
30352
63f82aef9860 (lisp_data_to_selection_data): Use x_encode_text.
Kenichi Handa <handa@m17n.org>
parents: 29024
diff changeset
1835 *format_ret = 8;
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
1836 *size_ret = SBYTES (obj);
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
1837 *data_ret = SDATA (obj);
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
1838 *nofree_ret = 1;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1839 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1840 else if (SYMBOLP (obj))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1841 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1842 *format_ret = 32;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1843 *size_ret = 1;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1844 *data_ret = (unsigned char *) xmalloc (sizeof (Atom) + 1);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1845 (*data_ret) [sizeof (Atom)] = 0;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1846 (*(Atom **) data_ret) [0] = symbol_to_x_atom (dpyinfo, display, obj);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1847 if (NILP (type)) type = QATOM;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1848 }
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
1849 else if (INTEGERP (obj)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1850 && XINT (obj) < 0xFFFF
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1851 && XINT (obj) > -0xFFFF)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1852 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1853 *format_ret = 16;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1854 *size_ret = 1;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1855 *data_ret = (unsigned char *) xmalloc (sizeof (short) + 1);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1856 (*data_ret) [sizeof (short)] = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1857 (*(short **) data_ret) [0] = (short) XINT (obj);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1858 if (NILP (type)) type = QINTEGER;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1859 }
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
1860 else if (INTEGERP (obj)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1861 || (CONSP (obj) && INTEGERP (XCAR (obj))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1862 && (INTEGERP (XCDR (obj))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1863 || (CONSP (XCDR (obj))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1864 && INTEGERP (XCAR (XCDR (obj)))))))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1865 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1866 *format_ret = 32;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1867 *size_ret = 1;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1868 *data_ret = (unsigned char *) xmalloc (sizeof (long) + 1);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1869 (*data_ret) [sizeof (long)] = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1870 (*(unsigned long **) data_ret) [0] = cons_to_long (obj);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1871 if (NILP (type)) type = QINTEGER;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1872 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1873 else if (VECTORP (obj))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1874 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1875 /* Lisp_Vectors may represent a set of ATOMs;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1876 a set of 16 or 32 bit INTEGERs;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1877 or a set of ATOM_PAIRs (represented as [[A1 A2] [A3 A4] ...]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1878 */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1879 int i;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1880
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1881 if (SYMBOLP (XVECTOR (obj)->contents [0]))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1882 /* This vector is an ATOM set */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1883 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1884 if (NILP (type)) type = QATOM;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1885 *size_ret = XVECTOR (obj)->size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1886 *format_ret = 32;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1887 *data_ret = (unsigned char *) xmalloc ((*size_ret) * sizeof (Atom));
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1888 for (i = 0; i < *size_ret; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1889 if (SYMBOLP (XVECTOR (obj)->contents [i]))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1890 (*(Atom **) data_ret) [i]
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1891 = symbol_to_x_atom (dpyinfo, display, XVECTOR (obj)->contents [i]);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1892 else
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1893 signal_error ("All elements of selection vector must have same type", obj);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1894 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1895 #if 0 /* #### MULTIPLE doesn't work yet */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1896 else if (VECTORP (XVECTOR (obj)->contents [0]))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1897 /* This vector is an ATOM_PAIR set */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1898 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1899 if (NILP (type)) type = QATOM_PAIR;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1900 *size_ret = XVECTOR (obj)->size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1901 *format_ret = 32;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1902 *data_ret = (unsigned char *)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1903 xmalloc ((*size_ret) * sizeof (Atom) * 2);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1904 for (i = 0; i < *size_ret; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1905 if (VECTORP (XVECTOR (obj)->contents [i]))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1906 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1907 Lisp_Object pair = XVECTOR (obj)->contents [i];
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1908 if (XVECTOR (pair)->size != 2)
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1909 signal_error (
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1910 "Elements of the vector must be vectors of exactly two elements",
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1911 pair);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1912
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1913 (*(Atom **) data_ret) [i * 2]
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1914 = symbol_to_x_atom (dpyinfo, display,
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1915 XVECTOR (pair)->contents [0]);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1916 (*(Atom **) data_ret) [(i * 2) + 1]
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1917 = symbol_to_x_atom (dpyinfo, display,
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1918 XVECTOR (pair)->contents [1]);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1919 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1920 else
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1921 signal_error ("All elements of the vector must be of the same type",
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1922 obj);
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
1923
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1924 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1925 #endif
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1926 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1927 /* This vector is an INTEGER set, or something like it */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1928 {
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1929 int data_size = 2;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1930 *size_ret = XVECTOR (obj)->size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1931 if (NILP (type)) type = QINTEGER;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1932 *format_ret = 16;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1933 for (i = 0; i < *size_ret; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1934 if (CONSP (XVECTOR (obj)->contents [i]))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1935 *format_ret = 32;
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
1936 else if (!INTEGERP (XVECTOR (obj)->contents [i]))
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1937 signal_error (/* Qselection_error */
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1938 "Elements of selection vector must be integers or conses of integers",
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1939 obj);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1940
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1941 /* Use sizeof(long) even if it is more than 32 bits. See comment
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1942 in x_get_window_property and x_fill_property_data. */
63529
01dd74cb546e (lisp_data_to_selection_data): Fix spelling.
Juanma Barranquero <lekktu@gmail.com>
parents: 60134
diff changeset
1943
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1944 if (*format_ret == 32) data_size = sizeof(long);
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
1945 *data_ret = (unsigned char *) xmalloc (*size_ret * data_size);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1946 for (i = 0; i < *size_ret; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1947 if (*format_ret == 32)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1948 (*((unsigned long **) data_ret)) [i]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1949 = cons_to_long (XVECTOR (obj)->contents [i]);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1950 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1951 (*((unsigned short **) data_ret)) [i]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1952 = (unsigned short) cons_to_long (XVECTOR (obj)->contents [i]);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1953 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1954 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1955 else
71994
e650d66ac6db (x_get_local_selection, copy_multiple_data)
Kim F. Storm <storm@cua.dk>
parents: 69282
diff changeset
1956 signal_error (/* Qselection_error */ "Unrecognized selection data", obj);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1957
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
1958 *type_ret = symbol_to_x_atom (dpyinfo, display, type);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1959 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1960
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1961 static Lisp_Object
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
1962 clean_local_selection_data (Lisp_Object obj)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1963 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1964 if (CONSP (obj)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1965 && INTEGERP (XCAR (obj))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1966 && CONSP (XCDR (obj))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1967 && INTEGERP (XCAR (XCDR (obj)))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1968 && NILP (XCDR (XCDR (obj))))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1969 obj = Fcons (XCAR (obj), XCDR (obj));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1970
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1971 if (CONSP (obj)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1972 && INTEGERP (XCAR (obj))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1973 && INTEGERP (XCDR (obj)))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1974 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1975 if (XINT (XCAR (obj)) == 0)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1976 return XCDR (obj);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1977 if (XINT (XCAR (obj)) == -1)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
1978 return make_number (- XINT (XCDR (obj)));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1979 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1980 if (VECTORP (obj))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1981 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1982 int i;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1983 int size = XVECTOR (obj)->size;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1984 Lisp_Object copy;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1985 if (size == 1)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1986 return clean_local_selection_data (XVECTOR (obj)->contents [0]);
18734
a26b6aca56ca (selection_data_to_lisp_data): Convert Fmake_vector
Richard M. Stallman <rms@gnu.org>
parents: 18534
diff changeset
1987 copy = Fmake_vector (make_number (size), Qnil);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1988 for (i = 0; i < size; i++)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1989 XVECTOR (copy)->contents [i]
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1990 = clean_local_selection_data (XVECTOR (obj)->contents [i]);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1991 return copy;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1992 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1993 return obj;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1994 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1995
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
1996 /* Called from XTread_socket to handle SelectionNotify events.
14134
a1ebbdb060b8 (x_handle_selection_notify): Give an indication
Karl Heuer <kwzh@gnu.org>
parents: 14031
diff changeset
1997 If it's the selection we are waiting for, stop waiting
a1ebbdb060b8 (x_handle_selection_notify): Give an indication
Karl Heuer <kwzh@gnu.org>
parents: 14031
diff changeset
1998 by setting the car of reading_selection_reply to non-nil.
a1ebbdb060b8 (x_handle_selection_notify): Give an indication
Karl Heuer <kwzh@gnu.org>
parents: 14031
diff changeset
1999 We store t there if the reply is successful, lambda if not. */
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2000
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2001 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2002 x_handle_selection_notify (XSelectionEvent *event)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2003 {
14031
51c6f601f42b Undo previous change, except for comments and doc strings.
Richard M. Stallman <rms@gnu.org>
parents: 13942
diff changeset
2004 if (event->requestor != reading_selection_window)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2005 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2006 if (event->selection != reading_which_selection)
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2007 return;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2008
38386
6bf3530c700d (x_decline_selection_request): Handle errors
Gerd Moellmann <gerd@gnu.org>
parents: 35336
diff changeset
2009 TRACE0 ("Received SelectionNotify");
39973
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
2010 XSETCAR (reading_selection_reply,
579177964efa Avoid (most) uses of XCAR/XCDR as lvalues, for flexibility in experimenting
Ken Raeburn <raeburn@raeburn.org>
parents: 38386
diff changeset
2011 (event->property != 0 ? Qt : Qlambda));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2012 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2013
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2014
16485
9b919c5464a4 Reorganize function definitions so etags finds them.
Erik Naggum <erik@naggum.no>
parents: 15705
diff changeset
2015 DEFUN ("x-own-selection-internal", Fx_own_selection_internal,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2016 Sx_own_selection_internal, 2, 2, 0,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2017 doc: /* Assert an X selection of the given TYPE with the given VALUE.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2018 TYPE is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2019 \(Those are literal upper-case symbol names, since that's what X expects.)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2020 VALUE is typically a string, or a cons of two markers, but may be
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2021 anything that the functions on `selection-converter-alist' know about. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2022 (Lisp_Object selection_name, Lisp_Object selection_value)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2023 {
5947
9ff439565145 (x-own-selection-internal, x-get-selection-internal,
Karl Heuer <kwzh@gnu.org>
parents: 5244
diff changeset
2024 check_x ();
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2025 CHECK_SYMBOL (selection_name);
63706
557271737e6b (Fx_own_selection_internal): Follow error conventions.
Juanma Barranquero <lekktu@gmail.com>
parents: 63529
diff changeset
2026 if (NILP (selection_value)) error ("SELECTION-VALUE may not be nil");
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2027 x_own_selection (selection_name, selection_value);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2028 return selection_value;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2029 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2030
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2031
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2032 /* Request the selection value from the owner. If we are the owner,
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2033 simply return our selection value. If we are not the owner, this
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2034 will block until all of the data has arrived. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2035
16485
9b919c5464a4 Reorganize function definitions so etags finds them.
Erik Naggum <erik@naggum.no>
parents: 15705
diff changeset
2036 DEFUN ("x-get-selection-internal", Fx_get_selection_internal,
53911
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
2037 Sx_get_selection_internal, 2, 3, 0,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2038 doc: /* Return text selected from some X window.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2039 SELECTION is a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2040 \(Those are literal upper-case symbol names, since that's what X expects.)
53911
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
2041 TYPE is the type of data desired, typically `STRING'.
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
2042 TIME_STAMP is the time to use in the XConvertSelection call for foreign
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
2043 selections. If omitted, defaults to the time for the last event. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2044 (Lisp_Object selection_symbol, Lisp_Object target_type, Lisp_Object time_stamp)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2045 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2046 Lisp_Object val = Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2047 struct gcpro gcpro1, gcpro2;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2048 GCPRO2 (target_type, val); /* we store newly consed data into these */
5947
9ff439565145 (x-own-selection-internal, x-get-selection-internal,
Karl Heuer <kwzh@gnu.org>
parents: 5244
diff changeset
2049 check_x ();
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2050 CHECK_SYMBOL (selection_symbol);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2051
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2052 #if 0 /* #### MULTIPLE doesn't work yet */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2053 if (CONSP (target_type)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2054 && XCAR (target_type) == QMULTIPLE)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2055 {
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2056 CHECK_VECTOR (XCDR (target_type));
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2057 /* So we don't destructively modify this... */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2058 target_type = copy_multiple_data (target_type);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2059 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2060 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2061 #endif
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2062 CHECK_SYMBOL (target_type);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2063
46881
970ca194ce9a (QUTF8_STRING): New variable.
Kenichi Handa <handa@m17n.org>
parents: 46370
diff changeset
2064 val = x_get_local_selection (selection_symbol, target_type, 1);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2065
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2066 if (NILP (val))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2067 {
53911
609de9ab5f75 * xselect.c (x_get_foreign_selection): Add new optional parameter
Jan Djärv <jan.h.d@swipnet.se>
parents: 53818
diff changeset
2068 val = x_get_foreign_selection (selection_symbol, target_type, time_stamp);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2069 goto DONE;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2070 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2071
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2072 if (CONSP (val)
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2073 && SYMBOLP (XCAR (val)))
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2074 {
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2075 val = XCDR (val);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2076 if (CONSP (val) && NILP (XCDR (val)))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2077 val = XCAR (val);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2078 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2079 val = clean_local_selection_data (val);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2080 DONE:
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2081 UNGCPRO;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2082 return val;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2083 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2084
16485
9b919c5464a4 Reorganize function definitions so etags finds them.
Erik Naggum <erik@naggum.no>
parents: 15705
diff changeset
2085 DEFUN ("x-disown-selection-internal", Fx_disown_selection_internal,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2086 Sx_disown_selection_internal, 1, 2, 0,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2087 doc: /* If we own the selection SELECTION, disown it.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2088 Disowning it means there is no such selection. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2089 (Lisp_Object selection, Lisp_Object time)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2090 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2091 Time timestamp;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2092 Atom selection_atom;
60134
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2093 union {
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2094 struct selection_input_event sie;
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2095 struct input_event ie;
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2096 } event;
9616
1008823e2e1a (x_get_foreign_selection): Get display from
Richard M. Stallman <rms@gnu.org>
parents: 9286
diff changeset
2097 Display *display;
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
2098 struct x_display_info *dpyinfo;
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2099 struct frame *sf = SELECTED_FRAME ();
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2100
5947
9ff439565145 (x-own-selection-internal, x-get-selection-internal,
Karl Heuer <kwzh@gnu.org>
parents: 5244
diff changeset
2101 check_x ();
83004
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
2102 if (! FRAME_X_P (sf))
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
2103 return Qnil;
7900111db01c Converted display hooks to be display-local. Plus many bugfixes.
Karoly Lorentey <lorentey@elte.hu>
parents: 52401
diff changeset
2104
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2105 display = FRAME_X_DISPLAY (sf);
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2106 dpyinfo = FRAME_X_DISPLAY_INFO (sf);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2107 CHECK_SYMBOL (selection);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2108 if (NILP (time))
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
2109 timestamp = last_event_timestamp;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2110 else
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2111 timestamp = cons_to_long (time);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2112
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2113 if (NILP (assq_no_quit (selection, Vselection_alist)))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2114 return Qnil; /* Don't disown the selection when we're not the owner. */
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2115
9670
a03e0a600f3f Use XFlush, not XFlushQueue, throughout.
Richard M. Stallman <rms@gnu.org>
parents: 9617
diff changeset
2116 selection_atom = symbol_to_x_atom (dpyinfo, display, selection);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2117
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2118 BLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2119 XSetSelectionOwner (display, selection_atom, None, timestamp);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2120 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2121
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 3492
diff changeset
2122 /* It doesn't seem to be guaranteed that a SelectionClear event will be
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2123 generated for a window which owns the selection when that window sets
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2124 the selection owner to None. The NCD server does, the MIT Sun4 server
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2125 doesn't. So we synthesize one; this means we might get two, but
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2126 that's ok, because the second one won't have any effect. */
60134
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2127 SELECTION_EVENT_DISPLAY (&event.sie) = display;
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2128 SELECTION_EVENT_SELECTION (&event.sie) = selection_atom;
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2129 SELECTION_EVENT_TIME (&event.sie) = timestamp;
dd37bedfb1f4 (Fx_disown_selection_internal): Use union of struct
Andreas Schwab <schwab@suse.de>
parents: 60030
diff changeset
2130 x_handle_selection_clear (&event.ie);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2131
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2132 return Qt;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2133 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2134
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2135 /* Get rid of all the selections in buffer BUFFER.
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2136 This is used when we kill a buffer. */
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2137
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2138 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2139 x_disown_buffer_selections (Lisp_Object buffer)
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2140 {
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2141 Lisp_Object tail;
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2142 struct buffer *buf = XBUFFER (buffer);
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2143
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2144 for (tail = Vselection_alist; CONSP (tail); tail = XCDR (tail))
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2145 {
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2146 Lisp_Object elt, value;
25646
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2147 elt = XCAR (tail);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2148 value = XCDR (elt);
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2149 if (CONSP (value) && MARKERP (XCAR (value))
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2150 && XMARKER (XCAR (value))->buffer == buf)
9154af188477 Use XCAR and XCDR instead of explicit member references.
Ken Raeburn <raeburn@raeburn.org>
parents: 24163
diff changeset
2151 Fx_disown_selection_internal (XCAR (elt), Qnil);
2169
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2152 }
2484b562777f entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 2163
diff changeset
2153 }
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2154
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2155 DEFUN ("x-selection-owner-p", Fx_selection_owner_p, Sx_selection_owner_p,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2156 0, 1, 0,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2157 doc: /* Whether the current Emacs process owns the given X Selection.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2158 The arg should be the name of the selection in question, typically one of
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2159 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2160 \(Those are literal upper-case symbol names, since that's what X expects.)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2161 For convenience, the symbol nil is the same as `PRIMARY',
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2162 and t is the same as `SECONDARY'. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2163 (Lisp_Object selection)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2164 {
5947
9ff439565145 (x-own-selection-internal, x-get-selection-internal,
Karl Heuer <kwzh@gnu.org>
parents: 5244
diff changeset
2165 check_x ();
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2166 CHECK_SYMBOL (selection);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2167 if (EQ (selection, Qnil)) selection = QPRIMARY;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2168 if (EQ (selection, Qt)) selection = QSECONDARY;
45672
1f957476e757 (lisp_data_to_selection_data): Fix last change:
Sam Steingold <sds@gnu.org>
parents: 45670
diff changeset
2169
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2170 if (NILP (Fassq (selection, Vselection_alist)))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2171 return Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2172 return Qt;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2173 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2174
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2175 DEFUN ("x-selection-exists-p", Fx_selection_exists_p, Sx_selection_exists_p,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2176 0, 1, 0,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2177 doc: /* Whether there is an owner for the given X Selection.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2178 The arg should be the name of the selection in question, typically one of
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2179 the symbols `PRIMARY', `SECONDARY', or `CLIPBOARD'.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2180 \(Those are literal upper-case symbol names, since that's what X expects.)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2181 For convenience, the symbol nil is the same as `PRIMARY',
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2182 and t is the same as `SECONDARY'. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2183 (Lisp_Object selection)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2184 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2185 Window owner;
2797
ae18dabac465 (Fx_selection_exists_p): Handle nil, t as SELECTION arg.
Richard M. Stallman <rms@gnu.org>
parents: 2515
diff changeset
2186 Atom atom;
9616
1008823e2e1a (x_get_foreign_selection): Get display from
Richard M. Stallman <rms@gnu.org>
parents: 9286
diff changeset
2187 Display *dpy;
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2188 struct frame *sf = SELECTED_FRAME ();
9616
1008823e2e1a (x_get_foreign_selection): Get display from
Richard M. Stallman <rms@gnu.org>
parents: 9286
diff changeset
2189
9680
14a8113d8a8b (Fx_selection_exists_p): If selected_frame isn't an x frame, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 9670
diff changeset
2190 /* It should be safe to call this before we have an X frame. */
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2191 if (! FRAME_X_P (sf))
9680
14a8113d8a8b (Fx_selection_exists_p): If selected_frame isn't an x frame, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 9670
diff changeset
2192 return Qnil;
14a8113d8a8b (Fx_selection_exists_p): If selected_frame isn't an x frame, return nil.
Richard M. Stallman <rms@gnu.org>
parents: 9670
diff changeset
2193
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2194 dpy = FRAME_X_DISPLAY (sf);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40123
diff changeset
2195 CHECK_SYMBOL (selection);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2196 if (!NILP (Fx_selection_owner_p (selection)))
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2197 return Qt;
2797
ae18dabac465 (Fx_selection_exists_p): Handle nil, t as SELECTION arg.
Richard M. Stallman <rms@gnu.org>
parents: 2515
diff changeset
2198 if (EQ (selection, Qnil)) selection = QPRIMARY;
ae18dabac465 (Fx_selection_exists_p): Handle nil, t as SELECTION arg.
Richard M. Stallman <rms@gnu.org>
parents: 2515
diff changeset
2199 if (EQ (selection, Qt)) selection = QSECONDARY;
25681
3e56c05edfab (x_own_selection): Change for Lisp_Object selected_frame.
Gerd Moellmann <gerd@gnu.org>
parents: 25646
diff changeset
2200 atom = symbol_to_x_atom (FRAME_X_DISPLAY_INFO (sf), dpy, selection);
2797
ae18dabac465 (Fx_selection_exists_p): Handle nil, t as SELECTION arg.
Richard M. Stallman <rms@gnu.org>
parents: 2515
diff changeset
2201 if (atom == 0)
ae18dabac465 (Fx_selection_exists_p): Handle nil, t as SELECTION arg.
Richard M. Stallman <rms@gnu.org>
parents: 2515
diff changeset
2202 return Qnil;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2203 BLOCK_INPUT;
2797
ae18dabac465 (Fx_selection_exists_p): Handle nil, t as SELECTION arg.
Richard M. Stallman <rms@gnu.org>
parents: 2515
diff changeset
2204 owner = XGetSelectionOwner (dpy, atom);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2205 UNBLOCK_INPUT;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2206 return (owner ? Qt : Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2207 }
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2208
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2209
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2210 /***********************************************************************
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2211 Drag and drop support
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2212 ***********************************************************************/
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2213 /* Check that lisp values are of correct type for x_fill_property_data.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2214 That is, number, string or a cons with two numbers (low and high 16
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2215 bit parts of a 32 bit number). */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2216
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2217 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2218 x_check_property_data (Lisp_Object data)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2219 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2220 Lisp_Object iter;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2221 int size = 0;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2222
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2223 for (iter = data; CONSP (iter) && size != -1; iter = XCDR (iter), ++size)
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2224 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2225 Lisp_Object o = XCAR (iter);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2226
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2227 if (! NUMBERP (o) && ! STRINGP (o) && ! CONSP (o))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2228 size = -1;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2229 else if (CONSP (o) &&
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2230 (! NUMBERP (XCAR (o)) || ! NUMBERP (XCDR (o))))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2231 size = -1;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2232 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2233
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2234 return size;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2235 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2236
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2237 /* Convert lisp values to a C array. Values may be a number, a string
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2238 which is taken as an X atom name and converted to the atom value, or
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2239 a cons containing the two 16 bit parts of a 32 bit number.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2240
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2241 DPY is the display use to look up X atoms.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2242 DATA is a Lisp list of values to be converted.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2243 RET is the C array that contains the converted values. It is assumed
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59067
diff changeset
2244 it is big enough to hold all values.
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2245 FORMAT is 8, 16 or 32 and denotes char/short/long for each C value to
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2246 be stored in RET. Note that long is used for 32 even if long is more
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2247 than 32 bits (see man pages for XChangeProperty, XGetWindowProperty and
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2248 XClientMessageEvent). */
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2249
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2250 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2251 x_fill_property_data (Display *dpy, Lisp_Object data, void *ret, int format)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2252 {
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2253 long val;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2254 long *d32 = (long *) ret;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2255 short *d16 = (short *) ret;
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2256 char *d08 = (char *) ret;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2257 Lisp_Object iter;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2258
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2259 for (iter = data; CONSP (iter); iter = XCDR (iter))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2260 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2261 Lisp_Object o = XCAR (iter);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2262
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2263 if (INTEGERP (o))
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2264 val = (long) XFASTINT (o);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2265 else if (FLOATP (o))
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2266 val = (long) XFLOAT_DATA (o);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2267 else if (CONSP (o))
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2268 val = (long) cons_to_long (o);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2269 else if (STRINGP (o))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2270 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2271 BLOCK_INPUT;
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2272 val = (long) XInternAtom (dpy, (char *) SDATA (o), False);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2273 UNBLOCK_INPUT;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2274 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2275 else
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2276 error ("Wrong type, must be string, number or cons");
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2277
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2278 if (format == 8)
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2279 *d08++ = (char) val;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2280 else if (format == 16)
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2281 *d16++ = (short) val;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2282 else
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2283 *d32++ = val;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2284 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2285 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2286
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2287 /* Convert an array of C values to a Lisp list.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2288 F is the frame to be used to look up X atoms if the TYPE is XA_ATOM.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2289 DATA is a C array of values to be converted.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2290 TYPE is the type of the data. Only XA_ATOM is special, it converts
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2291 each number in DATA to its corresponfing X atom as a symbol.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2292 FORMAT is 8, 16 or 32 and gives the size in bits for each C value to
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2293 be stored in RET.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2294 SIZE is the number of elements in DATA.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2295
59993
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
2296 Important: When format is 32, data should contain an array of int,
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
2297 not an array of long as the X library returns. This makes a difference
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
2298 when sizeof(long) != sizeof(int).
22a410b2373b * xselect.c (selection_data_to_lisp_data): For the special case
Jan Djärv <jan.h.d@swipnet.se>
parents: 59975
diff changeset
2299
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2300 Also see comment for selection_data_to_lisp_data above. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2301
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2302 Lisp_Object
109555
05e7e7c46ff0 Use const, move declarations to header files.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109364
diff changeset
2303 x_property_data_to_lisp (struct frame *f, const unsigned char *data,
05e7e7c46ff0 Use const, move declarations to header files.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109364
diff changeset
2304 Atom type, int format, long unsigned int size)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2305 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2306 return selection_data_to_lisp_data (FRAME_X_DISPLAY (f),
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2307 data, size*format/8, type, format);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2308 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2309
59931
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2310 /* Get the mouse position in frame relative coordinates. */
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2311
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2312 static void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2313 mouse_position_for_drop (FRAME_PTR f, int *x, int *y)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2314 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2315 Window root, dummy_window;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2316 int dummy;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2317
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2318 BLOCK_INPUT;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2319
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2320 XQueryPointer (FRAME_X_DISPLAY (f),
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2321 DefaultRootWindow (FRAME_X_DISPLAY (f)),
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2322
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2323 /* The root window which contains the pointer. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2324 &root,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2325
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2326 /* Window pointer is on, not used */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2327 &dummy_window,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2328
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2329 /* The position on that root window. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2330 x, y,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2331
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2332 /* x/y in dummy_window coordinates, not used. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2333 &dummy, &dummy,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2334
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2335 /* Modifier keys and pointer buttons, about which
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2336 we don't care. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2337 (unsigned int *) &dummy);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2338
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2339
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2340 /* Absolute to relative. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2341 *x -= f->left_pos + FRAME_OUTER_TO_INNER_DIFF_X (f);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2342 *y -= f->top_pos + FRAME_OUTER_TO_INNER_DIFF_Y (f);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2343
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2344 UNBLOCK_INPUT;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2345 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2346
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2347 DEFUN ("x-get-atom-name", Fx_get_atom_name,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2348 Sx_get_atom_name, 1, 2, 0,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2349 doc: /* Return the X atom name for VALUE as a string.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2350 VALUE may be a number or a cons where the car is the upper 16 bits and
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2351 the cdr is the lower 16 bits of a 32 bit value.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2352 Use the display for FRAME or the current frame if FRAME is not given or nil.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2353
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2354 If the value is 0 or the atom is not known, return the empty string. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2355 (Lisp_Object value, Lisp_Object frame)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2356 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2357 struct frame *f = check_x_frame (frame);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2358 char *name = 0;
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109678
diff changeset
2359 char empty[] = "";
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2360 Lisp_Object ret = Qnil;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2361 Display *dpy = FRAME_X_DISPLAY (f);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2362 Atom atom;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
2363 int had_errors;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2364
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2365 if (INTEGERP (value))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2366 atom = (Atom) XUINT (value);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2367 else if (FLOATP (value))
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59067
diff changeset
2368 atom = (Atom) XFLOAT_DATA (value);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2369 else if (CONSP (value))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2370 atom = (Atom) cons_to_long (value);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2371 else
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2372 error ("Wrong type, value must be number or cons");
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2373
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2374 BLOCK_INPUT;
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2375 x_catch_errors (dpy);
109748
e2f8226efb99 Fix -Wwrite_strings in general and for Gtk+ specific code.
Jan D <jan.h.d@swipnet.se>
parents: 109678
diff changeset
2376 name = atom ? XGetAtomName (dpy, atom) : empty;
69209
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
2377 had_errors = x_had_errors_p (dpy);
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
2378 x_uncatch_errors ();
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
2379
b9ad41f39bf6 * xselect.c (x_catch_errors_unwind): New function.
Chong Yidong <cyd@stupidchicken.com>
parents: 69173
diff changeset
2380 if (!had_errors)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2381 ret = make_string (name, strlen (name));
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2382
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2383 if (atom && name) XFree (name);
81277
b65a4afd46bd (Fx_get_atom_name): Use empty_unibyte_string.
Juanma Barranquero <lekktu@gmail.com>
parents: 76360
diff changeset
2384 if (NILP (ret)) ret = empty_unibyte_string;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2385
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2386 UNBLOCK_INPUT;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2387
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2388 return ret;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2389 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2390
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2391 DEFUN ("x-register-dnd-atom", Fx_register_dnd_atom,
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2392 Sx_register_dnd_atom, 1, 2, 0,
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2393 doc: /* Request that dnd events are made for ClientMessages with ATOM.
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2394 ATOM can be a symbol or a string. The ATOM is interned on the display that
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2395 FRAME is on. If FRAME is nil, the selected frame is used. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2396 (Lisp_Object atom, Lisp_Object frame)
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2397 {
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2398 Atom x_atom;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2399 struct frame *f = check_x_frame (frame);
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2400 size_t i;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2401 struct x_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f);
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2402
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2403
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2404 if (SYMBOLP (atom))
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2405 x_atom = symbol_to_x_atom (dpyinfo, FRAME_X_DISPLAY (f), atom);
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2406 else if (STRINGP (atom))
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2407 {
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2408 BLOCK_INPUT;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2409 x_atom = XInternAtom (FRAME_X_DISPLAY (f), (char *) SDATA (atom), False);
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2410 UNBLOCK_INPUT;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2411 }
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2412 else
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2413 error ("ATOM must be a symbol or a string");
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2414
74145
8eceefbbcde7 Space/tab mixup.
Juanma Barranquero <lekktu@gmail.com>
parents: 73931
diff changeset
2415 for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i)
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2416 if (dpyinfo->x_dnd_atoms[i] == x_atom)
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2417 return Qnil;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2418
74145
8eceefbbcde7 Space/tab mixup.
Juanma Barranquero <lekktu@gmail.com>
parents: 73931
diff changeset
2419 if (dpyinfo->x_dnd_atoms_length == dpyinfo->x_dnd_atoms_size)
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2420 {
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2421 dpyinfo->x_dnd_atoms_size *= 2;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2422 dpyinfo->x_dnd_atoms = xrealloc (dpyinfo->x_dnd_atoms,
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2423 sizeof (*dpyinfo->x_dnd_atoms)
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2424 * dpyinfo->x_dnd_atoms_size);
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2425 }
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2426
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2427 dpyinfo->x_dnd_atoms[dpyinfo->x_dnd_atoms_length++] = x_atom;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2428 return Qnil;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2429 }
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2430
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2431 /* Convert an XClientMessageEvent to a Lisp event of type DRAG_N_DROP_EVENT. */
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2432
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2433 int
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2434 x_handle_dnd_message (struct frame *f, XClientMessageEvent *event, struct x_display_info *dpyinfo, struct input_event *bufp)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2435 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2436 Lisp_Object vec;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2437 Lisp_Object frame;
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2438 /* format 32 => size 5, format 16 => size 10, format 8 => size 20 */
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2439 unsigned long size = 160/event->format;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2440 int x, y;
59931
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2441 unsigned char *data = (unsigned char *) event->data.b;
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2442 int idata[5];
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2443 size_t i;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2444
74145
8eceefbbcde7 Space/tab mixup.
Juanma Barranquero <lekktu@gmail.com>
parents: 73931
diff changeset
2445 for (i = 0; i < dpyinfo->x_dnd_atoms_length; ++i)
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2446 if (dpyinfo->x_dnd_atoms[i] == event->message_type) break;
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2447
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2448 if (i == dpyinfo->x_dnd_atoms_length) return 0;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2449
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2450 XSETFRAME (frame, f);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2451
59931
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2452 /* On a 64 bit machine, the event->data.l array members are 64 bits (long),
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2453 but the x_property_data_to_lisp (or rather selection_data_to_lisp_data)
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2454 function expects them to be of size int (i.e. 32). So to be able to
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2455 use that function, put the data in the form it expects if format is 32. */
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2456
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2457 if (event->format == 32 && event->format < BITS_PER_LONG)
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2458 {
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2459 int i;
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2460 for (i = 0; i < 5; ++i) /* There are only 5 longs in a ClientMessage. */
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2461 idata[i] = (int) event->data.l[i];
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2462 data = (unsigned char *) idata;
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2463 }
f5f2fbf049bc * xselect.c (Fx_send_client_event, x_handle_dnd_message): Handle
Jan Djärv <jan.h.d@swipnet.se>
parents: 59411
diff changeset
2464
53966
26dc8943ee64 Lisp_Object/int mixup.
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 53911
diff changeset
2465 vec = Fmake_vector (make_number (4), Qnil);
91607
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2466 ASET (vec, 0, SYMBOL_NAME (x_atom_to_symbol (FRAME_X_DISPLAY (f),
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2467 event->message_type)));
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2468 ASET (vec, 1, frame);
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2469 ASET (vec, 2, make_number (event->format));
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2470 ASET (vec, 3, x_property_data_to_lisp (f,
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2471 data,
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2472 event->message_type,
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2473 event->format,
d1e53221c4aa * xselect.c (x_handle_dnd_message):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 91327
diff changeset
2474 size));
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2475
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2476 mouse_position_for_drop (f, &x, &y);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2477 bufp->kind = DRAG_N_DROP_EVENT;
67670
8596872766c6 (x_handle_dnd_message): Drag-and-drop items are now
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
2478 bufp->frame_or_window = frame;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2479 bufp->timestamp = CurrentTime;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2480 bufp->x = make_number (x);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2481 bufp->y = make_number (y);
67670
8596872766c6 (x_handle_dnd_message): Drag-and-drop items are now
YAMAMOTO Mitsuharu <mituharu@math.s.chiba-u.ac.jp>
parents: 64770
diff changeset
2482 bufp->arg = vec;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2483 bufp->modifiers = 0;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2484
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2485 return 1;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2486 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2487
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2488 DEFUN ("x-send-client-message", Fx_send_client_event,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2489 Sx_send_client_message, 6, 6, 0,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2490 doc: /* Send a client message of MESSAGE-TYPE to window DEST on DISPLAY.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2491
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2492 For DISPLAY, specify either a frame or a display name (a string).
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2493 If DISPLAY is nil, that stands for the selected frame's display.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2494 DEST may be a number, in which case it is a Window id. The value 0 may
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2495 be used to send to the root window of the DISPLAY.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2496 If DEST is a cons, it is converted to a 32 bit number
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2497 with the high 16 bits from the car and the lower 16 bit from the cdr. That
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2498 number is then used as a window id.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2499 If DEST is a frame the event is sent to the outer window of that frame.
96270
43fea43f47a2 * xdisp.c (syms_of_xdisp) <truncate-partial-width-windows>: Doc fix.
Juanma Barranquero <lekktu@gmail.com>
parents: 95481
diff changeset
2500 A value of nil means the currently selected frame.
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2501 If DEST is the string "PointerWindow" the event is sent to the window that
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2502 contains the pointer. If DEST is the string "InputFocus" the event is
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2503 sent to the window that has the input focus.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2504 FROM is the frame sending the event. Use nil for currently selected frame.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2505 MESSAGE-TYPE is the name of an Atom as a string.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2506 FORMAT must be one of 8, 16 or 32 and determines the size of the values in
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2507 bits. VALUES is a list of numbers, cons and/or strings containing the values
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2508 to send. If a value is a string, it is converted to an Atom and the value of
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2509 the Atom is sent. If a value is a cons, it is converted to a 32 bit number
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2510 with the high 16 bits from the car and the lower 16 bit from the cdr.
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2511 If more values than fits into the event is given, the excessive values
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2512 are ignored. */)
109179
8cfee7d2955f Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109165
diff changeset
2513 (Lisp_Object display, Lisp_Object dest, Lisp_Object from, Lisp_Object message_type, Lisp_Object format, Lisp_Object values)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2514 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2515 struct x_display_info *dpyinfo = check_x_display_info (display);
111512
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2516
111530
d61a54d15a90 Fix Atoms and Lisp_Object mixup and related bugs.
Jan D <jan.h.d@swipnet.se>
parents: 111512
diff changeset
2517 CHECK_STRING (message_type);
111512
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2518 x_send_client_event(display, dest, from,
111530
d61a54d15a90 Fix Atoms and Lisp_Object mixup and related bugs.
Jan D <jan.h.d@swipnet.se>
parents: 111512
diff changeset
2519 XInternAtom (dpyinfo->display,
d61a54d15a90 Fix Atoms and Lisp_Object mixup and related bugs.
Jan D <jan.h.d@swipnet.se>
parents: 111512
diff changeset
2520 SDATA (message_type),
d61a54d15a90 Fix Atoms and Lisp_Object mixup and related bugs.
Jan D <jan.h.d@swipnet.se>
parents: 111512
diff changeset
2521 False),
111512
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2522 format, values);
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2523
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2524 return Qnil;
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2525 }
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2526
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2527 void
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2528 x_send_client_event (Lisp_Object display, Lisp_Object dest, Lisp_Object from, Atom message_type, Lisp_Object format, Lisp_Object values)
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2529 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2530 struct x_display_info *dpyinfo = check_x_display_info (display);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2531 Window wdest;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2532 XEvent event;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2533 struct frame *f = check_x_frame (from);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2534 int to_root;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2535
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2536 CHECK_NUMBER (format);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2537 CHECK_CONS (values);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2538
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2539 if (x_check_property_data (values) == -1)
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2540 error ("Bad data in VALUES, must be number, cons or string");
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2541
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2542 event.xclient.type = ClientMessage;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2543 event.xclient.format = XFASTINT (format);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2544
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2545 if (event.xclient.format != 8 && event.xclient.format != 16
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2546 && event.xclient.format != 32)
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2547 error ("FORMAT must be one of 8, 16 or 32");
56135
5407da499273 Update copyright.
Kim F. Storm <storm@cua.dk>
parents: 53966
diff changeset
2548
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2549 if (FRAMEP (dest) || NILP (dest))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2550 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2551 struct frame *fdest = check_x_frame (dest);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2552 wdest = FRAME_OUTER_WINDOW (fdest);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2553 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2554 else if (STRINGP (dest))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2555 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2556 if (strcmp (SDATA (dest), "PointerWindow") == 0)
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2557 wdest = PointerWindow;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2558 else if (strcmp (SDATA (dest), "InputFocus") == 0)
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2559 wdest = InputFocus;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2560 else
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2561 error ("DEST as a string must be one of PointerWindow or InputFocus");
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2562 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2563 else if (INTEGERP (dest))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2564 wdest = (Window) XFASTINT (dest);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2565 else if (FLOATP (dest))
59411
ecb6689e04bf * gtkutil.c (xg_gtk_scroll_destroy, xg_create_scroll_bar)
Jan Djärv <jan.h.d@swipnet.se>
parents: 59067
diff changeset
2566 wdest = (Window) XFLOAT_DATA (dest);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2567 else if (CONSP (dest))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2568 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2569 if (! NUMBERP (XCAR (dest)) || ! NUMBERP (XCDR (dest)))
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2570 error ("Both car and cdr for DEST must be numbers");
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2571 else
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2572 wdest = (Window) cons_to_long (dest);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2573 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2574 else
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2575 error ("DEST must be a frame, nil, string, number or cons");
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2576
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2577 if (wdest == 0) wdest = dpyinfo->root_window;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2578 to_root = wdest == dpyinfo->root_window;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2579
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2580 BLOCK_INPUT;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2581
111512
4f757d8e8ed7 Apply XAtom revork patches from Julien Danjou.
Jan D. <jan.h.d@swipnet.se>
parents: 110145
diff changeset
2582 event.xclient.message_type = message_type;
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2583 event.xclient.display = dpyinfo->display;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2584
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2585 /* Some clients (metacity for example) expects sending window to be here
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2586 when sending to the root window. */
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2587 event.xclient.window = to_root ? FRAME_OUTER_WINDOW (f) : wdest;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2588
63529
01dd74cb546e (lisp_data_to_selection_data): Fix spelling.
Juanma Barranquero <lekktu@gmail.com>
parents: 60134
diff changeset
2589
59975
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2590 memset (event.xclient.data.b, 0, sizeof (event.xclient.data.b));
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2591 x_fill_property_data (dpyinfo->display, values, event.xclient.data.b,
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2592 event.xclient.format);
501c2e5945ff * xselect.c (x_reply_selection_request): Pass long array to
Jan Djärv <jan.h.d@swipnet.se>
parents: 59931
diff changeset
2593
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2594 /* If event mask is 0 the event is sent to the client that created
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2595 the destination window. But if we are sending to the root window,
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2596 there is no such client. Then we set the event mask to 0xffff. The
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2597 event then goes to clients selecting for events on the root window. */
69152
f2147c1027b6 * xterm.h (x_catch_errors) Return value changed to void.
Chong Yidong <cyd@stupidchicken.com>
parents: 68651
diff changeset
2598 x_catch_errors (dpyinfo->display);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2599 {
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2600 int propagate = to_root ? False : True;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2601 unsigned mask = to_root ? 0xffff : 0;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2602 XSendEvent (dpyinfo->display, wdest, propagate, mask, &event);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2603 XFlush (dpyinfo->display);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2604 }
69173
fdee8318ddc9 * xterm.h, xterm.c (x_uncatch_errors): Delete unneccessary
Chong Yidong <cyd@stupidchicken.com>
parents: 69152
diff changeset
2605 x_uncatch_errors ();
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2606 UNBLOCK_INPUT;
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2607 }
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2608
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2609
2163
8ba4fffa6566 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 2161
diff changeset
2610 void
109126
aec1143e8d85 Convert (most) functions in src to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents: 109100
diff changeset
2611 syms_of_xselect (void)
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2612 {
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2613 defsubr (&Sx_get_selection_internal);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2614 defsubr (&Sx_own_selection_internal);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2615 defsubr (&Sx_disown_selection_internal);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2616 defsubr (&Sx_selection_owner_p);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2617 defsubr (&Sx_selection_exists_p);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2618
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2619 defsubr (&Sx_get_atom_name);
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2620 defsubr (&Sx_send_client_message);
72352
237fcefd8610 * xselect.c (Fx_register_dnd_atom): New function.
Jan Djärv <jan.h.d@swipnet.se>
parents: 71994
diff changeset
2621 defsubr (&Sx_register_dnd_atom);
53786
8aea816df4cc * xselect.c: Include termhooks.h and X11/Xproto.h
Jan Djärv <jan.h.d@swipnet.se>
parents: 52401
diff changeset
2622
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2623 reading_selection_reply = Fcons (Qnil, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2624 staticpro (&reading_selection_reply);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2625 reading_selection_window = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2626 reading_which_selection = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2627
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2628 property_change_wait_list = 0;
4373
02a515f35abc (prop_location_identifier): Was named prop_location_tick.
Richard M. Stallman <rms@gnu.org>
parents: 4278
diff changeset
2629 prop_location_identifier = 0;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2630 property_change_reply = Fcons (Qnil, Qnil);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2631 staticpro (&property_change_reply);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2632
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2633 Vselection_alist = Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2634 staticpro (&Vselection_alist);
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2635
112364
42e22c4f06b7 Move all DEFVAR'd globals into a structure -- threading infrastructure
Tom Tromey <tromey@redhat.com>
parents: 112330
diff changeset
2636 DEFVAR_LISP ("selection-converter-alist", Vselection_converter_alist,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2637 doc: /* An alist associating X Windows selection-types with functions.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2638 These functions are called to convert the selection, with three args:
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2639 the name of the selection (typically `PRIMARY', `SECONDARY', or `CLIPBOARD');
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2640 a desired type to which the selection should be converted;
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2641 and the local selection value (whatever was given to `x-own-selection').
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2642
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2643 The function should return the value to send to the X server
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2644 \(typically a string). A return value of nil
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2645 means that the conversion could not be done.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2646 A return value which is the symbol `NULL'
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2647 means that a side-effect was executed,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2648 and there is no meaningful selection value. */);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2649 Vselection_converter_alist = Qnil;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2650
112364
42e22c4f06b7 Move all DEFVAR'd globals into a structure -- threading infrastructure
Tom Tromey <tromey@redhat.com>
parents: 112330
diff changeset
2651 DEFVAR_LISP ("x-lost-selection-functions", Vx_lost_selection_functions,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2652 doc: /* A list of functions to be called when Emacs loses an X selection.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2653 \(This happens when some other X client makes its own selection
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2654 or when a Lisp program explicitly clears the selection.)
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2655 The functions are called with one argument, the selection type
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2656 \(a symbol, typically `PRIMARY', `SECONDARY', or `CLIPBOARD'). */);
57777
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
2657 Vx_lost_selection_functions = Qnil;
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
2658
112364
42e22c4f06b7 Move all DEFVAR'd globals into a structure -- threading infrastructure
Tom Tromey <tromey@redhat.com>
parents: 112330
diff changeset
2659 DEFVAR_LISP ("x-sent-selection-functions", Vx_sent_selection_functions,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2660 doc: /* A list of functions to be called when Emacs answers a selection request.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2661 The functions are called with four arguments:
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2662 - the selection name (typically `PRIMARY', `SECONDARY', or `CLIPBOARD');
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2663 - the selection-type which Emacs was asked to convert the
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2664 selection into before sending (for example, `STRING' or `LENGTH');
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2665 - a flag indicating success or failure for responding to the request.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2666 We might have failed (and declined the request) for any number of reasons,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2667 including being asked for a selection that we no longer own, or being asked
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2668 to convert into a type that we don't know about or that is inappropriate.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2669 This hook doesn't let you change the behavior of Emacs's selection replies,
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2670 it merely informs you that they have happened. */);
57777
c02cbcd40932 (Vx_lost_selection_functions, Vx_sent_selection_functions):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 57053
diff changeset
2671 Vx_sent_selection_functions = Qnil;
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2672
112364
42e22c4f06b7 Move all DEFVAR'd globals into a structure -- threading infrastructure
Tom Tromey <tromey@redhat.com>
parents: 112330
diff changeset
2673 DEFVAR_INT ("x-selection-timeout", x_selection_timeout,
40123
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2674 doc: /* Number of milliseconds to wait for a selection reply.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2675 If the selection owner doesn't reply in this time, we give up.
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2676 A value of 0 means wait as long as necessary. This is initialized from the
e528f2adeed4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39973
diff changeset
2677 \"*selectionTimeout\" resource. */);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2678 x_selection_timeout = 0;
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2679
109678
14830418f9fc Change `select-active-region' mechanics.
Chong Yidong <cyd@stupidchicken.com>
parents: 109600
diff changeset
2680 /* QPRIMARY is defined in keyboard.c. */
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2681 QSECONDARY = intern_c_string ("SECONDARY"); staticpro (&QSECONDARY);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2682 QSTRING = intern_c_string ("STRING"); staticpro (&QSTRING);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2683 QINTEGER = intern_c_string ("INTEGER"); staticpro (&QINTEGER);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2684 QCLIPBOARD = intern_c_string ("CLIPBOARD"); staticpro (&QCLIPBOARD);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2685 QTIMESTAMP = intern_c_string ("TIMESTAMP"); staticpro (&QTIMESTAMP);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2686 QTEXT = intern_c_string ("TEXT"); staticpro (&QTEXT);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2687 QCOMPOUND_TEXT = intern_c_string ("COMPOUND_TEXT"); staticpro (&QCOMPOUND_TEXT);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2688 QUTF8_STRING = intern_c_string ("UTF8_STRING"); staticpro (&QUTF8_STRING);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2689 QDELETE = intern_c_string ("DELETE"); staticpro (&QDELETE);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2690 QMULTIPLE = intern_c_string ("MULTIPLE"); staticpro (&QMULTIPLE);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2691 QINCR = intern_c_string ("INCR"); staticpro (&QINCR);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2692 QEMACS_TMP = intern_c_string ("_EMACS_TMP_"); staticpro (&QEMACS_TMP);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2693 QTARGETS = intern_c_string ("TARGETS"); staticpro (&QTARGETS);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2694 QATOM = intern_c_string ("ATOM"); staticpro (&QATOM);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2695 QATOM_PAIR = intern_c_string ("ATOM_PAIR"); staticpro (&QATOM_PAIR);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2696 QNULL = intern_c_string ("NULL"); staticpro (&QNULL);
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2697 Qcompound_text_with_extensions = intern_c_string ("compound-text-with-extensions");
43559
244e1fe7e57f (Qcompound_text_with_extensions): Renamed from Qcompound_text_no_extensions.
Eli Zaretskii <eliz@gnu.org>
parents: 43474
diff changeset
2698 staticpro (&Qcompound_text_with_extensions);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2699
105877
21bdda3ded62 * xterm.c (syms_of_xterm):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 105669
diff changeset
2700 Qforeign_selection = intern_c_string ("foreign-selection");
51598
8e404f2a6715 Don't include cahrset.h, coding.h, composite.h.
Kenichi Handa <handa@m17n.org>
parents: 50473
diff changeset
2701 staticpro (&Qforeign_selection);
2161
533cca1014e1 Initial revision
Richard M. Stallman <rms@gnu.org>
parents:
diff changeset
2702 }
52401
695cf19ef79e Add arch taglines
Miles Bader <miles@gnu.org>
parents: 51598
diff changeset
2703