[gtk+] GtkEntry: Fix text handle painting



commit 7319a0f237fae9dd66114e33aa27f6bfa3852d86
Author: Alexander Larsson <alexl redhat com>
Date:   Mon Feb 18 09:38:11 2013 +0100

    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 |   48 ++++++++++++++++++++++++++----------------------
 1 files changed, 26 insertions(+), 22 deletions(-)
---
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index e6d2e56..6e34ab5 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);
+  if (gtk_cairo_should_draw_window (cr,
+                                    gtk_widget_get_window (widget)))
+    {
+      context = gtk_widget_get_style_context (widget);
 
-  /* Draw entry_bg, shadow, progress and focus */
-  gtk_entry_draw_frame (widget, context, cr);
+      /* Draw entry_bg, shadow, progress and focus */
+      gtk_entry_draw_frame (widget, context, cr);
 
-  /* Draw text and cursor */
-  cairo_save (cr);
+      /* Draw text and cursor */
+      cairo_save (cr);
 
-  gtk_cairo_transform_to_window (cr, widget, priv->text_area);
+      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);
+      if (priv->dnd_position != -1)
+        gtk_entry_draw_cursor (GTK_ENTRY (widget), cr, CURSOR_DND);
 
-  /* 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);
+      gtk_entry_draw_text (GTK_ENTRY (widget), cr);
 
-  cairo_restore (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);
 
-  /* Draw icons */
-  for (i = 0; i < MAX_ICONS; i++)
-    {
-      EntryIconInfo *icon_info = priv->icons[i];
+      cairo_restore (cr);
 
-      if (icon_info != NULL)
-        draw_icon (widget, cr, i);
+      /* 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;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]