annotate src/select-gtk.c @ 4981:4aebb0131297

Cleanups/renaming of EXTERNAL_TO_C_STRING and friends -------------------- ChangeLog entries follow: -------------------- modules/ChangeLog addition: 2010-02-05 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: * postgresql/postgresql.c (CHECK_LIVE_CONNECTION): * postgresql/postgresql.c (Fpq_connectdb): * postgresql/postgresql.c (Fpq_connect_start): * postgresql/postgresql.c (Fpq_lo_import): * postgresql/postgresql.c (Fpq_lo_export): * ldap/eldap.c (Fldap_open): * ldap/eldap.c (Fldap_search_basic): * ldap/eldap.c (Fldap_add): * ldap/eldap.c (Fldap_modify): * ldap/eldap.c (Fldap_delete): * canna/canna_api.c (Fcanna_initialize): * canna/canna_api.c (Fcanna_store_yomi): * canna/canna_api.c (Fcanna_parse): * canna/canna_api.c (Fcanna_henkan_begin): EXTERNAL_TO_C_STRING returns its argument instead of storing it in a parameter, and is renamed to EXTERNAL_TO_ITEXT. Similar things happen to related macros. See entry in src/ChangeLog. More Mule-izing of postgresql.c. Extract out common code between `pq-connectdb' and `pq-connect-start'. Fix places that signal an error string using a formatted string to instead follow the standard and have a fixed reason followed by the particular error message stored as one of the frobs. src/ChangeLog addition: 2010-02-05 Ben Wing <ben@xemacs.org> * console-msw.c (write_string_to_mswindows_debugging_output): * console-msw.c (Fmswindows_message_box): * console-x.c (x_perhaps_init_unseen_key_defaults): * console.c: * database.c (dbm_get): * database.c (dbm_put): * database.c (dbm_remove): * database.c (berkdb_get): * database.c (berkdb_put): * database.c (berkdb_remove): * database.c (Fopen_database): * device-gtk.c (gtk_init_device): * device-msw.c (msprinter_init_device_internal): * device-msw.c (msprinter_default_printer): * device-msw.c (msprinter_init_device): * device-msw.c (sync_printer_with_devmode): * device-msw.c (Fmsprinter_select_settings): * device-x.c (sanity_check_geometry_resource): * device-x.c (Dynarr_add_validified_lisp_string): * device-x.c (x_init_device): * device-x.c (Fx_put_resource): * device-x.c (Fx_valid_keysym_name_p): * device-x.c (Fx_set_font_path): * dialog-msw.c (push_lisp_string_as_unicode): * dialog-msw.c (handle_directory_dialog_box): * dialog-msw.c (handle_file_dialog_box): * dialog-x.c (dbox_descriptor_to_widget_value): * editfns.c (Fformat_time_string): * editfns.c (Fencode_time): * editfns.c (Fset_time_zone_rule): * emacs.c (make_argc_argv): * emacs.c (Fdump_emacs): * emodules.c (emodules_load): * eval.c: * eval.c (maybe_signal_error_1): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (mswindows_wnd_proc): * fileio.c (report_error_with_errno): * fileio.c (Fsysnetunam): * fileio.c (Fdo_auto_save): * font-mgr.c (extract_fcapi_string): * font-mgr.c (Ffc_config_app_font_add_file): * font-mgr.c (Ffc_config_app_font_add_dir): * font-mgr.c (Ffc_config_filename): * frame-gtk.c (gtk_set_frame_text_value): * frame-gtk.c (gtk_create_widgets): * frame-msw.c (mswindows_init_frame_1): * frame-msw.c (mswindows_set_title_from_ibyte): * frame-msw.c (msprinter_init_frame_3): * frame-x.c (x_set_frame_text_value): * frame-x.c (x_set_frame_properties): * frame-x.c (start_drag_internal_1): * frame-x.c (x_cde_transfer_callback): * frame-x.c (x_create_widgets): * glyphs-eimage.c (my_jpeg_output_message): * glyphs-eimage.c (jpeg_instantiate): * glyphs-eimage.c (gif_instantiate): * glyphs-eimage.c (png_instantiate): * glyphs-eimage.c (tiff_instantiate): * glyphs-gtk.c (xbm_instantiate_1): * glyphs-gtk.c (gtk_xbm_instantiate): * glyphs-gtk.c (gtk_xpm_instantiate): * glyphs-gtk.c (gtk_xface_instantiate): * glyphs-gtk.c (cursor_font_instantiate): * glyphs-gtk.c (gtk_redisplay_widget): * glyphs-gtk.c (gtk_widget_instantiate_1): * glyphs-gtk.c (gtk_add_tab_item): * glyphs-msw.c (mswindows_xpm_instantiate): * glyphs-msw.c (bmp_instantiate): * glyphs-msw.c (mswindows_resource_instantiate): * glyphs-msw.c (xbm_instantiate_1): * glyphs-msw.c (mswindows_xbm_instantiate): * glyphs-msw.c (mswindows_xface_instantiate): * glyphs-msw.c (mswindows_redisplay_widget): * glyphs-msw.c (mswindows_widget_instantiate): * glyphs-msw.c (add_tree_item): * glyphs-msw.c (add_tab_item): * glyphs-msw.c (mswindows_combo_box_instantiate): * glyphs-msw.c (mswindows_widget_query_string_geometry): * glyphs-x.c (x_locate_pixmap_file): * glyphs-x.c (xbm_instantiate_1): * glyphs-x.c (x_xbm_instantiate): * glyphs-x.c (extract_xpm_color_names): * glyphs-x.c (x_xpm_instantiate): * glyphs-x.c (x_xface_instantiate): * glyphs-x.c (autodetect_instantiate): * glyphs-x.c (safe_XLoadFont): * glyphs-x.c (cursor_font_instantiate): * glyphs-x.c (x_redisplay_widget): * glyphs-x.c (Fchange_subwindow_property): * glyphs-x.c (x_widget_instantiate): * glyphs-x.c (x_tab_control_redisplay): * glyphs.c (pixmap_to_lisp_data): * gui-x.c (menu_separator_style_and_to_external): * gui-x.c (add_accel_and_to_external): * gui-x.c (button_item_to_widget_value): * hpplay.c (player_error_internal): * hpplay.c (play_sound_file): * hpplay.c (play_sound_data): * intl.c (Fset_current_locale): * lisp.h: * menubar-gtk.c (gtk_xemacs_set_accel_keys): * menubar-msw.c (populate_menu_add_item): * menubar-msw.c (populate_or_checksum_helper): * menubar-x.c (menu_item_descriptor_to_widget_value_1): * nt.c (init_user_info): * nt.c (get_long_basename): * nt.c (nt_get_resource): * nt.c (init_mswindows_environment): * nt.c (get_cached_volume_information): * nt.c (mswindows_readdir): * nt.c (read_unc_volume): * nt.c (mswindows_stat): * nt.c (mswindows_getdcwd): * nt.c (mswindows_executable_type): * nt.c (Fmswindows_short_file_name): * ntplay.c (nt_play_sound_file): * objects-gtk.c: * objects-gtk.c (gtk_valid_color_name_p): * objects-gtk.c (gtk_initialize_font_instance): * objects-gtk.c (gtk_font_list): * objects-msw.c (font_enum_callback_2): * objects-msw.c (parse_font_spec): * objects-x.c (x_parse_nearest_color): * objects-x.c (x_valid_color_name_p): * objects-x.c (x_initialize_font_instance): * objects-x.c (x_font_instance_truename): * objects-x.c (x_font_list): * objects-xlike-inc.c (XFUN): * objects-xlike-inc.c (xft_find_charset_font): * process-nt.c (mswindows_report_winsock_error): * process-nt.c (nt_create_process): * process-nt.c (get_internet_address): * process-nt.c (nt_open_network_stream): * process-unix.c: * process-unix.c (allocate_pty): * process-unix.c (get_internet_address): * process-unix.c (unix_canonicalize_host_name): * process-unix.c (unix_open_network_stream): * realpath.c: * select-common.h (lisp_data_to_selection_data): * select-gtk.c (symbol_to_gtk_atom): * select-gtk.c (atom_to_symbol): * select-msw.c (symbol_to_ms_cf): * select-msw.c (mswindows_register_selection_data_type): * select-x.c (symbol_to_x_atom): * select-x.c (x_atom_to_symbol): * select-x.c (hack_motif_clipboard_selection): * select-x.c (Fx_store_cutbuffer_internal): * sound.c (Fplay_sound_file): * sound.c (Fplay_sound): * sound.h (sound_perror): * sysdep.c: * sysdep.c (qxe_allocating_getcwd): * sysdep.c (qxe_execve): * sysdep.c (copy_in_passwd): * sysdep.c (qxe_getpwnam): * sysdep.c (qxe_ctime): * sysdll.c (dll_open): * sysdll.c (dll_function): * sysdll.c (dll_variable): * sysdll.c (search_linked_libs): * sysdll.c (dll_error): * sysfile.h: * sysfile.h (PATHNAME_CONVERT_OUT_TSTR): * sysfile.h (PATHNAME_CONVERT_OUT_UTF_8): * sysfile.h (PATHNAME_CONVERT_OUT): * sysfile.h (LISP_PATHNAME_CONVERT_OUT): * syswindows.h (ITEXT_TO_TSTR): * syswindows.h (LOCAL_FILE_FORMAT_TO_TSTR): * syswindows.h (TSTR_TO_LOCAL_FILE_FORMAT): * syswindows.h (LOCAL_FILE_FORMAT_TO_INTERNAL_MSWIN): * syswindows.h (LISP_LOCAL_FILE_FORMAT_MAYBE_URL_TO_TSTR): * text.h: * text.h (eicpy_ext_len): * text.h (enum new_dfc_src_type): * text.h (EXTERNAL_TO_ITEXT): * text.h (GET_STRERROR): * tooltalk.c (check_status): * tooltalk.c (Fadd_tooltalk_message_arg): * tooltalk.c (Fadd_tooltalk_pattern_attribute): * tooltalk.c (Fadd_tooltalk_pattern_arg): * win32.c (tstr_to_local_file_format): * win32.c (mswindows_lisp_error_1): * win32.c (mswindows_report_process_error): * win32.c (Fmswindows_shell_execute): * win32.c (mswindows_read_link_1): Changes involving external/internal format conversion, mostly code cleanup and renaming. 1. Eliminate the previous macros like LISP_STRING_TO_EXTERNAL that stored its result in a parameter. The new version of LISP_STRING_TO_EXTERNAL returns its result through the return value, same as the previous NEW_LISP_STRING_TO_EXTERNAL. Use the new-style macros throughout the code. 2. Rename C_STRING_TO_EXTERNAL and friends to ITEXT_TO_EXTERNAL, in keeping with overall naming rationalization involving Itext and related types. Macros involved in previous two: EXTERNAL_TO_C_STRING -> EXTERNAL_TO_ITEXT EXTERNAL_TO_C_STRING_MALLOC -> EXTERNAL_TO_ITEXT_MALLOC SIZED_EXTERNAL_TO_C_STRING -> SIZED_EXTERNAL_TO_ITEXT SIZED_EXTERNAL_TO_C_STRING_MALLOC -> SIZED_EXTERNAL_TO_ITEXT_MALLOC C_STRING_TO_EXTERNAL -> ITEXT_TO_EXTERNAL C_STRING_TO_EXTERNAL_MALLOC -> ITEXT_TO_EXTERNAL_MALLOC LISP_STRING_TO_EXTERNAL LISP_STRING_TO_EXTERNAL_MALLOC LISP_STRING_TO_TSTR C_STRING_TO_TSTR -> ITEXT_TO_TSTR TSTR_TO_C_STRING -> TSTR_TO_ITEXT The following four still return their values through parameters, since they have more than one value to return: C_STRING_TO_SIZED_EXTERNAL -> ITEXT_TO_SIZED_EXTERNAL LISP_STRING_TO_SIZED_EXTERNAL C_STRING_TO_SIZED_EXTERNAL_MALLOC -> ITEXT_TO_SIZED_EXTERNAL_MALLOC LISP_STRING_TO_SIZED_EXTERNAL_MALLOC Sometimes additional casts had to be inserted, since the old macros played strange games and completely defeated the type system of the store params. 3. Rewrite many places where direct calls to TO_EXTERNAL_FORMAT occurred with calls to one of the convenience macros listed above, or to make_extstring(). 4. Eliminate SIZED_C_STRING macros (they were hardly used, anyway) and use a direct call to TO_EXTERNAL_FORMAT or TO_INTERNAL_FORMAT. 4. Use LISP_PATHNAME_CONVERT_OUT in many places instead of something like LISP_STRING_TO_EXTERNAL(..., Qfile_name). 5. Eliminate some temporary variables that are no longer necessary now that we return a value rather than storing it into a variable. 6. Some Mule-izing in database.c. 7. Error functions: -- A bit of code cleanup in maybe_signal_error_1. -- Eliminate report_file_type_error; it's just an alias for signal_error_2 with params in a different order. -- Fix some places in the hostname-handling code that directly inserted externally-retrieved error strings into the supposed ASCII "reason" param instead of doing the right thing and sticking text descriptive of what was going on in "reason" and putting the external message in a frob. 8. Use Ascbyte instead of CIbyte in process-unix.c and maybe one or two other places. 9. Some code cleanup in copy_in_passwd() in sysdep.c. 10. Fix a real bug due to accidental variable shadowing in tstr_to_local_file_format() in win32.c.
author Ben Wing <ben@xemacs.org>
date Fri, 05 Feb 2010 11:02:24 -0600
parents 304aebb79cd3
children 3c3c1d139863
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
1 /* GTK selection processing for XEmacs
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
2 Copyright (C) 1990, 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 746
diff changeset
3 Copyright (C) 2001 Ben Wing.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
4
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
5 This file is part of XEmacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
6
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
7 XEmacs is free software; you can redistribute it and/or modify it
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
8 under the terms of the GNU General Public License as published by the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
9 Free Software Foundation; either version 2, or (at your option) any
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
10 later version.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
11
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
12 XEmacs is distributed in the hope that it will be useful, but WITHOUT
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
13 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
15 for more details.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
16
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
18 along with XEmacs; see the file COPYING. If not, write to
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
19 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
20 Boston, MA 02111-1307, USA. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
21
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
22 /* Synched up with: Not synched with FSF. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
23
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
24 /* Authorship:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
25
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
26 Written by Kevin Gallo for FSF Emacs.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
27 Rewritten for mswindows by Jonathan Harris, December 1997 for 21.0.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
28 Rewritten for GTK by William Perry, April 2000 for 21.1
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
29 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
30
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
31
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
32 #include <config.h>
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
33 #include "lisp.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
34
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
35 #include "buffer.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
36 #include "device-impl.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
37 #include "events.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
38 #include "frame.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
39 #include "opaque.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
40 #include "select.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
41
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
42 #include "console-gtk-impl.h"
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
43
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
44 static Lisp_Object Vretrieved_selection;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
45 static gboolean waiting_for_selection;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
46 Lisp_Object Vgtk_sent_selection_hooks;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
47
778
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 771
diff changeset
48 extern int lisp_to_time (Lisp_Object, time_t *);
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 771
diff changeset
49 extern Lisp_Object time_to_lisp (time_t);
2923009caf47 [xemacs-hg @ 2002-03-16 10:38:59 by ben]
ben
parents: 771
diff changeset
50
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
51 static GdkAtom
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
52 symbol_to_gtk_atom (struct device *UNUSED (d), Lisp_Object sym,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
53 int only_if_exists)
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
54 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
55 if (NILP (sym)) return GDK_SELECTION_PRIMARY;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
56 if (EQ (sym, Qt)) return GDK_SELECTION_SECONDARY;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
57 if (EQ (sym, QPRIMARY)) return GDK_SELECTION_PRIMARY;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
58 if (EQ (sym, QSECONDARY)) return GDK_SELECTION_SECONDARY;
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
59
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
60 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
61 const Extbyte *nameext;
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
62 nameext = LISP_STRING_TO_EXTERNAL (Fsymbol_name (sym), Qctext);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
63 return gdk_atom_intern (nameext, only_if_exists ? TRUE : FALSE);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
64 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
65 }
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
66
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
67 static Lisp_Object
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
68 atom_to_symbol (struct device *UNUSED (d), GdkAtom atom)
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
69 {
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
70 if (atom == GDK_SELECTION_PRIMARY) return (QPRIMARY);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
71 if (atom == GDK_SELECTION_SECONDARY) return (QSECONDARY);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
72
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
73 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 793
diff changeset
74 Ibyte *intstr;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
75 Extbyte *str = gdk_atom_name (atom);
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
76
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
77 if (! str) return Qnil;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
78
4981
4aebb0131297 Cleanups/renaming of EXTERNAL_TO_C_STRING and friends
Ben Wing <ben@xemacs.org>
parents: 4953
diff changeset
79 intstr = EXTERNAL_TO_ITEXT (str, Qctext);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
80 g_free (str);
4953
304aebb79cd3 function renamings to track names of char typedefs
Ben Wing <ben@xemacs.org>
parents: 2620
diff changeset
81 return intern_istring (intstr);
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
82 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
83 }
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
84
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
85 #define PROCESSING_GTK_CODE
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
86 #include "select-common.h"
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
87 #undef PROCESSING_GTK_CODE
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
88
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
89
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
90 /* Set the selection data to GDK_NONE and NULL data, meaning we were
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
91 ** unable to do what they wanted.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
92 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
93 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
94 gtk_decline_selection_request (GtkSelectionData *data)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
95 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
96 gtk_selection_data_set (data, GDK_NONE, 0, NULL, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
97 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
98
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
99 /* Used as an unwind-protect clause so that, if a selection-converter signals
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
100 an error, we tell the requestor that we were unable to do what they wanted
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
101 before we throw to top-level or go into the debugger or whatever.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
102 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
103 struct _selection_closure
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
104 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
105 GtkSelectionData *data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
106 gboolean successful;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
107 };
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
108
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
109 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
110 gtk_selection_request_lisp_error (Lisp_Object closure)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
111 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
112 struct _selection_closure *cl = (struct _selection_closure *)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
113 get_opaque_ptr (closure);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
114
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
115 free_opaque_ptr (closure);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
116 if (cl->successful == TRUE)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
117 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
118 gtk_decline_selection_request (cl->data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
119 return Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
120 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
121
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
122 /* This provides the current selection to a requester.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
123 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
124 ** This is connected to the selection_get() signal of the application
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
125 ** shell in device-gtk.c:gtk_init_device().
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
126 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
127 ** This is radically different than the old selection code (21.1.x),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
128 ** but has been modeled after the X code, and appears to work.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
129 **
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
130 ** WMP Feb 12 2001
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
131 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
132 void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
133 emacs_gtk_selection_handle (GtkWidget *UNUSED (widget),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
134 GtkSelectionData *selection_data,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
135 guint UNUSED (info),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
136 guint time_stamp,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
137 gpointer UNUSED (data))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
138 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
139 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
140 struct gcpro gcpro1, gcpro2;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
141 Lisp_Object temp_obj;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
142 Lisp_Object selection_symbol;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
143 Lisp_Object target_symbol = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
144 Lisp_Object converted_selection = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
145 guint32 local_selection_time;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
146 Lisp_Object successful_p = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
147 int count;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
148 struct device *d = decode_gtk_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
149 struct _selection_closure *cl = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
150
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
151 GCPRO2 (converted_selection, target_symbol);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
152
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
153 selection_symbol = atom_to_symbol (d, selection_data->selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
154 target_symbol = atom_to_symbol (d, selection_data->target);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
155
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
156 #if 0 /* #### MULTIPLE doesn't work yet */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
157 if (EQ (target_symbol, QMULTIPLE))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
158 target_symbol = fetch_multiple_target (selection_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
159 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
160
2620
5e906dd5c3e9 [xemacs-hg @ 2005-02-28 20:21:43 by aidan]
aidan
parents: 2367
diff changeset
161 temp_obj = get_selection_raw_time(selection_symbol);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
162
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
163 if (NILP (temp_obj))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
164 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
165 /* We don't appear to have the selection. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
166 gtk_decline_selection_request (selection_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
167
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
168 goto DONE_LABEL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
169 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
170
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
171 local_selection_time = * (guint32 *) XOPAQUE_DATA (temp_obj);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
172
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
173 if (time_stamp != GDK_CURRENT_TIME &&
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
174 local_selection_time > time_stamp)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
175 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
176 /* Someone asked for the selection, and we have one, but not the one
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
177 they're looking for. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
178 gtk_decline_selection_request (selection_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
179 goto DONE_LABEL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
180 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
181
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
182 converted_selection = select_convert_out (selection_symbol,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
183 target_symbol, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
184
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
185 /* #### Is this the right thing to do? I'm no X expert. -- ajh */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
186 if (NILP (converted_selection))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
187 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
188 /* We don't appear to have a selection in that data type. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
189 gtk_decline_selection_request (selection_data);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
190 goto DONE_LABEL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
191 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
192
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
193 count = specpdl_depth ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
194
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
195 cl = xnew (struct _selection_closure);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
196 cl->data = selection_data;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
197 cl->successful = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
198
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
199 record_unwind_protect (gtk_selection_request_lisp_error,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
200 make_opaque_ptr (cl));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
201
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
202 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
203 Rawbyte *data;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
204 Bytecount size;
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
205 int format;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
206 GdkAtom type;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
207 lisp_data_to_selection_data (d, converted_selection,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
208 &data, &type, &size, &format);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
209
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
210 gtk_selection_data_set (selection_data, type, format, data,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
211 /* #### is this right? */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
212 (unsigned int) size);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
213 successful_p = Qt;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
214 /* Tell x_selection_request_lisp_error() it's cool. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
215 cl->successful = TRUE;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
216 xfree (data, Rawbyte *);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
217 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
218
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 746
diff changeset
219 unbind_to (count);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
220
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
221 DONE_LABEL:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
222
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 872
diff changeset
223 if (cl)
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 872
diff changeset
224 xfree (cl, struct _selection_closure *);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
225
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
226 UNGCPRO;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
227
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
228 /* Let random lisp code notice that the selection has been asked for. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
229 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
230 Lisp_Object val = Vgtk_sent_selection_hooks;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
231 if (!UNBOUNDP (val) && !NILP (val))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
232 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
233 Lisp_Object rest;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
234 if (CONSP (val) && !EQ (XCAR (val), Qlambda))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
235 for (rest = val; !NILP (rest); rest = Fcdr (rest))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
236 call3 (Fcar (rest), selection_symbol, target_symbol, successful_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
237 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
238 call3 (val, selection_symbol, target_symbol, successful_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
239 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
240 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
241 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
242
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
243
746
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
244 void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
245 emacs_gtk_selection_clear_event_handle (GtkWidget *UNUSED (widget),
746
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
246 GdkEventSelection *event,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
247 gpointer UNUSED (data))
746
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
248 {
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
249 GdkAtom selection = event->selection;
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
250 guint32 changed_owner_time = event->time;
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
251 struct device *d = decode_gtk_device (Qnil);
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
252
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
253 Lisp_Object selection_symbol, local_selection_time_lisp;
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
254 guint32 local_selection_time;
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
255
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
256 selection_symbol = atom_to_symbol (d, selection);
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
257
2620
5e906dd5c3e9 [xemacs-hg @ 2005-02-28 20:21:43 by aidan]
aidan
parents: 2367
diff changeset
258 local_selection_time_lisp = get_selection_raw_time (selection_symbol);
746
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
259
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
260 /* We don't own the selection, so that's fine. */
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
261 if (NILP (local_selection_time_lisp))
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
262 return;
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
263
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
264 local_selection_time = *(guint32 *) XOPAQUE_DATA (local_selection_time_lisp);
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
265
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
266 /* This SelectionClear is for a selection that we no longer own, so we can
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
267 disregard it. (That is, we have reasserted the selection since this
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
268 request was generated.)
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
269 */
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
270 if (changed_owner_time != GDK_CURRENT_TIME &&
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
271 local_selection_time > changed_owner_time)
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
272 return;
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
273
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
274 handle_selection_clear (selection_symbol);
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
275 }
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
276
b13b1b7b11f1 [xemacs-hg @ 2002-02-08 13:04:18 by wmperry]
wmperry
parents: 712
diff changeset
277
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
278
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
279 static GtkWidget *reading_selection_reply;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
280 static GdkAtom reading_which_selection;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
281 static int selection_reply_timed_out;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
282
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
283 /* Gets the current selection owned by another application */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
284 void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
285 emacs_gtk_selection_received (GtkWidget *UNUSED (widget),
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
286 GtkSelectionData *selection_data,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
287 gpointer UNUSED (user_data))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
288 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
289 waiting_for_selection = FALSE;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
290 Vretrieved_selection = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
291
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
292 reading_selection_reply = NULL;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
293
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
294 signal_fake_event ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
295
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
296 if (selection_data->length < 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
297 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
298 return;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
299 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
300
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
301 Vretrieved_selection =
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
302 selection_data_to_lisp_data (NULL,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
303 selection_data->data,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
304 selection_data->length,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
305 selection_data->type,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
306 selection_data->format);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
307 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
308
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
309 static int
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
310 selection_reply_done (void *UNUSED (ignore))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
311 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
312 return !reading_selection_reply;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
313 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
314
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
315 /* Do protocol to read selection-data from the server.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
316 Converts this to lisp data and returns it.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
317 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
318 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
319 gtk_get_foreign_selection (Lisp_Object selection_symbol,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
320 Lisp_Object target_type)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
321 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
322 /* This function can GC */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
323 struct device *d = decode_gtk_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
324 GtkWidget *requestor = DEVICE_GTK_APP_SHELL (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
325 guint32 requestor_time = DEVICE_GTK_MOUSE_TIMESTAMP (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
326 GdkAtom selection_atom = symbol_to_gtk_atom (d, selection_symbol, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
327 int speccount;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
328 GdkAtom type_atom = symbol_to_gtk_atom (d, (CONSP (target_type) ?
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
329 XCAR (target_type) : target_type), 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
330
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
331 gtk_selection_convert (requestor, selection_atom, type_atom,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
332 requestor_time);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
333
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
334 signal_fake_event ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
335
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
336 /* Block until the reply has been read. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
337 reading_selection_reply = requestor;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
338 reading_which_selection = selection_atom;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
339 selection_reply_timed_out = 0;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
340
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
341 speccount = specpdl_depth ();
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
342
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
343 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
344 /* add a timeout handler */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
345 if (gtk_selection_timeout > 0)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
346 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
347 Lisp_Object id = Fadd_timeout (make_int (x_selection_timeout),
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
348 Qx_selection_reply_timeout_internal,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
349 Qnil, Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
350 record_unwind_protect (Fdisable_timeout, id);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
351 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
352 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
353
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
354 /* This is ^Gable */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
355 wait_delaying_user_input (selection_reply_done, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
356
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
357 if (selection_reply_timed_out)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 462
diff changeset
358 signal_error (Qselection_conversion_error, "timed out waiting for reply from selection owner", Qunbound);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
359
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 746
diff changeset
360 unbind_to (speccount);
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
361
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
362 /* otherwise, the selection is waiting for us on the requested property. */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
363 return select_convert_in (selection_symbol,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
364 target_type,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
365 Vretrieved_selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
366 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
367
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
368
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
369 #if 0
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
370 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
371 gtk_get_window_property (struct device *d, GtkWidget *window, GdkAtom property,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
372 Extbyte **data_ret, int *bytes_ret,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
373 GdkAtom *actual_type_ret, int *actual_format_ret,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
374 unsigned long *actual_size_ret, int delete_p)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
375 {
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
376 /* deleted */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
377 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
378
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
379
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
380 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
381 receive_incremental_selection (Display *display, Window window, Atom property,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
382 /* this one is for error messages only */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
383 Lisp_Object target_type,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
384 unsigned int min_size_bytes,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
385 Extbyte **data_ret, int *size_bytes_ret,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
386 Atom *type_ret, int *format_ret,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
387 unsigned long *size_ret)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
388 {
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
389 /* deleted */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
390 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
391
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
392
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
393 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
394 gtk_get_window_property_as_lisp_data (struct device *d,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
395 GtkWidget *window,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
396 GdkAtom property,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
397 /* next two for error messages only */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
398 Lisp_Object target_type,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
399 GdkAtom selection_atom)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
400 {
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 563
diff changeset
401 /* deleted */
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
402 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
403 #endif
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
404
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
405
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
406
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
407 static Lisp_Object
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
408 gtk_own_selection (Lisp_Object selection_name,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
409 Lisp_Object UNUSED (selection_value),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
410 Lisp_Object UNUSED (how_to_add),
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
411 Lisp_Object UNUSED (selection_type), int UNUSED (owned_p))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
412 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
413 struct device *d = decode_gtk_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
414 GtkWidget *selecting_window = GTK_WIDGET (DEVICE_GTK_APP_SHELL (d));
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
415 /* Use the time of the last-read mouse or keyboard event.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
416 For selection purposes, we use this as a sleazy way of knowing what the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
417 current time is in server-time. This assumes that the most recently read
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
418 mouse or keyboard event has something to do with the assertion of the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
419 selection, which is probably true.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
420 */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
421 guint32 thyme = DEVICE_GTK_MOUSE_TIMESTAMP (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
422 GdkAtom selection_atom;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
423
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
424 CHECK_SYMBOL (selection_name);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
425 selection_atom = symbol_to_gtk_atom (d, selection_name, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
426
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
427 gtk_selection_owner_set (selecting_window,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
428 selection_atom,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
429 thyme);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
430
2620
5e906dd5c3e9 [xemacs-hg @ 2005-02-28 20:21:43 by aidan]
aidan
parents: 2367
diff changeset
431 /* [[ We do NOT use time_to_lisp() here any more, like we used to.
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
432 That assumed equivalence of time_t and Time, which is not
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
433 necessarily the case (e.g. under OSF on the Alphas, where
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
434 Time is a 64-bit quantity and time_t is a 32-bit quantity).
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
435
2620
5e906dd5c3e9 [xemacs-hg @ 2005-02-28 20:21:43 by aidan]
aidan
parents: 2367
diff changeset
436 Opaque pointers are the clean way to go here. ]]
5e906dd5c3e9 [xemacs-hg @ 2005-02-28 20:21:43 by aidan]
aidan
parents: 2367
diff changeset
437
5e906dd5c3e9 [xemacs-hg @ 2005-02-28 20:21:43 by aidan]
aidan
parents: 2367
diff changeset
438 See my comment on the same issue in select-x.c -- Aidan. */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 778
diff changeset
439 return make_opaque (&thyme, sizeof (thyme));
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
440 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
441
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
442 static void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
443 gtk_disown_selection (Lisp_Object selection, Lisp_Object timeval)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
444 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
445 struct device *d = decode_gtk_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
446 GdkAtom selection_atom;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
447 guint32 timestamp;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
448
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
449 CHECK_SYMBOL (selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
450 selection_atom = symbol_to_gtk_atom (d, selection, 0);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
451
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
452 if (NILP (timeval))
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
453 timestamp = DEVICE_GTK_MOUSE_TIMESTAMP (d);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
454 else
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
455 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
456 time_t the_time;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
457 lisp_to_time (timeval, &the_time);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
458 timestamp = (guint32) the_time;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
459 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
460
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
461 gtk_selection_owner_set (NULL, selection_atom, timestamp);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
462 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
463
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
464 static Lisp_Object
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
465 gtk_selection_exists_p (Lisp_Object selection,
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 2054
diff changeset
466 Lisp_Object UNUSED (selection_type))
462
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
467 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
468 struct device *d = decode_gtk_device (Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
469
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
470 return (gdk_selection_owner_get (symbol_to_gtk_atom (d, selection, 0)) ? Qt : Qnil);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
471 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
472
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
473
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
474
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
475 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
476 /* initialization */
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
477 /************************************************************************/
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
478
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
479 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
480 syms_of_select_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
481 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
482 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
483
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
484 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
485 console_type_create_select_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
486 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
487 CONSOLE_HAS_METHOD (gtk, own_selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
488 CONSOLE_HAS_METHOD (gtk, disown_selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
489 CONSOLE_HAS_METHOD (gtk, selection_exists_p);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
490 CONSOLE_HAS_METHOD (gtk, get_foreign_selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
491 }
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
492
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
493 void
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
494 vars_of_select_gtk (void)
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
495 {
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
496 staticpro (&Vretrieved_selection);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
497 Vretrieved_selection = Qnil;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
498
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
499 DEFVAR_LISP ("gtk-sent-selection-hooks", &Vgtk_sent_selection_hooks /*
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
500 A function or functions to be called after we have responded to some
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
501 other client's request for the value of a selection that we own. The
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
502 function(s) will be called with four arguments:
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
503 - the name of the selection (typically PRIMARY, SECONDARY, or CLIPBOARD);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
504 - the name of the selection-type which we were requested to convert the
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
505 selection into before sending (for example, STRING or LENGTH);
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
506 - and whether we successfully transmitted the selection.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
507 We might have failed (and declined the request) for any number of reasons,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
508 including being asked for a selection that we no longer own, or being asked
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
509 to convert into a type that we don't know about or that is inappropriate.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
510 This hook doesn't let you change the behavior of emacs's selection replies,
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
511 it merely informs you that they have happened.
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
512 */ );
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
513 Vgtk_sent_selection_hooks = Qunbound;
0784d089fdc9 Import from CVS: tag r21-2-46
cvs
parents:
diff changeset
514 }