diff --git a/NEWS b/NEWS index 0019b138e..5037f3e1a 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +Overview of Changes from GTK+ 2.16.x to 2.17.0 +============================================== + +* Changes that are relevant for theme authors + - GtkEntry now has a ::invisible-char style property that allows + themes to set the preferred invisible character + + Overview of Changes from GTK+ 2.16.0 to 2.16.1 ============================================== diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index 607ef878a..a21e94f57 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -1213,6 +1213,27 @@ gtk_entry_class_init (GtkEntryClass *class) GTK_TYPE_BORDER, GTK_PARAM_READABLE)); + /** + * GtkEntry::invisible-char: + * + * The invisible character is used when masking entry contents (in + * \"password mode\")"). When it is not explicitly set with the + * #GtkEntry::invisible-char property, GTK+ determines the character + * to use from a list of possible candidates, depending on availability + * in the current font. + * + * This style property allows the theme to prepend a character + * to the list of candidates. + * + * Since: 2.22 + */ + gtk_widget_class_install_style_property (widget_class, + g_param_spec_unichar ("invisible-char", + P_("Invisible character"), + P_("The character to use when masking entry contents (in \"password mode\")"), + 0, + GTK_PARAM_READABLE)); + /** * GtkEntry::populate-popup: * @entry: The entry on which the signal is emitted @@ -2149,12 +2170,18 @@ find_invisible_char (GtkWidget *widget) PangoAttrList *attr_list; gint i; gunichar invisible_chars [] = { + 0, 0x25cf, /* BLACK CIRCLE */ 0x2022, /* BULLET */ 0x2731, /* HEAVY ASTERISK */ 0x273a /* SIXTEEN POINTED ASTERISK */ }; + if (widget->style) + gtk_widget_style_get (widget, + "invisible-char", &invisible_chars[0], + NULL); + layout = gtk_widget_create_pango_layout (widget, NULL); attr_list = pango_attr_list_new (); @@ -2163,7 +2190,7 @@ find_invisible_char (GtkWidget *widget) pango_layout_set_attributes (layout, attr_list); pango_attr_list_unref (attr_list); - for (i = 0; i < G_N_ELEMENTS (invisible_chars); i++) + for (i = (invisible_chars[0] != 0 ? 0 : 1); i < G_N_ELEMENTS (invisible_chars); i++) { gchar text[7] = { 0, }; gint len, count; @@ -2181,6 +2208,7 @@ find_invisible_char (GtkWidget *widget) } g_object_unref (layout); + return '*'; }