Skip to content

Instantly share code, notes, and snippets.

@eiiches
Created August 9, 2012 16:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save eiiches/3305701 to your computer and use it in GitHub Desktop.
Save eiiches/3305701 to your computer and use it in GitHub Desktop.
Neocomplcache snippet for extending gobject.
snippet gobject
/* class: ${1:CAPITAL_CASE}, ${2:CamelCase}, ${3:lower_case}, ${4:simple_name} */
/* base: ${5:G_TYPE_OBJECT}, ${6:GObject} */
/* prefix: ${7:EGG} */
/* ===== Header ===== */
#ifndef _$1_H_
#define _$1_H_
#include <glib.h>
#include <glib-object.h>
/* {{{ $2 */
typedef struct _$2 $2;
typedef struct _$2Class $2Class;
struct _$2
{
$6 base;
/* TODO: add properties */
};
struct _$2Class
{
$6Class base;
/* TODO: add signals */
};
#define $7_TYPE_$1 ($3_get_type())
#define $7_$1(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), $7_TYPE_$1, $2))
#define $7_$1_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST ((obj), $7_TYPE_$1, $2Class))
#define $7_IS_$1(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), $7_TYPE_$1))
#define $7_IS_$1_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE ((obj), $7_TYPE_$1))
#define $7_$1_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), $7_TYPE_$1, $2Class))
extern GType
$3_get_type();
/* }}} */
extern $2 *
$3_new(${8:Parameters});
#endif /* _$1_H_ */
/* ====== Body ====== */
#include <glib.h>
#include <${9:headername}.h>
/* {{{ $2 */
typedef struct _Private Private;
#define PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), $7_TYPE_$1, Private))
static void $3_finalize(GObject *object);
static void $3_class_init($2Class *klass);
static void $3_init($2 *manager);
struct _Private
{
/* TODO: add private variables */
int dummy;
};
enum
{
PROPERTY_INVALID,
/* TODO: add properties */
PROPERTY_LENGTH
};
enum
{
/* TODO: add signals */
SIGNAL_LENGTH
};
static guint $3_signals[SIGNAL_LENGTH] = {0};
G_DEFINE_TYPE($2, $3, $5);
static void
$3_set_property(GObject *object,
guint prop_id,
const GValue *value,
GParamSpec *pspec)
{
$2 *$4 = EGG_$1(object);
switch (prop_id)
{
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
}
}
static void
$3_get_property(GObject *object,
guint prop_id,
GValue *value,
GParamSpec *pspec)
{
$2 *$4 = EGG_$1(object);
switch (prop_id)
{
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec);
}
}
static void
$3_class_init($2Class *klass)
{
g_type_class_add_private(G_OBJECT_CLASS(klass), sizeof(Private));
/* TODO: signal setup */
/* TODO: install properties */
/* override gobject */
G_OBJECT_CLASS(klass)->finalize = $3_finalize;
G_OBJECT_CLASS(klass)->set_property = $3_set_property;
G_OBJECT_CLASS(klass)->get_property = $3_get_property;
/*
g_object_class_install_property(G_OBJECT_CLASS(klass),
PROPERTY_ID,
g_param_spec_boolean("name",
"nick",
"blurb",
DEFAULT,
G_PARAM_READWRITE));
*/
}
static void
$3_finalize(GObject *gobject)
{
/* TODO: finalize */
}
static void
$3_init($2 *$4)
{
/* TODO: instance initizalization */
}
/* }}} */
$2 *
$3_new($8)
{
$2 *$4 = g_object_new($7_TYPE_$1, NULL);
/* TODO: object setup */
return $4;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment