]> git.eshelyaron.com Git - emacs.git/commitdiff
(copy_widget_value_tree): Copy help string.
authorGerd Moellmann <gerd@gnu.org>
Mon, 17 Jan 2000 09:10:05 +0000 (09:10 +0000)
committerGerd Moellmann <gerd@gnu.org>
Mon, 17 Jan 2000 09:10:05 +0000 (09:10 +0000)
(free_widget_value_tree): Free help string.
(merge_widget_value): Handle help string.
(allocate_widget_info, lw_register_widget, lw_create_widget): Add
parameter HIGHLIGHT_CB.
(lw_get_widget_instance): New function.

lwlib/lwlib.c

index 1f114059778abf2075cd1b69da46149f8e94cfab..94da7cfa0f3f5616ae9d863455829d7c1e01c102 100644 (file)
@@ -199,8 +199,9 @@ free_widget_value_tree (wv)
   if (wv->name) free (wv->name);
   if (wv->value) free (wv->value);
   if (wv->key) free (wv->key);
+  if (wv->help) free (wv->help);
 
-  wv->name = wv->value = wv->key = (char *) 0xDEADBEEF;
+  wv->name = wv->value = wv->key = wv->help = (char *) 0xDEADBEEF;
 
   if (wv->toolkit_data && wv->free_toolkit_data)
     {
@@ -237,6 +238,7 @@ copy_widget_value_tree (val, change)
   copy->name = safe_strdup (val->name);
   copy->value = safe_strdup (val->value);
   copy->key = safe_strdup (val->key);
+  copy->help = safe_strdup (val->help);
   copy->enabled = val->enabled;
   copy->button_type = val->button_type;
   copy->selected = val->selected;
@@ -252,7 +254,8 @@ copy_widget_value_tree (val, change)
 }
 
 static widget_info *
-allocate_widget_info (type, name, id, val, pre_activate_cb, selection_cb, post_activate_cb)
+allocate_widget_info (type, name, id, val, pre_activate_cb,
+                     selection_cb, post_activate_cb, highlight_cb)
      char* type;
      char* name;
      LWLIB_ID id;
@@ -260,6 +263,7 @@ allocate_widget_info (type, name, id, val, pre_activate_cb, selection_cb, post_a
      lw_callback pre_activate_cb;
      lw_callback selection_cb;
      lw_callback post_activate_cb;
+     lw_callback highlight_cb;
 {
   widget_info* info = (widget_info*)malloc (sizeof (widget_info));
   info->type = safe_strdup (type);
@@ -270,6 +274,7 @@ allocate_widget_info (type, name, id, val, pre_activate_cb, selection_cb, post_a
   info->pre_activate_cb = pre_activate_cb;
   info->selection_cb = selection_cb;
   info->post_activate_cb = post_activate_cb;
+  info->highlight_cb = highlight_cb;
   info->instances = NULL;
 
   info->next = all_widget_info;
@@ -310,6 +315,7 @@ allocate_widget_instance (info, parent, pop_up_p)
 {
   widget_instance* instance =
     (widget_instance*)malloc (sizeof (widget_instance));
+  bzero (instance, sizeof *instance);
   instance->parent = parent;
   instance->pop_up_p = pop_up_p;
   instance->info = info;
@@ -390,6 +396,16 @@ get_widget_instance (widget, remove_p)
   return (widget_instance *) 0;
 }
 
+/* Value is a pointer to the widget_instance corresponding to
+   WIDGET, or null if WIDGET is not a lwlib widget.  */
+
+widget_instance *
+lw_get_widget_instance (widget)
+     Widget widget;
+{
+  return get_widget_instance (widget, False);
+}
+
 static widget_instance*
 find_instance (id, parent, pop_up_p)
      LWLIB_ID id;
@@ -487,6 +503,14 @@ merge_widget_value (val1, val2, level)
       safe_free_str (val1->key);
       val1->key = safe_strdup (val2->key);
     }
+  if (safe_strcmp (val1->help, val2->help))
+    {
+      EXPLAIN (val1->name, change, VISIBLE_CHANGE, "help change",
+              val1->help, val2->help);
+      change = max (change, VISIBLE_CHANGE);
+      safe_free_str (val1->help);
+      val1->key = safe_strdup (val2->help);
+    }
   if (val1->enabled != val2->enabled)
     {
       EXPLAIN (val1->name, change, VISIBLE_CHANGE, "enablement change",
@@ -844,7 +868,8 @@ instantiate_widget_instance (instance)
 }
 
 void 
-lw_register_widget (type, name, id, val, pre_activate_cb, selection_cb, post_activate_cb)
+lw_register_widget (type, name, id, val, pre_activate_cb,
+                   selection_cb, post_activate_cb, highlight_cb)
      char* type;
      char* name;
      LWLIB_ID id;
@@ -852,10 +877,11 @@ lw_register_widget (type, name, id, val, pre_activate_cb, selection_cb, post_act
      lw_callback pre_activate_cb;
      lw_callback selection_cb;
      lw_callback post_activate_cb;
+     lw_callback highlight_cb;
 {
   if (!get_widget_info (id, False))
     allocate_widget_info (type, name, id, val, pre_activate_cb, selection_cb,
-                         post_activate_cb);
+                         post_activate_cb, highlight_cb);
 }
 
 Widget
@@ -894,7 +920,8 @@ lw_make_widget (id, parent, pop_up_p)
 }
 
 Widget
-lw_create_widget (type, name, id, val, parent, pop_up_p, pre_activate_cb, selection_cb, post_activate_cb)
+lw_create_widget (type, name, id, val, parent, pop_up_p, pre_activate_cb,
+                 selection_cb, post_activate_cb, highlight_cb)
      char* type;
      char* name;
      LWLIB_ID id;
@@ -904,9 +931,10 @@ lw_create_widget (type, name, id, val, parent, pop_up_p, pre_activate_cb, select
      lw_callback pre_activate_cb;
      lw_callback selection_cb;
      lw_callback post_activate_cb;
+     lw_callback highlight_cb;
 {
   lw_register_widget (type, name, id, val, pre_activate_cb, selection_cb,
-                     post_activate_cb);
+                     post_activate_cb, highlight_cb);
   return lw_make_widget (id, parent, pop_up_p);
 }