(lw_separator_p): New.

(merge_widget_value): Handle button_type.
(copy_widget_value_tree): Copy button_type.
This commit is contained in:
Gerd Moellmann 1999-07-21 21:43:52 +00:00
parent cedccd2efa
commit da88f59218

View 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;
}