[dia] Split part of Diagram::finalize into dispose, signals need a living object



commit f1d8065f807798845534d9ff8366874e24ec9e70
Author: Hans Breuer <hans breuer org>
Date:   Sat Apr 25 22:44:31 2009 +0200

    Split part of Diagram::finalize into dispose, signals need a living object
---
 app/diagram.c |   24 +++++++++++++++++++-----
 1 files changed, 19 insertions(+), 5 deletions(-)

diff --git a/app/diagram.c b/app/diagram.c
index fb2a292..c05d064 100644
--- a/app/diagram.c
+++ b/app/diagram.c
@@ -99,23 +99,34 @@ diagram_get_type (void)
 }
 
 static void
-diagram_finalize(GObject *object) 
+diagram_dispose (GObject *object)
 {
   Diagram *dia = DIA_DIAGRAM(object);
 
   assert(dia->displays==NULL);
   
-  open_diagrams = g_list_remove(open_diagrams, dia);
-  layer_dialog_update_diagram_list();
+  if (g_list_index(open_diagrams, dia) >= 0) {
+    dia_diagram_remove(dia);
+
+    open_diagrams = g_list_remove(open_diagrams, dia);
+    layer_dialog_update_diagram_list();
+  }
 
   if (dia->undo)
     undo_destroy(dia->undo);
   dia->undo = NULL;
   
-  dia_diagram_remove(dia);
-
   diagram_cleanup_autosave(dia);
 
+  G_OBJECT_CLASS (parent_class)->dispose (object);
+}
+static void
+diagram_finalize(GObject *object) 
+{
+  Diagram *dia = DIA_DIAGRAM(object);
+
+  assert(dia->displays==NULL);
+  
   if (dia->filename)
     g_free(dia->filename);
   dia->filename = NULL;
@@ -163,6 +174,7 @@ diagram_class_init (DiagramClass *klass)
   klass->selection_changed = _diagram_selection_changed;
 
   object_class->finalize = diagram_finalize;
+  object_class->dispose = diagram_dispose;
 }
 
 GList *
@@ -321,6 +333,8 @@ diagram_load(const char *filename, DiaImportFilter *ifilter)
     diagram_set_modified(diagram, FALSE);
     if (app_is_interactive()) {
       recent_file_history_add(filename);
+      if (was_default) /* replacing it is like first remove than add */
+        dia_diagram_remove(diagram);
       dia_diagram_add(diagram);
     }
   }



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]