Mercurial > hg > xemacs-beta
annotate src/glade.c @ 4699:0e1461b592ce
Check for gdbm/ndbm.h, too.
author | Stephen J. Turnbull <stephen@xemacs.org> |
---|---|
date | Thu, 24 Sep 2009 09:36:49 +0900 |
parents | 8f1ee2d15784 |
children | db7068430402 |
rev | line source |
---|---|
462 | 1 /* glade.c |
2 ** | |
3 ** Description: Interface to `libglade' for XEmacs/GTK | |
4 ** | |
5 ** Created by: William M. Perry <wmperry@gnu.org> | |
6 ** | |
7 ** Copyright (C) 1999 John Harper <john@dcs.warwick.ac.uk> | |
8 ** Copyright (c) 2000 Free Software Foundation | |
9 ** | |
10 */ | |
11 | |
12 #if defined(HAVE_GLADE_H) || defined(HAVE_GLADE_GLADE_H) | |
13 | |
14 /* For COMPILED_FUNCTIONP */ | |
15 #include "bytecode.h" | |
16 | |
17 #ifdef HAVE_GLADE_GLADE_H | |
18 #include <glade/glade.h> | |
19 #endif | |
20 | |
21 #ifdef HAVE_GLADE_H | |
22 #include <glade.h> | |
23 #endif | |
24 | |
25 /* This is based on the code from rep-gtk 0.11 in libglade-support.c */ | |
26 | |
27 static void | |
28 connector (const gchar *handler_name, GtkObject *object, | |
29 const gchar *signal_name, const gchar *signal_data, | |
30 GtkObject *connect_object, gboolean after, gpointer user_data) | |
31 { | |
32 Lisp_Object func; | |
33 Lisp_Object lisp_data = Qnil; | |
34 | |
826 | 35 func = VOID_TO_LISP (user_data); |
462 | 36 |
37 if (NILP (func)) | |
38 { | |
39 /* Look for a lisp function called HANDLER_NAME */ | |
40 func = intern (handler_name); | |
41 } | |
42 | |
43 if (signal_data && signal_data[0]) | |
44 { | |
4677
8f1ee2d15784
Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
2054
diff
changeset
|
45 lisp_data |
8f1ee2d15784
Support full Common Lisp multiple values in C.
Aidan Kehoe <kehoea@parhasard.net>
parents:
2054
diff
changeset
|
46 = IGNORE_MULTIPLE_VALUES (Feval (Fread (build_string (signal_data)))); |
462 | 47 } |
48 | |
49 /* obj, name, func, cb_data, object_signal, after_p */ | |
50 Fgtk_signal_connect (build_gtk_object (object), | |
51 intern (signal_name), | |
52 func, | |
53 lisp_data, | |
54 connect_object ? Qt : Qnil, | |
55 after ? Qt : Qnil); | |
56 } | |
57 | |
58 /* This differs from lisp/subr.el (functionp) definition by allowing | |
59 ** symbol names that may not necessarily be fboundp yet. | |
60 */ | |
61 static int __almost_functionp (Lisp_Object obj) | |
62 { | |
63 return (SYMBOLP (obj) || | |
64 SUBRP (obj) || | |
65 COMPILED_FUNCTIONP (obj) || | |
66 EQ (Fcar_safe (obj), Qlambda)); | |
67 } | |
68 | |
69 DEFUN ("glade-xml-signal-connect", Fglade_xml_signal_connect, 3, 3, 0, /* | |
70 Connect a glade handler. | |
71 */ | |
72 (xml, handler_name, func)) | |
73 { | |
74 CHECK_GTK_OBJECT (xml); | |
75 CHECK_STRING (handler_name); | |
76 | |
77 if (!__almost_functionp (func)) | |
78 { | |
79 func = wrong_type_argument (intern ("functionp"), func); | |
80 } | |
81 | |
82 glade_xml_signal_connect_full (GLADE_XML (XGTK_OBJECT (xml)->object), | |
2054 | 83 (char*) XSTRING_DATA (handler_name), |
462 | 84 connector, LISP_TO_VOID (func)); |
85 return (Qt); | |
86 } | |
87 | |
88 DEFUN ("glade-xml-signal-autoconnect", Fglade_xml_signal_autoconnect, 1, 1, 0, /* | |
89 Connect all glade handlers. | |
90 */ | |
91 (xml)) | |
92 { | |
93 CHECK_GTK_OBJECT (xml); | |
94 | |
95 glade_xml_signal_autoconnect_full (GLADE_XML (XGTK_OBJECT (xml)->object), | |
96 connector, LISP_TO_VOID (Qnil)); | |
97 return (Qt); | |
98 } | |
99 | |
100 DEFUN ("glade-xml-textdomain", Fglade_xml_textdomain, 1, 1, 0, /* | |
101 Return the textdomain of a GladeXML object. | |
102 */ | |
103 (xml)) | |
104 { | |
105 gchar *the_domain = NULL; | |
106 | |
107 CHECK_GTK_OBJECT (xml); | |
108 | |
109 if (!GLADE_IS_XML (XGTK_OBJECT (xml)->object)) | |
110 { | |
563 | 111 wtaerror ("Object is not a GladeXML type.", xml); |
462 | 112 } |
113 | |
114 #ifdef LIBGLADE_XML_TXTDOMAIN | |
115 the_domain = GLADE_XML (XGTK_OBJECT (xml)->object)->txtdomain; | |
116 #else | |
117 the_domain = GLADE_XML (XGTK_OBJECT (xml)->object)->textdomain; | |
118 #endif | |
119 return (build_string (the_domain)); | |
120 } | |
121 | |
122 void syms_of_glade (void) | |
123 { | |
124 DEFSUBR (Fglade_xml_signal_connect); | |
125 DEFSUBR (Fglade_xml_signal_autoconnect); | |
126 DEFSUBR (Fglade_xml_textdomain); | |
127 } | |
128 | |
129 void vars_of_glade (void) | |
130 { | |
131 Fprovide (intern ("glade")); | |
132 } | |
133 | |
134 #else /* !(HAVE_GLADE_H || HAVE_GLADE_GLADE_H) */ | |
135 #define syms_of_glade() | |
136 #define vars_of_glade() | |
137 #endif |