* less boilerplate GObject code * fixes memory leaks in main function * drop unused deps Signed-off-by: Igor Gnatenko <i.gnatenko.brain@gmail.com>pull/234/head
parent
e6a868e533
commit
7b0dd7299c
6 changed files with 160 additions and 164 deletions
@ -1,94 +0,0 @@ |
||||
#include "golib.h" |
||||
#include <stdio.h> |
||||
|
||||
G_DEFINE_TYPE (MesonSample, meson_sample, G_TYPE_OBJECT) |
||||
|
||||
#define MESON_SAMPLE_GET_PRIVATE(o) \ |
||||
(G_TYPE_INSTANCE_GET_PRIVATE ((o), MESON_SAMPLE_TYPE, MesonSamplePrivate)) |
||||
|
||||
struct _MesonSamplePrivate { |
||||
gchar *msg; |
||||
}; |
||||
|
||||
enum { |
||||
PROP_0, |
||||
PROP_MSG, |
||||
N_PROPERTIES |
||||
}; |
||||
|
||||
static GParamSpec *obj_properties[N_PROPERTIES] = { NULL, }; |
||||
|
||||
static void meson_sample_init (MesonSample *object) |
||||
{ |
||||
MesonSamplePrivate *priv = MESON_SAMPLE_GET_PRIVATE (object); |
||||
priv->msg = NULL; |
||||
} |
||||
static void meson_sample_finalize (GObject *object) |
||||
{ |
||||
MesonSamplePrivate *priv = MESON_SAMPLE_GET_PRIVATE (object); |
||||
g_free (priv->msg); |
||||
G_OBJECT_CLASS (meson_sample_parent_class)->finalize (object); |
||||
} |
||||
|
||||
static void meson_sample_set_property (GObject *object, |
||||
guint property_id, |
||||
const GValue *value, |
||||
GParamSpec *pspec) { |
||||
MesonSamplePrivate *priv = MESON_SAMPLE_GET_PRIVATE (object); |
||||
switch (property_id) { |
||||
case PROP_MSG: |
||||
g_free (priv->msg); |
||||
priv->msg = g_value_dup_string (value); |
||||
break; |
||||
default: |
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
static void meson_sample_get_property (GObject *object, |
||||
guint property_id, |
||||
GValue *value, |
||||
GParamSpec *pspec) { |
||||
MesonSamplePrivate *priv = MESON_SAMPLE_GET_PRIVATE (object); |
||||
switch (property_id) { |
||||
case PROP_MSG: |
||||
g_value_set_string (value, priv->msg); |
||||
break; |
||||
default: |
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
static void meson_sample_class_init (MesonSampleClass *klass) { |
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass); |
||||
object_class->set_property = meson_sample_set_property; |
||||
object_class->get_property = meson_sample_get_property; |
||||
object_class->finalize = meson_sample_finalize; |
||||
|
||||
obj_properties[PROP_MSG] = |
||||
g_param_spec_string ("msg", |
||||
"Msg", |
||||
"The message to print.", |
||||
"propertytext", |
||||
G_PARAM_READWRITE | |
||||
G_PARAM_CONSTRUCT); |
||||
g_object_class_install_properties (object_class, |
||||
N_PROPERTIES, |
||||
obj_properties); |
||||
g_type_class_add_private (object_class, sizeof (MesonSamplePrivate)); |
||||
} |
||||
|
||||
MesonSample* meson_sample_new () { |
||||
MesonSample *sample; |
||||
sample = g_object_new(MESON_SAMPLE_TYPE, NULL); |
||||
return sample; |
||||
} |
||||
|
||||
void meson_sample_func (MesonSample *sample) { |
||||
MesonSamplePrivate *priv; |
||||
g_return_if_fail (sample != NULL); |
||||
priv = MESON_SAMPLE_GET_PRIVATE(sample); |
||||
printf("GObject introspection is working, %s!\n", priv->msg); |
||||
} |
@ -1,41 +0,0 @@ |
||||
#ifndef GOLIB_H |
||||
#define GOLIB_H |
||||
|
||||
#if !defined (MESON_TEST) |
||||
#error "MESON_TEST not defined." |
||||
#endif |
||||
|
||||
#include <glib.h> |
||||
#include <glib-object.h> |
||||
|
||||
#define MESON_SAMPLE_TYPE \ |
||||
(meson_sample_get_type()) |
||||
#define MESON_SAMPLE(o) \ |
||||
(G_TYPE_CHECK_INSTANCE_CAST ((o), MESON_SAMPLE_TYPE, MesonSample)) |
||||
#define MESON_SAMPLE_CLASS(c) \ |
||||
(G_TYPE_CHECK_CLASS_CAST ((c), MESON_SAMPLE_TYPE, MesonSampleClass)) |
||||
#define MESON_IS_SAMPLE(o) \ |
||||
(G_TYPE_CHECK_INSTANCE_TYPE ((o), MESON_SAMPLE_TYPE)) |
||||
#define MESON_IS_SAMPLE_CLASS(c) \ |
||||
(G_TYPE_CHECK_CLASS_TYPE ((c), MESON_SAMPLE_TYPE)) |
||||
#define MESON_SAMPLE_GET_CLASS(o) \ |
||||
(G_TYPE_INSTANCE_GET_CLASS ((o), MESON_SAMPLE_TYPE, MesonSampleClass)) |
||||
|
||||
typedef struct _MesonSample MesonSample; |
||||
typedef struct _MesonSamplePrivate MesonSamplePrivate; |
||||
typedef struct _MesonSampleClass MesonSampleClass; |
||||
|
||||
struct _MesonSample { |
||||
GObject parent; |
||||
}; |
||||
|
||||
struct _MesonSampleClass { |
||||
GObjectClass parent; |
||||
}; |
||||
|
||||
GType meson_sample_get_type () G_GNUC_CONST; |
||||
MesonSample* meson_sample_new (void); |
||||
|
||||
void meson_sample_func (MesonSample *sample); |
||||
|
||||
#endif |
@ -0,0 +1,108 @@ |
||||
#include "meson-sample.h" |
||||
|
||||
struct _MesonSample |
||||
{ |
||||
GObject parent_instance; |
||||
|
||||
gchar *msg; |
||||
}; |
||||
|
||||
G_DEFINE_TYPE (MesonSample, meson_sample, G_TYPE_OBJECT) |
||||
|
||||
enum { |
||||
PROP_0, |
||||
PROP_MSG, |
||||
LAST_PROP |
||||
}; |
||||
|
||||
static GParamSpec *gParamSpecs [LAST_PROP]; |
||||
|
||||
MesonSample * |
||||
meson_sample_new (const gchar *msg) |
||||
{ |
||||
g_return_val_if_fail (msg != NULL, NULL); |
||||
|
||||
return g_object_new (MESON_TYPE_SAMPLE, |
||||
"message", msg, |
||||
NULL); |
||||
} |
||||
|
||||
static void |
||||
meson_sample_finalize (GObject *object) |
||||
{ |
||||
MesonSample *self = (MesonSample *)object; |
||||
|
||||
g_clear_pointer (&self->msg, g_free); |
||||
|
||||
G_OBJECT_CLASS (meson_sample_parent_class)->finalize (object); |
||||
} |
||||
|
||||
static void |
||||
meson_sample_get_property (GObject *object, |
||||
guint prop_id, |
||||
GValue *value, |
||||
GParamSpec *pspec) |
||||
{ |
||||
MesonSample *self = MESON_SAMPLE (object); |
||||
|
||||
switch (prop_id) |
||||
{ |
||||
case PROP_MSG: |
||||
g_value_set_string (value, self->msg); |
||||
break; |
||||
default: |
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
meson_sample_set_property (GObject *object, |
||||
guint prop_id, |
||||
const GValue *value, |
||||
GParamSpec *pspec) |
||||
{ |
||||
MesonSample *self = MESON_SAMPLE (object); |
||||
|
||||
switch (prop_id) |
||||
{ |
||||
case PROP_MSG: |
||||
self->msg = g_value_dup_string (value); |
||||
break; |
||||
default: |
||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); |
||||
} |
||||
} |
||||
|
||||
static void |
||||
meson_sample_class_init (MesonSampleClass *klass) |
||||
{ |
||||
GObjectClass *object_class = G_OBJECT_CLASS (klass); |
||||
|
||||
object_class->finalize = meson_sample_finalize; |
||||
object_class->get_property = meson_sample_get_property; |
||||
object_class->set_property = meson_sample_set_property; |
||||
|
||||
gParamSpecs [PROP_MSG] = |
||||
g_param_spec_string ("message", |
||||
"Message", |
||||
"The message to print.", |
||||
NULL, |
||||
(G_PARAM_READWRITE | |
||||
G_PARAM_CONSTRUCT_ONLY | |
||||
G_PARAM_STATIC_STRINGS)); |
||||
|
||||
g_object_class_install_properties (object_class, LAST_PROP, gParamSpecs); |
||||
} |
||||
|
||||
static void |
||||
meson_sample_init (MesonSample *self) |
||||
{ |
||||
} |
||||
|
||||
void |
||||
meson_sample_print (MesonSample *self) |
||||
{ |
||||
g_return_if_fail (MESON_IS_SAMPLE (self)); |
||||
|
||||
g_print ("Message: %s\n", self->msg); |
||||
} |
@ -0,0 +1,21 @@ |
||||
#ifndef MESON_SAMPLE_H |
||||
#define MESON_SAMPLE_H |
||||
|
||||
#if !defined (MESON_TEST) |
||||
#error "MESON_TEST not defined." |
||||
#endif |
||||
|
||||
#include <glib-object.h> |
||||
|
||||
G_BEGIN_DECLS |
||||
|
||||
#define MESON_TYPE_SAMPLE (meson_sample_get_type()) |
||||
|
||||
G_DECLARE_FINAL_TYPE (MesonSample, meson_sample, MESON, SAMPLE, GObject) |
||||
|
||||
MesonSample *meson_sample_new (const gchar *msg); |
||||
void meson_sample_print (MesonSample *self); |
||||
|
||||
G_END_DECLS |
||||
|
||||
#endif /* MESON_SAMPLE_H */ |
@ -1,17 +1,20 @@ |
||||
libsources = ['meson-sample.c', 'meson-sample.h'] |
||||
|
||||
libsources = ['golib.c', 'golib.h'] |
||||
|
||||
girexe = executable('girprog', libsources, 'prog.c', |
||||
dependencies : [glib, gobj, gir, gmod]) |
||||
girexe = executable( |
||||
'girprog', |
||||
sources : [libsources, 'prog.c'], |
||||
dependencies : [glib, gobj, gir] |
||||
) |
||||
|
||||
gnome.generate_gir(girexe, |
||||
sources : libsources, |
||||
nsversion : '1.0', |
||||
namespace : 'Meson', |
||||
symbol_prefix : 'meson_', |
||||
identifier_prefix : 'Meson', |
||||
includes : ['GObject-2.0', 'Gio-2.0'], |
||||
install : true |
||||
gnome.generate_gir( |
||||
girexe, |
||||
sources : libsources, |
||||
nsversion : '1.0', |
||||
namespace : 'Meson', |
||||
symbol_prefix : 'meson_', |
||||
identifier_prefix : 'Meson', |
||||
includes : ['GObject-2.0'], |
||||
install : true |
||||
) |
||||
|
||||
test('gobject introspection', girexe) |
||||
|
Loading…
Reference in new issue