diff options
author | Ken VanDine <ken.vandine@canonical.com> | 2012-04-12 12:28:48 -0400 |
---|---|---|
committer | Ken VanDine <ken.vandine@canonical.com> | 2012-04-12 12:28:48 -0400 |
commit | e2661bdde821d89b9b9d3e5da7df102d5fd9c850 (patch) | |
tree | e5d58595818748d0c075dcd4adadc76af9d7acf7 /libdbusmenu-gtk/genericmenuitem.c | |
parent | c9a8ffc08d20663ea8a8a6b59f053ba9934de884 (diff) | |
parent | c45a8fe03a7b3653af2d2f8586668dcb3c21899b (diff) | |
download | libdbusmenu-e2661bdde821d89b9b9d3e5da7df102d5fd9c850.tar.gz libdbusmenu-e2661bdde821d89b9b9d3e5da7df102d5fd9c850.tar.bz2 libdbusmenu-e2661bdde821d89b9b9d3e5da7df102d5fd9c850.zip |
* libdbusmenu-gtk/genericmenuitem.c
- Fixed duplicated underscores in menus (LP: #979301)
Diffstat (limited to 'libdbusmenu-gtk/genericmenuitem.c')
-rw-r--r-- | libdbusmenu-gtk/genericmenuitem.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/libdbusmenu-gtk/genericmenuitem.c b/libdbusmenu-gtk/genericmenuitem.c index 9effd82..81d67fe 100644 --- a/libdbusmenu-gtk/genericmenuitem.c +++ b/libdbusmenu-gtk/genericmenuitem.c @@ -241,6 +241,27 @@ has_mnemonic (const gchar * string, gboolean previous_underscore) return FALSE; } +/* Sanitize the label by removing "__" meaning "_" */ +gchar * +sanitize_label (const gchar * in_label) +{ + static GRegex * underscore_regex = NULL; + + g_return_val_if_fail(in_label != NULL, NULL); + + if (underscore_regex == NULL) { + underscore_regex = g_regex_new("__", 0, 0, NULL); + } + + return g_regex_replace_literal(underscore_regex, + in_label, + -1, /* length */ + 0, /* start */ + "_", /* replacement */ + 0, /* flags */ + NULL); /* error */ +} + /* Set the label on the item */ static void set_label (GtkMenuItem * menu_item, const gchar * in_label) @@ -319,6 +340,10 @@ set_label (GtkMenuItem * menu_item, const gchar * in_label) gtk_label_set_use_underline(GTK_LABEL(labelw), TRUE); gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(labelw), GTK_WIDGET(menu_item)); gtk_label_set_markup_with_mnemonic(labelw, local_label); + } else { + gchar * sanitized = sanitize_label(local_label); + gtk_label_set_markup(labelw, sanitized); + g_free(sanitized); } gtk_widget_show(GTK_WIDGET(labelw)); @@ -343,7 +368,9 @@ set_label (GtkMenuItem * menu_item, const gchar * in_label) gtk_accel_label_set_accel_widget(GTK_ACCEL_LABEL(labelw), GTK_WIDGET(menu_item)); gtk_label_set_markup_with_mnemonic(labelw, local_label); } else { - gtk_label_set_markup(labelw, local_label); + gchar * sanitized = sanitize_label(local_label); + gtk_label_set_markup(labelw, sanitized); + g_free(sanitized); } } } |