update.
[chise/xemacs-chise.git.1] / src / ui-gtk.h
1 /* ui-gtk.h
2 **
3 ** Description: 
4 **
5 ** Created by: William M. Perry
6 ** Copyright (c) 2000 Aventail Corporation
7 **
8 */
9
10 #ifndef __UI_GTK_H__
11 #define __UI_GTK_H__
12
13 /* Encapsulate a foreign function call */
14 #include <gtk/gtk.h>
15 #include "sysdll.h"
16 #include "lrecord.h"
17
18 typedef void (*ffi_actual_function) (void);
19 typedef void (*ffi_marshalling_function) (ffi_actual_function, GtkArg *);
20
21 #define MAX_GTK_ARGS 100
22
23 typedef struct {
24   struct lcrecord_header header;
25   GtkType return_type;
26   GtkType args[MAX_GTK_ARGS];
27   gint n_args;
28   Lisp_Object function_name;
29   dll_func function_ptr;
30   ffi_marshalling_function marshal;
31 } emacs_ffi_data;
32
33 DECLARE_LRECORD (emacs_ffi, emacs_ffi_data);
34
35 #define XFFI(x) XRECORD (x, emacs_ffi, emacs_ffi_data)
36 #define XSETFFI(x,p) XSETRECORD (x, p, emacs_ffi)
37 #define FFIP(x) RECORDP (x, emacs_ffi)
38 #define CHECK_FFI(x) CHECK_RECORD (x, emacs_ffi)
39
40 /* Encapsulate a GtkObject in Lisp */
41 typedef struct {
42   struct lcrecord_header header;
43   gboolean alive_p;
44   GtkObject *object;
45   Lisp_Object plist;
46 } emacs_gtk_object_data;
47
48 DECLARE_LRECORD (emacs_gtk_object, emacs_gtk_object_data);
49
50 #define XGTK_OBJECT(x) XRECORD (x, emacs_gtk_object, emacs_gtk_object_data)
51 #define XSETGTK_OBJECT(x,p) XSETRECORD (x, p, emacs_gtk_object)
52 #define GTK_OBJECTP(x) RECORDP (x, emacs_gtk_object)
53 #define CHECK_GTK_OBJECT(x) CHECK_RECORD (x, emacs_gtk_object)
54
55 extern Lisp_Object build_gtk_object (GtkObject *obj);
56
57 /* Encapsulate a GTK_TYPE_BOXED in lisp */
58 typedef struct {
59   struct lcrecord_header header;
60   GtkType object_type;
61   void *object;
62 } emacs_gtk_boxed_data;
63
64 DECLARE_LRECORD (emacs_gtk_boxed, emacs_gtk_boxed_data);
65
66 #define XGTK_BOXED(x) XRECORD (x, emacs_gtk_boxed, emacs_gtk_boxed_data)
67 #define XSETGTK_BOXED(x,p) XSETRECORD (x, p, emacs_gtk_boxed)
68 #define GTK_BOXEDP(x) RECORDP (x, emacs_gtk_boxed)
69 #define CHECK_GTK_BOXED(x) CHECK_RECORD (x, emacs_gtk_boxed)
70
71 #endif /* __UI_GTK_H__ */