diff lwlib/lwlib.c @ 420:41dbb7a9d5f2 r21-2-18

Import from CVS: tag r21-2-18
author cvs
date Mon, 13 Aug 2007 11:24:09 +0200
parents 697ef44129c6
children 11054d720c21
line wrap: on
line diff
--- a/lwlib/lwlib.c	Mon Aug 13 11:23:14 2007 +0200
+++ b/lwlib/lwlib.c	Mon Aug 13 11:24:09 2007 +0200
@@ -155,6 +155,12 @@
       free_widget_value_tree (wv->contents);
       wv->contents = (widget_value *) 0xDEADBEEF;
     }
+  if (wv->args && wv->free_args)
+    {
+      free (wv->args);
+      wv->args = (void *) 0xDEADBEEF;
+      wv->nargs = 0;
+    }
   if (wv->next)
     {
       free_widget_value_tree (wv->next);
@@ -263,6 +269,13 @@
       copy->next = copy_widget_value_tree (val->next, change);
       copy->toolkit_data = NULL;
       copy->free_toolkit_data = False;
+      if (val->nargs)
+	{
+	  copy->args = (ArgList)malloc (sizeof (Arg) * val->nargs);
+	  memcpy (copy->args, val->args, sizeof(Arg) * val->nargs);
+	  copy->nargs = val->nargs;
+	  copy->free_args = True;
+	}
 #ifdef NEED_SCROLLBARS
       copy_scrollbar_values (val, copy);
 #endif
@@ -1300,3 +1313,16 @@
 	}
     }
 }
+
+void lw_add_value_args_to_args (widget_value* wv, ArgList addto, int* offset)
+{
+  int i;
+  if (wv->nargs && wv->args)
+    {
+      for (i = 0; i<wv->nargs; i++)
+	{
+	  addto[i + *offset] = wv->args[i];
+	}
+      *offset += wv->nargs;
+    }
+}