diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | data/evince-properties.glade | 48 | ||||
-rw-r--r-- | shell/ev-properties.c | 59 |
3 files changed, 91 insertions, 25 deletions
@@ -1,3 +1,12 @@ +Sat Jun 18 22:46:42 2005 Jonathan Blandford <jrb@redhat.com> + + * shell/ev-properties.c (set_property): escape the text correctly. + Handles non-UTF-8 properties and escaped properties. Also, sets + the text to "<i>None</i>" if the property isn't set. + + * data/evince-properties.glade: Change the label to be ellipsized, + and give it a minimum size. + 2005-06-19 Nickolay V. Shmyrev <nshmyrev@yandex.ru> * lib/ev-file-helpers.c: (ev_file_helpers_shutdown): diff --git a/data/evince-properties.glade b/data/evince-properties.glade index 80423fa..c18a08f 100644 --- a/data/evince-properties.glade +++ b/data/evince-properties.glade @@ -422,8 +422,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -451,8 +451,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -480,8 +480,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -509,8 +509,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -538,8 +538,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -567,8 +567,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -596,8 +596,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -624,8 +624,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -652,8 +652,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -680,8 +680,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -708,8 +708,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> @@ -736,8 +736,8 @@ <property name="yalign">0.5</property> <property name="xpad">0</property> <property name="ypad">0</property> - <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property> - <property name="width_chars">-1</property> + <property name="ellipsize">PANGO_ELLIPSIZE_END</property> + <property name="width_chars">25</property> <property name="single_line_mode">False</property> <property name="angle">0</property> </widget> diff --git a/shell/ev-properties.c b/shell/ev-properties.c index 0b9d897..d7974c0 100644 --- a/shell/ev-properties.c +++ b/shell/ev-properties.c @@ -33,6 +33,7 @@ #include <glade/glade.h> #include <time.h> #include <sys/time.h> +#include <string.h> enum { @@ -171,15 +172,71 @@ ev_properties_format_date (GTime utime) return g_locale_to_utf8 (s, -1, NULL, NULL, NULL); } +/* This is cut out of gconvert.c from glib (and mildly modified). Not all + backends give valid UTF-8 for properties, so we make sure that is. + */ +static gchar * +make_valid_utf8 (const gchar *name) +{ + GString *string; + const gchar *remainder, *invalid; + gint remaining_bytes, valid_bytes; + + string = NULL; + remainder = name; + remaining_bytes = strlen (name); + + while (remaining_bytes != 0) + { + if (g_utf8_validate (remainder, remaining_bytes, &invalid)) + break; + valid_bytes = invalid - remainder; + + if (string == NULL) + string = g_string_sized_new (remaining_bytes); + + g_string_append_len (string, remainder, valid_bytes); + g_string_append_c (string, '?'); + + remaining_bytes -= valid_bytes + 1; + remainder = invalid + 1; + } + + if (string == NULL) + return g_strdup (name); + + g_string_append (string, remainder); + + g_assert (g_utf8_validate (string->str, -1, NULL)); + + return g_string_free (string, FALSE); +} + static void set_property (GladeXML *xml, Property property, const char *text) { GtkWidget *widget; + char *valid_text; widget = glade_xml_get_widget (xml, properties_info[property].label_id); g_return_if_fail (GTK_IS_LABEL (widget)); - gtk_label_set_text (GTK_LABEL (widget), text ? text : ""); + if (text == NULL || text[0] == '\000') { + gchar *markup; + + markup = g_markup_printf_escaped ("<i>%s</i>", _("None")); + gtk_label_set_markup (GTK_LABEL (widget), markup); + g_free (markup); + + return; + } + text = text ? text : ""; + + valid_text = make_valid_utf8 (text); + + gtk_label_set_text (GTK_LABEL (widget), valid_text); + + g_free (valid_text); } static void |