Conventions

There are a number of conventions users are expected to follow when creating new types which are to be exported in a header file:

The implementation of these macros is pretty straightforward: a number of simple-to-use macros are provided in gtype.h. For the example we used above, we would write the following trivial code to declare the macros:

1
2
#define VIEWER_TYPE_FILE viewer_file_get_type ()
G_DECLARE_FINAL_TYPE (ViewerFile, viewer_file, VIEWER, FILE, GObject)

Unless your code has special requirements, you can use the G_DEFINE_TYPE macro to define a class:

1
G_DEFINE_TYPE (ViewerFile, viewer_file, G_TYPE_OBJECT)

Otherwise, the viewer_file_get_type function must be implemented manually:

1
2
3
4
5
6
7
8
9
10
11
12
13
GType viewer_file_get_type (void)
{
  static GType type = 0;
  if (type == 0) {
    const GTypeInfo info = {
      /* You fill this structure. */
    };
    type = g_type_register_static (G_TYPE_OBJECT,
                                   "ViewerFile",
                                   &info, 0);
  }
  return type;
}