changeset 107141:b5f6df970d0f

xterm.c (XTflash): Use Gdk-routines if USE_GTK so scroll bars doesn't get overdrawn.
author Jan D. <jan.h.d@swipnet.se>
date Sat, 13 Feb 2010 14:27:32 +0100
parents f257bf772280
children c00bb092f636 3417b6095672
files src/ChangeLog src/xterm.c
diffstat 2 files changed, 25 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ChangeLog	Sat Feb 13 13:54:50 2010 +0100
+++ b/src/ChangeLog	Sat Feb 13 14:27:32 2010 +0100
@@ -1,7 +1,9 @@
 2010-02-13  Jan Djärv  <jan.h.d@swipnet.se>
 
-	* xterm.c (x_clear_frame_area): Cal gtk_widget_queue_draw if USE_GTK,
+	* xterm.c (x_clear_frame_area): Call gtk_widget_queue_draw if USE_GTK,
 	bug #5571.
+	(XTflash): Use Gdk-routines if USE_GTK so scroll bars doesn't get
+	overdrawn.
 
 2010-02-10  Jan Djärv  <jan.h.d@swipnet.se>
 
--- a/src/xterm.c	Sat Feb 13 13:54:50 2010 +0100
+++ b/src/xterm.c	Sat Feb 13 14:27:32 2010 +0100
@@ -3015,6 +3015,21 @@
   BLOCK_INPUT;
 
   {
+#ifdef USE_GTK
+    /* Use Gdk routines to draw.  This way, we won't draw over scroll bars
+       when the scroll bars and the edit widget share the same X window.  */
+    GdkGCValues vals;
+    vals.foreground.pixel = (FRAME_FOREGROUND_PIXEL (f)
+                             ^ FRAME_BACKGROUND_PIXEL (f));
+    vals.function = GDK_XOR;
+    GdkGC *gc = gdk_gc_new_with_values (FRAME_GTK_WIDGET (f)->window,
+                                        &vals,
+                                        GDK_GC_FUNCTION
+                                        | GDK_GC_FOREGROUND);
+#define XFillRectangle(d, win, gc, x, y, w, h) \
+    gdk_draw_rectangle (FRAME_GTK_WIDGET (f)->window, \
+                        gc, TRUE, x, y, w, h)
+#else
     GC gc;
 
     /* Create a GC that will use the GXxor function to flip foreground
@@ -3029,7 +3044,7 @@
       gc = XCreateGC (FRAME_X_DISPLAY (f), FRAME_X_WINDOW (f),
 		      GCFunction | GCForeground, &values);
     }
-
+#endif
     {
       /* Get the height not including a menu bar widget.  */
       int height = FRAME_TEXT_LINES_TO_PIXEL_HEIGHT (f, FRAME_LINES (f));
@@ -3072,6 +3087,7 @@
 			  (height - flash_height
 			   - FRAME_INTERNAL_BORDER_WIDTH (f)),
 			  width, flash_height);
+
 	}
       else
 	/* If it is short, flash it all.  */
@@ -3133,7 +3149,12 @@
 			flash_left, FRAME_INTERNAL_BORDER_WIDTH (f),
 			width, height - 2 * FRAME_INTERNAL_BORDER_WIDTH (f));
 
+#ifdef USE_GTK
+      g_object_unref (G_OBJECT (gc));
+#undef XFillRectangle
+#else
       XFreeGC (FRAME_X_DISPLAY (f), gc);
+#endif
       x_flush (f);
     }
   }