#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) : ""; }