diff options
Diffstat (limited to 'addressbook/gui/component/select-names/e-select-names-popup.c')
-rw-r--r-- | addressbook/gui/component/select-names/e-select-names-popup.c | 48 |
1 files changed, 46 insertions, 2 deletions
diff --git a/addressbook/gui/component/select-names/e-select-names-popup.c b/addressbook/gui/component/select-names/e-select-names-popup.c index c4cb57533d..61de3a3c1f 100644 --- a/addressbook/gui/component/select-names/e-select-names-popup.c +++ b/addressbook/gui/component/select-names/e-select-names-popup.c @@ -205,6 +205,40 @@ init_html_mail (GnomeUIInfo *uiinfo, PopupInfo *info) } +/* Duplicate the string, mapping _ to __. This is to make sure that underscores in + e-mail addresses don't get mistaken for keyboard accelerators. */ +static gchar * +quote_label (const gchar *str) +{ + gint len = str ? strlen (str) : -1; + const gchar *c = str; + gchar *d, *q; + + if (len < 0) + return NULL; + + while (*c) { + if (*c == '_') + ++len; + ++c; + } + + q = g_new (gchar, len+1); + c = str; + d = q; + while (*c) { + *d = *c; + if (*c == '_') { + ++d; + *d = '_'; + } + ++c; + ++d; + } + *d = '\0'; + return q; +} + #define ARBITRARY_UIINFO_LIMIT 64 static GtkWidget * popup_menu_card (PopupInfo *info) @@ -217,6 +251,7 @@ popup_menu_card (PopupInfo *info) GtkWidget *pop; EIterator *iterator; gint html_toggle; + gchar *name_label; /* * Build up our GnomeUIInfo array. @@ -228,7 +263,8 @@ popup_menu_card (PopupInfo *info) card = e_destination_get_card (info->dest); uiinfo[i].type = GNOME_APP_UI_ITEM; - uiinfo[i].label = (gchar *) e_destination_get_name (info->dest); + name_label = quote_label (e_destination_get_name (info->dest)); + uiinfo[i].label = name_label; ++i; uiinfo[i].type = GNOME_APP_UI_SEPARATOR; @@ -301,6 +337,8 @@ popup_menu_card (PopupInfo *info) init_html_mail (&(uiinfo[html_toggle]), info); + g_free (name_label); + return pop; } @@ -318,16 +356,20 @@ popup_menu_nocard (PopupInfo *info) gint i=0; GtkWidget *pop; const gchar *str; + gchar *name_label; gint html_toggle; memset (uiinfo, 0, sizeof (uiinfo)); str = e_destination_get_name (info->dest); if (str == NULL) + str = e_destination_get_email (info->dest); + if (str == NULL) str = _("Unnamed Contact"); + name_label = quote_label (str); uiinfo[i].type = GNOME_APP_UI_ITEM; - uiinfo[i].label = (gchar *) str; + uiinfo[i].label = name_label; ++i; uiinfo[i].type = GNOME_APP_UI_SEPARATOR; @@ -354,6 +396,8 @@ popup_menu_nocard (PopupInfo *info) init_html_mail (&(uiinfo[html_toggle]), info); + g_free (name_label); + return pop; } |