]> git.eshelyaron.com Git - emacs.git/commitdiff
(lw_separator_p): New.
authorGerd Moellmann <gerd@gnu.org>
Wed, 21 Jul 1999 21:43:52 +0000 (21:43 +0000)
committerGerd Moellmann <gerd@gnu.org>
Wed, 21 Jul 1999 21:43:52 +0000 (21:43 +0000)
(merge_widget_value): Handle button_type.
(copy_widget_value_tree): Copy button_type.

lwlib/lwlib.c

index f6734038fe0b2d786074ebc3e1e5da864bce6c5a..f17d231a677a09a4947a5a1b945eefe3f373956b 100644 (file)
@@ -238,6 +238,7 @@ copy_widget_value_tree (val, change)
   copy->value = safe_strdup (val->value);
   copy->key = safe_strdup (val->key);
   copy->enabled = val->enabled;
+  copy->button_type = val->button_type;
   copy->selected = val->selected;
   copy->edited = False;
   copy->change = change;
@@ -493,6 +494,13 @@ merge_widget_value (val1, val2, level)
       change = max (change, VISIBLE_CHANGE);
       val1->enabled = val2->enabled;
     }
+  if (val1->button_type != val2->button_type)
+    {
+      EXPLAIN (val1->name, change, VISIBLE_CHANGE, "button type change",
+              val1->button_type, val2->button_type);
+      change = max (change, VISIBLE_CHANGE);
+      val1->button_type = val2->button_type;
+    }
   if (val1->selected != val2->selected)
     {
       EXPLAIN (val1->name, change, VISIBLE_CHANGE, "selection change",
@@ -1387,3 +1395,73 @@ lw_allow_resizing (w, flag)
   xm_manage_resizing (w, flag);
 #endif
 }
+
+
+/* Value is non-zero if LABEL is a menu separator.  If it is, *TYPE is
+   set to an appropriate enumerator of type enum menu_separator.
+   MOTIF_P non-zero means map separator types not supported by Motif
+   to similar ones that are supported.  */
+
+int
+lw_separator_p (label, type, motif_p)
+     char *label;
+     enum menu_separator *type;
+     int motif_p;
+{
+  int separator_p;
+
+  if (strlen (label) >= 3
+      && bcmp (label, "--:", 3) == 0)
+    {
+      static struct separator_table
+      {
+       char *name;
+       enum menu_separator type;
+      }
+      separator_names[] =
+      {
+       "noLine",                    SEPARATOR_NO_LINE,
+       "singleLine",                SEPARATOR_SINGLE_LINE,
+       "doubleLine",                SEPARATOR_DOUBLE_LINE,
+       "singleDashedLine",          SEPARATOR_SINGLE_DASHED_LINE,
+       "doubleDashedLine",          SEPARATOR_DOUBLE_DASHED_LINE,
+       "shadowEtchedIn",            SEPARATOR_SHADOW_ETCHED_IN,
+       "shadowEtchedOut",           SEPARATOR_SHADOW_ETCHED_OUT,
+       "shadowEtchedInDash",        SEPARATOR_SHADOW_ETCHED_IN_DASH,
+       "shadowEtchedOutDash",       SEPARATOR_SHADOW_ETCHED_OUT_DASH,
+       "shadowDoubleEtchedIn",      SEPARATOR_SHADOW_DOUBLE_ETCHED_IN,
+       "shadowDoubleEtchedOut",     SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT,
+       "shadowDoubleEtchedInDash",  SEPARATOR_SHADOW_DOUBLE_ETCHED_IN_DASH,
+       "shadowDoubleEtchedOutDash", SEPARATOR_SHADOW_DOUBLE_ETCHED_OUT_DASH,
+       0
+      };
+
+      int i;
+
+      label += 3;
+      for (i = 0; separator_names[i].name; ++i)
+       if (strcmp (label, separator_names[i].name) == 0)
+         {
+           separator_p = 1;
+           *type = separator_names[i].type;
+
+           /* If separator type is not supported under Motif,
+              use a similar one.  */
+           if (motif_p && *type >= SEPARATOR_SHADOW_DOUBLE_ETCHED_IN)
+             *type -= 4;
+           break;
+         }
+    }
+  else
+    {
+      /* Old-style separator, maybe.  It's a separator if it contains
+        only dashes.  */
+      while (*label == '-')
+       ++label;
+      separator_p = *label == 0;
+      *type = SEPARATOR_SHADOW_ETCHED_IN;
+    }
+
+  return separator_p;
+}
+