]> code.delx.au - gnu-emacs/blobdiff - lwlib/lwlib.c
(completion-setup-hook): Add definition.
[gnu-emacs] / lwlib / lwlib.c
index 9076418ee6a3b12549af1ec64daf2a49da04ccbb..981c92e568654d36e10f43725b2853478fbe6f6c 100644 (file)
@@ -201,7 +201,7 @@ free_widget_value_tree (wv)
 
   if (wv->toolkit_data && wv->free_toolkit_data)
     {
-      free (wv->toolkit_data);
+      XtFree (wv->toolkit_data);
       wv->toolkit_data = (void *) 0xDEADBEEF;
     }
 
@@ -238,6 +238,7 @@ copy_widget_value_tree (val, change)
   copy->selected = val->selected;
   copy->edited = False;
   copy->change = change;
+  copy->this_one_change = change;
   copy->contents = copy_widget_value_tree (val->contents, change);
   copy->call_data = val->call_data;
   copy->next = copy_widget_value_tree (val->next, change);
@@ -439,7 +440,7 @@ merge_widget_value (val1, val2, level)
      widget_value* val2;
      int level;
 {
-  change_type change;
+  change_type change, this_one_change;
   widget_value* merged_next;
   widget_value* merged_contents;
 
@@ -525,11 +526,18 @@ merge_widget_value (val1, val2, level)
          EXPLAIN (val1->name, change, INVISIBLE_CHANGE, "(contents change)",
                   0, 0);
          change = max (change, INVISIBLE_CHANGE);
+#if 0 /* This was replaced by the August 9 1996 change in lwlib-Xm.c.  */
+#ifdef USE_MOTIF
+         change = max (merged_contents->change, change);
+#endif
+#endif
        }
       
       val1->contents = merged_contents;
     }
 
+  this_one_change = change;
+
   merged_next = merge_widget_value (val1->next, val2->next, level);
 
   if (val1->next && !merged_next)
@@ -548,12 +556,13 @@ merge_widget_value (val1, val2, level)
 
   val1->next = merged_next;
 
+  val1->this_one_change = this_one_change;
   val1->change = change;
   
   if (change > NO_CHANGE && val1->toolkit_data)
     {
       if (val1->free_toolkit_data)
-       free (val1->toolkit_data);
+       XtFree (val1->toolkit_data);
       val1->toolkit_data = NULL;
     }
 
@@ -1202,6 +1211,10 @@ lw_get_widget_value_for_widget (instance, w)
 }
 
 \f/* update other instances value when one thing changed */
+
+/* To forbid recursive calls */
+static Boolean lwlib_updating;
+
 /* This function can be used as a an XtCallback for the widgets that get 
   modified to update other instances of the widgets.  Closure should be the
   widget_instance. */
@@ -1211,17 +1224,14 @@ lw_internal_update_other_instances (widget, closure, call_data)
      XtPointer closure;
      XtPointer call_data;
 {
-  /* To forbid recursive calls */
-  static Boolean updating;
-  
   widget_instance* instance = (widget_instance*)closure;
   char* name = XtName (widget);
   widget_info* info;
   widget_instance* cur;
   widget_value* val;
 
-  /* never recurse as this could cause infinite recursions. */
-  if (updating)
+  /* Avoid possibly infinite recursion.  */
+  if (lwlib_updating)
     return;
 
   /* protect against the widget being destroyed */
@@ -1233,7 +1243,7 @@ lw_internal_update_other_instances (widget, closure, call_data)
   if (!info->instances->next)
     return;
 
-  updating = True;
+  lwlib_updating = True;
 
   for (val = info->val; val && strcmp (val->name, name); val = val->next);
 
@@ -1242,7 +1252,7 @@ lw_internal_update_other_instances (widget, closure, call_data)
       if (cur != instance)
        set_one_value (cur, val, True);
 
-  updating = False;
+  lwlib_updating = False;
 }
 
 
@@ -1344,9 +1354,10 @@ lw_window_is_in_menubar (win, menubar_widget)
       && XtWindow (menubar_widget) == win;
 #endif
 #if defined (USE_MOTIF)
-      && XtWindowToWidget (XtDisplay (menubar_widget), win)
-      && (XtParent (XtWindowToWidget (XtDisplay (menubar_widget), win))
-         == menubar_widget);
+      && ((XtWindow (menubar_widget) == win)
+         || (XtWindowToWidget (XtDisplay (menubar_widget), win)
+             && (XtParent (XtWindowToWidget (XtDisplay (menubar_widget), win))
+                 == menubar_widget)));
 #endif
 }