changeset 6040:7988b8acd29f

*** empty log message ***
author Richard M. Stallman <rms@gnu.org>
date Wed, 23 Feb 1994 08:39:25 +0000
parents 4eb7f4633370
children 649926e9c1a8
files lwlib/lwlib-Xlw.c
diffstat 1 files changed, 22 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/lwlib/lwlib-Xlw.c	Wed Feb 23 05:08:28 1994 +0000
+++ b/lwlib/lwlib-Xlw.c	Wed Feb 23 08:39:25 1994 +0000
@@ -77,25 +77,16 @@
      widget_instance* instance;
 {
   Widget widget;
-
-  /* Don't use malloc_widget_value, because the freeing will be done by free.
-     (Also it wastes time calling memset).  */
-  widget_value *tem = (widget_value *) malloc (sizeof (widget_value));
+  Arg al[1];
+  int ac = 0;
 
-  /* _XtCreate is freeing the object we passed,
-     so make a copy that we free later.  */
-  bcopy (instance->info->val, tem, sizeof (widget_value));
+  XtSetArg (al[ac], XtNmenu, instance->info->val); ac++;
 
+  /* This used to use XtVaCreateWidget, but an old Xt version
+     has a bug in XtVaCreateWidget that frees instance->info->name.  */
   widget
-    = XtVaCreateWidget (instance->info->name, xlwMenuWidgetClass,
-			instance->parent,
-			XtNmenu, tem,
-			0);
-
-#if 0 /* XtVaCreateWidget frees this, at least in the X11R4
-	 version that is running on mole.gnu.ai.mit.edu.  */
-  free_widget_value (tem);
-#endif
+    = XtCreateWidget (instance->info->name, xlwMenuWidgetClass,
+		      instance->parent, al, ac);
 
   XtAddCallback (widget, XtNopen, pre_hook, (XtPointer)instance);
   XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance);
@@ -111,25 +102,17 @@
 			  instance->parent, NULL, 0);
   
   Widget widget;
-
-  /* Don't use malloc_widget_value, because the freeing will be done by free.
-     (Also it wastes time calling memset).  */
-  widget_value *tem = (widget_value *) malloc (sizeof (widget_value));
+  Arg al[2];
+  int ac = 0;
 
-  /* _XtCreate is freeing the object we passed,
-     so make a copy that we free later.  */
-  bcopy (instance->info->val, tem, sizeof (widget_value));
+  XtSetArg (al[ac], XtNmenu, instance->info->val); ac++;
+  XtSetArg (al[ac], XtNhorizontal, False); ac++;
 
+  /* This used to use XtVaManagedCreateWidget, but an old Xt version
+     has a bug in XtVaManagedCreateWidget that frees instance->info->name.  */
   widget
-    = XtVaCreateManagedWidget ("popup", xlwMenuWidgetClass,
-			       popup_shell,
-			       XtNmenu, tem,
-			       XtNhorizontal, False,
-			       0);
-
-#if 0
-  free_widget_value (tem);
-#endif
+    = XtCreateManagedWidget ("popup", xlwMenuWidgetClass,
+			     popup_shell, al, ac);
 
   XtAddCallback (widget, XtNselect, pick_hook, (XtPointer)instance);
 
@@ -166,12 +149,18 @@
      Boolean deep_p;
 {
   XlwMenuWidget mw;
+  Arg al[1];
 
   if (XtIsShell (widget))
     mw = (XlwMenuWidget)((CompositeWidget)widget)->composite.children [0];
   else
     mw = (XlwMenuWidget)widget;
-  XtVaSetValues (widget, XtNmenu, val, 0);
+
+  /* This used to use XtVaSetValues, but some old Xt versions
+     that have a bug in XtVaCreateWidget might have it here too.  */
+  XtSetArg (al[0], XtNmenu, instance->info->val);
+
+  XtSetValues (widget, al, 1);
 }
 
 void