Bug 530575 – GtkEntry with invisible chars has a confused cursor in

2008-10-02  Matthias Clasen <mclasen@redhat.com>

        Bug 530575 – GtkEntry with invisible chars has a confused cursor in
        overwrite mode

        * gtk/gtkentry.c (gtk_entry_draw_cursor): Use the visible text
        in the layout when positioning the cursor, not the actual text
        content of the entry. This makes a different when using overwrite
        mode in an invisible entry.
        Problem noticed by Jonathan Blandford

        * gtk/gtktextutil.c: Fix a typo in a comment


svn path=/trunk/; revision=21580
This commit is contained in:
Matthias Clasen
2008-10-03 01:16:48 +00:00
committed by Matthias Clasen
parent ae2bf7863c
commit 3a4fea3307
3 changed files with 21 additions and 5 deletions

View File

@ -1,3 +1,16 @@
2008-10-02 Matthias Clasen <mclasen@redhat.com>
Bug 530575 GtkEntry with invisible chars has a confused cursor in
overwrite mode
* gtk/gtkentry.c (gtk_entry_draw_cursor): Use the visible text
in the layout when positioning the cursor, not the actual text
content of the entry. This makes a different when using overwrite
mode in an invisible entry.
Problem noticed by Jonathan Blandford
* gtk/gtktextutil.c: Fix a typo in a comment
2008-10-02 Christian Persch 2008-10-02 Christian Persch
Bug 554704 gtkfilesystemmodel does too much work Bug 554704 gtkfilesystemmodel does too much work
@ -215,7 +228,7 @@
Bug 552959 GtkTrayIcon: _NET_SYSTEM_TRAY_VISUAL and real Bug 552959 GtkTrayIcon: _NET_SYSTEM_TRAY_VISUAL and real
transparency transparency
* gtk/gtktrayicon-x11.c: Add support for the _BET_SYSTEM_TRAY_VISUAL * gtk/gtktrayicon-x11.c: Add support for the _NET_SYSTEM_TRAY_VISUAL
property described in property described in
http://lists.freedesktop.org/archives/xdg/2008-September/009919.html http://lists.freedesktop.org/archives/xdg/2008-September/009919.html
If _NET_SYSTEM_TRAY_VISUAL is a visual with an alpha channel, the If _NET_SYSTEM_TRAY_VISUAL is a visual with an alpha channel, the

View File

@ -3794,6 +3794,8 @@ gtk_entry_draw_cursor (GtkEntry *entry,
gint cursor_index; gint cursor_index;
gboolean block; gboolean block;
gboolean block_at_line_end; gboolean block_at_line_end;
PangoLayout *layout;
const char *text;
_gtk_entry_effective_inner_border (entry, &inner_border); _gtk_entry_effective_inner_border (entry, &inner_border);
@ -3801,11 +3803,13 @@ gtk_entry_draw_cursor (GtkEntry *entry,
gdk_drawable_get_size (entry->text_area, NULL, &text_area_height); gdk_drawable_get_size (entry->text_area, NULL, &text_area_height);
cursor_index = g_utf8_offset_to_pointer (entry->text, entry->current_pos + entry->preedit_cursor) - entry->text; layout = gtk_entry_ensure_layout (entry, TRUE);
text = pango_layout_get_text (layout);
cursor_index = g_utf8_offset_to_pointer (text, entry->current_pos + entry->preedit_cursor) - text;
if (!entry->overwrite_mode) if (!entry->overwrite_mode)
block = FALSE; block = FALSE;
else else
block = _gtk_text_util_get_block_cursor_location (gtk_entry_ensure_layout (entry, TRUE), block = _gtk_text_util_get_block_cursor_location (layout,
cursor_index, &cursor_rect, &block_at_line_end); cursor_index, &cursor_rect, &block_at_line_end);
if (!block) if (!block)
@ -3861,7 +3865,6 @@ gtk_entry_draw_cursor (GtkEntry *entry,
} }
else /* overwrite_mode */ else /* overwrite_mode */
{ {
PangoLayout *layout = gtk_entry_ensure_layout (entry, TRUE);
GdkColor cursor_color; GdkColor cursor_color;
GdkRectangle rect; GdkRectangle rect;
cairo_t *cr; cairo_t *cr;

View File

@ -406,7 +406,7 @@ layout_get_char_width (PangoLayout *layout)
* @layout: a #PangoLayout * @layout: a #PangoLayout
* @index: index at which cursor is located * @index: index at which cursor is located
* @pos: cursor location * @pos: cursor location
* @at_line_end: whether cursor i sdrawn at line end, not over some * @at_line_end: whether cursor is drawn at line end, not over some
* character * character
* *
* Returns: whether cursor should actually be drawn as a rectangle. * Returns: whether cursor should actually be drawn as a rectangle.