3 ** Description: Interface to `libglade' for SXEmacs/GTK
5 ** Created by: William M. Perry <wmperry@gnu.org>
7 ** Copyright (C) 1999 John Harper <john@dcs.warwick.ac.uk>
8 ** Copyright (c) 2000 Free Software Foundation
12 #if defined(HAVE_GLADE_H) || defined(HAVE_GLADE_GLADE_H)
14 /* For COMPILED_FUNCTIONP */
17 #ifdef HAVE_GLADE_GLADE_H
18 #include <glade/glade.h>
25 /* This is based on the code from rep-gtk 0.11 in libglade-support.c */
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)
33 Lisp_Object lisp_data = Qnil;
35 VOID_TO_LISP(func, user_data);
38 /* Look for a lisp function called HANDLER_NAME */
39 func = intern(handler_name);
42 if (signal_data && signal_data[0]) {
43 lisp_data = Feval(Fread(build_string(signal_data)));
46 /* obj, name, func, cb_data, object_signal, after_p */
47 Fgtk_signal_connect(build_gtk_object(object),
51 connect_object ? Qt : Qnil, after ? Qt : Qnil);
54 /* This differs from lisp/subr.el (functionp) definition by allowing
55 ** symbol names that may not necessarily be fboundp yet.
57 static int __almost_functionp(Lisp_Object obj)
59 return (SYMBOLP(obj) ||
61 COMPILED_FUNCTIONP(obj) || EQ(Fcar_safe(obj), Qlambda));
64 DEFUN("glade-xml-signal-connect", Fglade_xml_signal_connect, 3, 3, 0, /*
65 Connect a glade handler.
67 (xml, handler_name, func))
69 CHECK_GTK_OBJECT(xml);
70 CHECK_STRING(handler_name);
72 if (!__almost_functionp(func)) {
73 func = wrong_type_argument(intern("functionp"), func);
76 glade_xml_signal_connect_full(GLADE_XML(XGTK_OBJECT(xml)->object),
77 XSTRING_DATA(handler_name),
78 connector, LISP_TO_VOID(func));
82 DEFUN("glade-xml-signal-autoconnect", Fglade_xml_signal_autoconnect, 1, 1, 0, /*
83 Connect all glade handlers.
87 CHECK_GTK_OBJECT(xml);
89 glade_xml_signal_autoconnect_full(GLADE_XML(XGTK_OBJECT(xml)->object),
90 connector, LISP_TO_VOID(Qnil));
94 DEFUN("glade-xml-textdomain", Fglade_xml_textdomain, 1, 1, 0, /*
95 Return the textdomain of a GladeXML object.
99 gchar *the_domain = NULL;
101 CHECK_GTK_OBJECT(xml);
103 if (!GLADE_IS_XML(XGTK_OBJECT(xml)->object)) {
104 signal_simple_error("Object is not a GladeXML type.", xml);
106 #ifdef LIBGLADE_XML_TXTDOMAIN
107 the_domain = GLADE_XML(XGTK_OBJECT(xml)->object)->txtdomain;
109 the_domain = GLADE_XML(XGTK_OBJECT(xml)->object)->textdomain;
111 return (build_string(the_domain));
114 void syms_of_glade(void)
116 DEFSUBR(Fglade_xml_signal_connect);
117 DEFSUBR(Fglade_xml_signal_autoconnect);
118 DEFSUBR(Fglade_xml_textdomain);
121 void vars_of_glade(void)
123 Fprovide(intern("glade"));
126 #else /* !(HAVE_GLADE_H || HAVE_GLADE_GLADE_H) */
127 #define syms_of_glade()
128 #define vars_of_glade()