view src/glade.c @ 4451:e214ff9f9507

Use char-tables, not vectors, to instantiate the display table specifiers. 2007-07-21 Aidan Kehoe <kehoea@parhasard.net> * mule/cyril-util.el: * mule/cyril-util.el (cyrillic-encode-koi8-r-char): Removed. * mule/cyril-util.el (cyrillic-encode-alternativnyj-char): Removed. No-one uses these functions in google.com/codesearch, GNU have a comment doubting their utility, and their implementation is trivial. * mule/cyril-util.el (cyrillic-language-alist): Reformatted. * mule/cyril-util.el (standard-display-table)): Removed. It wasn't used anyway. * mule/cyril-util.el (standard-display-cyrillic-translit): Rewrite it to work with character tables as display tables, and not to abort with an error. 2007-07-21 Aidan Kehoe <kehoea@parhasard.net> * disp-table.el: * disp-table.el (make-display-table): Moved earlier in the file in a weak attempt at making syncing with GNU easier. * disp-table.el (frob-display-table): Autoload it, accept TAG-SET, for editing specifiers. * disp-table.el (describe-display-table): Have it handle character sets. * disp-table.el (standard-display-8bit-1): * disp-table.el (standard-display-8bit): * disp-table.el (standard-display-default-1): * disp-table.el (standard-display-ascii): * disp-table.el (standard-display-g1): * disp-table.el (standard-display-graphic): * disp-table.el (standard-display-underline): * disp-table.el (standard-display-european): Rework them all to use put-char-table, remove-char-table instead of aset. Limit standard-display-g1, standard-display-graphic to TTYs; have standard-display-underline work on X11 too. * font.el (font-caps-display-table): Use put-char-table instead of aset when editing a display table. * x-init.el: * x-init.el (tab): Create the initial display table as a char-table, not a vector.
author Aidan Kehoe <kehoea@parhasard.net>
date Mon, 24 Dec 2007 20:22:08 +0100
parents 91d4c8c65a0f
children 8f1ee2d15784
line wrap: on
line source

/* glade.c
**
** Description: Interface to `libglade' for XEmacs/GTK
**
** Created by: William M. Perry <wmperry@gnu.org>
**
** Copyright (C) 1999 John Harper <john@dcs.warwick.ac.uk>
** Copyright (c) 2000 Free Software Foundation
**
*/

#if defined(HAVE_GLADE_H) || defined(HAVE_GLADE_GLADE_H)

/* For COMPILED_FUNCTIONP */
#include "bytecode.h"

#ifdef HAVE_GLADE_GLADE_H
#include <glade/glade.h>
#endif

#ifdef HAVE_GLADE_H
#include <glade.h>
#endif

/* This is based on the code from rep-gtk 0.11 in libglade-support.c */

static void
connector (const gchar *handler_name, GtkObject *object,
	   const gchar *signal_name, const gchar *signal_data,
	   GtkObject *connect_object, gboolean after, gpointer user_data)
{
  Lisp_Object func;
  Lisp_Object lisp_data = Qnil;

  func = VOID_TO_LISP (user_data);

  if (NILP (func))
    {
      /* Look for a lisp function called HANDLER_NAME */
      func = intern (handler_name);
    }

  if (signal_data && signal_data[0])
    {
      lisp_data = Feval (Fread (build_string (signal_data)));
    }

  /* obj, name, func, cb_data, object_signal, after_p */
  Fgtk_signal_connect (build_gtk_object (object),
		       intern (signal_name),
		       func,
		       lisp_data,
		       connect_object ? Qt : Qnil,
		       after ? Qt : Qnil);
}

/* This differs from lisp/subr.el (functionp) definition by allowing
** symbol names that may not necessarily be fboundp yet.
*/
static int __almost_functionp (Lisp_Object obj)
{
  return (SYMBOLP (obj) ||
	  SUBRP (obj) ||
	  COMPILED_FUNCTIONP (obj) ||
	  EQ (Fcar_safe (obj), Qlambda));
}

DEFUN ("glade-xml-signal-connect", Fglade_xml_signal_connect, 3, 3, 0, /*
Connect a glade handler.
*/
       (xml, handler_name, func))
{
  CHECK_GTK_OBJECT (xml);
  CHECK_STRING (handler_name);

  if (!__almost_functionp (func))
    {
      func = wrong_type_argument (intern ("functionp"), func);
    }

  glade_xml_signal_connect_full (GLADE_XML (XGTK_OBJECT (xml)->object),
				 (char*) XSTRING_DATA (handler_name),
				 connector, LISP_TO_VOID (func));
  return (Qt);
}

DEFUN ("glade-xml-signal-autoconnect", Fglade_xml_signal_autoconnect, 1, 1, 0, /*
Connect all glade handlers.
*/
       (xml))
{
  CHECK_GTK_OBJECT (xml);

  glade_xml_signal_autoconnect_full (GLADE_XML (XGTK_OBJECT (xml)->object),
				     connector, LISP_TO_VOID (Qnil));
  return (Qt);
}

DEFUN ("glade-xml-textdomain", Fglade_xml_textdomain, 1, 1, 0, /*
Return the textdomain of a GladeXML object.
*/
       (xml))
{
  gchar *the_domain = NULL;

  CHECK_GTK_OBJECT (xml);

  if (!GLADE_IS_XML (XGTK_OBJECT (xml)->object))
    {
      wtaerror ("Object is not a GladeXML type.", xml);
    }

#ifdef LIBGLADE_XML_TXTDOMAIN
  the_domain = GLADE_XML (XGTK_OBJECT (xml)->object)->txtdomain;
#else
  the_domain = GLADE_XML (XGTK_OBJECT (xml)->object)->textdomain;
#endif  
  return (build_string (the_domain));
}

void syms_of_glade (void)
{
  DEFSUBR (Fglade_xml_signal_connect);
  DEFSUBR (Fglade_xml_signal_autoconnect);
  DEFSUBR (Fglade_xml_textdomain);
}

void vars_of_glade (void)
{
  Fprovide (intern ("glade"));
}

#else /* !(HAVE_GLADE_H || HAVE_GLADE_GLADE_H) */
#define syms_of_glade()
#define vars_of_glade()
#endif