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

gEDA-cvs: gaf.git: branch: master updated (1.5.0-20080706-404-g3d8b3ef)



The branch, master has been updated
       via  3d8b3efb5a4ce8672133658ccdbe5c57d341f0fc (commit)
      from  c69785fe267e2cdc70e2748dfab7268fbdcc3e7e (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.


=========
 Summary
=========

 gschem/src/o_delete.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)


=================
 Commit Messages
=================

commit 3d8b3efb5a4ce8672133658ccdbe5c57d341f0fc
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Date:   Sat Dec 20 03:17:31 2008 +0000

    gschem: Check for self-connecting COMPLEX before deleting. Fix #1912859
    
    Remove any references to objects inside the COMPLEX being deleted
    when we build the list of objects to redraw on screen following the
    COMPLEX's deletion.
    
    This fixes a crash observed when deleting symbols with co-incident pins.

:100644 100644 0ab6aaa... 7f6220f... M	gschem/src/o_delete.c

=========
 Changes
=========

commit 3d8b3efb5a4ce8672133658ccdbe5c57d341f0fc
Author: Peter Clifton <pcjc2@xxxxxxxxx>
Date:   Sat Dec 20 03:17:31 2008 +0000

    gschem: Check for self-connecting COMPLEX before deleting. Fix #1912859
    
    Remove any references to objects inside the COMPLEX being deleted
    when we build the list of objects to redraw on screen following the
    COMPLEX's deletion.
    
    This fixes a crash observed when deleting symbols with co-incident pins.

diff --git a/gschem/src/o_delete.c b/gschem/src/o_delete.c
index 0ab6aaa..7f6220f 100644
--- a/gschem/src/o_delete.c
+++ b/gschem/src/o_delete.c
@@ -39,6 +39,7 @@ void o_delete (GSCHEM_TOPLEVEL *w_current, OBJECT *object)
 {
   TOPLEVEL *toplevel = w_current->toplevel;
   GList *prev_conn_objects = NULL;
+  GList *iter, *iter_next;
   gboolean do_conn;
 
   g_return_if_fail (object != NULL);
@@ -50,6 +51,18 @@ void o_delete (GSCHEM_TOPLEVEL *w_current, OBJECT *object)
   if (do_conn) {
     o_cue_undraw (w_current, object);
     prev_conn_objects = s_conn_return_others (prev_conn_objects, object);
+
+    /* Check for complex which self-connects, e.g. coincident pins.
+     * Remove any prev_conn_objects which are inside the complex.
+     */
+    if (object->type == OBJ_COMPLEX) {
+      for (iter = prev_conn_objects; iter != NULL; iter = iter_next) {
+        OBJECT *conn_obj = iter->data;
+        iter_next = g_list_next (iter);
+        if (conn_obj->complex_parent == object)
+          prev_conn_objects = g_list_delete_link (prev_conn_objects, iter);
+      }
+    }
   }
   o_erase_single (w_current, object);
   o_erase_grips (w_current, object);




_______________________________________________
geda-cvs mailing list
geda-cvs@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-cvs