This file is indexed.

/usr/lib/gauche-0.9/site/include/gauche-gtk.h is in gauche-gtk 0.6~pre1+git20121223-1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
/*
 * gauche-gtk.h - Gauche+Gtk extension
 *
 *  Copyright(C) 2002-2004 by Shiro Kawai (shiro@acm.org)
 *
 *  Permission to use, copy, modify, distribute this software and
 *  accompanying documentation for any purpose is hereby granted,
 *  provided that existing copyright notices are retained in all
 *  copies and that this notice is included verbatim in all
 *  distributions.
 *  This software is provided as is, without express or implied
 *  warranty.  In no circumstances the author(s) shall be liable
 *  for any damages arising out of the use of this software.
 *
 *  $Id: gauche-gtk.h,v 1.44 2007/01/13 01:36:31 maruska Exp $
 */

#ifndef GAUCHE_GTK_H
#define GAUCHE_GTK_H

#include <gauche.h>
#include <gauche/extend.h>
#include <gauche/class.h>
#include <gauche/uvector.h>

#include <gtk/gtk.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf/gdk-pixdata.h>

/* This should go to Gauche core, but for now ...*/
#ifndef SCM_RETURN2
#define SCM_RETURN2(a, b)  SCM_RETURN(Scm_Values2(a, b))
#endif
#ifndef SCM_RETURN3
#define SCM_RETURN3(a, b, c)  SCM_RETURN(Scm_Values3(a, b, c))
#endif
#ifndef SCM_RETURN4
#define SCM_RETURN4(a, b, c, d)  SCM_RETURN(Scm_Values4(a, b, c, d))
#endif
#ifndef SCM_RETURN5
#define SCM_RETURN5(a, b, c, d, e)  SCM_RETURN(Scm_Values5(a, b, c, d, e))
#endif

SCM_DECL_BEGIN

/*
 * Generally useful macros
 */

#define CONST_GCHAR_PTR(string) \
    ((const gchar*)Scm_GetStringConst(SCM_STRING(string)))
#define CONST_CHAR_PTR(string) \
    ((const char*)Scm_GetStringConst(SCM_STRING(string)))
#define SCM_STRING_OR_NULL_P(obj) \
    (SCM_FALSEP(obj)||SCM_STRINGP(obj))
#define CONST_GCHAR_PTR_NULLABLE(string) \
    (SCM_FALSEP(string)?NULL:CONST_GCHAR_PTR(string))
#define SCM_MAKE_STR_COPYING_SAFELY(char_ptr) \
    ((char_ptr)?SCM_MAKE_STR_COPYING(char_ptr):SCM_FALSE)

/* box returned allocated gchar* string */
#define GCHAR_PTR_BOX(string) Scm_GtkGcharPtrBox(string)
extern ScmObj Scm_GtkGcharPtrBox(gchar *s);

/* This should go to Gauche core, but for now ...*/
#ifndef GAUCHE_MAJOR_VERSION
typedef void (*ScmFinalizerProc)(ScmObj z, void *data);
extern void Scm_RegisterFinalizer(ScmObj z, ScmFinalizerProc finalizer,
                                  void *data);
#endif

/*
 * GObject <-> ScmObj mapping
 */

/* Scheme view of GObject. 
   See gauche-gtk.c for discussion on memory management. */
typedef struct ScmGObjectRec {
    SCM_INSTANCE_HEADER;
    GObject *gobject;           /* can be NULL if explicitly unreferenced */
    ScmObj data;                /* emulate g_object_{get|set}_data */
     /* mmc! */
    int ref_count;
    gulong destroy_handler;     /* see `make_gobject' */
} ScmGObject;

SCM_CLASS_DECL(Scm_GObjectClass);
#define SCM_CLASS_GOBJECT    (&Scm_GObjectClass)
#define SCM_GOBJECT(obj)     ((ScmGObject*)(obj))
#define SCM_GOBJECT_P(obj)   Scm_TypeP(obj, SCM_CLASS_GOBJECT)

#define SCM_GOBJECT_OBJECT(obj)  G_OBJECT(Scm_GObjectCheck(SCM_GOBJECT(obj)))

#define SCM_GOBJECT_UNBOX(caster, obj) \
    (SCM_FALSEP(obj)?NULL:caster(Scm_GObjectCheck(SCM_GOBJECT(obj))))
#define SCM_GOBJECT_BOX(obj)  Scm_MakeGObject(obj)

/* Register the association of GType and ScmClass; must be called in init */
extern void      Scm_GtkRegisterClass(GType type, ScmClass *class);

/* mmc: fixme: why do i export it? Isn't it solved by the _after patch?*/
/* extern*/
/* static int gobject_compare(ScmObj x, ScmObj y, int equalp); */


/* GType -> ScmClass; may return NULL */
extern ScmClass *Scm_GtkTypeToScmClass(GType type);

/* ScmClass -> GType; may return G_TYPE_INVALID */
extern GType Scm_ClassToGtkType(ScmClass *k);
extern int   Scm_ClassListToGtkTypeList(ScmObj klasses, GType *g);

/* mmc: */
ScmObj Scm_GList_to_list(GList *list);

extern int SCM_STRING_LIST_P(ScmObj x);
extern gchar** SCM_STRING_LIST(ScmObj x);
extern ScmObj SCM_MAKE_STRING_LIST(gchar** cstring);

/* GValue <-> ScmObj conversion */
extern ScmObj  Scm_UnboxGValue(const GValue *gv);
extern void    Scm_BoxGValue(GValue *gv, ScmObj sv);
extern GValue *Scm_ObjToGValue(ScmObj obj, GValue *gv);
extern GObject *Scm_GObjectCheck(ScmGObject *obj);

extern ScmClass *Scm_GObjectCPL[];
extern ScmObj    Scm_MakeGObject(void *obj);
extern void      Scm_GtkProtect(ScmObj closure);
extern void      Scm_GtkUnprotect(gpointer data);
extern void      Scm_GObjectUnref(ScmGObject *gobj);
extern ScmObj    Scm_GObjectGetData(ScmGObject *gobj, ScmObj key, ScmObj fallback);
extern ScmObj    Scm_GObjectSetData(ScmGObject *gobj, ScmObj key, ScmObj data);
extern ScmObj    Scm_GtkObjectAllocate(ScmClass *klass, ScmObj initargs);


GClosure *Scm_MakeGClosure(ScmProcedure *procedure);
GClosure *Scm_MakeGClosure_mmc(ScmProcedure *procedure, ScmObj name);

extern gboolean  Scm_GtkCallThunk(gpointer data);
extern ScmObj    Scm_GtkApply(ScmObj proc, ScmObj args);

extern void universal_cell_function(GtkTreeViewColumn *col,                                               
                                    GtkCellRenderer   *renderer,                                          
                                    GtkTreeModel      *model,                                             
                                    GtkTreeIter       *iter,                                              
                                    gpointer           user_data);



/*
 * Unix signal handling hook (see the comments in gauche-gtk.c)
 */

extern void Scm_GtkInitUnixSignalHook(void);

/*
 * GTimer
 */

typedef struct ScmGTimerRec {
    SCM_HEADER;
    GTimer *data;
} ScmGTimer;

SCM_CLASS_DECL(Scm_GTimerClass);
#define SCM_CLASS_GTIMER     (&Scm_GTimerClass)
#define SCM_GTIMER_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_GTIMER)

#define SCM_GTIMER(obj)      (((ScmGTimer*)(obj))->data)
#define SCM_MAKE_GTIMER(obj) Scm_MakeGTimer(obj)

extern ScmObj Scm_MakeGTimer(GTimer *data);

/*
 * Pango auxiliary structures
 */

typedef struct ScmPangoLayoutIterRec {
    SCM_HEADER;
    PangoLayoutIter *iter;
} ScmPangoLayoutIter;

SCM_CLASS_DECL(Scm_PangoLayoutIterClass);
#define SCM_CLASS_PANGO_LAYOUT_ITER  (&Scm_PangoLayoutIterClass)
#define SCM_PANGO_LAYOUT_ITER_P(obj) SCM_XTYPEP(obj, SCM_CLASS_PANGO_LAYOUT_ITER)

#define SCM_PANGO_LAYOUT_ITER(obj)   (((ScmPangoLayoutIter*)(obj))->iter)
#define SCM_MAKE_PANGO_LAYOUT_ITER(obj) Scm_MakePangoLayoutIter(obj)

extern ScmObj Scm_MakePangoLayoutIter(PangoLayoutIter *iter);

/*
 * GdkAtom <-> ScmGdkAtom
 */

typedef struct ScmGdkAtomRec {
    SCM_HEADER;
    GdkAtom atom;
} ScmGdkAtom;

SCM_CLASS_DECL(Scm_GdkAtomClass);
#define SCM_CLASS_GDK_ATOM    (&Scm_GdkAtomClass)
#define SCM_GDK_ATOM_P(obj)   SCM_XTYPEP(obj, SCM_CLASS_GDK_ATOM)

#define SCM_GDK_ATOM(obj)     (((ScmGdkAtom*)(obj))->atom)
#define SCM_MAKE_GDK_ATOM(obj) Scm_MakeGdkAtom(obj)

extern ScmObj Scm_MakeGdkAtom(GdkAtom atom);

/*
 * GdkEvent is declared as union.
 */

typedef struct ScmGdkEventRec {
    SCM_HEADER;
    GdkEvent *data;             /* memory belongs to Scheme */
} ScmGdkEvent;

SCM_CLASS_DECL(Scm_GdkEventClass);
#define SCM_CLASS_GDK_EVENT     (&Scm_GdkEventClass)
#define SCM_GDK_EVENT_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_GDK_EVENT)
#define SCM_GDK_EVENT(obj)      (((ScmGdkEvent*)(obj))->data)
#define SCM_MAKE_GDK_EVENT(obj) Scm_MakeGdkEvent(obj)

extern ScmObj Scm_MakeGdkEvent(GdkEvent *r);

/*
 * GList, GSList <-> Scheme list
 */

extern ScmObj Scm_GoListToList(GList *list);
extern ScmObj Scm_GoSListToList(GSList *list);

extern GList  *Scm_ListToGList(ScmObj list);
extern GSList *Scm_ListToGSList(ScmObj list);

/*
 * String list -> C String array
 */
extern const char **Scm_StringListToStringArray(ScmObj list);

/*
 * property utility
 */
guchar* Scm_GdkPropertyDataFromUVector(ScmObj uvec,
                                       int *format,     /* out */
                                       int *nelements); /* out */

/*
 * Arrays of primitive types
 */

typedef struct ScmGdkPointVectorRec {
    SCM_HEADER;
    int size;
    GdkPoint *elements;
} ScmGdkPointVector;

SCM_CLASS_DECL(Scm_GdkPointVectorClass);
#define SCM_CLASS_GDK_POINT_VECTOR     (&Scm_GdkPointVectorClass)
#define SCM_GDK_POINT_VECTOR_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_GDK_POINT_VECTOR)
#define SCM_GDK_POINT_VECTOR(obj)      ((ScmGdkPointVector*)(obj))

extern ScmObj Scm_MakeGdkPointVector(GdkPoint *pts, int npts);

typedef struct ScmGdkSegmentVectorRec {
    SCM_HEADER;
    int size;
    GdkSegment *elements;
} ScmGdkSegmentVector;

SCM_CLASS_DECL(Scm_GdkSegmentVectorClass);
#define SCM_CLASS_GDK_SEGMENT_VECTOR     (&Scm_GdkSegmentVectorClass)
#define SCM_GDK_SEGMENT_VECTOR_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_GDK_SEGMENT_VECTOR)
#define SCM_GDK_SEGMENT_VECTOR(obj)      ((ScmGdkSegmentVector*)(obj))

extern ScmObj Scm_MakeGdkSegmentVector(GdkSegment *segs, int nsegs);

typedef struct ScmGdkRectangleVectorRec {
    SCM_HEADER;
    int size;
    GdkRectangle *elements;
} ScmGdkRectangleVector;

SCM_CLASS_DECL(Scm_GdkRectangleVectorClass);
#define SCM_CLASS_GDK_RECTANGLE_VECTOR     (&Scm_GdkRectangleVectorClass)
#define SCM_GDK_RECTANGLE_VECTOR_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_GDK_RECTANGLE_VECTOR)
#define SCM_GDK_RECTANGLE_VECTOR(obj)      ((ScmGdkRectangleVector*)(obj))

extern ScmObj Scm_MakeGdkRectangleVector(GdkRectangle *rects, int nrects);

typedef struct ScmGdkColorVectorRec {
    SCM_HEADER;
    int size;
    GdkColor *elements;
} ScmGdkColorVector;

SCM_CLASS_DECL(Scm_GdkColorVectorClass);
#define SCM_CLASS_GDK_COLOR_VECTOR     (&Scm_GdkColorVectorClass)
#define SCM_GDK_COLOR_VECTOR_P(obj)    SCM_XTYPEP(obj, SCM_CLASS_GDK_COLOR_VECTOR)
#define SCM_GDK_COLOR_VECTOR(obj)      ((ScmGdkColorVector*)(obj))

extern ScmObj Scm_MakeGdkColorVector(GdkColor *colors, int ncolors);

/*
 * string-list <-> gchar** conversion
 */
extern gint   Scm_GtkStringsToGcharArrays(ScmObj list, gchar ***chars);
extern ScmObj Scm_GtkGcharArraysToStrings(gint count, gchar **chars);

#include "gtk-lib.h"

/*
 * ScmGtkRadioGroup - Scheme representation of the group of GtkRadio*
 */

/*
 * GtkRadioButton and GtkRadioMenuItem uses GSList to group them.
 * The list must be shared among all the group members.
 * We can get the group by gtk_radio_button_get_group etc., but it is
 * inherently a transient structure; when a member is added in front
 * of the list, the pointer to the old list doesn't reflect the entire
 * group (GTk internally updates the pointers of all group members
 * when the members of group change).  Furthermore, the returned
 * GSList may be deallocated anytime when the button pointed by the first
 * element is removed from the group.  Thus it is not appropriate
 * to expose the list directly to Scheme.
 * 
 * Scheme-level radio group keeps a pointer to one of the
 * member of the group.  Any radiobutton belongs to at most one
 * group, so logically they are equivalent.  When the button is
 * removed from the group, the Scheme radiobutton group object is
 * updated to point one of the rest members when there are any.
 */
typedef struct ScmGtkRadioGroupRec {
    SCM_HEADER;
    ScmObj radio;               /* GtkRadioButton or GtkRadioMenuItem or #f */
} ScmGtkRadioGroup;

SCM_CLASS_DECL(Scm_GtkRadioGroupClass);
#define SCM_CLASS_GTK_RADIO_GROUP  (&Scm_GtkRadioGroupClass)
#define SCM_GTK_RADIO_GROUP_P(obj) SCM_XTYPEP(obj, SCM_CLASS_GTK_RADIO_GROUP)
#define SCM_GTK_RADIO_GROUP(obj)   ((ScmGtkRadioGroup*)(obj))

extern ScmObj Scm_MakeGtkRadioGroup(GObject *radio);
extern ScmObj Scm_GtkRadioGroupToList(ScmGtkRadioGroup *group);
extern GSList *Scm_GtkRadioGroupGetGroup(ScmObj group);


/* mmc: gunichar: */
#define Scm_gunichar2char(x)  SCM_MAKE_CHAR(Scm_UcsToChar(x))
#define Scm_char2gunichar(x) Scm_CharToUcs(SCM_CHAR_VALUE(x))



/* Generated: */
typedef struct ScmGSignalQueryRec {
    SCM_HEADER;
    GSignalQuery *data;
    ScmString *name;
} ScmGSignalQuery;

SCM_CLASS_DECL(Scm_GSignalQuery_Class);
#define SCM_CLASS_G_SIGNAL_QUERY     (&Scm_GSignalQuery_Class)
#define SCM_G_SIGNAL_QUERY_P(obj)    (Scm_TypeP(obj, SCM_CLASS_G_SIGNAL_QUERY))
#define SCM_G_SIGNAL_QUERY(obj)      ((GSignalQuery*) (((ScmGSignalQuery*) obj)->data))
extern ScmObj Scm_Make_GSignalQuery(GSignalQuery *data);


extern int gtk_trace_references; /* fixme: gauche_gtk_ */
extern void dump_referenced_gobjects();


ScmObj Scm_g_signal_emit(ScmObj destination, int signal_id, int detail, ScmObj params);


void gauche_gdk_pixbuf_format_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx);



SCM_DECL_END
#endif /*GAUCHE_GTK_H*/