~ubuntu-branches/ubuntu/lucid/atk1.0/lucid

« back to all changes in this revision

Viewing changes to atk/atkutil.h

  • Committer: Bazaar Package Importer
  • Author(s): Pedro Fragoso
  • Date: 2008-01-14 16:25:56 UTC
  • mfrom: (1.2.16 upstream)
  • Revision ID: james.westby@ubuntu.com-20080114162556-f3dbeslu5w2hspoe
Tags: 1.21.5-0ubuntu1
* New upstream bugfix release (LP: #182900)
* Bump Standards-Version to 3.7.3
* Modify Maintainer value to match Debian-Maintainer-Field Spec

Show diffs side-by-side

added added

removed removed

Lines of Context:
239
239
 */
240
240
G_CONST_RETURN gchar *atk_get_version (void);
241
241
 
 
242
/* --- GType boilerplate --- */
 
243
/* convenience macros for atk type implementations, which for a type GtkGadgetAccessible will:
 
244
 * - prototype: static void     gtk_gadget_accessible_class_init (GtkGadgetClass *klass);
 
245
 * - prototype: static void     gtk_gadget_accessible_init       (GtkGadget      *self);
 
246
 * - define:    static gpointer gtk_gadget_accessible_parent_class = NULL;
 
247
 *   gtk_gadget_accessible_parent_class is initialized prior to calling gtk_gadget_class_init()
 
248
 * - implement: GType           gtk_gadget_accessible_get_type (void) { ... }
 
249
 * - support custom code in gtk_gadget_accessible_get_type() after the type is registered.
 
250
 *
 
251
 * macro arguments: TypeName, type_name, TYPE_PARENT, CODE
 
252
 * example: ATK_DEFINE_TYPE_WITH_CODE (GtkGadgetAccessible, gtk_gadget_accessible, GTK_TYPE_GADGET,
 
253
 *                                     G_IMPLEMENT_INTERFACE (ATK_TYPE_TABLE, gtk_gadget_accessible_table_iface_init))
 
254
 */
 
255
 
 
256
#define ATK_DEFINE_TYPE(TN, t_n, T_P)                          ATK_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, 0, {})
 
257
#define ATK_DEFINE_TYPE_WITH_CODE(TN, t_n, T_P, _C_)          _ATK_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, 0) {_C_;} _ATK_DEFINE_TYPE_EXTENDED_END()
 
258
#define ATK_DEFINE_ABSTRACT_TYPE(TN, t_n, T_P)                 ATK_DEFINE_TYPE_EXTENDED (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT, {})
 
259
#define ATK_DEFINE_ABSTRACT_TYPE_WITH_CODE(TN, t_n, T_P, _C_) _ATK_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, G_TYPE_FLAG_ABSTRACT) {_C_;} _ATK_DEFINE_TYPE_EXTENDED_END()
 
260
#define ATK_DEFINE_TYPE_EXTENDED(TN, t_n, T_P, _f_, _C_)      _ATK_DEFINE_TYPE_EXTENDED_BEGIN (TN, t_n, T_P, _f_) {_C_;} _ATK_DEFINE_TYPE_EXTENDED_END()
 
261
 
 
262
#define _ATK_DEFINE_TYPE_EXTENDED_BEGIN(TypeName, type_name, TYPE, flags) \
 
263
\
 
264
static void     type_name##_init              (TypeName        *self); \
 
265
static void     type_name##_class_init        (TypeName##Class *klass); \
 
266
static gpointer type_name##_parent_class = NULL; \
 
267
static void     type_name##_class_intern_init (gpointer klass) \
 
268
{ \
 
269
  type_name##_parent_class = g_type_class_peek_parent (klass); \
 
270
  type_name##_class_init ((TypeName##Class*) klass); \
 
271
} \
 
272
\
 
273
GType \
 
274
type_name##_get_type (void) \
 
275
{ \
 
276
  static volatile gsize g_define_type_id__volatile = 0; \
 
277
  if (g_once_init_enter (&g_define_type_id__volatile))  \
 
278
    { \
 
279
      AtkObjectFactory *factory; \
 
280
      GType derived_type; \
 
281
      GTypeQuery query; \
 
282
      GType derived_atk_type; \
 
283
      GType g_define_type_id; \
 
284
\
 
285
      /* Figure out the size of the class and instance we are deriving from */ \
 
286
      derived_type = g_type_parent (TYPE); \
 
287
      factory = atk_registry_get_factory (atk_get_default_registry (), \
 
288
                                          derived_type); \
 
289
      derived_atk_type = atk_object_factory_get_accessible_type (factory); \
 
290
      g_type_query (derived_atk_type, &query); \
 
291
\
 
292
      g_define_type_id = \
 
293
        g_type_register_static_simple (derived_atk_type, \
 
294
                                       g_intern_static_string (#TypeName), \
 
295
                                       query.class_size, \
 
296
                                       (GClassInitFunc) type_name##_class_intern_init, \
 
297
                                       query.instance_size, \
 
298
                                       (GInstanceInitFunc) type_name##_init, \
 
299
                                       (GTypeFlags) flags); \
 
300
      { /* custom code follows */
 
301
#define _ATK_DEFINE_TYPE_EXTENDED_END() \
 
302
        /* following custom code */     \
 
303
      }                                 \
 
304
      g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \
 
305
    }                                   \
 
306
  return g_define_type_id__volatile;    \
 
307
} /* closes type_name##_get_type() */
 
308
 
 
309
 
242
310
#ifdef __cplusplus
243
311
}
244
312
#endif /* __cplusplus */