X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fmarina%2Fmarina%2FUndoManager.c;fp=src%2Fmarina%2Fmarina%2FUndoManager.c;h=e692b6f5e85ec6722e3d1dc1d6a3254c32d326f0;hb=a712cd772f4f3db8bed7037bb95c4de94767b230;hp=0000000000000000000000000000000000000000;hpb=2f0296582bf5d3f51db40d299f434fc8240ca6a5;p=fillmore diff --git a/src/marina/marina/UndoManager.c b/src/marina/marina/UndoManager.c new file mode 100644 index 0000000..e692b6f --- /dev/null +++ b/src/marina/marina/UndoManager.c @@ -0,0 +1,586 @@ +/* UndoManager.c generated by valac, the Vala compiler + * generated from UndoManager.vala, do not modify */ + +/* Copyright 2009 Yorba Foundation + * + * This software is licensed under the GNU Lesser General Public License + * (version 2.1 or later). See the COPYING file in this distribution. + */ + +#include +#include +#include +#include +#include +#include + + +#define MODEL_TYPE_UNDO_MANAGER (model_undo_manager_get_type ()) +#define MODEL_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManager)) +#define MODEL_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass)) +#define MODEL_IS_UNDO_MANAGER(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_UNDO_MANAGER)) +#define MODEL_IS_UNDO_MANAGER_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_UNDO_MANAGER)) +#define MODEL_UNDO_MANAGER_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerClass)) + +typedef struct _ModelUndoManager ModelUndoManager; +typedef struct _ModelUndoManagerClass ModelUndoManagerClass; +typedef struct _ModelUndoManagerPrivate ModelUndoManagerPrivate; + +#define MODEL_TYPE_COMMAND (model_command_get_type ()) +#define MODEL_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_COMMAND, ModelCommand)) +#define MODEL_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_COMMAND, ModelCommandClass)) +#define MODEL_IS_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_COMMAND)) +#define MODEL_IS_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_COMMAND)) +#define MODEL_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_COMMAND, ModelCommandClass)) + +typedef struct _ModelCommand ModelCommand; +typedef struct _ModelCommandClass ModelCommandClass; +#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL))) + +#define MODEL_TYPE_TRANSACTION_COMMAND (model_transaction_command_get_type ()) +#define MODEL_TRANSACTION_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommand)) +#define MODEL_TRANSACTION_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommandClass)) +#define MODEL_IS_TRANSACTION_COMMAND(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MODEL_TYPE_TRANSACTION_COMMAND)) +#define MODEL_IS_TRANSACTION_COMMAND_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), MODEL_TYPE_TRANSACTION_COMMAND)) +#define MODEL_TRANSACTION_COMMAND_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), MODEL_TYPE_TRANSACTION_COMMAND, ModelTransactionCommandClass)) + +typedef struct _ModelTransactionCommand ModelTransactionCommand; +typedef struct _ModelTransactionCommandClass ModelTransactionCommandClass; +#define _model_command_unref0(var) ((var == NULL) ? NULL : (var = (model_command_unref (var), NULL))) +typedef struct _ModelParamSpecUndoManager ModelParamSpecUndoManager; + +struct _ModelUndoManager { + GTypeInstance parent_instance; + volatile int ref_count; + ModelUndoManagerPrivate * priv; +}; + +struct _ModelUndoManagerClass { + GTypeClass parent_class; + void (*finalize) (ModelUndoManager *self); +}; + +struct _ModelUndoManagerPrivate { + gint saved_index; + gboolean _in_undo; + GeeArrayList* command_list; +}; + +struct _ModelParamSpecUndoManager { + GParamSpec parent_instance; +}; + + +static gpointer model_undo_manager_parent_class = NULL; + +gpointer model_undo_manager_ref (gpointer instance); +void model_undo_manager_unref (gpointer instance); +GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); +void model_value_set_undo_manager (GValue* value, gpointer v_object); +void model_value_take_undo_manager (GValue* value, gpointer v_object); +gpointer model_value_get_undo_manager (const GValue* value); +GType model_undo_manager_get_type (void); +gpointer model_command_ref (gpointer instance); +void model_command_unref (gpointer instance); +GParamSpec* model_param_spec_command (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags); +void model_value_set_command (GValue* value, gpointer v_object); +void model_value_take_command (GValue* value, gpointer v_object); +gpointer model_value_get_command (const GValue* value); +GType model_command_get_type (void); +#define MODEL_UNDO_MANAGER_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MODEL_TYPE_UNDO_MANAGER, ModelUndoManagerPrivate)) +enum { + MODEL_UNDO_MANAGER_DUMMY_PROPERTY +}; +ModelUndoManager* model_undo_manager_new (void); +ModelUndoManager* model_undo_manager_construct (GType object_type); +void model_undo_manager_reset (ModelUndoManager* self); +void model_undo_manager_mark_clean (ModelUndoManager* self); +ModelTransactionCommand* model_transaction_command_new (gboolean open, const char* transaction_description); +ModelTransactionCommand* model_transaction_command_construct (GType object_type, gboolean open, const char* transaction_description); +GType model_transaction_command_get_type (void); +void model_undo_manager_start_transaction (ModelUndoManager* self, const char* description); +void model_undo_manager_end_transaction (ModelUndoManager* self, const char* description); +gboolean model_undo_manager_get_in_undo (ModelUndoManager* self); +void model_command_apply (ModelCommand* self); +static ModelCommand* model_undo_manager_get_current_command (ModelUndoManager* self); +gboolean model_command_merge (ModelCommand* self, ModelCommand* command); +gboolean model_undo_manager_get_can_undo (ModelUndoManager* self); +void model_undo_manager_do_command (ModelUndoManager* self, ModelCommand* the_command); +static void model_undo_manager_set_in_undo (ModelUndoManager* self, gboolean value); +gboolean model_transaction_command_in_transaction (ModelTransactionCommand* self); +void model_command_undo (ModelCommand* self); +gboolean model_undo_manager_get_is_dirty (ModelUndoManager* self); +void model_undo_manager_undo (ModelUndoManager* self); +char* model_command_description (ModelCommand* self); +char* model_undo_manager_get_undo_title (ModelUndoManager* self); +static void model_undo_manager_finalize (ModelUndoManager* obj); + + + +#line 19 "UndoManager.vala" +ModelUndoManager* model_undo_manager_construct (GType object_type) { +#line 123 "UndoManager.c" + ModelUndoManager* self; + self = (ModelUndoManager*) g_type_create_instance (object_type); + return self; +} + + +#line 19 "UndoManager.vala" +ModelUndoManager* model_undo_manager_new (void) { +#line 19 "UndoManager.vala" + return model_undo_manager_construct (MODEL_TYPE_UNDO_MANAGER); +#line 134 "UndoManager.c" +} + + +#line 22 "UndoManager.vala" +void model_undo_manager_reset (ModelUndoManager* self) { +#line 22 "UndoManager.vala" + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 23 "UndoManager.vala" + gee_abstract_collection_clear (GEE_ABSTRACT_COLLECTION (self->priv->command_list)); +#line 24 "UndoManager.vala" + self->priv->saved_index = 0; +#line 25 "UndoManager.vala" + g_signal_emit_by_name (self, "undo-changed", FALSE); +#line 148 "UndoManager.c" +} + + +#line 28 "UndoManager.vala" +void model_undo_manager_mark_clean (ModelUndoManager* self) { +#line 28 "UndoManager.vala" + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 29 "UndoManager.vala" + self->priv->saved_index = gee_collection_get_size (GEE_COLLECTION (self->priv->command_list)); +#line 30 "UndoManager.vala" + g_signal_emit_by_name (self, "dirty-changed", FALSE); +#line 160 "UndoManager.c" +} + + +#line 33 "UndoManager.vala" +void model_undo_manager_start_transaction (ModelUndoManager* self, const char* description) { +#line 166 "UndoManager.c" + ModelTransactionCommand* command; +#line 33 "UndoManager.vala" + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 33 "UndoManager.vala" + g_return_if_fail (description != NULL); +#line 34 "UndoManager.vala" + command = model_transaction_command_new (FALSE, description); +#line 35 "UndoManager.vala" + gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->command_list), MODEL_COMMAND (command)); +#line 36 "UndoManager.vala" + g_signal_emit_by_name (self, "undo-changed", TRUE); +#line 178 "UndoManager.c" + _model_command_unref0 (command); +} + + +#line 39 "UndoManager.vala" +void model_undo_manager_end_transaction (ModelUndoManager* self, const char* description) { +#line 185 "UndoManager.c" + ModelTransactionCommand* command; +#line 39 "UndoManager.vala" + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 39 "UndoManager.vala" + g_return_if_fail (description != NULL); +#line 40 "UndoManager.vala" + command = model_transaction_command_new (TRUE, description); +#line 41 "UndoManager.vala" + gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->command_list), MODEL_COMMAND (command)); +#line 42 "UndoManager.vala" + g_signal_emit_by_name (self, "undo-changed", TRUE); +#line 197 "UndoManager.c" + _model_command_unref0 (command); +} + + +#line 45 "UndoManager.vala" +void model_undo_manager_do_command (ModelUndoManager* self, ModelCommand* the_command) { +#line 45 "UndoManager.vala" + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 45 "UndoManager.vala" + g_return_if_fail (MODEL_IS_COMMAND (the_command)); +#line 46 "UndoManager.vala" + if (!model_undo_manager_get_in_undo (self)) { +#line 210 "UndoManager.c" + ModelCommand* current_command; + gboolean _tmp0_ = FALSE; +#line 47 "UndoManager.vala" + model_command_apply (the_command); +#line 48 "UndoManager.vala" + current_command = model_undo_manager_get_current_command (self); +#line 49 "UndoManager.vala" + if (current_command == NULL) { +#line 49 "UndoManager.vala" + _tmp0_ = TRUE; +#line 221 "UndoManager.c" + } else { +#line 49 "UndoManager.vala" + _tmp0_ = !model_command_merge (current_command, the_command); +#line 225 "UndoManager.c" + } +#line 49 "UndoManager.vala" + if (_tmp0_) { +#line 50 "UndoManager.vala" + gee_abstract_collection_add (GEE_ABSTRACT_COLLECTION (self->priv->command_list), the_command); +#line 231 "UndoManager.c" + } +#line 52 "UndoManager.vala" + g_signal_emit_by_name (self, "dirty-changed", TRUE); +#line 53 "UndoManager.vala" + g_signal_emit_by_name (self, "undo-changed", model_undo_manager_get_can_undo (self)); +#line 237 "UndoManager.c" + _model_command_unref0 (current_command); + } +} + + +#line 57 "UndoManager.vala" +static ModelCommand* model_undo_manager_get_current_command (ModelUndoManager* self) { +#line 245 "UndoManager.c" + ModelCommand* result = NULL; + gint index; +#line 57 "UndoManager.vala" + g_return_val_if_fail (MODEL_IS_UNDO_MANAGER (self), NULL); +#line 58 "UndoManager.vala" + index = gee_collection_get_size (GEE_COLLECTION (self->priv->command_list)) - 1; +#line 59 "UndoManager.vala" + if (index >= 0) { +#line 254 "UndoManager.c" + result = (ModelCommand*) gee_abstract_list_get (GEE_ABSTRACT_LIST (self->priv->command_list), index); +#line 60 "UndoManager.vala" + return result; +#line 258 "UndoManager.c" + } else { + result = NULL; +#line 62 "UndoManager.vala" + return result; +#line 263 "UndoManager.c" + } +} + + +static gpointer _model_command_ref0 (gpointer self) { + return self ? model_command_ref (self) : NULL; +} + + +#line 66 "UndoManager.vala" +void model_undo_manager_undo (ModelUndoManager* self) { +#line 275 "UndoManager.c" + gint in_transaction; +#line 66 "UndoManager.vala" + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 67 "UndoManager.vala" + g_assert (model_undo_manager_get_in_undo (self) == FALSE); +#line 68 "UndoManager.vala" + model_undo_manager_set_in_undo (self, TRUE); +#line 69 "UndoManager.vala" + in_transaction = 0; +#line 285 "UndoManager.c" + { + gboolean _tmp0_; +#line 70 "UndoManager.vala" + _tmp0_ = TRUE; +#line 70 "UndoManager.vala" + while (TRUE) { +#line 292 "UndoManager.c" + ModelCommand* the_command; +#line 70 "UndoManager.vala" + if (!_tmp0_) { +#line 87 "UndoManager.vala" + if (!(in_transaction > 0)) { +#line 87 "UndoManager.vala" + break; +#line 300 "UndoManager.c" + } + } +#line 70 "UndoManager.vala" + _tmp0_ = FALSE; +#line 71 "UndoManager.vala" + the_command = model_undo_manager_get_current_command (self); +#line 72 "UndoManager.vala" + if (the_command != NULL) { +#line 309 "UndoManager.c" + ModelCommand* _tmp1_; + ModelTransactionCommand* transaction_command; +#line 73 "UndoManager.vala" + gee_abstract_collection_remove (GEE_ABSTRACT_COLLECTION (self->priv->command_list), the_command); +#line 74 "UndoManager.vala" + transaction_command = _model_command_ref0 ((_tmp1_ = the_command, MODEL_IS_TRANSACTION_COMMAND (_tmp1_) ? ((ModelTransactionCommand*) _tmp1_) : NULL)); +#line 75 "UndoManager.vala" + if (transaction_command != NULL) { +#line 76 "UndoManager.vala" + if (model_transaction_command_in_transaction (transaction_command)) { +#line 77 "UndoManager.vala" + in_transaction++; +#line 322 "UndoManager.c" + } else { +#line 79 "UndoManager.vala" + in_transaction--; +#line 326 "UndoManager.c" + } + } else { +#line 82 "UndoManager.vala" + model_command_undo (the_command); +#line 331 "UndoManager.c" + } + _model_command_unref0 (transaction_command); + } else { + _model_command_unref0 (the_command); +#line 85 "UndoManager.vala" + break; +#line 338 "UndoManager.c" + } + _model_command_unref0 (the_command); + } + } +#line 88 "UndoManager.vala" + g_signal_emit_by_name (self, "dirty-changed", model_undo_manager_get_is_dirty (self)); +#line 89 "UndoManager.vala" + g_signal_emit_by_name (self, "undo-changed", model_undo_manager_get_can_undo (self)); +#line 90 "UndoManager.vala" + model_undo_manager_set_in_undo (self, FALSE); +#line 349 "UndoManager.c" +} + + +#line 93 "UndoManager.vala" +char* model_undo_manager_get_undo_title (ModelUndoManager* self) { +#line 355 "UndoManager.c" + char* result = NULL; + ModelCommand* the_command; +#line 93 "UndoManager.vala" + g_return_val_if_fail (MODEL_IS_UNDO_MANAGER (self), NULL); +#line 94 "UndoManager.vala" + the_command = model_undo_manager_get_current_command (self); +#line 95 "UndoManager.vala" + if (the_command != NULL) { +#line 364 "UndoManager.c" + result = model_command_description (the_command); + _model_command_unref0 (the_command); +#line 96 "UndoManager.vala" + return result; +#line 369 "UndoManager.c" + } else { + result = g_strdup (""); + _model_command_unref0 (the_command); +#line 98 "UndoManager.vala" + return result; +#line 375 "UndoManager.c" + } + _model_command_unref0 (the_command); +} + + +gboolean model_undo_manager_get_is_dirty (ModelUndoManager* self) { + gboolean result; + g_return_val_if_fail (MODEL_IS_UNDO_MANAGER (self), FALSE); + result = self->priv->saved_index != gee_collection_get_size (GEE_COLLECTION (self->priv->command_list)); +#line 12 "UndoManager.vala" + return result; +#line 387 "UndoManager.c" +} + + +gboolean model_undo_manager_get_can_undo (ModelUndoManager* self) { + gboolean result; + g_return_val_if_fail (MODEL_IS_UNDO_MANAGER (self), FALSE); + result = gee_collection_get_size (GEE_COLLECTION (self->priv->command_list)) > 0; +#line 13 "UndoManager.vala" + return result; +#line 397 "UndoManager.c" +} + + +gboolean model_undo_manager_get_in_undo (ModelUndoManager* self) { + gboolean result; + g_return_val_if_fail (MODEL_IS_UNDO_MANAGER (self), FALSE); + result = self->priv->_in_undo; +#line 14 "UndoManager.vala" + return result; +#line 407 "UndoManager.c" +} + + +static void model_undo_manager_set_in_undo (ModelUndoManager* self, gboolean value) { + g_return_if_fail (MODEL_IS_UNDO_MANAGER (self)); +#line 14 "UndoManager.vala" + self->priv->_in_undo = value; +#line 415 "UndoManager.c" +} + + +static void model_value_undo_manager_init (GValue* value) { + value->data[0].v_pointer = NULL; +} + + +static void model_value_undo_manager_free_value (GValue* value) { + if (value->data[0].v_pointer) { + model_undo_manager_unref (value->data[0].v_pointer); + } +} + + +static void model_value_undo_manager_copy_value (const GValue* src_value, GValue* dest_value) { + if (src_value->data[0].v_pointer) { + dest_value->data[0].v_pointer = model_undo_manager_ref (src_value->data[0].v_pointer); + } else { + dest_value->data[0].v_pointer = NULL; + } +} + + +static gpointer model_value_undo_manager_peek_pointer (const GValue* value) { + return value->data[0].v_pointer; +} + + +static gchar* model_value_undo_manager_collect_value (GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { + if (collect_values[0].v_pointer) { + ModelUndoManager* object; + object = collect_values[0].v_pointer; + if (object->parent_instance.g_class == NULL) { + return g_strconcat ("invalid unclassed object pointer for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); + } else if (!g_value_type_compatible (G_TYPE_FROM_INSTANCE (object), G_VALUE_TYPE (value))) { + return g_strconcat ("invalid object type `", g_type_name (G_TYPE_FROM_INSTANCE (object)), "' for value type `", G_VALUE_TYPE_NAME (value), "'", NULL); + } + value->data[0].v_pointer = model_undo_manager_ref (object); + } else { + value->data[0].v_pointer = NULL; + } + return NULL; +} + + +static gchar* model_value_undo_manager_lcopy_value (const GValue* value, guint n_collect_values, GTypeCValue* collect_values, guint collect_flags) { + ModelUndoManager** object_p; + object_p = collect_values[0].v_pointer; + if (!object_p) { + return g_strdup_printf ("value location for `%s' passed as NULL", G_VALUE_TYPE_NAME (value)); + } + if (!value->data[0].v_pointer) { + *object_p = NULL; + } else if (collect_flags && G_VALUE_NOCOPY_CONTENTS) { + *object_p = value->data[0].v_pointer; + } else { + *object_p = model_undo_manager_ref (value->data[0].v_pointer); + } + return NULL; +} + + +GParamSpec* model_param_spec_undo_manager (const gchar* name, const gchar* nick, const gchar* blurb, GType object_type, GParamFlags flags) { + ModelParamSpecUndoManager* spec; + g_return_val_if_fail (g_type_is_a (object_type, MODEL_TYPE_UNDO_MANAGER), NULL); + spec = g_param_spec_internal (G_TYPE_PARAM_OBJECT, name, nick, blurb, flags); + G_PARAM_SPEC (spec)->value_type = object_type; + return G_PARAM_SPEC (spec); +} + + +gpointer model_value_get_undo_manager (const GValue* value) { + g_return_val_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_UNDO_MANAGER), NULL); + return value->data[0].v_pointer; +} + + +void model_value_set_undo_manager (GValue* value, gpointer v_object) { + ModelUndoManager* old; + g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_UNDO_MANAGER)); + old = value->data[0].v_pointer; + if (v_object) { + g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_UNDO_MANAGER)); + g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); + value->data[0].v_pointer = v_object; + model_undo_manager_ref (value->data[0].v_pointer); + } else { + value->data[0].v_pointer = NULL; + } + if (old) { + model_undo_manager_unref (old); + } +} + + +void model_value_take_undo_manager (GValue* value, gpointer v_object) { + ModelUndoManager* old; + g_return_if_fail (G_TYPE_CHECK_VALUE_TYPE (value, MODEL_TYPE_UNDO_MANAGER)); + old = value->data[0].v_pointer; + if (v_object) { + g_return_if_fail (G_TYPE_CHECK_INSTANCE_TYPE (v_object, MODEL_TYPE_UNDO_MANAGER)); + g_return_if_fail (g_value_type_compatible (G_TYPE_FROM_INSTANCE (v_object), G_VALUE_TYPE (value))); + value->data[0].v_pointer = v_object; + } else { + value->data[0].v_pointer = NULL; + } + if (old) { + model_undo_manager_unref (old); + } +} + + +static void model_undo_manager_class_init (ModelUndoManagerClass * klass) { + model_undo_manager_parent_class = g_type_class_peek_parent (klass); + MODEL_UNDO_MANAGER_CLASS (klass)->finalize = model_undo_manager_finalize; + g_type_class_add_private (klass, sizeof (ModelUndoManagerPrivate)); + g_signal_new ("undo_changed", MODEL_TYPE_UNDO_MANAGER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); + g_signal_new ("dirty_changed", MODEL_TYPE_UNDO_MANAGER, G_SIGNAL_RUN_LAST, 0, NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN); +} + + +static void model_undo_manager_instance_init (ModelUndoManager * self) { + self->priv = MODEL_UNDO_MANAGER_GET_PRIVATE (self); + self->priv->saved_index = 0; + self->priv->_in_undo = FALSE; + self->priv->command_list = gee_array_list_new (MODEL_TYPE_COMMAND, (GBoxedCopyFunc) model_command_ref, model_command_unref, NULL); + self->ref_count = 1; +} + + +static void model_undo_manager_finalize (ModelUndoManager* obj) { + ModelUndoManager * self; + self = MODEL_UNDO_MANAGER (obj); + _g_object_unref0 (self->priv->command_list); +} + + +GType model_undo_manager_get_type (void) { + static volatile gsize model_undo_manager_type_id__volatile = 0; + if (g_once_init_enter (&model_undo_manager_type_id__volatile)) { + static const GTypeValueTable g_define_type_value_table = { model_value_undo_manager_init, model_value_undo_manager_free_value, model_value_undo_manager_copy_value, model_value_undo_manager_peek_pointer, "p", model_value_undo_manager_collect_value, "p", model_value_undo_manager_lcopy_value }; + static const GTypeInfo g_define_type_info = { sizeof (ModelUndoManagerClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) model_undo_manager_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (ModelUndoManager), 0, (GInstanceInitFunc) model_undo_manager_instance_init, &g_define_type_value_table }; + static const GTypeFundamentalInfo g_define_type_fundamental_info = { (G_TYPE_FLAG_CLASSED | G_TYPE_FLAG_INSTANTIATABLE | G_TYPE_FLAG_DERIVABLE | G_TYPE_FLAG_DEEP_DERIVABLE) }; + GType model_undo_manager_type_id; + model_undo_manager_type_id = g_type_register_fundamental (g_type_fundamental_next (), "ModelUndoManager", &g_define_type_info, &g_define_type_fundamental_info, 0); + g_once_init_leave (&model_undo_manager_type_id__volatile, model_undo_manager_type_id); + } + return model_undo_manager_type_id__volatile; +} + + +gpointer model_undo_manager_ref (gpointer instance) { + ModelUndoManager* self; + self = instance; + g_atomic_int_inc (&self->ref_count); + return instance; +} + + +void model_undo_manager_unref (gpointer instance) { + ModelUndoManager* self; + self = instance; + if (g_atomic_int_dec_and_test (&self->ref_count)) { + MODEL_UNDO_MANAGER_GET_CLASS (self)->finalize (self); + g_type_free_instance ((GTypeInstance *) self); + } +} + + + +