/* funky-foo-bar.c */

/* insert (c)/licensing information) */

#include "funky-foo-bar.h"
/* include other impl specific header files */

/* 'private'/'protected' functions */
static void funky_foo_bar_class_init (FunkyFooBarClass *klass);
static void funky_foo_bar_init       (FunkyFooBar *obj);
static void funky_foo_bar_finalize   (GObject *obj);
/* list my signals  */
enum {
	/* MY_SIGNAL_1, */
	/* MY_SIGNAL_2, */
	LAST_SIGNAL
};

typedef struct _FunkyFooBarPrivate FunkyFooBarPrivate;
struct _FunkyFooBarPrivate {
	/* my private members go here, eg. */
	/* gboolean frobnicate_mode; */
};
#define FUNKY_FOO_BAR_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                           FUNKY_TYPE_FOO_BAR, \
                                           FunkyFooBarPrivate))
/* globals */
static GtkWidgetClass *parent_class = NULL;

/* uncomment the following if you have defined any signals */
/* static guint signals[LAST_SIGNAL] = {0}; */

GType
funky_foo_bar_get_type (void)
{
	static GType my_type = 0;
	if (!my_type) {
		static const GTypeInfo my_info = {
			sizeof(FunkyFooBarClass),
			NULL,		/* base init */
			NULL,		/* base finalize */
			(GClassInitFunc) funky_foo_bar_class_init,
			NULL,		/* class finalize */
			NULL,		/* class data */
			sizeof(FunkyFooBar),
			1,		/* n_preallocs */
			(GInstanceInitFunc) funky_foo_bar_init,
			NULL
		};
		my_type = g_type_register_static (GTK_TYPE_WIDGET,
		                                  "FunkyFooBar",
		                                  &my_info, 0);
	}
	return my_type;
}

static void
funky_foo_bar_class_init (FunkyFooBarClass *klass)
{
	GObjectClass *gobject_class;
	gobject_class = (GObjectClass*) klass;

	parent_class            = g_type_class_peek_parent (klass);
	gobject_class->finalize = funky_foo_bar_finalize;

	g_type_class_add_private (gobject_class, sizeof(FunkyFooBarPrivate));

	/* signal definitions go here, e.g.: */
/* 	signals[MY_SIGNAL_1] = */
/* 		g_signal_new ("my_signal_1",....); */
/* 	signals[MY_SIGNAL_2] = */
/* 		g_signal_new ("my_signal_2",....); */
/* 	etc. */
}

static void
funky_foo_bar_init (FunkyFooBar *obj)
{
/* uncomment the following if you init any of the private data */
/* 	FunkyFooBarPrivate *priv = FUNKY_FOO_BAR_GET_PRIVATE(obj); */

/* 	initialize this object, eg.: */
/* 	priv->frobnicate_mode = FALSE; */
}

static void
funky_foo_bar_finalize (GObject *obj)
{
/* 	free/unref instance resources here */
	G_OBJECT_CLASS(parent_class)->finalize (obj);
}

GtkWidget*
funky_foo_bar_new (void)
{
	return GTK_WIDGET(g_object_new(FUNKY_TYPE_FOO_BAR, NULL));
}

/* insert many other interesting function implementations */
/* such as funky_foo_bar_do_something, or funky_foo_bar_has_foo */

