annotate src/gui.c @ 5124:623d57b7fbe8 ben-lisp-object

separate regular and disksave finalization, print method fixes. Create separate disksave method and make the finalize method only be for actual object finalization, not disksave finalization. Fix places where 0 was given in place of a printer -- print methods are mandatory, and internal objects formerly without a print method now must explicitly specify internal_object_printer(). Change the defn of CONSOLE_LIVE_P to avoid problems in some weird situations. -------------------- ChangeLog entries follow: -------------------- src/ChangeLog addition: 2010-01-20 Ben Wing <ben@xemacs.org> * alloc.c: * alloc.c (very_old_free_lcrecord): * alloc.c (disksave_object_finalization_1): * alloc.c (make_lcrecord_list): * alloc.c (alloc_managed_lcrecord): * alloc.c (free_managed_lcrecord): * alloc.c (sweep_lcrecords_1): * buffer.c: * bytecode.c: * bytecode.c (Fcompiled_function_p): * chartab.c: * console-impl.h: * console-impl.h (CONSOLE_TYPE_P): * console.c: * console.c (set_quit_events): * data.c: * data.c (Fmake_ephemeron): * database.c: * database.c (finalize_database): * database.c (Fclose_database): * device-msw.c: * device-msw.c (finalize_devmode): * device-msw.c (allocate_devmode): * device.c: * elhash.c: * elhash.c (finalize_hash_table): * eval.c: * eval.c (bind_multiple_value_limits): * event-stream.c: * event-stream.c (finalize_command_builder): * events.c: * events.c (mark_event): * extents.c: * extents.c (finalize_extent_info): * extents.c (uninit_buffer_extents): * faces.c: * file-coding.c: * file-coding.c (finalize_coding_system): * file-coding.h: * file-coding.h (struct coding_system_methods): * file-coding.h (struct detector): * floatfns.c: * floatfns.c (extract_float): * fns.c: * fns.c (Fidentity): * font-mgr.c (finalize_fc_pattern): * font-mgr.c (finalize_fc_config): * frame.c: * glyphs.c: * glyphs.c (finalize_image_instance): * glyphs.c (unmap_subwindow_instance_cache_mapper): * gui.c: * gui.c (gui_error): * keymap.c: * lisp.h (struct Lisp_Symbol): * lrecord.h: * lrecord.h (struct lrecord_implementation): * lrecord.h (MC_ALLOC_CALL_FINALIZER): * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): * lrecord.h (DEFINE_DUMPABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_FROB_BLOCK_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_INTERNAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_SIZABLE_INTERNAL_LISP_OBJECT): * lrecord.h (MAKE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_DUMPABLE_MODULE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_GENERAL_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_LISP_OBJECT): * lrecord.h (DEFINE_NODUMP_MODULE_SIZABLE_GENERAL_LISP_OBJECT): * lrecord.h (MAKE_MODULE_LISP_OBJECT): * lstream.c: * lstream.c (finalize_lstream): * lstream.c (disksave_lstream): * marker.c: * marker.c (finalize_marker): * mule-charset.c (make_charset): * number.c: * objects.c: * objects.c (finalize_color_instance): * objects.c (finalize_font_instance): * opaque.c: * opaque.c (make_opaque_ptr): * process-nt.c: * process-nt.c (nt_finalize_process_data): * process-nt.c (nt_deactivate_process): * process.c: * process.c (finalize_process): * procimpl.h (struct process_methods): * scrollbar.c: * scrollbar.c (free_scrollbar_instance): * specifier.c (finalize_specifier): * symbols.c: * toolbar.c: * toolbar.c (Ftoolbar_button_p): * tooltalk.c: * ui-gtk.c: * ui-gtk.c (emacs_gtk_object_finalizer): * ui-gtk.c (allocate_emacs_gtk_boxed_data): * window.c: * window.c (finalize_window): * window.c (mark_window_as_deleted): Separate out regular and disksave finalization. Instead of a FOR_DISKSAVE argument to the finalizer, create a separate object method `disksaver'. Make `finalizer' have only one argument. Go through and separate out all finalize methods into finalize and disksave. Delete lots of thereby redundant disksave checking. Delete places that signal an error if we attempt to disksave -- all of these objects are non-dumpable and we will get an error from pdump anyway if we attempt to dump them. After this is done, only one object remains that has a disksave method -- lstream. Change DEFINE_*_LISP_OBJECT_WITH_PROPS to DEFINE_*_GENERAL_LISP_OBJECT, which is used for specifying either property methods or disksave methods (or in the future, any other less-used methods). Remove the for_disksave argument to finalize_process_data. Don't provide a disksaver for processes because no one currently needs it. Clean up various places where objects didn't provide a print method. It was made mandatory in previous changes, and all methods now either provide their own print method or use internal_object_printer or external_object_printer. Change the definition of CONSOLE_LIVE_P to use the contype enum rather than looking into the conmeths structure -- in some weird situations with dead objects, the conmeths structure is NULL, and printing such objects from debug_print() will crash if we try to look into the conmeths structure.
author Ben Wing <ben@xemacs.org>
date Wed, 20 Jan 2010 07:05:57 -0600
parents e0db3c197671
children b5df3737028a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Generic GUI code. (menubars, scrollbars, toolbars, dialogs)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1995 Board of Trustees, University of Illinois.
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
3 Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4 Copyright (C) 1995 Sun Microsystems, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 Copyright (C) 1998 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24 /* Synched up with: Not in FSF. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
26 /* This file Mule-ized by Ben Wing, 3-24-02. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
27
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28 #include <config.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 #include "lisp.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
30
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
31 #include "buffer.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 #include "bytecode.h"
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
33 #include "elhash.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
34 #include "gui.h"
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
35 #include "menubar.h"
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
36 #include "redisplay.h"
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
38 Lisp_Object Qmenu_no_selection_hook;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
39 Lisp_Object Vmenu_no_selection_hook;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
40
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
41 static Lisp_Object parse_gui_item_tree_list (Lisp_Object list);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
42 Lisp_Object find_keyword_in_vector (Lisp_Object vector, Lisp_Object keyword);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
43
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
44 Lisp_Object Qgui_error;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
45
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 #ifdef HAVE_POPUPS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
48 /* count of menus/dboxes currently up */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 int popup_up_p;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
50
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
51 DEFUN ("popup-up-p", Fpopup_up_p, 0, 0, 0, /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
52 Return t if a popup menu or dialog box is up, nil otherwise.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
53 See `popup-menu' and `popup-dialog-box'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
54 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55 ())
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 return popup_up_p ? Qt : Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59 #endif /* HAVE_POPUPS */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 int
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
62 separator_string_p (const Ibyte *s)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
64 const Ibyte *p;
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
65 Ibyte first;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
66
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
67 if (!s || s[0] == '\0')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
69 first = s[0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 if (first != '-' && first != '=')
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
72 for (p = s; *p == first; p++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
73 ;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
74
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
75 return (*p == '!' || *p == ':' || *p == '\0');
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
76 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
77
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
78 /* Massage DATA to find the correct function and argument. Used by
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
79 popup_selection_callback() and the msw code. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
80 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
81 get_gui_callback (Lisp_Object data, Lisp_Object *fn, Lisp_Object *arg)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
82 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
83 if (EQ (data, Qquit))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
84 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
85 *fn = Qeval;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
86 *arg = list3 (Qsignal, list2 (Qquote, Qquit), Qnil);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
87 Vquit_flag = Qt;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
88 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
89 else if (SYMBOLP (data)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
90 || (COMPILED_FUNCTIONP (data)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
91 && XCOMPILED_FUNCTION (data)->flags.interactivep)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
92 || (CONSP (data) && (EQ (XCAR (data), Qlambda))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
93 && !NILP (Fassq (Qinteractive, Fcdr (Fcdr (data))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
94 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
95 *fn = Qcall_interactively;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 *arg = data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 else if (CONSP (data))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100 *fn = Qeval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 *arg = data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 *fn = Qeval;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 *arg = list3 (Qsignal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 list2 (Qquote, Qerror),
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
108 list2 (Qquote, list2 (build_msg_string
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
109 ("illegal callback"),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
110 data)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
111 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
112 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
113
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
114 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
115 * Add a value VAL associated with keyword KEY into PGUI_ITEM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
116 * structure. If KEY is not a keyword, or is an unknown keyword, then
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
117 * error is signaled.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
118 */
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
119 int
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
120 gui_item_add_keyval_pair (Lisp_Object gui_item,
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
121 Lisp_Object key, Lisp_Object val,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 569
diff changeset
122 Error_Behavior errb)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
123 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
124 Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
125 int retval = 0;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
126
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
127 if (!KEYWORDP (key))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
128 sferror_2 ("Non-keyword in gui item", key, pgui_item->name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
129
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
130 if (EQ (key, Q_descriptor))
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
131 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
132 if (!EQ (pgui_item->name, val))
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
133 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
134 retval = 1;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
135 pgui_item->name = val;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
136 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
137 }
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
138 #define FROB(slot) \
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
139 else if (EQ (key, Q_##slot)) \
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
140 { \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
141 if (!EQ (pgui_item->slot, val)) \
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
142 { \
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
143 retval = 1; \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
144 pgui_item->slot = val; \
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
145 } \
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
146 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
147 FROB (suffix)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
148 FROB (active)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
149 FROB (included)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
150 FROB (config)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
151 FROB (filter)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
152 FROB (style)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
153 FROB (selected)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
154 FROB (keys)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
155 FROB (callback)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
156 FROB (callback_ex)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
157 FROB (value)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
158 #undef FROB
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
159 else if (EQ (key, Q_key_sequence)) ; /* ignored for FSF compatibility */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
160 else if (EQ (key, Q_label)) ; /* ignored for 21.0 implement in 21.2 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
161 else if (EQ (key, Q_accelerator))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
162 {
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
163 if (!EQ (pgui_item->accelerator, val))
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
164 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
165 retval = 1;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
166 if (SYMBOLP (val) || CHARP (val))
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
167 pgui_item->accelerator = val;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
168 else if (ERRB_EQ (errb, ERROR_ME))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
169 invalid_argument ("Bad keyboard accelerator", val);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
170 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
171 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
172 else if (ERRB_EQ (errb, ERROR_ME))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
173 invalid_argument_2 ("Unknown keyword in gui item", key, pgui_item->name);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
174 return retval;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
175 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
176
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
177 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
178 gui_item_init (Lisp_Object gui_item)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
179 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
180 Lisp_Gui_Item *lp = XGUI_ITEM (gui_item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
181
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
182 lp->name = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
183 lp->callback = Qnil;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
184 lp->callback_ex = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
185 lp->suffix = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
186 lp->active = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187 lp->included = Qt;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 lp->config = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 lp->filter = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 lp->style = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 lp->selected = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
192 lp->keys = Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
193 lp->accelerator = Qnil;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
194 lp->value = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
195 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
196
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
197 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
198 allocate_gui_item (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
199 {
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3017
diff changeset
200 Lisp_Object obj = ALLOC_LISP_OBJECT (gui_item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
201
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3017
diff changeset
202 gui_item_init (obj);
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3017
diff changeset
203 return obj;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
206 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
207 * ITEM is a lisp vector, describing a menu item or a button. The
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
208 * function extracts the description of the item into the PGUI_ITEM
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
209 * structure.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
210 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
211 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
212 make_gui_item_from_keywords_internal (Lisp_Object item,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 569
diff changeset
213 Error_Behavior errb)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
214 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
215 int length, plist_p, start;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
216 Lisp_Object *contents;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
217 Lisp_Object gui_item = allocate_gui_item ();
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
218 Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
219
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
220 CHECK_VECTOR (item);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
221 length = XVECTOR_LENGTH (item);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
222 contents = XVECTOR_DATA (item);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
223
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
224 if (length < 1)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
225 sferror ("GUI item descriptors must be at least 1 elts long", item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
226
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
227 /* length 1: [ "name" ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
228 length 2: [ "name" callback ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
229 length 3: [ "name" callback active-p ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
230 or [ "name" keyword value ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
231 length 4: [ "name" callback active-p suffix ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 or [ "name" callback keyword value ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 length 5+: [ "name" callback [ keyword value ]+ ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 or [ "name" [ keyword value ]+ ]
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 plist_p = (length > 2 && (KEYWORDP (contents [1])
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 || KEYWORDP (contents [2])));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 pgui_item->name = contents [0];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 if (length > 1 && !KEYWORDP (contents [1]))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 pgui_item->callback = contents [1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 start = 2;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 }
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
245 else
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 start =1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
247
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 if (!plist_p && length > 2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 /* the old way */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
251 pgui_item->active = contents [2];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
252 if (length == 4)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 pgui_item->suffix = contents [3];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
254 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
255 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 /* the new way */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258 int i;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 if ((length - start) & 1)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
260 sferror (
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 "GUI item descriptor has an odd number of keywords and values",
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
262 item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 for (i = start; i < length;)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 Lisp_Object key = contents [i++];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 Lisp_Object val = contents [i++];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 gui_item_add_keyval_pair (gui_item, key, val, errb);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271 return gui_item;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
274 /* This will only work with descriptors in the new format. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
275 Lisp_Object
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
276 widget_gui_parse_item_keywords (Lisp_Object item)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
277 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
278 int i, length;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
279 Lisp_Object *contents;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
280 Lisp_Object gui_item = allocate_gui_item ();
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
281 Lisp_Object desc = find_keyword_in_vector (item, Q_descriptor);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
282
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
283 CHECK_VECTOR (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
284 length = XVECTOR_LENGTH (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
285 contents = XVECTOR_DATA (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
286
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
287 if (!NILP (desc) && !STRINGP (desc) && !VECTORP (desc))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
288 sferror ("Invalid GUI item descriptor", item);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
289
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
290 if (length & 1)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
291 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
292 if (!SYMBOLP (contents [0]))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
293 sferror ("Invalid GUI item descriptor", item);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
294 contents++; /* Ignore the leading symbol. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
295 length--;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
296 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
297
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
298 for (i = 0; i < length;)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
299 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
300 Lisp_Object key = contents [i++];
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
301 Lisp_Object val = contents [i++];
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
302 gui_item_add_keyval_pair (gui_item, key, val, ERROR_ME_NOT);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
303 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
304
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
305 return gui_item;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
306 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
307
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
308 /* Update a gui item from a partial descriptor. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
309 int
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
310 update_gui_item_keywords (Lisp_Object gui_item, Lisp_Object item)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
311 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
312 int i, length, retval = 0;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
313 Lisp_Object *contents;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
314
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
315 CHECK_VECTOR (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
316 length = XVECTOR_LENGTH (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
317 contents = XVECTOR_DATA (item);
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
318
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
319 if (length & 1)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
320 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
321 if (!SYMBOLP (contents [0]))
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
322 sferror ("Invalid GUI item descriptor", item);
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
323 contents++; /* Ignore the leading symbol. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
324 length--;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
325 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
326
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
327 for (i = 0; i < length;)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
328 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
329 Lisp_Object key = contents [i++];
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
330 Lisp_Object val = contents [i++];
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
331 if (gui_item_add_keyval_pair (gui_item, key, val, ERROR_ME_DEBUG_WARN))
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
332 retval = 1;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
333 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
334 return retval;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
335 }
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
336
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
337 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
338 gui_parse_item_keywords (Lisp_Object item)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
339 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
340 return make_gui_item_from_keywords_internal (item, ERROR_ME);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
341 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
342
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
343 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
344 gui_parse_item_keywords_no_errors (Lisp_Object item)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
345 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
346 return make_gui_item_from_keywords_internal (item, ERROR_ME_DEBUG_WARN);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
347 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
348
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
349 /* convert a gui item into plist properties */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
350 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
351 gui_add_item_keywords_to_plist (Lisp_Object plist, Lisp_Object gui_item)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
352 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
353 Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
354
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
355 if (!NILP (pgui_item->callback))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
356 Fplist_put (plist, Q_callback, pgui_item->callback);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
357 if (!NILP (pgui_item->callback_ex))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
358 Fplist_put (plist, Q_callback_ex, pgui_item->callback_ex);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
359 if (!NILP (pgui_item->suffix))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
360 Fplist_put (plist, Q_suffix, pgui_item->suffix);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
361 if (!NILP (pgui_item->active))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
362 Fplist_put (plist, Q_active, pgui_item->active);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
363 if (!NILP (pgui_item->included))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
364 Fplist_put (plist, Q_included, pgui_item->included);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
365 if (!NILP (pgui_item->config))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
366 Fplist_put (plist, Q_config, pgui_item->config);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
367 if (!NILP (pgui_item->filter))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
368 Fplist_put (plist, Q_filter, pgui_item->filter);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
369 if (!NILP (pgui_item->style))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
370 Fplist_put (plist, Q_style, pgui_item->style);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
371 if (!NILP (pgui_item->selected))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
372 Fplist_put (plist, Q_selected, pgui_item->selected);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
373 if (!NILP (pgui_item->keys))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
374 Fplist_put (plist, Q_keys, pgui_item->keys);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
375 if (!NILP (pgui_item->accelerator))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
376 Fplist_put (plist, Q_accelerator, pgui_item->accelerator);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
377 if (!NILP (pgui_item->value))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
378 Fplist_put (plist, Q_value, pgui_item->value);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
379 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
380
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
381 static int
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
382 gui_item_value (Lisp_Object form)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
383 {
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
384 /* This function can call Lisp. */
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
385 #ifndef ERROR_CHECK_DISPLAY
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
386 /* Shortcut to avoid evaluating Qt/Qnil each time; but don't do it when
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
387 error-checking so we catch unprotected eval within redisplay quicker */
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
388 if (NILP (form))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
389 return 0;
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
390 if (EQ (form, Qt))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
391 return 1;
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
392 #endif
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3263
diff changeset
393 return !NILP (in_display ?
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3263
diff changeset
394 IGNORE_MULTIPLE_VALUES (eval_within_redisplay (form))
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3263
diff changeset
395 : IGNORE_MULTIPLE_VALUES (Feval (form)));
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
396 }
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
397
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
398 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
399 * Decide whether a GUI item is active by evaluating its :active form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
400 * if any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
401 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
402 int
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
403 gui_item_active_p (Lisp_Object gui_item)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
404 {
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
405 return gui_item_value (XGUI_ITEM (gui_item)->active);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
406 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
407
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
408 /* set menu accelerator key to first underlined character in menu name */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
409 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
410 gui_item_accelerator (Lisp_Object gui_item)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
411 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
412 Lisp_Gui_Item *pgui = XGUI_ITEM (gui_item);
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
413
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
414 if (!NILP (pgui->accelerator))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
415 return pgui->accelerator;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
416
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
417 else
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
418 return gui_name_accelerator (pgui->name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
419 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
420
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
421 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
422 gui_name_accelerator (Lisp_Object nm)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
423 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
424 Ibyte *name = XSTRING_DATA (nm);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
425
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
426 while (*name)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
427 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
428 if (*name == '%')
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
429 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
430 ++name;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
431 if (!(*name))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
432 return Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
433 if (*name == '_' && *(name + 1))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
434 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
435 Ichar accelerator = itext_ichar (name + 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
436 return make_char (DOWNCASE (0, accelerator));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
437 }
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 }
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
439 INC_IBYTEPTR (name);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 }
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 853
diff changeset
441 return make_char (DOWNCASE (0, itext_ichar (XSTRING_DATA (nm))));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
443
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 * Decide whether a GUI item is selected by evaluating its :selected form
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 * if any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
447 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
448 int
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
449 gui_item_selected_p (Lisp_Object gui_item)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
450 {
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
451 return gui_item_value (XGUI_ITEM (gui_item)->selected);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
452 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
453
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
454 Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
455 gui_item_list_find_selected (Lisp_Object gui_item_list)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
456 {
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
457 /* This function can call Lisp but cannot GC because it is called within
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
458 redisplay, and redisplay disables GC. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
459 Lisp_Object rest;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
460 LIST_LOOP (rest, gui_item_list)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
461 {
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
462 if (gui_item_selected_p (XCAR (rest)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
463 return XCAR (rest);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
464 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
465 return XCAR (gui_item_list);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
466 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
467
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
468 /*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
469 * Decide whether a GUI item is included by evaluating its :included
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
470 * form if given, and testing its :config form against supplied CONFLIST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
471 * configuration variable
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
472 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
473 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
474 gui_item_included_p (Lisp_Object gui_item, Lisp_Object conflist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
475 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
476 /* This function can call lisp */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
477 Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
478
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
479 /* Evaluate :included first. Shortcut to avoid evaluating Qt each time */
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
480 if (!gui_item_value (pgui_item->included))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
481 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
482
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
483 /* Do :config if conflist is given */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
484 if (!NILP (conflist) && !NILP (pgui_item->config)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
485 && NILP (Fmemq (pgui_item->config, conflist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
486 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
487
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
488 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
489 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
490
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
491 /*
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
492 * Format "left flush" display portion of an item.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
493 */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
494 Lisp_Object
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
495 gui_item_display_flush_left (Lisp_Object gui_item)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
496 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
497 /* This function can call lisp */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
498 Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
499 Lisp_Object retval;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
500
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
501 CHECK_STRING (pgui_item->name);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
502 retval = pgui_item->name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
503
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
504 if (!NILP (pgui_item->suffix))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
506 Lisp_Object suffix = pgui_item->suffix;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 /* Shortcut to avoid evaluating suffix each time */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 if (!STRINGP (suffix))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 suffix = Feval (suffix);
4677
8f1ee2d15784 Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents: 3263
diff changeset
511 suffix = IGNORE_MULTIPLE_VALUES (suffix);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
512 CHECK_STRING (suffix);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
513 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
514
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
515 retval = concat3 (pgui_item->name, build_string (" "), suffix);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
516 }
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
517
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
518 return retval;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
519 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
520
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
521 /*
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
522 * Format "right flush" display portion of an item into BUF.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
523 */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
524 Lisp_Object
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
525 gui_item_display_flush_right (Lisp_Object gui_item)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
526 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
527 Lisp_Gui_Item *pgui_item = XGUI_ITEM (gui_item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
528
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
529 #ifdef HAVE_MENUBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
530 /* Have keys? */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
531 if (!menubar_show_keybindings)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
532 return Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
533 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
534
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 /* Try :keys first */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 if (!NILP (pgui_item->keys))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 CHECK_STRING (pgui_item->keys);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
539 return pgui_item->keys;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 /* See if we can derive keys out of callback symbol */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 if (SYMBOLP (pgui_item->callback))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 {
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
545 DECLARE_EISTRING_MALLOC (buf);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
546 Lisp_Object str;
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
547
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
548 where_is_to_char (pgui_item->callback, buf);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
549 str = eimake_string (buf);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
550 eifree (buf);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
551 return str;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 /* No keys - no right flush display */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 665
diff changeset
555 return Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 934
diff changeset
558 static const struct memory_description gui_item_description [] = {
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
559 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, name) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
560 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, callback) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
561 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, callback_ex) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
562 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, suffix) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
563 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, active) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
564 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, included) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
565 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, config) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
566 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, filter) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
567 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, style) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
568 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, selected) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
569 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, keys) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
570 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, accelerator) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
571 { XD_LISP_OBJECT, offsetof (struct Lisp_Gui_Item, value) },
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
572 { XD_END }
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
573 };
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 872
diff changeset
574
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
575 static Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
576 mark_gui_item (Lisp_Object obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
577 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
578 Lisp_Gui_Item *p = XGUI_ITEM (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
579
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
580 mark_object (p->name);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
581 mark_object (p->callback);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
582 mark_object (p->callback_ex);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
583 mark_object (p->config);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
584 mark_object (p->suffix);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
585 mark_object (p->active);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
586 mark_object (p->included);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
587 mark_object (p->config);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
588 mark_object (p->filter);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
589 mark_object (p->style);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
590 mark_object (p->selected);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
591 mark_object (p->keys);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
592 mark_object (p->accelerator);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
593 mark_object (p->value);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
595 return Qnil;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
596 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
597
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
598 static Hashcode
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
599 gui_item_hash (Lisp_Object obj, int depth)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
600 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
601 Lisp_Gui_Item *p = XGUI_ITEM (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
602
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
603 return HASH2 (HASH6 (internal_hash (p->name, depth + 1),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
604 internal_hash (p->callback, depth + 1),
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
605 internal_hash (p->callback_ex, depth + 1),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
606 internal_hash (p->suffix, depth + 1),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
607 internal_hash (p->active, depth + 1),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
608 internal_hash (p->included, depth + 1)),
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
609 HASH6 (internal_hash (p->config, depth + 1),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
610 internal_hash (p->filter, depth + 1),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
611 internal_hash (p->style, depth + 1),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
612 internal_hash (p->selected, depth + 1),
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
613 internal_hash (p->keys, depth + 1),
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
614 internal_hash (p->value, depth + 1)));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
615 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
616
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
617 int
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
618 gui_item_id_hash (Lisp_Object hashtable, Lisp_Object gitem, int slot)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
619 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
620 int hashid = gui_item_hash (gitem, 0);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
621 int id = GUI_ITEM_ID_BITS (hashid, slot);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 793
diff changeset
622 while (!UNBOUNDP (Fgethash (make_int (id), hashtable, Qunbound)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
623 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
624 id = GUI_ITEM_ID_BITS (id + 1, slot);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
625 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
626 return id;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
627 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
628
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
629 static int
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
630 gui_value_equal (Lisp_Object a, Lisp_Object b, int depth)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
631 {
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
632 if (in_display)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
633 return internal_equal_trapping_problems
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
634 (Qredisplay, "Error calling function within redisplay", 0, 0,
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
635 /* say they're not equal in case of error; code calling
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
636 gui_item_equal_sans_selected() in redisplay does extra stuff
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
637 only when equal */
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
638 0, a, b, depth);
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
639 else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
640 return internal_equal (a, b, depth);
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
641 }
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1204
diff changeset
642
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
643 int
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
644 gui_item_equal_sans_selected (Lisp_Object obj1, Lisp_Object obj2, int depth)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
645 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
646 Lisp_Gui_Item *p1 = XGUI_ITEM (obj1);
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
647 Lisp_Gui_Item *p2 = XGUI_ITEM (obj2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
648
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
649 if (!(gui_value_equal (p1->name, p2->name, depth + 1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
650 &&
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
651 gui_value_equal (p1->callback, p2->callback, depth + 1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
652 &&
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
653 gui_value_equal (p1->callback_ex, p2->callback_ex, depth + 1)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
654 &&
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
655 EQ (p1->suffix, p2->suffix)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
656 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
657 EQ (p1->active, p2->active)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
658 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
659 EQ (p1->included, p2->included)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
660 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
661 EQ (p1->config, p2->config)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
662 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
663 EQ (p1->filter, p2->filter)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
664 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
665 EQ (p1->style, p2->style)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
666 &&
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
667 EQ (p1->accelerator, p2->accelerator)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
668 &&
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
669 EQ (p1->keys, p2->keys)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
670 &&
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
671 EQ (p1->value, p2->value)))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
672 return 0;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
673 return 1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
674 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
675
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
676 static int
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
677 gui_item_equal (Lisp_Object obj1, Lisp_Object obj2, int depth)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
678 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
679 Lisp_Gui_Item *p1 = XGUI_ITEM (obj1);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
680 Lisp_Gui_Item *p2 = XGUI_ITEM (obj2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
681
1913
7473844a83d3 [xemacs-hg @ 2004-02-17 15:20:41 by james]
james
parents: 1318
diff changeset
682 if (!(gui_item_equal_sans_selected (obj1, obj2, depth) &&
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
683 EQ (p1->selected, p2->selected)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
684 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
685 return 1;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
686 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
687
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
688 static void
2286
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
689 print_gui_item (Lisp_Object obj, Lisp_Object printcharfun,
04bc9d2f42c7 [xemacs-hg @ 2004-09-20 19:18:55 by james]
james
parents: 1913
diff changeset
690 int UNUSED (escapeflag))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
691 {
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
692 Lisp_Gui_Item *g = XGUI_ITEM (obj);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
694 if (print_readably)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
695 printing_unreadable_object ("#<gui-item 0x%x>", g->header.uid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
696
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 771
diff changeset
697 write_fmt_string (printcharfun, "#<gui-item 0x%x>", g->header.uid);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
698 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
699
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 442
diff changeset
700 Lisp_Object
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
701 copy_gui_item (Lisp_Object gui_item)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
702 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
703 Lisp_Object ret = allocate_gui_item ();
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
704 Lisp_Gui_Item *lp, *g = XGUI_ITEM (gui_item);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
705
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
706 lp = XGUI_ITEM (ret);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
707 lp->name = g->name;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
708 lp->callback = g->callback;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
709 lp->callback_ex = g->callback_ex;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
710 lp->suffix = g->suffix;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
711 lp->active = g->active;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
712 lp->included = g->included;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
713 lp->config = g->config;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
714 lp->filter = g->filter;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
715 lp->style = g->style;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
716 lp->selected = g->selected;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
717 lp->keys = g->keys;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
718 lp->accelerator = g->accelerator;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
719 lp->value = g->value;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
720
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
721 return ret;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
722 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
723
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
724 Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
725 copy_gui_item_tree (Lisp_Object arg)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
726 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
727 if (CONSP (arg))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
728 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
729 Lisp_Object rest = arg = Fcopy_sequence (arg);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
730 while (CONSP (rest))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
731 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
732 XCAR (rest) = copy_gui_item_tree (XCAR (rest));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
733 rest = XCDR (rest);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
734 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
735 return arg;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
736 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
737 else if (GUI_ITEMP (arg))
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
738 return copy_gui_item (arg);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
739 else
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
740 return arg;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
741 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
742
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
743 /* parse a glyph descriptor into a tree of gui items.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
744
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
745 The gui_item slot of an image instance can be a single item or an
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
746 arbitrarily nested hierarchy of item lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
747
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
748 static Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
749 parse_gui_item_tree_item (Lisp_Object entry)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
750 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
751 Lisp_Object ret = entry;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
752 struct gcpro gcpro1;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
753
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
754 GCPRO1 (ret);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
755
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
756 if (VECTORP (entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
757 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
758 ret = gui_parse_item_keywords_no_errors (entry);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
759 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
760 else if (STRINGP (entry))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
761 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
762 CHECK_STRING (entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
763 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
764 else
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
765 sferror ("item must be a vector or a string", entry);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
766
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
767 RETURN_UNGCPRO (ret);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
768 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
769
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
770 Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
771 parse_gui_item_tree_children (Lisp_Object list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
772 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
773 Lisp_Object rest, ret = Qnil, sub = Qnil;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
774 struct gcpro gcpro1, gcpro2;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
775
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
776 GCPRO2 (ret, sub);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
777 CHECK_CONS (list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
778 /* recursively add items to the tree view */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
779 LIST_LOOP (rest, list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
780 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
781 if (CONSP (XCAR (rest)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
782 sub = parse_gui_item_tree_list (XCAR (rest));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
783 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
784 sub = parse_gui_item_tree_item (XCAR (rest));
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
785
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
786 ret = Fcons (sub, ret);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
787 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
788 /* make the order the same as the items we have parsed */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
789 RETURN_UNGCPRO (Fnreverse (ret));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
790 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
791
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
792 static Lisp_Object
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
793 parse_gui_item_tree_list (Lisp_Object list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
794 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
795 Lisp_Object ret;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
796 struct gcpro gcpro1;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
797 CHECK_CONS (list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
798 /* first one can never be a list */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
799 ret = parse_gui_item_tree_item (XCAR (list));
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
800 GCPRO1 (ret);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
801 ret = Fcons (ret, parse_gui_item_tree_children (XCDR (list)));
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
802 RETURN_UNGCPRO (ret);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
803 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
804
5118
e0db3c197671 merge up to latest default branch, doesn't compile yet
Ben Wing <ben@xemacs.org>
parents: 5117 4677
diff changeset
805 DEFINE_NODUMP_LISP_OBJECT ("gui-item", gui_item,
5124
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
806 mark_gui_item, print_gui_item,
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
807 0, gui_item_equal,
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
808 gui_item_hash,
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
809 gui_item_description,
623d57b7fbe8 separate regular and disksave finalization, print method fixes.
Ben Wing <ben@xemacs.org>
parents: 5118
diff changeset
810 Lisp_Gui_Item);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
811
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
812 DOESNT_RETURN
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
813 gui_error (const Ascbyte *reason, Lisp_Object frob)
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
814 {
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
815 signal_error (Qgui_error, reason, frob);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
816 }
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
817
569
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
818 DOESNT_RETURN
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2286
diff changeset
819 gui_error_2 (const Ascbyte *reason, Lisp_Object frob0, Lisp_Object frob1)
569
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
820 {
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
821 signal_error_2 (Qgui_error, reason, frob0, frob1);
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
822 }
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
823
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
824 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
825 syms_of_gui (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
826 {
5117
3742ea8250b5 Checking in final CVS version of workspace 'ben-lisp-object'
Ben Wing <ben@xemacs.org>
parents: 3017
diff changeset
827 INIT_LISP_OBJECT (gui_item);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
828
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
829 DEFSYMBOL (Qmenu_no_selection_hook);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
830
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
831 DEFERROR_STANDARD (Qgui_error, Qio_error);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 454
diff changeset
832
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
833 #ifdef HAVE_POPUPS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
834 DEFSUBR (Fpopup_up_p);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
835 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
836 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
837
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
838 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
839 vars_of_gui (void)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
840 {
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
841 DEFVAR_LISP ("menu-no-selection-hook", &Vmenu_no_selection_hook /*
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
842 Function or functions to call when a menu or dialog box is dismissed
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
843 without a selection having been made.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
844 */ );
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
845 Vmenu_no_selection_hook = Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
846 }