all repos — openbox @ 16433ce06c083de8c725b8dc906f47c1333e3b33

openbox fork - make it a bit more like ryudo

allow multiple escaped _'s in a menu label, and allow a real _ to come later in the label (Fixes bug #4355).
Dana Jansens danakj@orodu.net
commit

16433ce06c083de8c725b8dc906f47c1333e3b33

parent

1e72cf5e4547968825d29e6f32491b4486cf186e

1 files changed, 22 insertions(+), 8 deletions(-)

jump to
M openbox/menu.copenbox/menu.c

@@ -218,6 +218,7 @@ if (label == NULL) {

*strippedlabel = NULL; } else { gchar *i; + gboolean escape; *strippedlabel = g_strdup(label);

@@ -225,20 +226,33 @@ /* if allow_shortcut is false, then you can't use the '_', instead you

have to just use the first valid character */ - i = strchr(*strippedlabel, '_'); + /* allow __ to escape an underscore */ + i = *strippedlabel; + do { + escape = FALSE; + i = strchr(i, '_'); + if (i && *(i+1) == '_') { + gchar *j; + + /* remove the escape '_' from the string */ + for (j = i; *j != '\0'; ++j) + *j = *(j+1); + + ++i; + escape = TRUE; + } + } while (escape); + if (allow_shortcut && i != NULL) { /* there is an underscore in the string */ /* you have to use a printable ascii character for shortcuts don't allow space either, so you can have like "a _ b" */ - if (VALID_SHORTCUT(*(i+1)) || *(i+1) == '_') { - /* Allow you to escape the first _ by putting __ */ - if (*(i+1) != '_') { - shortcut = g_unichar_tolower(g_utf8_get_char(i+1)); - *position = i - *strippedlabel; - *always_show = TRUE; - } + if (VALID_SHORTCUT(*(i+1))) { + shortcut = g_unichar_tolower(g_utf8_get_char(i+1)); + *position = i - *strippedlabel; + *always_show = TRUE; /* remove the '_' from the string */ for (; *i != '\0'; ++i)