diff -uNr xfce4-notifyd.orig/xfce4-notifyd/xfce-notify-window.c xfce4-notifyd.mod/xfce4-notifyd/xfce-notify-window.c --- xfce4-notifyd.orig/xfce4-notifyd/xfce-notify-window.c 2010-02-21 18:21:37.000000000 +0300 +++ xfce4-notifyd.mod/xfce4-notifyd/xfce-notify-window.c 2010-02-21 21:17:30.000000000 +0300 @@ -780,10 +780,37 @@ } static gchar * +xfce_notify_window_parse_br (const gchar *str) +{ + GString * newstr; + const gchar *p; + + if (!str) + return NULL; + + p = str; + newstr = g_string_sized_new (strlen (str)/2); + while (*p) { + if ('<' == *p) { + if ('b' == *(p+1) && 'r' == *(p+2) && '>' == *(p+3)) { + g_string_append (newstr, "\n"); + p += 4; + } + } else { + g_string_append_c (newstr, *p); + p++; + } + } + p = newstr->str; + g_string_free (newstr, FALSE); + return (gchar *)p; +} + +static gchar * xfce_notify_window_validate_escape_markup(const gchar *str) { GString *gstr; - const gchar *p; + const gchar *p; GQueue *open_elems; gconstpointer tmp; @@ -1006,9 +1033,15 @@ const gchar *body) { g_return_if_fail(XFCE_IS_NOTIFY_WINDOW(window)); - if(body && *body) { - gchar *markup = xfce_notify_window_validate_escape_markup(body); + gchar *_body = xfce_notify_window_parse_br (body); + if (!_body) + return; + gchar *_markup = xfce_notify_window_validate_escape_markup(_body); + if (!_markup) + return; + + gchar *markup = g_strcompress (_markup); if(!markup) return; #ifdef HAVE_LIBSEXY @@ -1018,7 +1051,9 @@ gtk_label_set_use_markup(GTK_LABEL(window->body), TRUE); #endif gtk_widget_show(window->body); + g_free(_markup); g_free(markup); + g_free(_body); window->has_body_text = TRUE; } else { gtk_label_set_markup(GTK_LABEL(window->body), "");