[nautilus-actions] a_factory_object_copy(): remove target data before copying source ones
- From: Pierre Wieser <pwieser src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [nautilus-actions] a_factory_object_copy(): remove target data before copying source ones
- Date: Mon, 16 Jan 2012 21:05:13 +0000 (UTC)
commit 97b19bf5694290793fdb4479de74d85af841b48e
Author: Pierre Wieser <pwieser trychlos org>
Date: Mon Jan 16 07:20:29 2012 +0100
a_factory_object_copy(): remove target data before copying source ones
ChangeLog | 3 +++
src/core/na-factory-object.c | 29 +++++++++++++++++++++++------
2 files changed, 26 insertions(+), 6 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index 51799f5..4d7cbbb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,9 @@
* docs/nact/C/nact-conditions.xml: Embeds literal values between
<literal>..</literal> tags.
+ * src/core/na-factory-object.c (na_factory_object_copy):
+ Removes target copyable data before copying source copyable data.
+
* src/nact/nact-icommand-tab.c (parse_parameters): Uses internal data.
* src/core/na-desktop-environment.c
diff --git a/src/core/na-factory-object.c b/src/core/na-factory-object.c
index c0f53fb..955ec9d 100644
--- a/src/core/na-factory-object.c
+++ b/src/core/na-factory-object.c
@@ -357,7 +357,10 @@ void
na_factory_object_copy( NAIFactoryObject *target, const NAIFactoryObject *source )
{
static const gchar *thisfn = "na_factory_object_copy";
+ GList *dest_list, *idest, *inext;
GList *src_list, *isrc;
+ NADataBoxed *boxed;
+ const NADataDef *def;
g_return_if_fail( NA_IS_IFACTORY_OBJECT( target ));
g_return_if_fail( NA_IS_IFACTORY_OBJECT( source ));
@@ -367,20 +370,34 @@ na_factory_object_copy( NAIFactoryObject *target, const NAIFactoryObject *source
( void * ) target, G_OBJECT_TYPE_NAME( target ),
( void * ) source, G_OBJECT_TYPE_NAME( source ));
- src_list = g_object_get_data( G_OBJECT( source ), NA_IFACTORY_OBJECT_PROP_DATA );
+ /* first remove copyable data from target
+ */
+ idest = dest_list = g_object_get_data( G_OBJECT( target ), NA_IFACTORY_OBJECT_PROP_DATA );
+ while( idest ){
+ boxed = NA_DATA_BOXED( idest->data );
+ inext = idest->next;
+ def = na_data_boxed_get_data_def( boxed );
+ if( def->copyable ){
+ dest_list = g_list_remove_link( dest_list, idest );
+ g_object_unref( idest->data );
+ }
+ idest = inext;
+ }
+ g_object_set_data( G_OBJECT( target ), NA_IFACTORY_OBJECT_PROP_DATA, dest_list );
+ /* only then copy copyable data from source
+ */
+ src_list = g_object_get_data( G_OBJECT( source ), NA_IFACTORY_OBJECT_PROP_DATA );
for( isrc = src_list ; isrc ; isrc = isrc->next ){
-
- NADataBoxed *src_boxed = NA_DATA_BOXED( isrc->data );
- const NADataDef *def = na_data_boxed_get_data_def( src_boxed );
-
+ boxed = NA_DATA_BOXED( isrc->data );
+ def = na_data_boxed_get_data_def( boxed );
if( def->copyable ){
NADataBoxed *tgt_boxed = na_ifactory_object_get_data_boxed( target, def->name );
if( !tgt_boxed ){
tgt_boxed = na_data_boxed_new( def );
attach_boxed_to_object( target, tgt_boxed );
}
- na_boxed_set_from_boxed( NA_BOXED( tgt_boxed ), NA_BOXED( src_boxed ));
+ na_boxed_set_from_boxed( NA_BOXED( tgt_boxed ), NA_BOXED( boxed ));
}
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]