diya-shell/src/base.c

103 lines
2.9 KiB
C
Raw Normal View History

#include "base.h"
#include "shell.h"
G_DEFINE_ABSTRACT_TYPE(DiyaObject, diya_object, G_TYPE_OBJECT)
static void diya_object_dispose(GObject* object)
{
g_debug("diya_object_dispose");
G_OBJECT_CLASS (diya_object_parent_class)->dispose(object);
}
static void diya_object_class_init(DiyaObjectClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(class);
class->to_string = NULL;
gobject_class->dispose = diya_object_dispose;
}
static void diya_object_init(DiyaObject *self)
{
(void) self;
}
enum
{
SO_NO_PROP,
SO_SHELL,
SO_N_PROPERTIES
};
static GParamSpec *g_so_prop[SO_N_PROPERTIES] = {0};
typedef struct _DiyaShellObjectPrivate
{
DiyaObject * parent;
DiyaShell * shell;
} DiyaShellObjectPrivate;
G_DEFINE_TYPE_WITH_PRIVATE(DiyaShellObject, diya_shell_object, DIYA_TYPE_OBJECT);
static void diya_shell_object_dispose(GObject* object)
{
g_debug("diya_shell_object_dispose");
G_OBJECT_CLASS(diya_shell_object_parent_class)->dispose(object);
}
static void diya_shell_object_set_property(GObject *object, guint property_id, const GValue *value, GParamSpec *pspec)
{
DiyaShellObject * self = DIYA_SHELL_OBJECT(object);
DiyaShellObjectPrivate* priv = diya_shell_object_get_instance_private(self);
switch (property_id)
{
case SO_SHELL:
priv->shell = g_value_get_pointer(value);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void diya_shell_object_get_property(GObject *object, guint property_id, GValue *value, GParamSpec *pspec)
{
DiyaShellObject * self = DIYA_SHELL_OBJECT(object);
DiyaShellObjectPrivate* priv = diya_shell_object_get_instance_private(self);
switch (property_id)
{
case SO_SHELL:
g_value_set_pointer(value, priv->shell);
break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
break;
}
}
static void diya_shell_object_init(DiyaShellObject *self)
{
DiyaShellObjectPrivate* priv = diya_shell_object_get_instance_private(self);
priv->shell = NULL;
}
static void diya_shell_object_class_init(DiyaShellObjectClass *class)
{
GObjectClass *gobject_class = G_OBJECT_CLASS(class);
gobject_class->dispose = diya_shell_object_dispose;
gobject_class->set_property = diya_shell_object_set_property;
gobject_class->get_property = diya_shell_object_get_property;
g_so_prop[SO_SHELL] = g_param_spec_pointer("shell", NULL, "Reference to global shell", G_PARAM_READWRITE|G_PARAM_CONSTRUCT_ONLY); //
g_object_class_install_properties (gobject_class, SO_N_PROPERTIES, g_so_prop);
}
const gchar * diya_object_to_string(gpointer object)
{
g_return_val_if_fail(DIYA_IS_OBJECT(object), NULL);
DiyaObject * self = DIYA_OBJECT(object);
DiyaObjectClass *class = DIYA_OBJECT_GET_CLASS(self);
return class->to_string ? class->to_string(self) : "";
}