---
 gschem/include/prototype.h |    2 +-
 gschem/src/i_callbacks.c   |   16 +++++++--
 gschem/src/o_attrib.c      |   87 ++++++++++++++++++--------------------------
 3 files changed, 49 insertions(+), 56 deletions(-)

diff --git a/gschem/include/prototype.h b/gschem/include/prototype.h
index c8c4185..edf3b53 100644
--- a/gschem/include/prototype.h
+++ b/gschem/include/prototype.h
@@ -468,7 +468,7 @@ void o_arc_draw_grips(GSCHEM_TOPLEVEL *w_current, OBJECT 
*o_current);
 void o_arc_erase_grips(GSCHEM_TOPLEVEL *w_current, OBJECT *o_current);
 /* o_attrib.c */
 void o_attrib_add_selected(GSCHEM_TOPLEVEL *w_current, SELECTION *selection, 
OBJECT *selected);
-void o_attrib_toggle_visibility(GSCHEM_TOPLEVEL *w_current, GList *list);
+void o_attrib_toggle_visibility(GSCHEM_TOPLEVEL *w_current, OBJECT *object);
 void o_attrib_toggle_show_name_value(GSCHEM_TOPLEVEL *w_current, GList *list, 
int new_show_name_value);
 OBJECT *o_attrib_add_attrib(GSCHEM_TOPLEVEL *w_current, char *text_string, int 
visibility, int show_name_value, OBJECT *object);
 /* o_basic.c */
diff --git a/gschem/src/i_callbacks.c b/gschem/src/i_callbacks.c
index d2c2553..245fe1f 100644
--- a/gschem/src/i_callbacks.c
+++ b/gschem/src/i_callbacks.c
@@ -3220,9 +3220,19 @@ DEFINE_I_CALLBACK(attributes_visibility_toggle)
                          i_callback_attributes_visibility_toggle,
                          _("VisToggle"));
 
-  if (object != NULL) {
-    o_attrib_toggle_visibility(w_current,
-                               geda_list_get_glist( 
w_current->toplevel->page_current->selection_list ) );
+  if (o_select_selected (w_current)) {
+    SELECTION *selection = toplevel->page_current->selection_list;
+    GList *s_current;
+    
+    for (s_current = geda_list_get_glist (selection);
+         s_current != NULL;
+         s_current = g_list_next (s_current)) {
+      OBJECT *object = (OBJECT*)s_current->data;
+      o_attrib_toggle_visibility (w_current, object);
+    }
+    
+    toplevel->page_current->CHANGED=1;
+    o_undo_savestate (w_current, UNDO_ALL);
   }
 }
 
diff --git a/gschem/src/o_attrib.c b/gschem/src/o_attrib.c
index ab1dd2c..1d9a3d9 100644
--- a/gschem/src/o_attrib.c
+++ b/gschem/src/o_attrib.c
@@ -86,68 +86,51 @@ void o_attrib_add_selected(GSCHEM_TOPLEVEL *w_current, 
SELECTION *selection,
   return;
 }
 
-/*! \todo Finish function documentation!!!
- *  \brief
+/*! \brief Change visibility status of attribute object.
  *  \par Function Description
+ *  This function toggles the visibility status of the attribute \a
+ *  object and updates it. The object is erased or redrawn if
+ *  necessary.
  *
+ *  \param [in] w_current  The GSCHEM_TOPLEVEL object.
+ *  \param [in] object     The attribute object.
  */
-void o_attrib_toggle_visibility(GSCHEM_TOPLEVEL *w_current, GList *list)
+void o_attrib_toggle_visibility(GSCHEM_TOPLEVEL *w_current, OBJECT *object)
 {
   TOPLEVEL *toplevel = w_current->toplevel;
-  GList *s_current = NULL;
-  OBJECT *object = NULL;
-
-  if (list == NULL) {
-    return;
-  }
 
-  s_current = list;
+  g_return_if_fail (object != NULL && object->type == OBJ_TEXT);
 
-  while(s_current != NULL) {
-    object = (OBJECT *) s_current->data;
-    if (object == NULL) {
-      fprintf(stderr, _("Got NULL in o_attrib_toggle_visibility\n"));
-      exit(-1);
+  if (object->visibility == VISIBLE) {
+    /* only erase if we are not showing hidden text */
+    if (!toplevel->show_hidden_text) {
+      o_erase_single(w_current, object);
     }
-
-    if (object->type == OBJ_TEXT) {
-      if (object->visibility == VISIBLE) {
-
-        /* only erase if we are not showing hidden text */
-        if (!toplevel->show_hidden_text) {
-          o_erase_single(w_current, object);
-        }
-        
-        object->visibility = INVISIBLE;
-
-        if (toplevel->show_hidden_text) {
-          /* draw text so that little I is drawn */
-          o_text_draw(w_current, object); 
-        }
-
-        toplevel->page_current->CHANGED=1;
-      } else {
-        /* if we are in the special show hidden mode, then erase text first */
-        /* to get rid of the little I */
-        if (toplevel->show_hidden_text) {
-          o_erase_single(w_current, object);
-        }
-
-        object->visibility = VISIBLE;
-        
-        /* you must do this since real->text->complex */
-        /* might be null when text is invisible */
-        if (object->text->prim_objs == NULL)
-          o_text_recreate(toplevel, object);
-
-        
-        o_text_draw(w_current, object);
-        toplevel->page_current->CHANGED = 1;
-      }
+    
+    object->visibility = INVISIBLE;
+    
+    if (toplevel->show_hidden_text) {
+      /* draw text so that little I is drawn */
+      o_text_draw(w_current, object); 
     }
-    s_current = g_list_next(s_current);
+    
+  } else {
+    /* if we are in the special show hidden mode, then erase text first */
+    /* to get rid of the little I */
+    if (toplevel->show_hidden_text) {
+      o_erase_single(w_current, object);
+    }
+    
+    object->visibility = VISIBLE;
+    
+    /* you must do this since real->text->complex */
+    /* might be null when text is invisible */
+    if (object->text->prim_objs == NULL) {
+      o_text_recreate(toplevel, object);
+    }
+    
+    o_text_draw(w_current, object);
   }
-  o_undo_savestate(w_current, UNDO_ALL);
 }
 
 /*! \todo Finish function documentation!!!
-- 
1.5.6




_______________________________________________
geda-dev mailing list
[email protected]
http://www.seul.org/cgi-bin/mailman/listinfo/geda-dev

Reply via email to