From 7319a0f237fae9dd66114e33aa27f6bfa3852d86 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 18 Feb 2013 09:38:11 +0100 Subject: [PATCH] GtkEntry: Fix text handle painting We only draw the main entry on should_draw (widget->window), because otherwise we also draw it on the GtkTextHandle widgets. This is necessary due to the recent change for that to not return TRUE and swallow the rest of the drawing operation. --- gtk/gtkentry.c | 60 +++++++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 28 deletions(-) diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c index e6d2e56a14..6e34ab5be2 100644 --- a/gtk/gtkentry.c +++ b/gtk/gtkentry.c @@ -3744,36 +3744,40 @@ gtk_entry_draw (GtkWidget *widget, GtkEntryPrivate *priv = entry->priv; int i; - context = gtk_widget_get_style_context (widget); - - /* Draw entry_bg, shadow, progress and focus */ - gtk_entry_draw_frame (widget, context, cr); - - /* Draw text and cursor */ - cairo_save (cr); - - gtk_cairo_transform_to_window (cr, widget, priv->text_area); - - if (priv->dnd_position != -1) - gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_DND); - - gtk_entry_draw_text (GTK_ENTRY (widget), cr); - - /* When no text is being displayed at all, don't show the cursor */ - if (gtk_entry_get_display_mode (entry) != DISPLAY_BLANK && - gtk_widget_has_focus (widget) && - priv->selection_bound == priv->current_pos && priv->cursor_visible) - gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_STANDARD); - - cairo_restore (cr); - - /* Draw icons */ - for (i = 0; i < MAX_ICONS; i++) + if (gtk_cairo_should_draw_window (cr, + gtk_widget_get_window (widget))) { - EntryIconInfo *icon_info = priv->icons[i]; + context = gtk_widget_get_style_context (widget); - if (icon_info != NULL) - draw_icon (widget, cr, i); + /* Draw entry_bg, shadow, progress and focus */ + gtk_entry_draw_frame (widget, context, cr); + + /* Draw text and cursor */ + cairo_save (cr); + + gtk_cairo_transform_to_window (cr, widget, priv->text_area); + + if (priv->dnd_position != -1) + gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_DND); + + gtk_entry_draw_text (GTK_ENTRY (widget), cr); + + /* When no text is being displayed at all, don't show the cursor */ + if (gtk_entry_get_display_mode (entry) != DISPLAY_BLANK && + gtk_widget_has_focus (widget) && + priv->selection_bound == priv->current_pos && priv->cursor_visible) + gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_STANDARD); + + cairo_restore (cr); + + /* Draw icons */ + for (i = 0; i < MAX_ICONS; i++) + { + EntryIconInfo *icon_info = priv->icons[i]; + + if (icon_info != NULL) + draw_icon (widget, cr, i); + } } return FALSE;